Skip to content

Commit 8e31cc2

Browse files
committed
cmake: keep track of libraries and includes via lists
Later on, we will move detection of required libraries, library directories as well as include directories into a separate CMakeLists.txt file inside of the source directory. Obviously, we want to avoid duplication here regarding these parameters. To prepare for the split, put the parameters into three variables LIBGIT2_LIBS, LIBGIT2_LIBDIRS and LIBGIT2_INCLUDES, tracking the required libraries, linking directory as well as include directories. These variables can later be exported into the parent scope from inside of the source build instructions, making them readily available for the other subdirectories.
1 parent dd332e2 commit 8e31cc2

File tree

3 files changed

+46
-40
lines changed

3 files changed

+46
-40
lines changed

CMakeLists.txt

Lines changed: 39 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,10 @@ SET(LIBGIT2_PC_REQUIRES "")
128128
# pc file.
129129
SET(LIBGIT2_PC_LIBS "")
130130

131+
SET(LIBGIT2_INCLUDES "")
132+
SET(LIBGIT2_LIBS "")
133+
SET(LIBGIT2_LIBDIRS "")
134+
131135
# Installation paths
132136
#
133137
SET(BIN_INSTALL_DIR bin CACHE PATH "Where to install binaries to.")
@@ -218,24 +222,24 @@ IF (SECURITY_FOUND)
218222
IF (HAVE_NEWER_SECURITY)
219223
MESSAGE("-- Found Security ${SECURITY_DIRS}")
220224
LIST(APPEND LIBGIT2_PC_LIBS "-framework Security")
225+
LIST(APPEND LIBGIT2_LIBS ${SECURITY_DIRS})
221226
ELSE()
222227
MESSAGE("-- Security framework is too old, falling back to OpenSSL")
223228
SET(SECURITY_FOUND "NO")
224-
SET(SECURITY_DIRS "")
225-
SET(SECURITY_DIR "")
226229
SET(USE_OPENSSL "ON")
227230
ENDIF()
228231
ENDIF()
229232

230233
IF (COREFOUNDATION_FOUND)
231234
MESSAGE("-- Found CoreFoundation ${COREFOUNDATION_DIRS}")
232235
LIST(APPEND LIBGIT2_PC_LIBS "-framework CoreFoundation")
236+
LIST(APPEND LIBGIT2_LIBS ${COREFOUNDATION_DIRS})
233237
ENDIF()
234238

235239

236240
IF (WIN32 AND EMBED_SSH_PATH)
237241
FILE(GLOB SRC_SSH "${EMBED_SSH_PATH}/src/*.c")
238-
INCLUDE_DIRECTORIES("${EMBED_SSH_PATH}/include")
242+
LIST(APPEND LIBGIT2_INCLUDES "${EMBED_SSH_PATH}/include")
239243
FILE(WRITE "${EMBED_SSH_PATH}/src/libssh2_config.h" "#define HAVE_WINCNG\n#define LIBSSH2_WINCNG\n#include \"../win32/libssh2_config.h\"")
240244
SET(GIT_SSH 1)
241245
ENDIF()
@@ -273,11 +277,11 @@ IF (WIN32 AND WINHTTP)
273277
PROPERTIES OBJECT_DEPENDS ${LIBWINHTTP_PATH}/libwinhttp.a
274278
)
275279

276-
INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/deps/winhttp")
277-
LINK_DIRECTORIES(${LIBWINHTTP_PATH})
280+
LIST(APPEND LIBGIT2_INCLUDES "${CMAKE_SOURCE_DIR}/deps/winhttp")
281+
LIST(APPEND LIBGIT2_LIBDIRS ${LIBWINHTTP_PATH})
278282
ENDIF ()
279283

280-
LINK_LIBRARIES(winhttp rpcrt4 crypt32 ole32)
284+
LIST(APPEND LIBGIT2_LIBS "winhttp" "rpcrt4" "crypt32" "ole32")
281285
LIST(APPEND LIBGIT2_PC_LIBS "-lwinhttp" "-lrpcrt4" "-lcrypt32" "-lole32")
282286
ELSE ()
283287
IF (CURL)
@@ -290,9 +294,9 @@ ELSE ()
290294

