CMakeLists.txt 14.1 KB
Newer Older
1 2 3
add_library(git2internal OBJECT)
set_target_properties(git2internal PROPERTIES C_STANDARD 90)

4 5 6
IF(DEBUG_POOL)
	SET(GIT_DEBUG_POOL 1)
ENDIF()
7
ADD_FEATURE_INFO(debugpool GIT_DEBUG_POOL "debug pool allocator")
8

9 10 11 12 13
IF(DEBUG_STRICT_ALLOC)
	SET(GIT_DEBUG_STRICT_ALLOC 1)
ENDIF()
ADD_FEATURE_INFO(debugalloc GIT_DEBUG_STRICT_ALLOC "debug strict allocators")

14 15 16 17 18
IF(DEBUG_STRICT_OPEN)
	SET(GIT_DEBUG_STRICT_OPEN 1)
ENDIF()
ADD_FEATURE_INFO(debugopen GIT_DEBUG_STRICT_OPEN "path validation in open")

19
INCLUDE(PkgBuildConfig)
20
INCLUDE(SanitizeBool)
21

22 23 24 25 26 27 28 29 30
# This variable will contain the libraries we need to put into
# libgit2.pc's Requires.private. That is, what we're linking to or
# what someone who's statically linking us needs to link to.
SET(LIBGIT2_PC_REQUIRES "")
# This will be set later if we use the system's http-parser library or
# use iconv (OSX) and will be written to the Libs.private field in the
# pc file.
SET(LIBGIT2_PC_LIBS "")

31 32
SET(LIBGIT2_INCLUDES
	"${CMAKE_CURRENT_BINARY_DIR}"
33 34
	"${libgit2_SOURCE_DIR}/src"
	"${libgit2_SOURCE_DIR}/include")
35
SET(LIBGIT2_SYSTEM_INCLUDES "")
36 37
SET(LIBGIT2_LIBS "")

38 39
enable_warnings(missing-declarations)

40
# Enable tracing
41
IF(ENABLE_TRACE)
42 43
	SET(GIT_TRACE 1)
ENDIF()
44
ADD_FEATURE_INFO(tracing GIT_TRACE "tracing support")
45 46 47 48

IF (HAVE_FUTIMENS)
	SET(GIT_USE_FUTIMENS 1)
ENDIF ()
49
ADD_FEATURE_INFO(futimens GIT_USE_FUTIMENS "futimens support")
50

51 52 53 54
CHECK_PROTOTYPE_DEFINITION(qsort_r
	"void qsort_r(void *base, size_t nmemb, size_t size, void *thunk, int (*compar)(void *, const void *, const void *))"
	"" "stdlib.h" HAVE_QSORT_R_BSD)
IF (HAVE_QSORT_R_BSD)
55
	target_compile_definitions(git2internal PRIVATE HAVE_QSORT_R_BSD)
56 57 58 59 60 61
ENDIF()

CHECK_PROTOTYPE_DEFINITION(qsort_r
	"void qsort_r(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *, void *), void *arg)"
	"" "stdlib.h" HAVE_QSORT_R_GNU)
IF (HAVE_QSORT_R_GNU)
62
	target_compile_definitions(git2internal PRIVATE HAVE_QSORT_R_GNU)
63
ENDIF()
64 65 66

CHECK_FUNCTION_EXISTS(qsort_s HAVE_QSORT_S)
IF (HAVE_QSORT_S)
67
	target_compile_definitions(git2internal PRIVATE HAVE_QSORT_S)
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
ENDIF ()

# Find required dependencies

IF(WIN32)
	LIST(APPEND LIBGIT2_LIBS ws2_32)
ELSEIF(CMAKE_SYSTEM_NAME MATCHES "(Solaris|SunOS)")
	LIST(APPEND LIBGIT2_LIBS socket nsl)
	LIST(APPEND LIBGIT2_PC_LIBS "-lsocket" "-lnsl")
ELSEIF(CMAKE_SYSTEM_NAME MATCHES "Haiku")
	LIST(APPEND LIBGIT2_LIBS network)
	LIST(APPEND LIBGIT2_PC_LIBS "-lnetwork")
ENDIF()

CHECK_LIBRARY_EXISTS(rt clock_gettime "time.h" NEED_LIBRT)
IF(NEED_LIBRT)
	LIST(APPEND LIBGIT2_LIBS rt)
	LIST(APPEND LIBGIT2_PC_LIBS "-lrt")
