summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2021-11-11 21:39:44 -0500
committerEdward Thomson <ethomson@edwardthomson.com>2021-11-11 21:39:44 -0500
commitc85e7b5b8b1c08ceca9983eb7839af2cd146425c (patch)
tree8cfc6d1dd7acb2f0734a32b31c039202251579c4
parentbb2d0344c39020e484a28d0b289cca06b06b3100 (diff)
downloadlibgit2-ethomson/util4.tar.gz
checkpointethomson/util4
-rw-r--r--CMakeLists.txt4
-rw-r--r--cmake/SelectHTTPParser.cmake6
-rw-r--r--cmake/SelectRegex.cmake8
-rw-r--r--cmake/SelectSSH.cmake6
-rw-r--r--cmake/SelectWinHTTP.cmake6
-rw-r--r--cmake/SelectZlib.cmake10
-rw-r--r--src/CMakeLists.txt404
-rw-r--r--src/libgit2/CMakeLists.txt44
8 files changed, 138 insertions, 350 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b725dfc8a..d16b306b9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -40,7 +40,7 @@ option(DEBUG_STRICT_OPEN "Enable path validation in open"
# Output options
option(SONAME "Set the (SO)VERSION of the target" ON)
-option(LIBGIT2_FILENAME "Name of the produced binary" OFF)
+ set(LIBGIT2_FILENAME "git2" CACHE STRING "Name of the produced binary")
option(DEPRECATE_HARD "Do not include deprecated functions in the library" OFF)
# Compilation options
@@ -103,7 +103,7 @@ include(IdeSplitSources)
include(FeatureSummary)
include(EnableWarnings)
include(DefaultCFlags)
-
+include(PkgBuildConfig)
#
# Subdirectories
diff --git a/cmake/SelectHTTPParser.cmake b/cmake/SelectHTTPParser.cmake
index a1724a7c4..721f7fa9f 100644
--- a/cmake/SelectHTTPParser.cmake
+++ b/cmake/SelectHTTPParser.cmake
@@ -4,7 +4,7 @@ if(USE_HTTP_PARSER STREQUAL "system")
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_SYSTEM_LIBS ${HTTP_PARSER_LIBRARIES})
list(APPEND LIBGIT2_PC_LIBS "-lhttp_parser")
add_feature_info(http-parser ON "http-parser support (system)")
else()
@@ -13,7 +13,7 @@ if(USE_HTTP_PARSER STREQUAL "system")
else()
message(STATUS "http-parser version 2 was not found or disabled; using bundled 3rd-party sources.")
add_subdirectory("${libgit2_SOURCE_DIR}/deps/http-parser" "${libgit2_BINARY_DIR}/deps/http-parser")
- list(APPEND LIBGIT2_INCLUDES "${libgit2_SOURCE_DIR}/deps/http-parser")
- list(APPEND LIBGIT2_OBJECTS "$<TARGET_OBJECTS:http-parser>")
+ list(APPEND LIBGIT2_DEPENDENCY_INCLUDES "${libgit2_SOURCE_DIR}/deps/http-parser")
+ list(APPEND LIBGIT2_DEPENDENCY_OBJECTS "$<TARGET_OBJECTS:http-parser>")
add_feature_info(http-parser ON "http-parser support (bundled)")
endif()
diff --git a/cmake/SelectRegex.cmake b/cmake/SelectRegex.cmake
index 900d7f150..1553d6587 100644
--- a/cmake/SelectRegex.cmake
+++ b/cmake/SelectRegex.cmake
@@ -27,14 +27,14 @@ elseif(REGEX_BACKEND STREQUAL "pcre2")
set(GIT_REGEX_PCRE2 1)
list(APPEND LIBGIT2_SYSTEM_INCLUDES ${PCRE2_INCLUDE_DIRS})
- list(APPEND LIBGIT2_LIBS ${PCRE2_LIBRARIES})
+ list(APPEND LIBGIT2_SYSTEM_LIBS ${PCRE2_LIBRARIES})
list(APPEND LIBGIT2_PC_REQUIRES "libpcre2-8")
elseif(REGEX_BACKEND STREQUAL "pcre")
add_feature_info(regex ON "using system PCRE")
set(GIT_REGEX_PCRE 1)
list(APPEND LIBGIT2_SYSTEM_INCLUDES ${PCRE_INCLUDE_DIRS})
- list(APPEND LIBGIT2_LIBS ${PCRE_LIBRARIES})
+ list(APPEND LIBGIT2_SYSTEM_LIBS ${PCRE_LIBRARIES})
list(APPEND LIBGIT2_PC_REQUIRES "libpcre")
elseif(REGEX_BACKEND STREQUAL "regcomp")
add_feature_info(regex ON "using system regcomp")
@@ -44,8 +44,8 @@ elseif(REGEX_BACKEND STREQUAL "builtin")
set(GIT_REGEX_BUILTIN 1)
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>)
+ list(APPEND LIBGIT2_DEPENDENCY_INCLUDES "${libgit2_SOURCE_DIR}/deps/pcre")
+ list(APPEND LIBGIT2_DEPENDENCY_OBJECTS $<TARGET_OBJECTS:pcre>)
else()
message(FATAL_ERROR "The REGEX_BACKEND option provided is not supported")
endif()
diff --git a/cmake/SelectSSH.cmake b/cmake/SelectSSH.cmake
index 0356ee3e7..23dfc9785 100644
--- a/cmake/SelectSSH.cmake
+++ b/cmake/SelectSSH.cmake
@@ -17,7 +17,7 @@ endif()
if(LIBSSH2_FOUND)
set(GIT_SSH 1)
list(APPEND LIBGIT2_SYSTEM_INCLUDES ${LIBSSH2_INCLUDE_DIRS})
- list(APPEND LIBGIT2_LIBS ${LIBSSH2_LIBRARIES})
+ list(APPEND LIBGIT2_SYSTEM_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)
@@ -31,9 +31,9 @@ endif()
if(WIN32 AND EMBED_SSH_PATH)
file(GLOB SSH_SRC "${EMBED_SSH_PATH}/src/*.c")
list(SORT SSH_SRC)
- list(APPEND LIBGIT2_OBJECTS ${SSH_SRC})
+ list(APPEND LIBGIT2_DEPENDENCY_OBJECTS ${SSH_SRC})
- list(APPEND LIBGIT2_INCLUDES "${EMBED_SSH_PATH}/include")
+ list(APPEND LIBGIT2_DEPENDENCY_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()
diff --git a/cmake/SelectWinHTTP.cmake b/cmake/SelectWinHTTP.cmake
index a4110045f..1d950c900 100644
--- a/cmake/SelectWinHTTP.cmake
+++ b/cmake/SelectWinHTTP.cmake
@@ -5,13 +5,13 @@ if(WIN32 AND WINHTTP)
# we have to include a private header and generate our own import library
if(MINGW)
add_subdirectory("${libgit2_SOURCE_DIR}/deps/winhttp" "${libgit2_BINARY_DIR}/deps/winhttp")
- list(APPEND LIBGIT2_LIBS winhttp)
+ list(APPEND LIBGIT2_SYSTEM_LIBS winhttp)
list(APPEND LIBGIT2_DEPENDENCY_INCLUDES "${libgit2_SOURCE_DIR}/deps/winhttp")
else()
- list(APPEND LIBGIT2_LIBS "winhttp")
+ list(APPEND LIBGIT2_SYSTEM_LIBS "winhttp")
list(APPEND LIBGIT2_PC_LIBS "-lwinhttp")
endif()
- list(APPEND LIBGIT2_LIBS "rpcrt4" "crypt32" "ole32")
+ list(APPEND LIBGIT2_SYSTEM_LIBS "rpcrt4" "crypt32" "ole32")
list(APPEND LIBGIT2_PC_LIBS "-lrpcrt4" "-lcrypt32" "-lole32")
endif()
diff --git a/cmake/SelectZlib.cmake b/cmake/SelectZlib.cmake
index 2dfc6c86e..e377d43b6 100644
--- a/cmake/SelectZlib.cmake
+++ b/cmake/SelectZlib.cmake
@@ -10,7 +10,7 @@ if(USE_BUNDLED_ZLIB STREQUAL "OFF")
find_package(ZLIB)
if(ZLIB_FOUND)
list(APPEND LIBGIT2_SYSTEM_INCLUDES ${ZLIB_INCLUDE_DIRS})
- list(APPEND LIBGIT2_LIBS ${ZLIB_LIBRARIES})
+ list(APPEND LIBGIT2_SYSTEM_LIBS ${ZLIB_LIBRARIES})
if(APPLE OR CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
list(APPEND LIBGIT2_PC_LIBS "-lz")
else()
@@ -23,12 +23,12 @@ if(USE_BUNDLED_ZLIB STREQUAL "OFF")
endif()
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>)
+ list(APPEND LIBGIT2_DEPENDENCY_INCLUDES "${libgit2_SOURCE_DIR}/deps/chromium-zlib")
+ list(APPEND LIBGIT2_DEPENDENCY_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>)
+ list(APPEND LIBGIT2_DEPENDENCY_INCLUDES "${libgit2_SOURCE_DIR}/deps/zlib")
+ list(APPEND LIBGIT2_DEPENDENCY_OBJECTS $<TARGET_OBJECTS:zlib>)
add_feature_info(zlib ON "using bundled zlib")
endif()
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 4e7200ff6..e46f00926 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,7 +1,6 @@
-
-if(DEPRECATE_HARD)
- add_definitions(-DGIT_DEPRECATE_HARD)
-endif()
+#
+# Optional debugging functionality
+#
if(DEBUG_POOL)
set(GIT_DEBUG_POOL 1)
@@ -18,229 +17,51 @@ if(DEBUG_STRICT_OPEN)
endif()
add_feature_info(debugopen GIT_DEBUG_STRICT_OPEN "path validation in open")
-
-include(PkgBuildConfig)
-include(SanitizeBool)
-
-# 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 "")
-
-set(LIBGIT2_INCLUDES
- "${CMAKE_CURRENT_BINARY_DIR}"
- "${libgit2_SOURCE_DIR}/src/libgit2"
- "${libgit2_SOURCE_DIR}/src/util"
- "${libgit2_SOURCE_DIR}/include")
-set(LIBGIT2_SYSTEM_INCLUDES "")
-set(LIBGIT2_SYSTEM_LIBS "")
-
-if(HAVE_FUTIMENS)
- set(GIT_USE_FUTIMENS 1)
-endif ()
-add_feature_info(futimens GIT_USE_FUTIMENS "futimens support")
-
-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" GIT_QSORT_R_BSD)
-
-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" GIT_QSORT_R_GNU)
-
-check_function_exists(qsort_s GIT_QSORT_S)
-
-# Find required dependencies
-
-if(WIN32)
- list(APPEND LIBGIT2_SYSTEM_LIBS ws2_32)
-elseif(CMAKE_SYSTEM_NAME MATCHES "(Solaris|SunOS)")
- list(APPEND LIBGIT2_SYSTEM_LIBS socket nsl)
- list(APPEND LIBGIT2_PC_LIBS "-lsocket" "-lnsl")
-elseif(CMAKE_SYSTEM_NAME MATCHES "Haiku")
- list(APPEND LIBGIT2_SYSTEM_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_SYSTEM_LIBS rt)
- list(APPEND LIBGIT2_PC_LIBS "-lrt")
-endif()
-
-if(USE_THREADS)
- list(APPEND LIBGIT2_SYSTEM_LIBS ${CMAKE_THREAD_LIBS_INIT})
- list(APPEND LIBGIT2_PC_LIBS ${CMAKE_THREAD_LIBS_INIT})
-endif()
-add_feature_info(threadsafe USE_THREADS "threadsafe support")
-
-
-#if(WIN32 AND EMBED_SSH_PATH)
-# file(GLOB SRC_SSH "${EMBED_SSH_PATH}/src/*.c")
-# list(SORT SRC_SSH)
-# target_sources(git2internal PRIVATE ${SRC_SSH})
#
-# 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()
-
-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)
- add_subdirectory("${libgit2_SOURCE_DIR}/deps/winhttp" "${libgit2_BINARY_DIR}/deps/winhttp")
- list(APPEND LIBGIT2_SYSTEM_LIBS winhttp)
- list(APPEND LIBGIT2_DEPENDENCY_INCLUDES "${libgit2_SOURCE_DIR}/deps/winhttp")
- else()
- list(APPEND LIBGIT2_SYSTEM_LIBS "winhttp")
- list(APPEND LIBGIT2_PC_LIBS "-lwinhttp")
- endif()
-
- list(APPEND LIBGIT2_SYSTEM_LIBS "rpcrt4" "crypt32" "ole32")
- list(APPEND LIBGIT2_PC_LIBS "-lrpcrt4" "-lcrypt32" "-lole32")
-endif()
+# Optional feature enablement
+#
+include(SelectGSSAPI)
include(SelectHTTPSBackend)
+include(SelectRegex)
+include(SelectZlib)
+include(SelectSSH)
+include(SelectHTTPParser)
+include(SelectWinHTTP)
-# Specify regular expression implementation
-find_package(PCRE)
+# nanosecond support in index
-if(REGEX_BACKEND STREQUAL "")
- check_symbol_exists(regcomp_l "regex.h;xlocale.h" HAVE_REGCOMP_L)
-
- if(HAVE_REGCOMP_L)
- set(REGEX_BACKEND "regcomp_l")
- elseif(PCRE_FOUND)
- set(REGEX_BACKEND "pcre")
- else()
- set(REGEX_BACKEND "builtin")
- endif()
+if(USE_NSEC)
+ set(GIT_USE_NSEC 1)
+ add_feature_info(nsec GIT_USE_NSEC "nanosecond resolution in file times")
endif()
-if(REGEX_BACKEND STREQUAL "regcomp_l")
- add_feature_info(regex ON "using system regcomp_l")
- set(GIT_REGEX_REGCOMP_L 1)
-elseif(REGEX_BACKEND STREQUAL "pcre2")
- find_package(PCRE2)
+# optional external dependency: pthreads
- if(NOT PCRE2_FOUND)
- MESSAGE(FATAL_ERROR "PCRE2 support was requested but not found")
+if(USE_THREADS)
+ if(NOT WIN32)
+ find_package(Threads REQUIRED)
+ list(APPEND LIBGIT2_SYSTEM_LIBS ${CMAKE_THREAD_LIBS_INIT})
+ list(APPEND LIBGIT2_PC_LIBS ${CMAKE_THREAD_LIBS_INIT})
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_SYSTEM_LIBS ${PCRE2_LIBRARIES})
- list(APPEND LIBGIT2_PC_REQUIRES "libpcre2-8")
-elseif(REGEX_BACKEND STREQUAL "pcre")
- add_feature_info(regex ON "using system PCRE")
- set(GIT_REGEX_PCRE 1)
-
- list(APPEND LIBGIT2_SYSTEM_INCLUDES ${PCRE_INCLUDE_DIRS})
- list(APPEND LIBGIT2_SYSTEM_LIBS ${PCRE_LIBRARIES})
- list(APPEND LIBGIT2_PC_REQUIRES "libpcre")
-elseif(REGEX_BACKEND STREQUAL "regcomp")
- add_feature_info(regex ON "using system regcomp")
- set(GIT_REGEX_REGCOMP 1)
-elseif(REGEX_BACKEND STREQUAL "builtin")
- add_feature_info(regex ON "using bundled PCRE")
- set(GIT_REGEX_BUILTIN 1)
-
- add_subdirectory("${libgit2_SOURCE_DIR}/deps/pcre" "${libgit2_BINARY_DIR}/deps/pcre")
- list(APPEND LIBGIT2_DEPENDENCY_INCLUDES "${libgit2_SOURCE_DIR}/deps/pcre")
- list(APPEND LIBGIT2_DEPENDENCY_OBJECTS $<TARGET_OBJECTS:pcre>)
-else()
- message(FATAL_ERROR "The REGEX_BACKEND option provided is not supported")
+ set(GIT_THREADS 1)
endif()
+add_feature_info(threadsafe GIT_THREADS "threadsafe support")
-# Optional external dependency: http-parser
-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_SYSTEM_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()
-else()
- message(STATUS "http-parser version 2 was not found or disabled; using bundled 3rd-party sources.")
- add_subdirectory("${libgit2_SOURCE_DIR}/deps/http-parser" "${libgit2_BINARY_DIR}/deps/http-parser")
- list(APPEND LIBGIT2_DEPENDENCY_INCLUDES "${libgit2_SOURCE_DIR}/deps/http-parser")
- list(APPEND LIBGIT2_DEPENDENCY_OBJECTS "$<TARGET_OBJECTS:http-parser>")
- add_feature_info(http-parser ON "http-parser support (bundled)")
-endif()
+# optional external dependency: iconv
-# Optional external dependency: zlib
-SanitizeBool(USE_BUNDLED_ZLIB)
-if(USE_BUNDLED_ZLIB STREQUAL ON)
- set(USE_BUNDLED_ZLIB "Bundled")
+if(USE_ICONV)
+ find_package(Iconv REQUIRED)
+ list(APPEND LIBGIT2_SYSTEM_INCLUDES ${ICONV_INCLUDE_DIR})
+ list(APPEND LIBGIT2_SYSTEM_LIBS ${ICONV_LIBRARIES})
+ list(APPEND LIBGIT2_PC_LIBS ${ICONV_LIBRARIES})
+ set(GIT_USE_ICONV 1)
endif()
+add_feature_info(iconv GIT_USE_ICONV "iconv encoding conversion support")
-if(USE_BUNDLED_ZLIB STREQUAL "OFF")
- find_package(ZLIB)
- if(ZLIB_FOUND)
- list(APPEND LIBGIT2_SYSTEM_INCLUDES ${ZLIB_INCLUDE_DIRS})
- list(APPEND LIBGIT2_SYSTEM_LIBS ${ZLIB_LIBRARIES})
- if(APPLE OR CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
- list(APPEND LIBGIT2_PC_LIBS "-lz")
- else()
- list(APPEND LIBGIT2_PC_REQUIRES "zlib")
- endif()
- add_feature_info(zlib ON "using system zlib")
- else()
- message(STATUS "zlib was not found; using bundled 3rd-party sources." )
- endif()
-endif()
-if(USE_BUNDLED_ZLIB STREQUAL "Chromium")
- add_subdirectory("${libgit2_SOURCE_DIR}/deps/chromium-zlib" "${libgit2_BINARY_DIR}/deps/chromium-zlib")
- list(APPEND LIBGIT2_DEPENDENCY_INCLUDES "${libgit2_SOURCE_DIR}/deps/chromium-zlib")
- list(APPEND LIBGIT2_DEPENDENCY_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_DEPENDENCY_INCLUDES "${libgit2_SOURCE_DIR}/deps/zlib")
- list(APPEND LIBGIT2_DEPENDENCY_OBJECTS $<TARGET_OBJECTS:zlib>)
- add_feature_info(zlib ON "using bundled zlib")
-endif()
+# optional bundled dependency: ntlmclient
-# Optional external dependency: libssh2
-if(USE_SSH)
- find_pkglibraries(LIBSSH2 libssh2)
- 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()
-endif()
-if(LIBSSH2_FOUND)
- set(GIT_SSH 1)
- list(APPEND LIBGIT2_SYSTEM_INCLUDES ${LIBSSH2_INCLUDE_DIRS})
- list(APPEND LIBGIT2_SYSTEM_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()
-add_feature_info(SSH GIT_SSH "SSH transport support")
-
-# Optional external dependency: ntlmclient
if(USE_NTLMCLIENT)
set(GIT_NTLM 1)
add_subdirectory("${libgit2_SOURCE_DIR}/deps/ntlmclient" "${libgit2_BINARY_DIR}/deps/ntlmclient")
@@ -249,35 +70,42 @@ if(USE_NTLMCLIENT)
endif()
add_feature_info(ntlmclient GIT_NTLM "NTLM authentication support for Unix")
-# Optional external dependency: GSSAPI
+#
+# Platform support identification
+#
-include(SelectGSSAPI)
+# futimes/futimens
-# Optional external dependency: iconv
-if(USE_ICONV)
- find_package(Iconv)
-endif()
-if(ICONV_FOUND)
- set(GIT_USE_ICONV 1)
- list(APPEND LIBGIT2_SYSTEM_INCLUDES ${ICONV_INCLUDE_DIR})
- list(APPEND LIBGIT2_SYSTEM_LIBS ${ICONV_LIBRARIES})
- list(APPEND LIBGIT2_PC_LIBS ${ICONV_LIBRARIES})
+if(HAVE_FUTIMENS)
+ set(GIT_USE_FUTIMENS 1)
endif()
-add_feature_info(iconv GIT_USE_ICONV "iconv encoding conversion support")
+# qsort
-if(USE_THREADS)
- if(NOT WIN32)
- find_package(Threads REQUIRED)
- endif()
+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" GIT_QSORT_R_BSD)
- set(GIT_THREADS 1)
-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" GIT_QSORT_R_GNU)
-if(USE_NSEC)
- set(GIT_USE_NSEC 1)
+check_function_exists(qsort_s GIT_QSORT_S)
+
+# 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()
+# High-resolution stat support
+
if(HAVE_STRUCT_STAT_ST_MTIM)
set(GIT_USE_STAT_MTIM 1)
elseif(HAVE_STRUCT_STAT_ST_MTIMESPEC)
@@ -286,106 +114,40 @@ elseif(HAVE_STRUCT_STAT_ST_MTIME_NSEC)
set(GIT_USE_STAT_MTIME_NSEC 1)
endif()
-# Collect sourcefiles
-file(GLOB SRC_H
- "${libgit2_SOURCE_DIR}/include/git2.h"
- "${libgit2_SOURCE_DIR}/include/git2/*.h"
- "${libgit2_SOURCE_DIR}/include/git2/sys/*.h")
-list(SORT SRC_H)
-#target_sources(git2internal PRIVATE ${SRC_H})
-
-file(GLOB SRC_GIT2 libgit2/*.c libgit2/*.h
- libgit2/streams/*.c libgit2/streams/*.h
- libgit2/transports/*.c libgit2/transports/*.h
- libgit2/xdiff/*.c libgit2/xdiff/*.h)
-list(SORT SRC_GIT2)
-#target_sources(git2internal PRIVATE ${SRC_GIT2})
+# realtime support
-# 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)")
+check_library_exists(rt clock_gettime "time.h" NEED_LIBRT)
+if(NEED_LIBRT)
+ list(APPEND LIBGIT2_SYSTEM_LIBS rt)
+ list(APPEND LIBGIT2_PC_LIBS "-lrt")
endif()
-configure_file(libgit2/features.h.in git2/sys/features.h)
+# platform libraries
-#ide_split_sources(git2internal)
-#list(APPEND LIBGIT2_OBJECTS $<TARGET_OBJECTS:git2internal>)
-#
-#target_include_directories(git2internal PRIVATE ${LIBGIT2_INCLUDES} PUBLIC ${libgit2_SOURCE_DIR}/include)
-#target_include_directories(git2internal SYSTEM PRIVATE ${LIBGIT2_SYSTEM_INCLUDES})
-#
-#set(LIBGIT2_OBJECTS ${LIBGIT2_OBJECTS} PARENT_SCOPE)
-#set(LIBGIT2_DEPENDENCY_INCLUDES ${LIBGIT2_DEPENDENCY_INCLUDES} PARENT_SCOPE)
-#set(LIBGIT2_SYSTEM_INCLUDES ${LIBGIT2_SYSTEM_INCLUDES} PARENT_SCOPE)
-#set(LIBGIT2_SYSTEM_LIBS ${LIBGIT2_SYSTEM_LIBS} PARENT_SCOPE)
-
-#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()
-
-# Compile and link libgit2
-#add_library(git2 ${WIN_RC} ${LIBGIT2_OBJECTS})
-#target_link_libraries(git2 ${LIBGIT2_SYSTEM_LIBS})
-
-#set_target_properties(git2 PROPERTIES C_STANDARD 90)
-#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})
-
-# 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")
+if(WIN32)
+ list(APPEND LIBGIT2_SYSTEM_LIBS ws2_32)
endif()
-ide_split_sources(git2)
-
-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)
-# target_compile_definitions(git2 PRIVATE LIBGIT2_FILENAME=\"${LIBGIT2_FILENAME}\")
-# set_target_properties(git2 PROPERTIES OUTPUT_NAME ${LIBGIT2_FILENAME})
-# elseif(DEFINED LIBGIT2_PREFIX)
-# set_target_properties(git2 PROPERTIES PREFIX "${LIBGIT2_PREFIX}")
-# endif()
+if(CMAKE_SYSTEM_NAME MATCHES "(Solaris|SunOS)")
+ list(APPEND LIBGIT2_SYSTEM_LIBS socket nsl)
+ list(APPEND LIBGIT2_PC_LIBS "-lsocket" "-lnsl")
endif()
-pkg_build_config(NAME libgit2
- VERSION ${libgit2_VERSION}
- DESCRIPTION "The git library, take 2"
- LIBS_SELF git2
- PRIVATE_LIBS ${LIBGIT2_PC_LIBS}
- REQUIRES ${LIBGIT2_PC_REQUIRES}
-)
-
-if(MSVC_IDE)
- # Precompiled headers
- set_target_properties(git2 PROPERTIES COMPILE_FLAGS "/Yuprecompiled.h /FIprecompiled.h")
- set_source_files_properties(libgit2/win32/precompiled.c COMPILE_FLAGS "/Ycprecompiled.h")
+if(CMAKE_SYSTEM_NAME MATCHES "Haiku")
+ list(APPEND LIBGIT2_SYSTEM_LIBS network)
+ list(APPEND LIBGIT2_PC_LIBS "-lnetwork")
endif()
-# Install
-#install(TARGETS git2
-# RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
-# LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
-# ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
-#)
-#install(DIRECTORY ${libgit2_SOURCE_DIR}/include/git2 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
-#install(FILES ${libgit2_SOURCE_DIR}/include/git2.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
-
-# export these variables for the test framework; it links our object
-# files directly (instead of linking to libgit2.so) so that it can
-# test private and internal functions.
+#
+# Configuration summary
+#
+
+configure_file(libgit2/features.h.in git2/sys/features.h)
+
+#
+# Exports for peer projects (tests)
+#
+
set_property(GLOBAL PROPERTY libgit2_dependency_includes ${LIBGIT2_DEPENDENCY_INCLUDES})
set_property(GLOBAL PROPERTY libgit2_dependency_objects ${LIBGIT2_DEPENDENCY_OBJECTS})
set_property(GLOBAL PROPERTY libgit2_system_includes ${LIBGIT2_SYSTEM_INCLUDES})
diff --git a/src/libgit2/CMakeLists.txt b/src/libgit2/CMakeLists.txt
index 0336ef16e..594feb69f 100644
--- a/src/libgit2/CMakeLists.txt
+++ b/src/libgit2/CMakeLists.txt
@@ -22,15 +22,6 @@ file(GLOB LIBGIT2_SRC *.c *.h
list(SORT LIBGIT2_SRC)
#
-# Load dependency information
-#
-
-get_property(LIBGIT2_DEPENDENCY_INCLUDES GLOBAL PROPERTY libgit2_dependency_includes)
-get_property(LIBGIT2_DEPENDENCY_OBJECTS GLOBAL PROPERTY libgit2_dependency_objects)
-get_property(LIBGIT2_SYSTEM_INCLUDES GLOBAL PROPERTY libgit2_system_includes)
-get_property(LIBGIT2_SYSTEM_LIBS GLOBAL PROPERTY libgit2_system_libs)
-
-#
# Platform specific options
#
@@ -47,6 +38,12 @@ if(MSVC)
set_source_files_properties(xdiff/xutils.c PROPERTIES COMPILE_FLAGS -WX-)
endif()
+if(MSVC_IDE)
+ # precompiled headers
+ set_target_properties(git2 PROPERTIES COMPILE_FLAGS "/Yuprecompiled.h /FIprecompiled.h")
+ set_source_files_properties(libgit2/win32/precompiled.c COMPILE_FLAGS "/Ycprecompiled.h")
+endif()
+
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)
@@ -75,3 +72,32 @@ target_include_directories(libgit2 SYSTEM PRIVATE ${LIBGIT2_SYSTEM_INCLUDES})
add_library(libgit2public $<TARGET_OBJECTS:libgit2> $<TARGET_OBJECTS:util> ${LIBGIT2_DEPENDENCY_OBJECTS})
target_link_libraries(libgit2public ${LIBGIT2_SYSTEM_LIBS})
+
+set_target_properties(libgit2public PROPERTIES OUTPUT_NAME ${LIBGIT2_FILENAME})
+
+set_target_properties(libgit2public PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${libgit2_BINARY_DIR})
+set_target_properties(libgit2public PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${libgit2_BINARY_DIR})
+set_target_properties(libgit2public PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${libgit2_BINARY_DIR})
+
+if(SONAME)
+ set_target_properties(libgit2public PROPERTIES VERSION ${libgit2_VERSION})
+ set_target_properties(libgit2public PROPERTIES SOVERSION "${libgit2_VERSION_MAJOR}.${libgit2_VERSION_MINOR}")
+endif()
+
+pkg_build_config(NAME libgit2
+ VERSION ${libgit2_VERSION}
+ DESCRIPTION "A cross-platform linkable library implementation of Git"
+ LIBS_SELF ${LIBGIT2_FILENAME}
+ PRIVATE_LIBS ${LIBGIT2_PC_LIBS}
+ REQUIRES ${LIBGIT2_PC_REQUIRES})
+
+#
+# Installation
+#
+
+install(TARGETS libgit2public
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
+install(DIRECTORY ${libgit2_SOURCE_DIR}/include/git2 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+install(FILES ${libgit2_SOURCE_DIR}/include/git2.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})