291295
IF (CURL_FOUND)
292296
SET(GIT_CURL 1)
293-
INCLUDE_DIRECTORIES(${CURL_INCLUDE_DIRS})
294-
LINK_DIRECTORIES(${CURL_LIBRARY_DIRS})
295-
LINK_LIBRARIES(${CURL_LIBRARIES})
297+
LIST(APPEND LIBGIT2_INCLUDES ${CURL_INCLUDE_DIRS})
298+
LIST(APPEND LIBGIT2_LIBDIRS ${CURL_LIBRARY_DIRS})
299+
LIST(APPEND LIBGIT2_LIBS ${CURL_LIBRARIES})
296300
LIST(APPEND LIBGIT2_PC_LIBS ${CURL_LDFLAGS})
297301
ENDIF()
298302
ENDIF()
@@ -327,35 +331,36 @@ ENDIF()
327331

328332
# Include POSIX regex when it is required
329333
IF(WIN32 OR AMIGA OR CMAKE_SYSTEM_NAME MATCHES "(Solaris|SunOS)")
330-
INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/deps/regex")
334+
LIST(APPEND LBIGIT2_INCLUDES "${CMAKE_SOURCE_DIR}/deps/regex")
331335
SET(SRC_REGEX "${CMAKE_SOURCE_DIR}/deps/regex/regex.c")
332336
ENDIF()
333337

334338
# Optional external dependency: http-parser
335339
FIND_PACKAGE(HTTP_Parser)
336340
IF (USE_EXT_HTTP_PARSER AND HTTP_PARSER_FOUND AND HTTP_PARSER_VERSION_MAJOR EQUAL 2)
337-
INCLUDE_DIRECTORIES(${HTTP_PARSER_INCLUDE_DIRS})
338-
LINK_LIBRARIES(${HTTP_PARSER_LIBRARIES})
341+
LIST(APPEND LIBGIT2_INCLUDES ${HTTP_PARSER_INCLUDE_DIRS})
342+
LIST(APPEND LIBGIT2_LIBS ${HTTP_PARSER_LIBRARIES})
339343
LIST(APPEND LIBGIT2_PC_LIBS "-lhttp_parser")
340344
ELSE()
341345
MESSAGE(STATUS "http-parser version 2 was not found or disabled; using bundled 3rd-party sources.")
342-
INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/deps/http-parser")
346+
LIST(APPEND LIBGIT2_INCLUDES "${CMAKE_SOURCE_DIR}/deps/http-parser")
343347
FILE(GLOB SRC_HTTP "${CMAKE_SOURCE_DIR}/deps/http-parser/*.c" "${CMAKE_SOURCE_DIR}/deps/http-parser/*.h")
344348
ENDIF()
345349