ENDIF()

IF(THREADSAFE)
	LIST(APPEND LIBGIT2_LIBS ${CMAKE_THREAD_LIBS_INIT})
	LIST(APPEND LIBGIT2_PC_LIBS ${CMAKE_THREAD_LIBS_INIT})
ENDIF()
92
ADD_FEATURE_INFO(threadsafe THREADSAFE "threadsafe support")
93 94


95 96 97
if(WIN32 AND EMBED_SSH_PATH)
	file(GLOB SRC_SSH "${EMBED_SSH_PATH}/src/*.c")
	list(SORT SRC_SSH)
98 99
	target_sources(git2internal PRIVATE ${SRC_SSH})

100 101 102 103
	list(APPEND LIBGIT2_SYSTEM_INCLUDES "${EMBED_SSH_PATH}/include")
	file(WRITE "${EMBED_SSH_PATH}/src/libssh2_config.h" "#define HAVE_WINCNG\n#define LIBSSH2_WINCNG\n#include \"../win32/libssh2_config.h\"")
	set(GIT_SSH 1)
endif()
104 105 106 107 108 109 110

IF (WIN32 AND WINHTTP)
	SET(GIT_WINHTTP 1)

	# Since MinGW does not come with headers or an import library for winhttp,
	# we have to include a private header and generate our own import library
	IF (MINGW)
111
		ADD_SUBDIRECTORY("${libgit2_SOURCE_DIR}/deps/winhttp" "${libgit2_BINARY_DIR}/deps/winhttp")
112
		LIST(APPEND LIBGIT2_LIBS winhttp)
113
		LIST(APPEND LIBGIT2_INCLUDES "${libgit2_SOURCE_DIR}/deps/winhttp")
114 115 116 117 118 119 120 121 122
	ELSE()
		LIST(APPEND LIBGIT2_LIBS "winhttp")
		LIST(APPEND LIBGIT2_PC_LIBS "-lwinhttp")
	ENDIF ()

	LIST(APPEND LIBGIT2_LIBS "rpcrt4" "crypt32" "ole32")
	LIST(APPEND LIBGIT2_PC_LIBS "-lrpcrt4" "-lcrypt32" "-lole32")
ENDIF()

123 124 125
include(SelectHTTPSBackend)
include(SelectHashes)
target_sources(git2internal PRIVATE ${SRC_SHA1})
126

127
# Specify regular expression implementation
128 129
FIND_PACKAGE(PCRE)

130
IF(REGEX_BACKEND STREQUAL "")
131 132 133
	CHECK_SYMBOL_EXISTS(regcomp_l "regex.h;xlocale.h" HAVE_REGCOMP_L)

	IF(HAVE_REGCOMP_L)
134
		SET(REGEX_BACKEND "regcomp_l")
135
	ELSEIF(PCRE_FOUND)
136
		SET(REGEX_BACKEND "pcre")
137
	ELSE()
138
		SET(REGEX_BACKEND "builtin")
139 140 141
	ENDIF()
ENDIF()

142
IF(REGEX_BACKEND STREQUAL "regcomp_l")
143
	ADD_FEATURE_INFO(regex ON "using system regcomp_l")
144
	SET(GIT_REGEX_REGCOMP_L 1)
145
ELSEIF(REGEX_BACKEND STREQUAL "pcre2")
146 147 148 149 150 151 152 153 154 155 156
	FIND_PACKAGE(PCRE2)

	IF(NOT PCRE2_FOUND)
		MESSAGE(FATAL_ERROR "PCRE2 support was requested but not found")
	ENDIF()

	ADD_FEATURE_INFO(regex ON "using system PCRE2")
	SET(GIT_REGEX_PCRE2 1)

	LIST(APPEND LIBGIT2_SYSTEM_INCLUDES ${PCRE2_INCLUDE_DIRS})
	LIST(APPEND LIBGIT2_LIBS ${PCRE2_LIBRARIES})
157
	LIST(APPEND LIBGIT2_PC_REQUIRES "libpcre2-8")
158
ELSEIF(REGEX_BACKEND STREQUAL "pcre")
159 160
	ADD_FEATURE_INFO(regex ON "using system PCRE")
	SET(GIT_REGEX_PCRE 1)
