]> git.proxmox.com Git - libgit2.git/blob - src/CMakeLists.txt
b03b96af93af3538033c85a255fcb036fc807bcc
[libgit2.git] / src / CMakeLists.txt
1 IF(DEBUG_POOL)
2 SET(GIT_DEBUG_POOL 1)
3 ENDIF()
4 ADD_FEATURE_INFO(debugpool GIT_DEBUG_POOL "debug pool allocator")
5
6 # This variable will contain the libraries we need to put into
7 # libgit2.pc's Requires.private. That is, what we're linking to or
8 # what someone who's statically linking us needs to link to.
9 SET(LIBGIT2_PC_REQUIRES "")
10 # This will be set later if we use the system's http-parser library or
11 # use iconv (OSX) and will be written to the Libs.private field in the
12 # pc file.
13 SET(LIBGIT2_PC_LIBS "")
14
15 SET(LIBGIT2_INCLUDES
16 "${CMAKE_CURRENT_BINARY_DIR}"
17 "${libgit2_SOURCE_DIR}/src"
18 "${libgit2_SOURCE_DIR}/include")
19 SET(LIBGIT2_LIBS "")
20 SET(LIBGIT2_LIBDIRS "")
21
22 # Installation paths
23 #
24 SET(BIN_INSTALL_DIR bin CACHE PATH "Where to install binaries to.")
25 SET(LIB_INSTALL_DIR lib CACHE PATH "Where to install libraries to.")
26 SET(INCLUDE_INSTALL_DIR include CACHE PATH "Where to install headers to.")
27
28 # Set a couple variables to be substituted inside the .pc file.
29 # We can't just use LIB_INSTALL_DIR in the .pc file, as passing them as absolue
30 # or relative paths is both valid and supported by cmake.
31 SET (PKGCONFIG_PREFIX ${CMAKE_INSTALL_PREFIX})
32
33 IF(IS_ABSOLUTE ${LIB_INSTALL_DIR})
34 SET (PKGCONFIG_LIBDIR ${LIB_INSTALL_DIR})
35 ELSE(IS_ABSOLUTE ${LIB_INSTALL_DIR})
36 SET (PKGCONFIG_LIBDIR "\${prefix}/${LIB_INSTALL_DIR}")
37 ENDIF (IS_ABSOLUTE ${LIB_INSTALL_DIR})
38
39 IF(IS_ABSOLUTE ${INCLUDE_INSTALL_DIR})
40 SET (PKGCONFIG_INCLUDEDIR ${INCLUDE_INSTALL_DIR})
41 ELSE(IS_ABSOLUTE ${INCLUDE_INSTALL_DIR})
42 SET (PKGCONFIG_INCLUDEDIR "\${prefix}/${INCLUDE_INSTALL_DIR}")
43 ENDIF(IS_ABSOLUTE ${INCLUDE_INSTALL_DIR})
44
45 # Enable tracing
46 IF (ENABLE_TRACE STREQUAL "ON")
47 SET(GIT_TRACE 1)
48 ENDIF()
49 ADD_FEATURE_INFO(tracing GIT_TRACE "tracing support")
50
51 CHECK_SYMBOL_EXISTS(regcomp_l "regex.h;xlocale.h" HAVE_REGCOMP_L)
52 IF (HAVE_REGCOMP_L)
53 SET(GIT_USE_REGCOMP_L 1)
54 ENDIF ()
55
56 CHECK_FUNCTION_EXISTS(futimens HAVE_FUTIMENS)
57 IF (HAVE_FUTIMENS)
58 SET(GIT_USE_FUTIMENS 1)
59 ENDIF ()
60
61 CHECK_FUNCTION_EXISTS(qsort_r HAVE_QSORT_R)
62 IF (HAVE_QSORT_R)
63 ADD_DEFINITIONS(-DHAVE_QSORT_R)
64 ENDIF ()
65
66 CHECK_FUNCTION_EXISTS(qsort_s HAVE_QSORT_S)
67 IF (HAVE_QSORT_S)
68 ADD_DEFINITIONS(-DHAVE_QSORT_S)
69 ENDIF ()
70
71 # Find required dependencies
72
73 IF(WIN32)
74 LIST(APPEND LIBGIT2_LIBS ws2_32)
75 ELSEIF(CMAKE_SYSTEM_NAME MATCHES "(Solaris|SunOS)")
76 LIST(APPEND LIBGIT2_LIBS socket nsl)
77 LIST(APPEND LIBGIT2_PC_LIBS "-lsocket" "-lnsl")
78 ELSEIF(CMAKE_SYSTEM_NAME MATCHES "Haiku")
79 LIST(APPEND LIBGIT2_LIBS network)
80 LIST(APPEND LIBGIT2_PC_LIBS "-lnetwork")
81 ENDIF()
82
83 CHECK_LIBRARY_EXISTS(rt clock_gettime "time.h" NEED_LIBRT)
84 IF(NEED_LIBRT)
85 LIST(APPEND LIBGIT2_LIBS rt)
86 LIST(APPEND LIBGIT2_PC_LIBS "-lrt")
87 ENDIF()
88
89 IF(THREADSAFE)
90 LIST(APPEND LIBGIT2_LIBS ${CMAKE_THREAD_LIBS_INIT})
91 LIST(APPEND LIBGIT2_PC_LIBS ${CMAKE_THREAD_LIBS_INIT})
92 ENDIF()
93 ADD_FEATURE_INFO(threadsafe THREADSAFE "threadsafe support")
94
95
96 IF (WIN32 AND EMBED_SSH_PATH)
97 FILE(GLOB SRC_SSH "${EMBED_SSH_PATH}/src/*.c")
98 LIST(APPEND LIBGIT2_INCLUDES "${EMBED_SSH_PATH}/include")
99 FILE(WRITE "${EMBED_SSH_PATH}/src/libssh2_config.h" "#define HAVE_WINCNG\n#define LIBSSH2_WINCNG\n#include \"../win32/libssh2_config.h\"")
100 SET(GIT_SSH 1)
101 ENDIF()
102
103 IF (WIN32 AND WINHTTP)
104 SET(GIT_WINHTTP 1)
105
106 # Since MinGW does not come with headers or an import library for winhttp,
107 # we have to include a private header and generate our own import library
108 IF (MINGW)
109 ADD_SUBDIRECTORY("${libgit2_SOURCE_DIR}/deps/winhttp" "${libgit2_BINARY_DIR}/deps/winhttp")
110 LIST(APPEND LIBGIT2_LIBS winhttp)
111 LIST(APPEND LIBGIT2_INCLUDES "${libgit2_SOURCE_DIR}/deps/winhttp")
112 LIST(APPEND LIBGIT2_LIBDIRS ${LIBWINHTTP_PATH})
113 ELSE()
114 LIST(APPEND LIBGIT2_LIBS "winhttp")
115 LIST(APPEND LIBGIT2_PC_LIBS "-lwinhttp")
116 ENDIF ()
117
118 LIST(APPEND LIBGIT2_LIBS "rpcrt4" "crypt32" "ole32")
119 LIST(APPEND LIBGIT2_PC_LIBS "-lrpcrt4" "-lcrypt32" "-lole32")
120 ELSE ()
121 IF (CURL)
122 PKG_CHECK_MODULES(CURL libcurl)
123 ENDIF ()
124
125 IF (CURL_FOUND)
126 SET(GIT_CURL 1)
127 LIST(APPEND LIBGIT2_INCLUDES ${CURL_INCLUDE_DIRS})
128 LIST(APPEND LIBGIT2_LIBDIRS ${CURL_LIBRARY_DIRS})
129 LIST(APPEND LIBGIT2_LIBS ${CURL_LIBRARIES})
130 LIST(APPEND LIBGIT2_PC_LIBS ${CURL_LDFLAGS})
131 ENDIF()
132 ADD_FEATURE_INFO(cURL GIT_CURL "cURL for HTTP proxy support")
133 ENDIF()
134
135 IF (USE_HTTPS)
136 IF (CMAKE_SYSTEM_NAME MATCHES "Darwin")
137 FIND_PACKAGE(Security)
138 FIND_PACKAGE(CoreFoundation)
139 ENDIF()
140
141 # Auto-select TLS backend
142 IF (USE_HTTPS STREQUAL ON)
143 IF (SECURITY_FOUND)
144 IF (SECURITY_HAS_SSLCREATECONTEXT)
145 SET(HTTPS_BACKEND "SecureTransport")
146 ELSE()
147 MESSAGE("-- Security framework is too old, falling back to OpenSSL")
148 SET(HTTPS_BACKEND "OpenSSL")
149 ENDIF()
150 ELSEIF (WINHTTP)
151 SET(HTTPS_BACKEND "WinHTTP")
152 ELSE()
153 SET(HTTPS_BACKEND "OpenSSL")
154 ENDIF()
155 ELSE()
156 # Backend was explicitly set
157 SET(HTTPS_BACKEND ${USE_HTTPS})
158 ENDIF()
159
160 # Check that we can find what's required for the selected backend
161 IF (HTTPS_BACKEND STREQUAL "SecureTransport")
162 IF (NOT COREFOUNDATION_FOUND)
163 MESSAGE(FATAL_ERROR "Cannot use SecureTransport backend, CoreFoundation.framework not found")
164 ENDIF()
165 IF (NOT SECURITY_FOUND)
166 MESSAGE(FATAL_ERROR "Cannot use SecureTransport backend, Security.framework not found")
167 ENDIF()
168 IF (NOT SECURITY_HAS_SSLCREATECONTEXT)
169 MESSAGE(FATAL_ERROR "Cannot use SecureTransport backend, SSLCreateContext not supported")
170 ENDIF()
171
172 SET(GIT_SECURE_TRANSPORT 1)
173 LIST(APPEND LIBGIT2_INCLUDES ${SECURITY_INCLUDE_DIR})
174 LIST(APPEND LIBGIT2_LIBS ${COREFOUNDATION_LIBRARIES} ${SECURITY_LIBRARIES})
175 LIST(APPEND LIBGIT2_PC_LIBS ${COREFOUNDATION_LDFLAGS} ${SECURITY_LDFLAGS})
176 ELSEIF (HTTPS_BACKEND STREQUAL "OpenSSL")
177 FIND_PACKAGE(OpenSSL)
178
179 IF (NOT OPENSSL_FOUND)
180 MESSAGE(FATAL_ERROR "Asked for OpenSSL TLS backend, but it wasn't found")
181 ENDIF()
182
183 SET(GIT_OPENSSL 1)
184 LIST(APPEND LIBGIT2_INCLUDES ${OPENSSL_INCLUDE_DIR})
185 LIST(APPEND LIBGIT2_LIBS ${OPENSSL_LIBRARIES})
186 LIST(APPEND LIBGIT2_PC_LIBS ${OPENSSL_LDFLAGS})
187 LIST(APPEND LIBGIT2_PC_REQUIRES "openssl")
188 ELSEIF (HTTPS_BACKEND STREQUAL "WinHTTP")
189 # WinHTTP setup was handled in the WinHTTP-specific block above
190 ELSE()
191 MESSAGE(FATAL_ERROR "Asked for backend ${HTTPS_BACKEND} but it wasn't found")
192 ENDIF()
193
194 ADD_FEATURE_INFO(HTTPS ON "using ${HTTPS_BACKEND}")
195 SET(GIT_HTTPS 1)
196 ELSE()
197 ADD_FEATURE_INFO(HTTPS OFF "no support")
198 ENDIF()
199
200 # Specify sha1 implementation
201 IF(SHA1_BACKEND STREQUAL "OpenSSL")
202 IF(NOT OPENSSL_FOUND)
203 FIND_PACKAGE(OpenSSL)
204 IF(NOT OPENSSL_FOUND)
205 MESSAGE(FATAL_ERROR "Requested OpenSSL SHA1 backend, but OpenSSL could not be found")
206 ENDIF()
207 ENDIF()
208
209 ADD_FEATURE_INFO(SHA ON "using OpenSSL")
210 SET(GIT_SHA1_OPENSSL 1)
211 IF(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
212 LIST(APPEND LIBGIT2_PC_LIBS "-lssl")
213 ELSE()
214 LIST(APPEND LIBGIT2_PC_REQUIRES "openssl")
215 ENDIF()
216 ELSEIF(SHA1_BACKEND STREQUAL "CollisionDetection")
217 ADD_FEATURE_INFO(SHA ON "using CollisionDetection")
218 SET(GIT_SHA1_COLLISIONDETECT 1)
219 ADD_DEFINITIONS(-DSHA1DC_NO_STANDARD_INCLUDES=1)
220 ADD_DEFINITIONS(-DSHA1DC_CUSTOM_INCLUDE_SHA1_C=\"common.h\")
221 ADD_DEFINITIONS(-DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C=\"common.h\")
222 FILE(GLOB SRC_SHA1 hash/hash_collisiondetect.c hash/sha1dc/*)
223 ELSEIF(SHA1_BACKEND STREQUAL "Generic")
224 ADD_FEATURE_INFO(SHA ON "using Generic")
225 FILE(GLOB SRC_SHA1 hash/hash_generic.c)
226 ELSEIF(SHA1_BACKEND STREQUAL "Win32")
227 ADD_FEATURE_INFO(SHA ON "using Win32")
228 SET(GIT_SHA1_WIN32 1)
229 FILE(GLOB SRC_SHA1 hash/hash_win32.c)
230 ELSEIF(SHA1_BACKEND STREQUAL "CommonCrypto")
231 ADD_FEATURE_INFO(SHA ON "using CommonCrypto")
232 SET(GIT_SHA1_COMMON_CRYPTO 1)
233 ELSE()
234 MESSAGE(FATAL_ERROR "Asked for unknown SHA1 backend ${SHA1_BACKEND}")
235 ENDIF()
236
237 # Include POSIX regex when it is required
238 IF(WIN32 OR AMIGA OR CMAKE_SYSTEM_NAME MATCHES "(Solaris|SunOS)")
239 ADD_SUBDIRECTORY("${libgit2_SOURCE_DIR}/deps/regex" "${libgit2_BINARY_DIR}/deps/regex")
240 LIST(APPEND LIBGIT2_INCLUDES "${libgit2_SOURCE_DIR}/deps/regex")
241 LIST(APPEND LIBGIT2_OBJECTS $<TARGET_OBJECTS:regex>)
242 ENDIF()
243
244 # Optional external dependency: http-parser
245 FIND_PACKAGE(HTTP_Parser)
246 IF (USE_EXT_HTTP_PARSER AND HTTP_PARSER_FOUND AND HTTP_PARSER_VERSION_MAJOR EQUAL 2)
247 LIST(APPEND LIBGIT2_INCLUDES ${HTTP_PARSER_INCLUDE_DIRS})
248 LIST(APPEND LIBGIT2_LIBS ${HTTP_PARSER_LIBRARIES})
249 LIST(APPEND LIBGIT2_PC_LIBS "-lhttp_parser")
250 ADD_FEATURE_INFO(http-parser ON "http-parser support")
251 ELSE()
252 MESSAGE(STATUS "http-parser version 2 was not found or disabled; using bundled 3rd-party sources.")
253 ADD_SUBDIRECTORY("${libgit2_SOURCE_DIR}/deps/http-parser" "${libgit2_BINARY_DIR}/deps/http-parser")
254 LIST(APPEND LIBGIT2_INCLUDES "${libgit2_SOURCE_DIR}/deps/http-parser")
255 LIST(APPEND LIBGIT2_OBJECTS "$<TARGET_OBJECTS:http-parser>")
256 ADD_FEATURE_INFO(http-parser ON "http-parser support (bundled)")
257 ENDIF()
258
259 # Optional external dependency: zlib
260 IF(NOT USE_BUNDLED_ZLIB)
261 FIND_PACKAGE(ZLIB)
262 IF(ZLIB_FOUND)
263 LIST(APPEND LIBGIT2_INCLUDES ${ZLIB_INCLUDE_DIRS})
264 LIST(APPEND LIBGIT2_LIBS ${ZLIB_LIBRARIES})
265 IF(APPLE OR CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
266 LIST(APPEND LIBGIT2_LIBS "z")
267 LIST(APPEND LIBGIT2_PC_LIBS "-lz")
268 ELSE()
269 LIST(APPEND LIBGIT2_PC_REQUIRES "zlib")
270 ENDIF()
271 ADD_FEATURE_INFO(zlib ON "using system zlib")
272 ELSE()
273 MESSAGE(STATUS "zlib was not found; using bundled 3rd-party sources." )
274 ENDIF()
275 ENDIF()
276 IF(USE_BUNDLED_ZLIB OR NOT ZLIB_FOUND)
277 ADD_SUBDIRECTORY("${libgit2_SOURCE_DIR}/deps/zlib" "${libgit2_BINARY_DIR}/deps/zlib")
278 LIST(APPEND LIBGIT2_INCLUDES "${libgit2_SOURCE_DIR}/deps/zlib")
279 LIST(APPEND LIBGIT2_OBJECTS $<TARGET_OBJECTS:zlib>)
280 ADD_FEATURE_INFO(zlib ON "using bundled zlib")
281 ENDIF()
282
283 # Optional external dependency: libssh2
284 IF (USE_SSH)
285 PKG_CHECK_MODULES(LIBSSH2 libssh2)
286 ENDIF()
287 IF (LIBSSH2_FOUND)
288 SET(GIT_SSH 1)
289 LIST(APPEND LIBGIT2_INCLUDES ${LIBSSH2_INCLUDE_DIRS})
290 LIST(APPEND LIBGIT2_LIBS ${LIBSSH2_LIBRARIES})
291 LIST(APPEND LIBGIT2_LIBDIRS ${LIBSSH2_LIBRARY_DIRS})
292 LIST(APPEND LIBGIT2_PC_LIBS ${LIBSSH2_LDFLAGS})
293 #SET(LIBGIT2_PC_LIBS "${LIBGIT2_PC_LIBS} ${LIBSSH2_LDFLAGS}")
294
295 CHECK_LIBRARY_EXISTS("${LIBSSH2_LIBRARIES}" libssh2_userauth_publickey_frommemory "${LIBSSH2_LIBRARY_DIRS}" HAVE_LIBSSH2_MEMORY_CREDENTIALS)
296 IF (HAVE_LIBSSH2_MEMORY_CREDENTIALS)
297 SET(GIT_SSH_MEMORY_CREDENTIALS 1)
298 ENDIF()
299 ELSE()
300 MESSAGE(STATUS "LIBSSH2 not found. Set CMAKE_PREFIX_PATH if it is installed outside of the default search path.")
301 ENDIF()
302 ADD_FEATURE_INFO(SSH GIT_SSH "SSH transport support")
303
304 # Optional external dependency: libgssapi
305 IF (USE_GSSAPI)
306 FIND_PACKAGE(GSSAPI)
307 ENDIF()
308 IF (GSSAPI_FOUND)
309 SET(GIT_GSSAPI 1)
310 LIST(APPEND LIBGIT2_LIBS ${GSSAPI_LIBRARIES})
311 ENDIF()
312 ADD_FEATURE_INFO(SPNEGO GIT_GSSAPI "SPNEGO authentication support")
313
314 # Optional external dependency: iconv
315 IF (USE_ICONV)
316 FIND_PACKAGE(Iconv)
317 ENDIF()
318 IF (ICONV_FOUND)
319 SET(GIT_USE_ICONV 1)
320 LIST(APPEND LIBGIT2_INCLUDES ${ICONV_INCLUDE_DIR})
321 LIST(APPEND LIBGIT2_LIBS ${ICONV_LIBRARIES})
322 LIST(APPEND LIBGIT2_PC_LIBS ${ICONV_LIBRARIES})
323 ENDIF()
324 ADD_FEATURE_INFO(iconv GIT_USE_ICONV "iconv encoding conversion support")
325
326
327 IF (THREADSAFE)
328 IF (NOT WIN32)
329 FIND_PACKAGE(Threads REQUIRED)
330 ENDIF()
331
332 SET(GIT_THREADS 1)
333 ENDIF()
334
335 IF (USE_NSEC)
336 SET(GIT_USE_NSEC 1)
337 ENDIF()
338
339 IF (HAVE_STRUCT_STAT_ST_MTIM)
340 SET(GIT_USE_STAT_MTIM 1)
341 ELSEIF (HAVE_STRUCT_STAT_ST_MTIMESPEC)
342 SET(GIT_USE_STAT_MTIMESPEC 1)
343 ELSEIF (HAVE_STRUCT_STAT_ST_MTIME_NSEC)
344 SET(GIT_USE_STAT_MTIME_NSEC 1)
345 ENDIF()
346
347 ADD_DEFINITIONS(-D_FILE_OFFSET_BITS=64)
348
349 # Collect sourcefiles
350 FILE(GLOB SRC_H
351 "${libgit2_SOURCE_DIR}/include/git2.h"
352 "${libgit2_SOURCE_DIR}/include/git2/*.h"
353 "${libgit2_SOURCE_DIR}/include/git2/sys/*.h")
354
355 # On Windows use specific platform sources
356 IF (WIN32 AND NOT CYGWIN)
357 ADD_DEFINITIONS(-DWIN32 -D_WIN32_WINNT=0x0501)
358
359 IF(MSVC)
360 SET(WIN_RC "win32/git2.rc")
361 ENDIF()
362
363 FILE(GLOB SRC_OS win32/*.c win32/*.h)
364 ELSEIF (AMIGA)
365 ADD_DEFINITIONS(-DNO_ADDRINFO -DNO_READDIR_R -DNO_MMAP)
366 ELSE()
367 IF (VALGRIND)
368 ADD_DEFINITIONS(-DNO_MMAP)
369 ENDIF()
370 FILE(GLOB SRC_OS unix/*.c unix/*.h)
371 ENDIF()
372 FILE(GLOB SRC_GIT2 *.c *.h
373 streams/*.c streams/*.h
374 transports/*.c transports/*.h
375 xdiff/*.c xdiff/*.h)
376
377 # Determine architecture of the machine
378 IF (CMAKE_SIZEOF_VOID_P EQUAL 8)
379 SET(GIT_ARCH_64 1)
380 ELSEIF (CMAKE_SIZEOF_VOID_P EQUAL 4)
381 SET(GIT_ARCH_32 1)
382 ELSEIF (CMAKE_SIZEOF_VOID_P)
383 MESSAGE(FATAL_ERROR "Unsupported architecture (pointer size is ${CMAKE_SIZEOF_VOID_P} bytes)")
384 ELSE()
385 MESSAGE(FATAL_ERROR "Unsupported architecture (CMAKE_SIZEOF_VOID_P is unset)")
386 ENDIF()
387
388 CONFIGURE_FILE(features.h.in git2/sys/features.h)
389
390 SET(LIBGIT2_SOURCES ${SRC_H} ${SRC_GIT2} ${SRC_OS} ${SRC_SSH} ${SRC_SHA1})
391
392 ADD_LIBRARY(git2internal OBJECT ${LIBGIT2_SOURCES})
393 IDE_SPLIT_SOURCES(git2internal)
394 LIST(APPEND LIBGIT2_OBJECTS $<TARGET_OBJECTS:git2internal>)
395
396 IF (${CMAKE_VERSION} VERSION_LESS 2.8.12)
397 INCLUDE_DIRECTORIES(${LIBGIT2_INCLUDES})
398 ELSE()
399 TARGET_INCLUDE_DIRECTORIES(git2internal
400 PRIVATE ${LIBGIT2_INCLUDES}
401 PUBLIC ${libgit2_SOURCE_DIR}/include)
402 ENDIF()
403
404 SET(LIBGIT2_OBJECTS ${LIBGIT2_OBJECTS} PARENT_SCOPE)
405 SET(LIBGIT2_INCLUDES ${LIBGIT2_INCLUDES} PARENT_SCOPE)
406 SET(LIBGIT2_LIBS ${LIBGIT2_LIBS} PARENT_SCOPE)
407 SET(LIBGIT2_LIBDIRS ${LIBGIT2_LIBDIRS} PARENT_SCOPE)
408
409 IF(XCODE_VERSION)
410 # This is required for Xcode to actually link the libgit2 library
411 # when using only object libraries.
412 FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/dummy.c "")
413 LIST(APPEND LIBGIT2_OBJECTS ${CMAKE_CURRENT_BINARY_DIR}/dummy.c)
414 ENDIF()
415
416 # Compile and link libgit2
417 LINK_DIRECTORIES(${LIBGIT2_LIBDIRS})
418 ADD_LIBRARY(git2 ${WIN_RC} ${LIBGIT2_OBJECTS})
419 TARGET_LINK_LIBRARIES(git2 ${LIBGIT2_LIBS})
420
421 SET_TARGET_PROPERTIES(git2 PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${libgit2_BINARY_DIR})
422 SET_TARGET_PROPERTIES(git2 PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${libgit2_BINARY_DIR})
423 SET_TARGET_PROPERTIES(git2 PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${libgit2_BINARY_DIR})
424
425 # Workaround for Cmake bug #0011240 (see http://public.kitware.com/Bug/view.php?id=11240)
426 # Win64+MSVC+static libs = linker error
427 IF(MSVC AND GIT_ARCH_64 AND NOT BUILD_SHARED_LIBS)
428 SET_TARGET_PROPERTIES(git2 PROPERTIES STATIC_LIBRARY_FLAGS "/MACHINE:x64")
429 ENDIF()
430
431 IDE_SPLIT_SOURCES(git2)
432
433 IF (SONAME)
434 SET_TARGET_PROPERTIES(git2 PROPERTIES VERSION ${LIBGIT2_VERSION_STRING})
435 SET_TARGET_PROPERTIES(git2 PROPERTIES SOVERSION ${LIBGIT2_SOVERSION})
436 IF (LIBGIT2_FILENAME)
437 ADD_DEFINITIONS(-DLIBGIT2_FILENAME=\"${LIBGIT2_FILENAME}\")
438 SET_TARGET_PROPERTIES(git2 PROPERTIES OUTPUT_NAME ${LIBGIT2_FILENAME})
439 ELSEIF (DEFINED LIBGIT2_PREFIX)
440 SET_TARGET_PROPERTIES(git2 PROPERTIES PREFIX "${LIBGIT2_PREFIX}")
441 ENDIF()
442 ENDIF()
443
444 LIST(REMOVE_DUPLICATES LIBGIT2_PC_REQUIRES)
445 STRING(REPLACE ";" " " LIBGIT2_PC_REQUIRES "${LIBGIT2_PC_REQUIRES}")
446 STRING(REPLACE ";" " " LIBGIT2_PC_LIBS "${LIBGIT2_PC_LIBS}")
447 CONFIGURE_FILE(${libgit2_SOURCE_DIR}/libgit2.pc.in ${libgit2_BINARY_DIR}/libgit2.pc @ONLY)
448
449 IF (MSVC_IDE)
450 # Precompiled headers
451 SET_TARGET_PROPERTIES(git2 PROPERTIES COMPILE_FLAGS "/Yuprecompiled.h /FIprecompiled.h")
452 SET_SOURCE_FILES_PROPERTIES(win32/precompiled.c COMPILE_FLAGS "/Ycprecompiled.h")
453 ENDIF ()
454
455 # Install
456 INSTALL(TARGETS git2
457 RUNTIME DESTINATION ${BIN_INSTALL_DIR}
458 LIBRARY DESTINATION ${LIB_INSTALL_DIR}
459 ARCHIVE DESTINATION ${LIB_INSTALL_DIR}
460 )
461 INSTALL(FILES ${libgit2_BINARY_DIR}/libgit2.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig )
462 INSTALL(DIRECTORY ${libgit2_SOURCE_DIR}/include/git2 DESTINATION ${INCLUDE_INSTALL_DIR} )
463 INSTALL(FILES ${libgit2_SOURCE_DIR}/include/git2.h DESTINATION ${INCLUDE_INSTALL_DIR} )