1 # The main libgit2 source tree: this CMakeLists.txt identifies platform
2 # support and includes the subprojects that make up core libgit2 support.
5 # Optional build configuration settings
9 add_definitions(-DGIT_DEPRECATE_HARD)
12 if(USE_LEAK_CHECKER STREQUAL "valgrind")
13 add_definitions(-DVALGRIND)
17 # Optional debugging functionality
23 add_feature_info(debugpool GIT_DEBUG_POOL "debug pool allocator")
25 if(DEBUG_STRICT_ALLOC)
26 set(GIT_DEBUG_STRICT_ALLOC 1)
28 add_feature_info(debugalloc GIT_DEBUG_STRICT_ALLOC "debug strict allocators")
31 set(GIT_DEBUG_STRICT_OPEN 1)
33 add_feature_info(debugopen GIT_DEBUG_STRICT_OPEN "path validation in open")
36 # Optional feature enablement
40 include(SelectHTTPSBackend)
42 include(SelectHTTPParser)
45 include(SelectWinHTTP)
55 set(GIT_USE_FUTIMENS 1)
57 add_feature_info(futimens GIT_USE_FUTIMENS "futimens support")
61 check_prototype_definition(qsort_r
62 "void qsort_r(void *base, size_t nmemb, size_t size, void *thunk, int (*compar)(void *, const void *, const void *))"
63 "" "stdlib.h" GIT_QSORT_R_BSD)
65 check_prototype_definition(qsort_r
66 "void qsort_r(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *, void *), void *arg)"
67 "" "stdlib.h" GIT_QSORT_R_GNU)
69 check_function_exists(qsort_s GIT_QSORT_S)
71 # random / entropy data
73 check_function_exists(getentropy GIT_RAND_GETENTROPY)
74 check_function_exists(getloadavg GIT_RAND_GETLOADAVG)
76 # determine architecture of the machine
78 if(CMAKE_SIZEOF_VOID_P EQUAL 8)
80 elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
82 elseif(CMAKE_SIZEOF_VOID_P)
83 message(FATAL_ERROR "Unsupported architecture (pointer size is ${CMAKE_SIZEOF_VOID_P} bytes)")
85 message(FATAL_ERROR "Unsupported architecture (CMAKE_SIZEOF_VOID_P is unset)")
88 # nanosecond mtime/ctime support
94 # high-resolution stat support
96 if(HAVE_STRUCT_STAT_ST_MTIM)
97 set(GIT_USE_STAT_MTIM 1)
98 elseif(HAVE_STRUCT_STAT_ST_MTIMESPEC)
99 set(GIT_USE_STAT_MTIMESPEC 1)
100 elseif(HAVE_STRUCT_STAT_ST_MTIME_NSEC)
101 set(GIT_USE_STAT_MTIME_NSEC 1)
106 check_library_exists(rt clock_gettime "time.h" NEED_LIBRT)
108 list(APPEND LIBGIT2_SYSTEM_LIBS rt)
109 list(APPEND LIBGIT2_PC_LIBS "-lrt")
115 list(APPEND LIBGIT2_SYSTEM_LIBS ws2_32)
118 if(CMAKE_SYSTEM_NAME MATCHES "(Solaris|SunOS)")
119 list(APPEND LIBGIT2_SYSTEM_LIBS socket nsl)
120 list(APPEND LIBGIT2_PC_LIBS "-lsocket" "-lnsl")
123 if(CMAKE_SYSTEM_NAME MATCHES "Haiku")
124 list(APPEND LIBGIT2_SYSTEM_LIBS gnu network)
125 list(APPEND LIBGIT2_PC_LIBS "-lgnu -lnetwork")
129 add_definitions(-DNO_ADDRINFO -DNO_READDIR_R -DNO_MMAP)
136 find_package(Threads REQUIRED)
137 list(APPEND LIBGIT2_SYSTEM_LIBS ${CMAKE_THREAD_LIBS_INIT})
138 list(APPEND LIBGIT2_PC_LIBS ${CMAKE_THREAD_LIBS_INIT})
143 add_feature_info(threadsafe USE_THREADS "threadsafe support")
146 # Optional bundled features
152 add_subdirectory("${PROJECT_SOURCE_DIR}/deps/ntlmclient" "${PROJECT_BINARY_DIR}/deps/ntlmclient")
153 list(APPEND LIBGIT2_DEPENDENCY_INCLUDES "${PROJECT_SOURCE_DIR}/deps/ntlmclient")
154 list(APPEND LIBGIT2_DEPENDENCY_OBJECTS "$<TARGET_OBJECTS:ntlmclient>")
156 add_feature_info(ntlmclient GIT_NTLM "NTLM authentication support for Unix")
159 # Optional external dependencies
167 list(APPEND LIBGIT2_SYSTEM_INCLUDES ${ICONV_INCLUDE_DIR})
168 list(APPEND LIBGIT2_SYSTEM_LIBS ${ICONV_LIBRARIES})
169 list(APPEND LIBGIT2_PC_LIBS ${ICONV_LIBRARIES})
171 add_feature_info(iconv GIT_USE_ICONV "iconv encoding conversion support")
177 configure_file(features.h.in git2/sys/features.h)
180 # Include child projects
183 add_subdirectory(libgit2)
184 add_subdirectory(util)
187 add_subdirectory(cli)
190 # re-export these to the root so that peer projects (tests, fuzzers,
191 # examples) can use them
192 set(LIBGIT2_INCLUDES ${LIBGIT2_INCLUDES} PARENT_SCOPE)
193 set(LIBGIT2_OBJECTS ${LIBGIT2_OBJECTS} PARENT_SCOPE)
194 set(LIBGIT2_DEPENDENCY_INCLUDES ${LIBGIT2_DEPENDENCY_INCLUDES} PARENT_SCOPE)
195 set(LIBGIT2_DEPENDENCY_OBJECTS ${LIBGIT2_DEPENDENCY_OBJECTS} PARENT_SCOPE)
196 set(LIBGIT2_SYSTEM_INCLUDES ${LIBGIT2_SYSTEM_INCLUDES} PARENT_SCOPE)
197 set(LIBGIT2_SYSTEM_LIBS ${LIBGIT2_SYSTEM_LIBS} PARENT_SCOPE)