161 162 163

	LIST(APPEND LIBGIT2_SYSTEM_INCLUDES ${PCRE_INCLUDE_DIRS})
	LIST(APPEND LIBGIT2_LIBS ${PCRE_LIBRARIES})
164
	LIST(APPEND LIBGIT2_PC_REQUIRES "libpcre")
165
ELSEIF(REGEX_BACKEND STREQUAL "regcomp")
166 167
	ADD_FEATURE_INFO(regex ON "using system regcomp")
	SET(GIT_REGEX_REGCOMP 1)
168
ELSEIF(REGEX_BACKEND STREQUAL "builtin")
169
	ADD_FEATURE_INFO(regex ON "using bundled PCRE")
170
	SET(GIT_REGEX_BUILTIN 1)
171

172 173 174
	ADD_SUBDIRECTORY("${libgit2_SOURCE_DIR}/deps/pcre" "${libgit2_BINARY_DIR}/deps/pcre")
	LIST(APPEND LIBGIT2_INCLUDES "${libgit2_SOURCE_DIR}/deps/pcre")
	LIST(APPEND LIBGIT2_OBJECTS $<TARGET_OBJECTS:pcre>)
175
ELSE()
176
	MESSAGE(FATAL_ERROR "The REGEX_BACKEND option provided is not supported")
177 178
ENDIF()

179
# Optional external dependency: http-parser
180 181 182 183 184 185 186 187 188 189 190
IF(USE_HTTP_PARSER STREQUAL "system")
	FIND_PACKAGE(HTTP_Parser)

	IF (HTTP_PARSER_FOUND AND HTTP_PARSER_VERSION_MAJOR EQUAL 2)
		LIST(APPEND LIBGIT2_SYSTEM_INCLUDES ${HTTP_PARSER_INCLUDE_DIRS})
		LIST(APPEND LIBGIT2_LIBS ${HTTP_PARSER_LIBRARIES})
		LIST(APPEND LIBGIT2_PC_LIBS "-lhttp_parser")
		ADD_FEATURE_INFO(http-parser ON "http-parser support (system)")
	ELSE()
		MESSAGE(FATAL_ERROR "http-parser support was requested but not found")
	ENDIF()
191 192
ELSE()
	MESSAGE(STATUS "http-parser version 2 was not found or disabled; using bundled 3rd-party sources.")
193
	ADD_SUBDIRECTORY("${libgit2_SOURCE_DIR}/deps/http-parser" "${libgit2_BINARY_DIR}/deps/http-parser")
194
	LIST(APPEND LIBGIT2_INCLUDES "${libgit2_SOURCE_DIR}/deps/http-parser")
195
	LIST(APPEND LIBGIT2_OBJECTS "$<TARGET_OBJECTS:http-parser>")
196
	ADD_FEATURE_INFO(http-parser ON "http-parser support (bundled)")
197 198 199
ENDIF()

# Optional external dependency: zlib
200 201 202 203 204 205
SanitizeBool(USE_BUNDLED_ZLIB)
IF(USE_BUNDLED_ZLIB STREQUAL ON)
	SET(USE_BUNDLED_ZLIB "Bundled")
ENDIF()

IF(USE_BUNDLED_ZLIB STREQUAL "OFF")
206 207
	FIND_PACKAGE(ZLIB)
	IF(ZLIB_FOUND)
208
		LIST(APPEND LIBGIT2_SYSTEM_INCLUDES ${ZLIB_INCLUDE_DIRS})
209
		LIST(APPEND LIBGIT2_LIBS ${ZLIB_LIBRARIES})