346350
# Optional external dependency: zlib
347351
FIND_PACKAGE(ZLIB)
348352
IF (ZLIB_FOUND)
349-
INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIRS})
350-
LINK_LIBRARIES(${ZLIB_LIBRARIES})
353+
LIST(APPEND LIBGIT2_INCLUDES ${ZLIB_INCLUDE_DIRS})
354+
LIST(APPEND LIBGIT2_LIBS ${ZLIB_LIBRARIES})
351355
IF(APPLE OR CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
356+
LIST(APPEND LIBGIT2_LIBS "z")
352357
LIST(APPEND LIBGIT2_PC_LIBS "-lz")
353358
ELSE()
354359
SET(LIBGIT2_PC_REQUIRES "${LIBGIT2_PC_REQUIRES} zlib")
355360
ENDIF()
356361
ELSE()
357362
MESSAGE(STATUS "zlib was not found; using bundled 3rd-party sources." )
358-
INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/deps/zlib")
363+
LIST(APPEND LIBGIT2_INCLUDES "${CMAKE_SOURCE_DIR}/deps/zlib")
359364
ADD_DEFINITIONS(-DNO_VIZ -DSTDC -DNO_GZIP)
360365
FILE(GLOB SRC_ZLIB "${CMAKE_SOURCE_DIR}/deps/zlib/*.c" "${CMAKE_SOURCE_DIR}/deps/zlib/*.h")
361366
ENDIF()
@@ -366,11 +371,11 @@ IF (USE_SSH)
366371
ENDIF()
367372
IF (LIBSSH2_FOUND)
368373
SET(GIT_SSH 1)
369-
INCLUDE_DIRECTORIES(${LIBSSH2_INCLUDE_DIRS})
370-
LINK_DIRECTORIES(${LIBSSH2_LIBRARY_DIRS})
374+
LIST(APPEND LIBGIT2_INCLUDES ${LIBSSH2_INCLUDE_DIRS})
375+
LIST(APPEND LIBGIT2_LIBS ${LIBSSH2_LIBRARIES})
376+
LIST(APPEND LIBGIT2_LIBDIRS ${LIBSSH2_LIBRARY_DIRS})
371377
LIST(APPEND LIBGIT2_PC_LIBS ${LIBSSH2_LDFLAGS})
372378
#SET(LIBGIT2_PC_LIBS "${LIBGIT2_PC_LIBS} ${LIBSSH2_LDFLAGS}")
373-
SET(SSH_LIBRARIES ${LIBSSH2_LIBRARIES})
374379

375380
CHECK_LIBRARY_EXISTS("${LIBSSH2_LIBRARIES}" libssh2_userauth_publickey_frommemory "${LIBSSH2_LIBRARY_DIRS}" HAVE_LIBSSH2_MEMORY_CREDENTIALS)
376381
IF (HAVE_LIBSSH2_MEMORY_CREDENTIALS)
@@ -386,6 +391,7 @@ IF (USE_GSSAPI)
386391
ENDIF()
387392
IF (GSSAPI_FOUND)
388393
SET(GIT_GSSAPI 1)
394+
LIST(APPEND LIBGIT2_LIBS ${GSSAPI_LIBRARIES})
389395
ENDIF()
390396

391397
# Optional external dependency: iconv
@@ -394,7 +400,8 @@ IF (USE_ICONV)
394400
ENDIF()
395401
IF (ICONV_FOUND)
396402
SET(GIT_USE_ICONV 1)
397-
INCLUDE_DIRECTORIES(${ICONV_INCLUDE_DIR})
403+
LIST(APPEND LIBGIT2_INCLUDES ${ICONV_INCLUDE_DIR})
404+
LIST(APPEND LIBGIT2_LIBS ${ICONV_LIBRARIES})
398405
LIST(APPEND LIBGIT2_PC_LIBS ${ICONV_LIBRARIES})
399406
ENDIF()
400407

@@ -551,14 +558,14 @@ ENDIF()
551558
IF (SECURITY_FOUND)
552559
SET(GIT_SECURE_TRANSPORT 1)
553560
SET(GIT_HTTPS 1)
554-
INCLUDE_DIRECTORIES(${SECURITY_INCLUDE_DIR})
561+
LIST(APPEND LIBGIT2_INCLUDES ${SECURITY_INCLUDE_DIR})
555562
ENDIF ()
556563

557564
IF (OPENSSL_FOUND)
558565
SET(GIT_OPENSSL 1)
559566
SET(GIT_HTTPS 1)
560-
INCLUDE_DIRECTORIES(${OPENSSL_INCLUDE_DIR})
561-
SET(SSL_LIBRARIES ${OPENSSL_LIBRARIES})
567+
LIST(APPEND LIBGIT2_INCLUDES ${OPENSSL_INCLUDE_DIR})
568+
LIST(APPEND LIBGIT2_LIBS ${OPENSSL_LIBRARIES})
562569
ENDIF()
563570

564571

@@ -614,32 +621,31 @@ ELSE()
614621
ENDIF()
615622

616623
CONFIGURE_FILE(src/features.h.in git2/sys/features.h)
617-
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
618624

619625
SET(GIT2INTERNAL_OBJECTS ${SRC_H} ${SRC_GIT2} ${SRC_OS} ${SRC_ZLIB} ${SRC_HTTP} ${SRC_REGEX} ${SRC_SSH} ${SRC_SHA1})
620626

627+
LIST(APPEND LIBGIT2_INCLUDES ${CMAKE_CURRENT_BINARY_DIR} "${CMAKE_SOURCE_DIR}/src" "${CMAKE_SOURCE_DIR}/include")
628+
621629
IF (CMAKE_VERSION VERSION_GREATER 2.8.7)
622630
ADD_LIBRARY(git2internal OBJECT ${GIT2INTERNAL_OBJECTS})
623631
IDE_SPLIT_SOURCES(git2internal)
624632
SET(GIT2INTERNAL_OBJECTS $<TARGET_OBJECTS:git2internal>)
625633

626634
IF (${CMAKE_VERSION} VERSION_LESS 2.8.12)
627-
INCLUDE_DIRECTORIES(src include)
635+
INCLUDE_DIRECTORIES(${LIBGIT2_INCLUDES})
628636
ELSE()
629-
TARGET_INCLUDE_DIRECTORIES(git2internal PRIVATE src PUBLIC include)
637+
TARGET_INCLUDE_DIRECTORIES(git2internal
638+
PRIVATE ${LIBGIT2_INCLUDES}
639+
PUBLIC ${CMAKE_SOURCE_DIR}/include)
630640
ENDIF()
631641
ELSE()
632-
INCLUDE_DIRECTORIES(src include)
642+
INCLUDE_DIRECTORIES(${LIBGIT2_INCLUDES})
633643
ENDIF()
634644

635645
# Compile and link libgit2
646+
LINK_DIRECTORIES(${LIBGIT2_LIBDIRS})
636647
ADD_LIBRARY(git2 ${WIN_RC} ${GIT2INTERNAL_OBJECTS})
637-
TARGET_LINK_LIBRARIES(git2 ${SECURITY_DIRS})
638-
TARGET_LINK_LIBRARIES(git2 ${COREFOUNDATION_DIRS})
639-
TARGET_LINK_LIBRARIES(git2 ${SSL_LIBRARIES})
640-
TARGET_LINK_LIBRARIES(git2 ${SSH_LIBRARIES})
641-
TARGET_LINK_LIBRARIES(git2 ${GSSAPI_LIBRARIES})
642-
TARGET_LINK_LIBRARIES(git2 ${ICONV_LIBRARIES})
648+
TARGET_LINK_LIBRARIES(git2 ${LIBGIT2_LIBS})
643649
TARGET_OS_LIBRARIES(git2)
644650

645651
# Workaround for Cmake bug #0011240 (see http://public.kitware.com/Bug/view.php?id=11240)

examples/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
LINK_DIRECTORIES(${LIBGIT2_LIBDIRS})
2+
INCLUDE_DIRECTORIES(${LIBGIT2_INCLUDES})
3+
14
FILE(GLOB_RECURSE SRC_EXAMPLE_GIT2 network/*.c network/*.h)
25
ADD_EXECUTABLE(cgit2 ${SRC_EXAMPLE_GIT2})
36
IF(WIN32 OR ANDROID)

tests/CMakeLists.txt

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ SET_SOURCE_FILES_PROPERTIES(
3030
${CLAR_PATH}/clar.c
3131
PROPERTIES OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/clar.suite)
3232

33+
LINK_DIRECTORIES(${LIBGIT2_LIBDIRS})
34+
INCLUDE_DIRECTORIES(${LIBGIT2_INCLUDES})
35+
3336
ADD_EXECUTABLE(libgit2_clar ${SRC_CLAR} ${SRC_TEST} ${GIT2INTERNAL_OBJECTS})
3437

3538
SET_TARGET_PROPERTIES(libgit2_clar PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
@@ -38,13 +41,7 @@ IF (${CMAKE_VERSION} VERSION_GREATER 2.8.11)
3841
TARGET_INCLUDE_DIRECTORIES(libgit2_clar PRIVATE ../src PUBLIC ../include)
3942
ENDIF()
4043

41-
TARGET_LINK_LIBRARIES(libgit2_clar ${COREFOUNDATION_DIRS})
42-
TARGET_LINK_LIBRARIES(libgit2_clar ${SECURITY_DIRS})
43-
TARGET_LINK_LIBRARIES(libgit2_clar ${SSL_LIBRARIES})
44-
TARGET_LINK_LIBRARIES(libgit2_clar ${SSH_LIBRARIES})
45-
TARGET_LINK_LIBRARIES(libgit2_clar ${GSSAPI_LIBRARIES})
46-
TARGET_LINK_LIBRARIES(libgit2_clar ${ICONV_LIBRARIES})
47-
TARGET_OS_LIBRARIES(libgit2_clar)
44+
TARGET_LINK_LIBRARIES(libgit2_clar ${LIBGIT2_LIBS})
4845
IDE_SPLIT_SOURCES(libgit2_clar)
4946

5047
IF (MSVC_IDE)

0 commit comments

Comments
 (0)