210 211 212 213 214
		IF(APPLE OR CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
			LIST(APPEND LIBGIT2_PC_LIBS "-lz")
		ELSE()
			LIST(APPEND LIBGIT2_PC_REQUIRES "zlib")
		ENDIF()
215
		ADD_FEATURE_INFO(zlib ON "using system zlib")
216
	ELSE()
217
		MESSAGE(STATUS "zlib was not found; using bundled 3rd-party sources." )
218
	ENDIF()
219
ENDIF()
220 221 222 223 224 225 226 227 228 229
IF(USE_BUNDLED_ZLIB STREQUAL "Chromium")
	ADD_SUBDIRECTORY("${libgit2_SOURCE_DIR}/deps/chromium-zlib" "${libgit2_BINARY_DIR}/deps/chromium-zlib")
	LIST(APPEND LIBGIT2_INCLUDES "${libgit2_SOURCE_DIR}/deps/chromium-zlib")
	LIST(APPEND LIBGIT2_OBJECTS $<TARGET_OBJECTS:chromium_zlib>)
	ADD_FEATURE_INFO(zlib ON "using (Chromium) bundled zlib")
ELSEIF(USE_BUNDLED_ZLIB OR NOT ZLIB_FOUND)
	ADD_SUBDIRECTORY("${libgit2_SOURCE_DIR}/deps/zlib" "${libgit2_BINARY_DIR}/deps/zlib")
	LIST(APPEND LIBGIT2_INCLUDES "${libgit2_SOURCE_DIR}/deps/zlib")
	LIST(APPEND LIBGIT2_OBJECTS $<TARGET_OBJECTS:zlib>)
	ADD_FEATURE_INFO(zlib ON "using bundled zlib")
230 231 232 233
ENDIF()

# Optional external dependency: libssh2
IF (USE_SSH)
234
	FIND_PKGLIBRARIES(LIBSSH2 libssh2)
235 236 237 238 239 240 241
	IF (NOT LIBSSH2_FOUND)
		FIND_PACKAGE(LibSSH2)
		SET(LIBSSH2_INCLUDE_DIRS ${LIBSSH2_INCLUDE_DIR})
		GET_FILENAME_COMPONENT(LIBSSH2_LIBRARY_DIRS "${LIBSSH2_LIBRARY}" DIRECTORY)
		SET(LIBSSH2_LIBRARIES ${LIBSSH2_LIBRARY})
		SET(LIBSSH2_LDFLAGS "-lssh2")
	ENDIF()
242 243 244
ENDIF()
IF (LIBSSH2_FOUND)
	SET(GIT_SSH 1)
245
	LIST(APPEND LIBGIT2_SYSTEM_INCLUDES ${LIBSSH2_INCLUDE_DIRS})
246 247 248 249 250 251 252 253 254 255
	LIST(APPEND LIBGIT2_LIBS ${LIBSSH2_LIBRARIES})
	LIST(APPEND LIBGIT2_PC_LIBS ${LIBSSH2_LDFLAGS})

	CHECK_LIBRARY_EXISTS("${LIBSSH2_LIBRARIES}" libssh2_userauth_publickey_frommemory "${LIBSSH2_LIBRARY_DIRS}" HAVE_LIBSSH2_MEMORY_CREDENTIALS)
	IF (HAVE_LIBSSH2_MEMORY_CREDENTIALS)
		SET(GIT_SSH_MEMORY_CREDENTIALS 1)
	ENDIF()
ELSE()
	MESSAGE(STATUS "LIBSSH2 not found. Set CMAKE_PREFIX_PATH if it is installed outside of the default search path.")
ENDIF()
256
ADD_FEATURE_INFO(SSH GIT_SSH "SSH transport support")
257

258 259 260 261 262 263 264 265 266
# Optional external dependency: ntlmclient
IF (USE_NTLMCLIENT)
	SET(GIT_NTLM 1)
	ADD_SUBDIRECTORY("${libgit2_SOURCE_DIR}/deps/ntlmclient" "${libgit2_BINARY_DIR}/deps/ntlmclient")
	LIST(APPEND LIBGIT2_INCLUDES "${libgit2_SOURCE_DIR}/deps/ntlmclient")
	LIST(APPEND LIBGIT2_OBJECTS "$<TARGET_OBJECTS:ntlmclient>")
ENDIF()
ADD_FEATURE_INFO(ntlmclient GIT_NTLM "NTLM authentication support for Unix")

267 268 269
# Optional external dependency: GSSAPI

INCLUDE(SelectGSSAPI)
270 271

# Optional external dependency: iconv
272
IF (USE_ICONV)
273 274 275 276
	FIND_PACKAGE(Iconv)
ENDIF()
IF (ICONV_FOUND)
	SET(GIT_USE_ICONV 1)
277
	LIST(APPEND LIBGIT2_SYSTEM_INCLUDES ${ICONV_INCLUDE_DIR})
278 279 280
	LIST(APPEND LIBGIT2_LIBS ${ICONV_LIBRARIES})
	LIST(APPEND LIBGIT2_PC_LIBS ${ICONV_LIBRARIES})
ENDIF()
281
ADD_FEATURE_INFO(iconv GIT_USE_ICONV "iconv encoding conversion support")
282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303


IF (THREADSAFE)
	IF (NOT WIN32)
		FIND_PACKAGE(Threads REQUIRED)
	ENDIF()

	SET(GIT_THREADS 1)
ENDIF()

IF (USE_NSEC)
	SET(GIT_USE_NSEC 1)
ENDIF()

IF (HAVE_STRUCT_STAT_ST_MTIM)
	SET(GIT_USE_STAT_MTIM 1)
ELSEIF (HAVE_STRUCT_STAT_ST_MTIMESPEC)
	SET(GIT_USE_STAT_MTIMESPEC 1)
ELSEIF (HAVE_STRUCT_STAT_ST_MTIME_NSEC)
	SET(GIT_USE_STAT_MTIME_NSEC 1)
ENDIF()

304
target_compile_definitions(git2internal PRIVATE _FILE_OFFSET_BITS=64)
305 306

# Collect sourcefiles
307
file(GLOB SRC_H
308 309 310
	"${libgit2_SOURCE_DIR}/include/git2.h"
	"${libgit2_SOURCE_DIR}/include/git2/*.h"
	"${libgit2_SOURCE_DIR}/include/git2/sys/*.h")
311
list(SORT SRC_H)
312
target_sources(git2internal PRIVATE ${SRC_H})
313 314

# On Windows use specific platform sources
315
if(WIN32 AND NOT CYGWIN)
316 317
	SET(WIN_RC "win32/git2.rc")

318 319
	file(GLOB SRC_OS win32/*.c win32/*.h)
	list(SORT SRC_OS)
320
	target_sources(git2internal PRIVATE ${SRC_OS})
321
elseif(AMIGA)
322
	target_compile_definitions(git2internal PRIVATE NO_ADDRINFO NO_READDIR_R NO_MMAP)
323 324 325
else()
	file(GLOB SRC_OS unix/*.c unix/*.h)
	list(SORT SRC_OS)
326
	target_sources(git2internal PRIVATE ${SRC_OS})
327
endif()
328

329
IF (USE_LEAK_CHECKER STREQUAL "valgrind")
330
	target_compile_definitions(git2internal PRIVATE VALGRIND)
331 332
ENDIF()

333
file(GLOB SRC_GIT2 *.c *.h
334
	allocators/*.c allocators/*.h
335 336 337
	streams/*.c streams/*.h
	transports/*.c transports/*.h
	xdiff/*.c xdiff/*.h)
338
list(SORT SRC_GIT2)
339
target_sources(git2internal PRIVATE ${SRC_GIT2})
340

341 342 343 344
IF(APPLE)
	# The old Secure Transport API has been deprecated in macOS 10.15.
	SET_SOURCE_FILES_PROPERTIES(streams/stransport.c PROPERTIES COMPILE_FLAGS -Wno-deprecated)
ENDIF()
345

346 347 348 349 350 351 352
# the xdiff dependency is not (yet) warning-free, disable warnings as
# errors for the xdiff sources until we've sorted them out
IF(MSVC)
	SET_SOURCE_FILES_PROPERTIES(xdiff/xdiffi.c PROPERTIES COMPILE_FLAGS -WX-)
	SET_SOURCE_FILES_PROPERTIES(xdiff/xutils.c PROPERTIES COMPILE_FLAGS -WX-)
ENDIF()

353 354 355 356 357 358 359 360 361 362 363 364 365
# Determine architecture of the machine
IF (CMAKE_SIZEOF_VOID_P EQUAL 8)
	SET(GIT_ARCH_64 1)
ELSEIF (CMAKE_SIZEOF_VOID_P EQUAL 4)
	SET(GIT_ARCH_32 1)
ELSEIF (CMAKE_SIZEOF_VOID_P)
	MESSAGE(FATAL_ERROR "Unsupported architecture (pointer size is ${CMAKE_SIZEOF_VOID_P} bytes)")
ELSE()
	MESSAGE(FATAL_ERROR "Unsupported architecture (CMAKE_SIZEOF_VOID_P is unset)")
ENDIF()

CONFIGURE_FILE(features.h.in git2/sys/features.h)

366 367
IDE_SPLIT_SOURCES(git2internal)
LIST(APPEND LIBGIT2_OBJECTS $<TARGET_OBJECTS:git2internal>)
368

369 370
TARGET_INCLUDE_DIRECTORIES(git2internal PRIVATE ${LIBGIT2_INCLUDES} PUBLIC ${libgit2_SOURCE_DIR}/include)
TARGET_INCLUDE_DIRECTORIES(git2internal SYSTEM PRIVATE ${LIBGIT2_SYSTEM_INCLUDES})
371

372
SET(LIBGIT2_OBJECTS ${LIBGIT2_OBJECTS} PARENT_SCOPE)
373
SET(LIBGIT2_INCLUDES ${LIBGIT2_INCLUDES} PARENT_SCOPE)
374
SET(LIBGIT2_SYSTEM_INCLUDES ${LIBGIT2_SYSTEM_INCLUDES} PARENT_SCOPE)
375 376
SET(LIBGIT2_LIBS ${LIBGIT2_LIBS} PARENT_SCOPE)

377 378 379 380 381 382 383
IF(XCODE_VERSION)
	# This is required for Xcode to actually link the libgit2 library
	# when using only object libraries.
	FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/dummy.c "")
	LIST(APPEND LIBGIT2_OBJECTS ${CMAKE_CURRENT_BINARY_DIR}/dummy.c)
ENDIF()

384
# Compile and link libgit2
385
ADD_LIBRARY(git2 ${WIN_RC} ${LIBGIT2_OBJECTS})
386 387
TARGET_LINK_LIBRARIES(git2 ${LIBGIT2_LIBS})

388
SET_TARGET_PROPERTIES(git2 PROPERTIES C_STANDARD 90)
389 390 391
SET_TARGET_PROPERTIES(git2 PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${libgit2_BINARY_DIR})
SET_TARGET_PROPERTIES(git2 PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${libgit2_BINARY_DIR})
SET_TARGET_PROPERTIES(git2 PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${libgit2_BINARY_DIR})
392 393 394 395 396 397 398 399 400

# Workaround for Cmake bug #0011240 (see http://public.kitware.com/Bug/view.php?id=11240)
# Win64+MSVC+static libs = linker error
IF(MSVC AND GIT_ARCH_64 AND NOT BUILD_SHARED_LIBS)
  SET_TARGET_PROPERTIES(git2 PROPERTIES STATIC_LIBRARY_FLAGS "/MACHINE:x64")
ENDIF()

IDE_SPLIT_SOURCES(git2)

401 402 403 404
if(SONAME)
	set_target_properties(git2 PROPERTIES VERSION ${libgit2_VERSION})
	set_target_properties(git2 PROPERTIES SOVERSION "${libgit2_VERSION_MAJOR}.${libgit2_VERSION_MINOR}")
	if(LIBGIT2_FILENAME)
405
		target_compile_definitions(git2 PRIVATE LIBGIT2_FILENAME=\"${LIBGIT2_FILENAME}\")
406 407 408 409 410
		set_target_properties(git2 PROPERTIES OUTPUT_NAME ${LIBGIT2_FILENAME})
	elseif(DEFINED LIBGIT2_PREFIX)
		set_target_properties(git2 PROPERTIES PREFIX "${LIBGIT2_PREFIX}")
	endif()
endif()
411

412
PKG_BUILD_CONFIG(NAME libgit2
413
	VERSION ${libgit2_VERSION}
414 415 416 417 418
	DESCRIPTION "The git library, take 2"
	LIBS_SELF git2
	PRIVATE_LIBS ${LIBGIT2_PC_LIBS}
	REQUIRES ${LIBGIT2_PC_REQUIRES}
)
419 420 421 422 423 424 425 426 427

IF (MSVC_IDE)
   # Precompiled headers
   SET_TARGET_PROPERTIES(git2 PROPERTIES COMPILE_FLAGS "/Yuprecompiled.h /FIprecompiled.h")
   SET_SOURCE_FILES_PROPERTIES(win32/precompiled.c COMPILE_FLAGS "/Ycprecompiled.h")
ENDIF ()

# Install
INSTALL(TARGETS git2
428 429 430
	RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
	LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
	ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
431
)
432 433
INSTALL(DIRECTORY ${libgit2_SOURCE_DIR}/include/git2 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
INSTALL(FILES ${libgit2_SOURCE_DIR}/include/git2.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})