Unverified Commit 23c5c315 by Edward Thomson Committed by GitHub

Merge pull request #6114 from libgit2/ethomson/cmake5

cmake: further refactorings
parents b608af6c 2c154145
...@@ -40,7 +40,7 @@ option(DEBUG_STRICT_OPEN "Enable path validation in open" ...@@ -40,7 +40,7 @@ option(DEBUG_STRICT_OPEN "Enable path validation in open"
# Output options # Output options
option(SONAME "Set the (SO)VERSION of the target" ON) 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) option(DEPRECATE_HARD "Do not include deprecated functions in the library" OFF)
# Compilation options # Compilation options
......
...@@ -3,28 +3,28 @@ ...@@ -3,28 +3,28 @@
# <flag> - the compiler flag to test # <flag> - the compiler flag to test
# This internally calls the CHECK_C_COMPILER_FLAG macro. # This internally calls the CHECK_C_COMPILER_FLAG macro.
INCLUDE(CheckCCompilerFlag) include(CheckCCompilerFlag)
MACRO(ADD_C_FLAG _FLAG) macro(ADD_C_FLAG _FLAG)
STRING(TOUPPER ${_FLAG} UPCASE) string(TOUPPER ${_FLAG} UPCASE)
STRING(REGEX REPLACE "[-=]" "_" UPCASE_PRETTY ${UPCASE}) string(REGEX REPLACE "[-=]" "_" UPCASE_PRETTY ${UPCASE})
STRING(REGEX REPLACE "^_+" "" UPCASE_PRETTY ${UPCASE_PRETTY}) string(REGEX REPLACE "^_+" "" UPCASE_PRETTY ${UPCASE_PRETTY})
CHECK_C_COMPILER_FLAG(${_FLAG} IS_${UPCASE_PRETTY}_SUPPORTED) check_c_compiler_flag(${_FLAG} IS_${UPCASE_PRETTY}_SUPPORTED)
IF(IS_${UPCASE_PRETTY}_SUPPORTED) if(IS_${UPCASE_PRETTY}_SUPPORTED)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_FLAG}") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_FLAG}")
ELSE() else()
MESSAGE(FATAL_ERROR "Required flag ${_FLAG} is not supported") message(FATAL_ERROR "Required flag ${_FLAG} is not supported")
ENDIF() endif()
ENDMACRO() endmacro()
MACRO(ADD_C_FLAG_IF_SUPPORTED _FLAG) macro(ADD_C_FLAG_IF_SUPPORTED _FLAG)
STRING(TOUPPER ${_FLAG} UPCASE) string(TOUPPER ${_FLAG} UPCASE)
STRING(REGEX REPLACE "[-=]" "_" UPCASE_PRETTY ${UPCASE}) string(REGEX REPLACE "[-=]" "_" UPCASE_PRETTY ${UPCASE})
STRING(REGEX REPLACE "^_+" "" UPCASE_PRETTY ${UPCASE_PRETTY}) string(REGEX REPLACE "^_+" "" UPCASE_PRETTY ${UPCASE_PRETTY})
CHECK_C_COMPILER_FLAG(${_FLAG} IS_${UPCASE_PRETTY}_SUPPORTED) check_c_compiler_flag(${_FLAG} IS_${UPCASE_PRETTY}_SUPPORTED)
IF(IS_${UPCASE_PRETTY}_SUPPORTED) if(IS_${UPCASE_PRETTY}_SUPPORTED)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_FLAG}") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_FLAG}")
ENDIF() endif()
ENDMACRO() endmacro()
MACRO(ENABLE_WARNINGS flag) macro(ENABLE_WARNINGS flag)
ADD_C_FLAG_IF_SUPPORTED(-W${flag}) add_c_flag_if_supported(-W${flag})
ENDMACRO() endmacro()
MACRO(DISABLE_WARNINGS flag) macro(DISABLE_WARNINGS flag)
ADD_C_FLAG_IF_SUPPORTED(-Wno-${flag}) add_c_flag_if_supported(-Wno-${flag})
ENDMACRO() endmacro()
IF(ENABLE_WERROR) if(ENABLE_WERROR)
IF(MSVC) if(MSVC)
ADD_COMPILE_OPTIONS(-WX) add_compile_options(-WX)
ELSE() else()
ADD_C_FLAG_IF_SUPPORTED(-Werror) add_c_flag_if_supported(-Werror)
ENDIF() endif()
ENDIF() endif()
...@@ -6,21 +6,21 @@ ...@@ -6,21 +6,21 @@
# COREFOUNDATION_LDFLAGS # COREFOUNDATION_LDFLAGS
# #
FIND_PATH(COREFOUNDATION_INCLUDE_DIR NAMES CoreFoundation.h) find_path(COREFOUNDATION_INCLUDE_DIR NAMES CoreFoundation.h)
FIND_LIBRARY(COREFOUNDATION_LIBRARIES NAMES CoreFoundation) find_library(COREFOUNDATION_LIBRARIES NAMES CoreFoundation)
IF (COREFOUNDATION_INCLUDE_DIR AND COREFOUNDATION_LIBRARIES) if(COREFOUNDATION_INCLUDE_DIR AND COREFOUNDATION_LIBRARIES)
IF (NOT CoreFoundation_FIND_QUIETLY) if(NOT CoreFoundation_FIND_QUIETLY)
MESSAGE(STATUS "Found CoreFoundation ${COREFOUNDATION_LIBRARIES}") message(STATUS "Found CoreFoundation ${COREFOUNDATION_LIBRARIES}")
ENDIF() endif()
SET(COREFOUNDATION_FOUND TRUE) set(COREFOUNDATION_FOUND TRUE)
SET(COREFOUNDATION_LDFLAGS "-framework CoreFoundation") set(COREFOUNDATION_LDFLAGS "-framework CoreFoundation")
ENDIF () endif()
IF (CoreFoundation_FIND_REQUIRED AND NOT COREFOUNDATION_FOUND) if(CoreFoundation_FIND_REQUIRED AND NOT COREFOUNDATION_FOUND)
MESSAGE(FATAL_ERROR "CoreFoundation not found") message(FATAL_ERROR "CoreFoundation not found")
ENDIF() endif()
MARK_AS_ADVANCED( mark_as_advanced(
COREFOUNDATION_INCLUDE_DIR COREFOUNDATION_INCLUDE_DIR
COREFOUNDATION_LIBRARIES COREFOUNDATION_LIBRARIES
) )
...@@ -7,21 +7,21 @@ ...@@ -7,21 +7,21 @@
# GSSFRAMEWORK_LDFLAGS # GSSFRAMEWORK_LDFLAGS
# #
FIND_PATH(GSSFRAMEWORK_INCLUDE_DIR NAMES GSS.h) find_path(GSSFRAMEWORK_INCLUDE_DIR NAMES GSS.h)
FIND_LIBRARY(GSSFRAMEWORK_LIBRARIES NAMES GSS) find_library(GSSFRAMEWORK_LIBRARIES NAMES GSS)
IF (GSSFRAMEWORK_INCLUDE_DIR AND GSSFRAMEWORK_LIBRARIES) if(GSSFRAMEWORK_INCLUDE_DIR AND GSSFRAMEWORK_LIBRARIES)
IF (NOT CoreFoundation_FIND_QUIETLY) if(NOT CoreFoundation_FIND_QUIETLY)
MESSAGE(STATUS "Found GSS.framework ${GSSFRAMEWORK_LIBRARIES}") message(STATUS "Found GSS.framework ${GSSFRAMEWORK_LIBRARIES}")
ENDIF() endif()
SET(GSSFRAMEWORK_FOUND TRUE) set(GSSFRAMEWORK_FOUND TRUE)
SET(GSSFRAMEWORK_LDFLAGS "-framework GSS") set(GSSFRAMEWORK_LDFLAGS "-framework GSS")
ENDIF () endif()
IF (GSS_FIND_REQUIRED AND NOT GSSFRAMEWORK_FOUND) if(GSS_FIND_REQUIRED AND NOT GSSFRAMEWORK_FOUND)
MESSAGE(FATAL_ERROR "CoreFoundation not found") message(FATAL_ERROR "CoreFoundation not found")
ENDIF() endif()
MARK_AS_ADVANCED( mark_as_advanced(
GSSFRAMEWORK_INCLUDE_DIR GSSFRAMEWORK_INCLUDE_DIR
GSSFRAMEWORK_LIBRARIES GSSFRAMEWORK_LIBRARIES
GSSFRAMEWORK_LDFLAGS GSSFRAMEWORK_LDFLAGS
......
...@@ -10,30 +10,30 @@ ...@@ -10,30 +10,30 @@
# HTTP_PARSER_VERSION_STRING - the version of http-parser found # HTTP_PARSER_VERSION_STRING - the version of http-parser found
# Find the header and library # Find the header and library
FIND_PATH(HTTP_PARSER_INCLUDE_DIR NAMES http_parser.h) find_path(HTTP_PARSER_INCLUDE_DIR NAMES http_parser.h)
FIND_LIBRARY(HTTP_PARSER_LIBRARY NAMES http_parser libhttp_parser) find_library(HTTP_PARSER_LIBRARY NAMES http_parser libhttp_parser)
# Found the header, read version # Found the header, read version
if (HTTP_PARSER_INCLUDE_DIR AND EXISTS "${HTTP_PARSER_INCLUDE_DIR}/http_parser.h") if(HTTP_PARSER_INCLUDE_DIR AND EXISTS "${HTTP_PARSER_INCLUDE_DIR}/http_parser.h")
FILE(READ "${HTTP_PARSER_INCLUDE_DIR}/http_parser.h" HTTP_PARSER_H) file(READ "${HTTP_PARSER_INCLUDE_DIR}/http_parser.h" HTTP_PARSER_H)
IF (HTTP_PARSER_H) if(HTTP_PARSER_H)
STRING(REGEX REPLACE ".*#define[\t ]+HTTP_PARSER_VERSION_MAJOR[\t ]+([0-9]+).*" "\\1" HTTP_PARSER_VERSION_MAJOR "${HTTP_PARSER_H}") string(REGEX REPLACE ".*#define[\t ]+HTTP_PARSER_VERSION_MAJOR[\t ]+([0-9]+).*" "\\1" HTTP_PARSER_VERSION_MAJOR "${HTTP_PARSER_H}")
STRING(REGEX REPLACE ".*#define[\t ]+HTTP_PARSER_VERSION_MINOR[\t ]+([0-9]+).*" "\\1" HTTP_PARSER_VERSION_MINOR "${HTTP_PARSER_H}") string(REGEX REPLACE ".*#define[\t ]+HTTP_PARSER_VERSION_MINOR[\t ]+([0-9]+).*" "\\1" HTTP_PARSER_VERSION_MINOR "${HTTP_PARSER_H}")
SET(HTTP_PARSER_VERSION_STRING "${HTTP_PARSER_VERSION_MAJOR}.${HTTP_PARSER_VERSION_MINOR}") set(HTTP_PARSER_VERSION_STRING "${HTTP_PARSER_VERSION_MAJOR}.${HTTP_PARSER_VERSION_MINOR}")
ENDIF() endif()
UNSET(HTTP_PARSER_H) unset(HTTP_PARSER_H)
ENDIF() endif()
# Handle the QUIETLY and REQUIRED arguments and set HTTP_PARSER_FOUND # Handle the QUIETLY and REQUIRED arguments and set HTTP_PARSER_FOUND
# to TRUE if all listed variables are TRUE # to TRUE if all listed variables are TRUE
INCLUDE(FindPackageHandleStandardArgs) include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(HTTP_Parser REQUIRED_VARS HTTP_PARSER_INCLUDE_DIR HTTP_PARSER_LIBRARY) find_package_handle_standard_args(HTTP_Parser REQUIRED_VARS HTTP_PARSER_INCLUDE_DIR HTTP_PARSER_LIBRARY)
# Hide advanced variables # Hide advanced variables
MARK_AS_ADVANCED(HTTP_PARSER_INCLUDE_DIR HTTP_PARSER_LIBRARY) mark_as_advanced(HTTP_PARSER_INCLUDE_DIR HTTP_PARSER_LIBRARY)
# Set standard variables # Set standard variables
IF (HTTP_PARSER_FOUND) if(HTTP_PARSER_FOUND)
SET(HTTP_PARSER_LIBRARIES ${HTTP_PARSER_LIBRARY}) set(HTTP_PARSER_LIBRARIES ${HTTP_PARSER_LIBRARY})
set(HTTP_PARSER_INCLUDE_DIRS ${HTTP_PARSER_INCLUDE_DIR}) set(HTTP_PARSER_INCLUDE_DIRS ${HTTP_PARSER_INCLUDE_DIR})
ENDIF() endif()
...@@ -6,40 +6,40 @@ ...@@ -6,40 +6,40 @@
# ICONV_LIBRARIES - Link these to use Iconv # ICONV_LIBRARIES - Link these to use Iconv
# #
IF(ICONV_INCLUDE_DIR AND ICONV_LIBRARIES) if(ICONV_INCLUDE_DIR AND ICONV_LIBRARIES)
# Already in cache, be silent # Already in cache, be silent
SET(ICONV_FIND_QUIETLY TRUE) set(ICONV_FIND_QUIETLY TRUE)
ENDIF() endif()
FIND_PATH(ICONV_INCLUDE_DIR iconv.h) find_path(ICONV_INCLUDE_DIR iconv.h)
CHECK_FUNCTION_EXISTS(iconv_open libc_has_iconv) check_function_exists(iconv_open libc_has_iconv)
FIND_LIBRARY(iconv_lib NAMES iconv libiconv libiconv-2 c) find_library(iconv_lib NAMES iconv libiconv libiconv-2 c)
IF(ICONV_INCLUDE_DIR AND libc_has_iconv) if(ICONV_INCLUDE_DIR AND libc_has_iconv)
SET(ICONV_FOUND TRUE) set(ICONV_FOUND TRUE)
SET(ICONV_LIBRARIES "") set(ICONV_LIBRARIES "")
IF(NOT ICONV_FIND_QUIETLY) if(NOT ICONV_FIND_QUIETLY)
MESSAGE(STATUS "Found Iconv: provided by libc") message(STATUS "Found Iconv: provided by libc")
ENDIF(NOT ICONV_FIND_QUIETLY) endif(NOT ICONV_FIND_QUIETLY)
ELSEIF(ICONV_INCLUDE_DIR AND iconv_lib) elseif(ICONV_INCLUDE_DIR AND iconv_lib)
SET(ICONV_FOUND TRUE) set(ICONV_FOUND TRUE)
# split iconv into -L and -l linker options, so we can # split iconv into -L and -l linker options, so we can
# set them for pkg-config # set them for pkg-config
GET_FILENAME_COMPONENT(iconv_path ${iconv_lib} PATH) get_filename_component(iconv_path ${iconv_lib} PATH)
GET_FILENAME_COMPONENT(iconv_name ${iconv_lib} NAME_WE) get_filename_component(iconv_name ${iconv_lib} NAME_WE)
STRING(REGEX REPLACE "^lib" "" iconv_name ${iconv_name}) string(REGEX REPLACE "^lib" "" iconv_name ${iconv_name})
SET(ICONV_LIBRARIES "-L${iconv_path} -l${iconv_name}") set(ICONV_LIBRARIES "-L${iconv_path} -l${iconv_name}")
IF(NOT ICONV_FIND_QUIETLY) if(NOT ICONV_FIND_QUIETLY)
MESSAGE(STATUS "Found Iconv: ${ICONV_LIBRARIES}") message(STATUS "Found Iconv: ${ICONV_LIBRARIES}")
ENDIF(NOT ICONV_FIND_QUIETLY) endif()
ELSE() else()
IF(Iconv_FIND_REQUIRED) if(Iconv_FIND_REQUIRED)
MESSAGE(FATAL_ERROR "Could not find Iconv") message(FATAL_ERROR "Could not find Iconv")
ENDIF(Iconv_FIND_REQUIRED) endif(Iconv_FIND_REQUIRED)
ENDIF() endif()
MARK_AS_ADVANCED( mark_as_advanced(
ICONV_INCLUDE_DIR ICONV_INCLUDE_DIR
ICONV_LIBRARIES ICONV_LIBRARIES
) )
...@@ -2,12 +2,12 @@ ...@@ -2,12 +2,12 @@
# LIBSSH2_INCLUDE_DIR - the libssh2 include directory # LIBSSH2_INCLUDE_DIR - the libssh2 include directory
# LIBSSH2_LIBRARY - the libssh2 library name # LIBSSH2_LIBRARY - the libssh2 library name
FIND_PATH(LIBSSH2_INCLUDE_DIR libssh2.h) find_path(LIBSSH2_INCLUDE_DIR libssh2.h)
FIND_LIBRARY(LIBSSH2_LIBRARY NAMES ssh2 libssh2) find_library(LIBSSH2_LIBRARY NAMES ssh2 libssh2)
INCLUDE(FindPackageHandleStandardArgs) include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(LibSSH2 find_package_handle_standard_args(LibSSH2
REQUIRED_VARS LIBSSH2_LIBRARY LIBSSH2_INCLUDE_DIR) REQUIRED_VARS LIBSSH2_LIBRARY LIBSSH2_INCLUDE_DIR)
MARK_AS_ADVANCED(LIBSSH2_INCLUDE_DIR LIBSSH2_LIBRARY) mark_as_advanced(LIBSSH2_INCLUDE_DIR LIBSSH2_LIBRARY)
...@@ -16,23 +16,23 @@ ...@@ -16,23 +16,23 @@
# PCRE_FOUND - True if pcre found. # PCRE_FOUND - True if pcre found.
# Look for the header file. # Look for the header file.
FIND_PATH(PCRE_INCLUDE_DIR NAMES pcreposix.h) find_path(PCRE_INCLUDE_DIR NAMES pcreposix.h)
# Look for the library. # Look for the library.
FIND_LIBRARY(PCRE_LIBRARY NAMES pcre) find_library(PCRE_LIBRARY NAMES pcre)
FIND_LIBRARY(PCRE_POSIX_LIBRARY NAMES pcreposix) find_library(PCRE_POSIX_LIBRARY NAMES pcreposix)
# Handle the QUIETLY and REQUIRED arguments and set PCRE_FOUND to TRUE if all listed variables are TRUE. # Handle the QUIETLY and REQUIRED arguments and set PCRE_FOUND to TRUE if all listed variables are TRUE.
INCLUDE(FindPackageHandleStandardArgs) include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(PCRE DEFAULT_MSG PCRE_LIBRARY PCRE_POSIX_LIBRARY PCRE_INCLUDE_DIR) find_package_handle_standard_args(PCRE DEFAULT_MSG PCRE_LIBRARY PCRE_POSIX_LIBRARY PCRE_INCLUDE_DIR)
# Copy the results to the output variables. # Copy the results to the output variables.
IF(PCRE_FOUND) if(PCRE_FOUND)
SET(PCRE_LIBRARIES ${PCRE_LIBRARY} ${PCRE_POSIX_LIBRARY}) set(PCRE_LIBRARIES ${PCRE_LIBRARY} ${PCRE_POSIX_LIBRARY})
SET(PCRE_INCLUDE_DIRS ${PCRE_INCLUDE_DIR}) set(PCRE_INCLUDE_DIRS ${PCRE_INCLUDE_DIR})
ELSE(PCRE_FOUND) else(PCRE_FOUND)
SET(PCRE_LIBRARIES) set(PCRE_LIBRARIES)
SET(PCRE_INCLUDE_DIRS) set(PCRE_INCLUDE_DIRS)
ENDIF(PCRE_FOUND) endif()
MARK_AS_ADVANCED(PCRE_INCLUDE_DIRS PCRE_LIBRARIES) mark_as_advanced(PCRE_INCLUDE_DIRS PCRE_LIBRARIES)
...@@ -16,22 +16,22 @@ ...@@ -16,22 +16,22 @@
# PCRE2_FOUND - True if pcre found. # PCRE2_FOUND - True if pcre found.
# Look for the header file. # Look for the header file.
FIND_PATH(PCRE2_INCLUDE_DIR NAMES pcre2posix.h) find_path(PCRE2_INCLUDE_DIR NAMES pcre2posix.h)
# Look for the library. # Look for the library.
FIND_LIBRARY(PCRE2_LIBRARY NAMES pcre2-8) find_library(PCRE2_LIBRARY NAMES pcre2-8)
# Handle the QUIETLY and REQUIRED arguments and set PCRE2_FOUND to TRUE if all listed variables are TRUE. # Handle the QUIETLY and REQUIRED arguments and set PCRE2_FOUND to TRUE if all listed variables are TRUE.
INCLUDE(FindPackageHandleStandardArgs) include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(PCRE2 DEFAULT_MSG PCRE2_LIBRARY PCRE2_INCLUDE_DIR) find_package_handle_standard_args(PCRE2 DEFAULT_MSG PCRE2_LIBRARY PCRE2_INCLUDE_DIR)
# Copy the results to the output variables. # Copy the results to the output variables.
IF(PCRE2_FOUND) if(PCRE2_FOUND)
SET(PCRE2_LIBRARIES ${PCRE2_LIBRARY}) set(PCRE2_LIBRARIES ${PCRE2_LIBRARY})
SET(PCRE2_INCLUDE_DIRS ${PCRE2_INCLUDE_DIR}) set(PCRE2_INCLUDE_DIRS ${PCRE2_INCLUDE_DIR})
ELSE(PCRE2_FOUND) else(PCRE2_FOUND)
SET(PCRE2_LIBRARIES) set(PCRE2_LIBRARIES)
SET(PCRE2_INCLUDE_DIRS) set(PCRE2_INCLUDE_DIRS)
ENDIF(PCRE2_FOUND) endif()
MARK_AS_ADVANCED(PCRE2_INCLUDE_DIRS PCRE2_LIBRARIES) mark_as_advanced(PCRE2_INCLUDE_DIRS PCRE2_LIBRARIES)
INCLUDE(FindPkgConfig) include(FindPkgConfig)
# This function will find and set up a pkg-config based module. # This function will find and set up a pkg-config based module.
# If a pc-file was found, it will resolve library paths to # If a pc-file was found, it will resolve library paths to
# absolute paths. Furthermore, the function will automatically # absolute paths. Furthermore, the function will automatically
# fall back to use static libraries in case no dynamic libraries # fall back to use static libraries in case no dynamic libraries
# were found. # were found.
FUNCTION(FIND_PKGLIBRARIES prefix package) function(FIND_PKGLIBRARIES prefix package)
PKG_CHECK_MODULES(${prefix} ${package}) pkg_check_modules(${prefix} ${package})
IF(NOT ${prefix}_FOUND) if(NOT ${prefix}_FOUND)
RETURN() return()
ENDIF() endif()
FOREACH(LIBRARY ${${prefix}_LIBRARIES}) foreach(LIBRARY ${${prefix}_LIBRARIES})
FIND_LIBRARY(${LIBRARY}_RESOLVED ${LIBRARY} PATHS ${${prefix}_LIBRARY_DIRS}) find_library(${LIBRARY}_RESOLVED ${LIBRARY} PATHS ${${prefix}_LIBRARY_DIRS})
IF(${${LIBRARY}_RESOLVED} STREQUAL "${LIBRARY}_RESOLVED-NOTFOUND") if(${${LIBRARY}_RESOLVED} STREQUAL "${LIBRARY}_RESOLVED-NOTFOUND")
MESSAGE(FATAL_ERROR "could not resolve ${LIBRARY}") message(FATAL_ERROR "could not resolve ${LIBRARY}")
ENDIF() endif()
LIST(APPEND RESOLVED_LIBRARIES ${${LIBRARY}_RESOLVED}) list(APPEND RESOLVED_LIBRARIES ${${LIBRARY}_RESOLVED})
ENDFOREACH(LIBRARY) endforeach()
SET(${prefix}_FOUND 1 PARENT_SCOPE) set(${prefix}_FOUND 1 PARENT_SCOPE)
SET(${prefix}_LIBRARIES ${RESOLVED_LIBRARIES} PARENT_SCOPE) set(${prefix}_LIBRARIES ${RESOLVED_LIBRARIES} PARENT_SCOPE)
SET(${prefix}_INCLUDE_DIRS ${${prefix}_INCLUDE_DIRS} PARENT_SCOPE) set(${prefix}_INCLUDE_DIRS ${${prefix}_INCLUDE_DIRS} PARENT_SCOPE)
SET(${prefix}_LDFLAGS ${${prefix}_LDFLAGS} PARENT_SCOPE) set(${prefix}_LDFLAGS ${${prefix}_LDFLAGS} PARENT_SCOPE)
MESSAGE(STATUS " Resolved libraries: ${RESOLVED_LIBRARIES}") message(STATUS " Resolved libraries: ${RESOLVED_LIBRARIES}")
ENDFUNCTION() endfunction()
...@@ -7,22 +7,22 @@ ...@@ -7,22 +7,22 @@
# SECURITY_HAS_SSLCREATECONTEXT # SECURITY_HAS_SSLCREATECONTEXT
# #
FIND_PATH(SECURITY_INCLUDE_DIR NAMES Security/Security.h) find_path(SECURITY_INCLUDE_DIR NAMES Security/Security.h)
FIND_LIBRARY(SECURITY_LIBRARIES NAMES Security) find_library(SECURITY_LIBRARIES NAMES Security)
IF (SECURITY_INCLUDE_DIR AND SECURITY_LIBRARIES) if(SECURITY_INCLUDE_DIR AND SECURITY_LIBRARIES)
IF (NOT Security_FIND_QUIETLY) if(NOT Security_FIND_QUIETLY)
MESSAGE(STATUS "Found Security ${SECURITY_LIBRARIES}") message(STATUS "Found Security ${SECURITY_LIBRARIES}")
ENDIF() endif()
SET(SECURITY_FOUND TRUE) set(SECURITY_FOUND TRUE)
SET(SECURITY_LDFLAGS "-framework Security") set(SECURITY_LDFLAGS "-framework Security")
CHECK_LIBRARY_EXISTS("${SECURITY_LIBRARIES}" SSLCreateContext "Security/SecureTransport.h" SECURITY_HAS_SSLCREATECONTEXT) check_library_exists("${SECURITY_LIBRARIES}" SSLCreateContext "Security/SecureTransport.h" SECURITY_HAS_SSLCREATECONTEXT)
ENDIF () endif()
IF (Security_FIND_REQUIRED AND NOT SECURITY_FOUND) if(Security_FIND_REQUIRED AND NOT SECURITY_FOUND)
MESSAGE(FATAL_ERROR "Security not found") message(FATAL_ERROR "Security not found")
ENDIF() endif()
MARK_AS_ADVANCED( mark_as_advanced(
SECURITY_INCLUDE_DIR SECURITY_INCLUDE_DIR
SECURITY_LIBRARIES SECURITY_LIBRARIES
) )
INCLUDE(EnableWarnings) include(EnableWarnings)
IF (APPLE) if(APPLE)
# We cannot simply CHECK_FUNCTION_EXISTS on macOS because # We cannot simply CHECK_FUNCTION_EXISTS on macOS because
# MACOSX_DEPLOYMENT_TARGET may be set to a version in the past # MACOSX_DEPLOYMENT_TARGET may be set to a version in the past
# that doesn't have futimens. Instead we need to enable warnings # that doesn't have futimens. Instead we need to enable warnings
# as errors, then check for the symbol existing in `sys/stat.h`, # as errors, then check for the symbol existing in `sys/stat.h`,
# then reset warnings as errors. # then reset warnings as errors.
ENABLE_WARNINGS(error) enable_warnings(error)
CHECK_SYMBOL_EXISTS(futimens sys/stat.h HAVE_FUTIMENS) check_symbol_exists(futimens sys/stat.h HAVE_FUTIMENS)
DISABLE_WARNINGS(error) disable_warnings(error)
ELSE () else()
CHECK_FUNCTION_EXISTS(futimens HAVE_FUTIMENS) check_function_exists(futimens HAVE_FUTIMENS)
ENDIF () endif()
...@@ -13,81 +13,74 @@ ...@@ -13,81 +13,74 @@
# Hint # Hint
# MBEDTLS_ROOT_DIR can be pointed to a local mbedTLS installation. # MBEDTLS_ROOT_DIR can be pointed to a local mbedTLS installation.
SET(_MBEDTLS_ROOT_HINTS set(_MBEDTLS_ROOT_HINTS
${MBEDTLS_ROOT_DIR} ${MBEDTLS_ROOT_DIR}
ENV MBEDTLS_ROOT_DIR ENV MBEDTLS_ROOT_DIR)
)
SET(_MBEDTLS_ROOT_HINTS_AND_PATHS set(_MBEDTLS_ROOT_HINTS_AND_PATHS
HINTS ${_MBEDTLS_ROOT_HINTS} HINTS ${_MBEDTLS_ROOT_HINTS}
PATHS ${_MBEDTLS_ROOT_PATHS} PATHS ${_MBEDTLS_ROOT_PATHS})
)
FIND_PATH(MBEDTLS_INCLUDE_DIR find_path(MBEDTLS_INCLUDE_DIR
NAMES mbedtls/version.h NAMES mbedtls/version.h
${_MBEDTLS_ROOT_HINTS_AND_PATHS} ${_MBEDTLS_ROOT_HINTS_AND_PATHS}
PATH_SUFFIXES include PATH_SUFFIXES include)
)
IF(MBEDTLS_INCLUDE_DIR AND MBEDTLS_LIBRARIES) if(MBEDTLS_INCLUDE_DIR AND MBEDTLS_LIBRARIES)
# Already in cache, be silent # Already in cache, be silent
SET(MBEDTLS_FIND_QUIETLY TRUE) set(MBEDTLS_FIND_QUIETLY TRUE)
ENDIF() endif()
FIND_LIBRARY(MBEDTLS_LIBRARY find_library(MBEDTLS_LIBRARY
NAMES mbedtls libmbedtls NAMES mbedtls libmbedtls
${_MBEDTLS_ROOT_HINTS_AND_PATHS} ${_MBEDTLS_ROOT_HINTS_AND_PATHS}
PATH_SUFFIXES library PATH_SUFFIXES library)
) find_library(MBEDX509_LIBRARY
FIND_LIBRARY(MBEDX509_LIBRARY NAMES mbedx509 libmbedx509
NAMES mbedx509 libmbedx509 ${_MBEDTLS_ROOT_HINTS_AND_PATHS}
${_MBEDTLS_ROOT_HINTS_AND_PATHS} PATH_SUFFIXES library)
PATH_SUFFIXES library find_library(MBEDCRYPTO_LIBRARY
) NAMES mbedcrypto libmbedcrypto
FIND_LIBRARY(MBEDCRYPTO_LIBRARY ${_MBEDTLS_ROOT_HINTS_AND_PATHS}
NAMES mbedcrypto libmbedcrypto PATH_SUFFIXES library)
${_MBEDTLS_ROOT_HINTS_AND_PATHS}
PATH_SUFFIXES library
)
IF(MBEDTLS_INCLUDE_DIR AND MBEDTLS_LIBRARY AND MBEDX509_LIBRARY AND MBEDCRYPTO_LIBRARY) if(MBEDTLS_INCLUDE_DIR AND MBEDTLS_LIBRARY AND MBEDX509_LIBRARY AND MBEDCRYPTO_LIBRARY)
SET(MBEDTLS_FOUND TRUE) set(MBEDTLS_FOUND TRUE)
ENDIF() endif()
IF(MBEDTLS_FOUND) if(MBEDTLS_FOUND)
# split mbedTLS into -L and -l linker options, so we can set them for pkg-config # split mbedTLS into -L and -l linker options, so we can set them for pkg-config
GET_FILENAME_COMPONENT(MBEDTLS_LIBRARY_DIR ${MBEDTLS_LIBRARY} PATH) get_filename_component(MBEDTLS_LIBRARY_DIR ${MBEDTLS_LIBRARY} PATH)
GET_FILENAME_COMPONENT(MBEDTLS_LIBRARY_FILE ${MBEDTLS_LIBRARY} NAME_WE) get_filename_component(MBEDTLS_LIBRARY_FILE ${MBEDTLS_LIBRARY} NAME_WE)
GET_FILENAME_COMPONENT(MBEDX509_LIBRARY_FILE ${MBEDX509_LIBRARY} NAME_WE) get_filename_component(MBEDX509_LIBRARY_FILE ${MBEDX509_LIBRARY} NAME_WE)
GET_FILENAME_COMPONENT(MBEDCRYPTO_LIBRARY_FILE ${MBEDCRYPTO_LIBRARY} NAME_WE) get_filename_component(MBEDCRYPTO_LIBRARY_FILE ${MBEDCRYPTO_LIBRARY} NAME_WE)
STRING(REGEX REPLACE "^lib" "" MBEDTLS_LIBRARY_FILE ${MBEDTLS_LIBRARY_FILE}) string(REGEX REPLACE "^lib" "" MBEDTLS_LIBRARY_FILE ${MBEDTLS_LIBRARY_FILE})
STRING(REGEX REPLACE "^lib" "" MBEDX509_LIBRARY_FILE ${MBEDX509_LIBRARY_FILE}) string(REGEX REPLACE "^lib" "" MBEDX509_LIBRARY_FILE ${MBEDX509_LIBRARY_FILE})
STRING(REGEX REPLACE "^lib" "" MBEDCRYPTO_LIBRARY_FILE ${MBEDCRYPTO_LIBRARY_FILE}) string(REGEX REPLACE "^lib" "" MBEDCRYPTO_LIBRARY_FILE ${MBEDCRYPTO_LIBRARY_FILE})
SET(MBEDTLS_LIBRARIES "-L${MBEDTLS_LIBRARY_DIR} -l${MBEDTLS_LIBRARY_FILE} -l${MBEDX509_LIBRARY_FILE} -l${MBEDCRYPTO_LIBRARY_FILE}") set(MBEDTLS_LIBRARIES "-L${MBEDTLS_LIBRARY_DIR} -l${MBEDTLS_LIBRARY_FILE} -l${MBEDX509_LIBRARY_FILE} -l${MBEDCRYPTO_LIBRARY_FILE}")
IF(NOT MBEDTLS_FIND_QUIETLY) if(NOT MBEDTLS_FIND_QUIETLY)
MESSAGE(STATUS "Found mbedTLS:") message(STATUS "Found mbedTLS:")
FILE(READ ${MBEDTLS_INCLUDE_DIR}/mbedtls/version.h MBEDTLSCONTENT) file(READ ${MBEDTLS_INCLUDE_DIR}/mbedtls/version.h MBEDTLSCONTENT)
STRING(REGEX MATCH "MBEDTLS_VERSION_STRING +\"[0-9|.]+\"" MBEDTLSMATCH ${MBEDTLSCONTENT}) string(REGEX MATCH "MBEDTLS_VERSION_STRING +\"[0-9|.]+\"" MBEDTLSMATCH ${MBEDTLSCONTENT})
IF (MBEDTLSMATCH) if(MBEDTLSMATCH)
STRING(REGEX REPLACE "MBEDTLS_VERSION_STRING +\"([0-9|.]+)\"" "\\1" MBEDTLS_VERSION ${MBEDTLSMATCH}) string(REGEX REPLACE "MBEDTLS_VERSION_STRING +\"([0-9|.]+)\"" "\\1" MBEDTLS_VERSION ${MBEDTLSMATCH})
MESSAGE(STATUS " version ${MBEDTLS_VERSION}") message(STATUS " version ${MBEDTLS_VERSION}")
ENDIF(MBEDTLSMATCH) endif()
MESSAGE(STATUS " TLS: ${MBEDTLS_LIBRARY}") message(STATUS " TLS: ${MBEDTLS_LIBRARY}")
MESSAGE(STATUS " X509: ${MBEDX509_LIBRARY}") message(STATUS " X509: ${MBEDX509_LIBRARY}")
MESSAGE(STATUS " Crypto: ${MBEDCRYPTO_LIBRARY}") message(STATUS " Crypto: ${MBEDCRYPTO_LIBRARY}")
ENDIF(NOT MBEDTLS_FIND_QUIETLY) endif()
ELSE(MBEDTLS_FOUND) else(MBEDTLS_FOUND)
IF(MBEDTLS_FIND_REQUIRED) if(MBEDTLS_FIND_REQUIRED)
MESSAGE(FATAL_ERROR "Could not find mbedTLS") message(FATAL_ERROR "Could not find mbedTLS")
ENDIF(MBEDTLS_FIND_REQUIRED) endif()
ENDIF(MBEDTLS_FOUND) endif()
MARK_AS_ADVANCED( mark_as_advanced(
MBEDTLS_INCLUDE_DIR MBEDTLS_INCLUDE_DIR
MBEDTLS_LIBRARY_DIR MBEDTLS_LIBRARY_DIR
MBEDTLS_LIBRARIES MBEDTLS_LIBRARIES
MBEDTLS_LIBRARY MBEDTLS_LIBRARY
MBEDX509_LIBRARY MBEDX509_LIBRARY
MBEDCRYPTO_LIBRARY MBEDCRYPTO_LIBRARY)
)
...@@ -3,20 +3,20 @@ ...@@ -3,20 +3,20 @@
# Visual Studio, so that you can navigate into the libgit2_tests project, # Visual Studio, so that you can navigate into the libgit2_tests project,
# and see the folders within the tests folder (instead of just seeing all # and see the folders within the tests folder (instead of just seeing all
# source and tests in a single folder.) # source and tests in a single folder.)
FUNCTION(IDE_SPLIT_SOURCES target) function(IDE_SPLIT_SOURCES target)
IF(MSVC_IDE OR CMAKE_GENERATOR STREQUAL Xcode) if(MSVC_IDE OR CMAKE_GENERATOR STREQUAL Xcode)
GET_TARGET_PROPERTY(sources ${target} SOURCES) get_target_property(sources ${target} SOURCES)
FOREACH(source ${sources}) foreach(source ${sources})
IF(source MATCHES ".*/") if(source MATCHES ".*/")
STRING(REPLACE ${libgit2_SOURCE_DIR}/ "" rel ${source}) string(REPLACE ${libgit2_SOURCE_DIR}/ "" rel ${source})
IF(rel) if(rel)
STRING(REGEX REPLACE "/([^/]*)$" "" rel ${rel}) string(REGEX REPLACE "/([^/]*)$" "" rel ${rel})
IF(rel) if(rel)
STRING(REPLACE "/" "\\\\" rel ${rel}) string(REPLACE "/" "\\\\" rel ${rel})
SOURCE_GROUP(${rel} FILES ${source}) source_group(${rel} FILES ${source})
ENDIF() endif()
ENDIF() endif()
ENDIF() endif()
ENDFOREACH() endforeach()
ENDIF() endif()
ENDFUNCTION() endfunction()
...@@ -2,76 +2,76 @@ ...@@ -2,76 +2,76 @@
# #
function(pkg_build_config) function(pkg_build_config)
set(options) set(options)
set(oneValueArgs NAME DESCRIPTION VERSION FILENAME LIBS_SELF) set(oneValueArgs NAME DESCRIPTION VERSION FILENAME LIBS_SELF)
set(multiValueArgs LIBS PRIVATE_LIBS REQUIRES CFLAGS) set(multiValueArgs LIBS PRIVATE_LIBS REQUIRES CFLAGS)
cmake_parse_arguments(PKGCONFIG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) cmake_parse_arguments(PKGCONFIG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
if (NOT DEFINED PKGCONFIG_FILENAME AND DEFINED PKGCONFIG_NAME) if (NOT DEFINED PKGCONFIG_FILENAME AND DEFINED PKGCONFIG_NAME)
set(PKGCONFIG_FILENAME ${PKGCONFIG_NAME}) set(PKGCONFIG_FILENAME ${PKGCONFIG_NAME})
endif() endif()
if (NOT DEFINED PKGCONFIG_FILENAME) if (NOT DEFINED PKGCONFIG_FILENAME)
message(FATAL_ERROR "Missing FILENAME argument") message(FATAL_ERROR "Missing FILENAME argument")
endif() endif()
set(PKGCONFIG_FILE "${PROJECT_BINARY_DIR}/${PKGCONFIG_FILENAME}.pc") set(PKGCONFIG_FILE "${PROJECT_BINARY_DIR}/${PKGCONFIG_FILENAME}.pc")
if (NOT DEFINED PKGCONFIG_DESCRIPTION) if (NOT DEFINED PKGCONFIG_DESCRIPTION)
message(FATAL_ERROR "Missing DESCRIPTION argument") message(FATAL_ERROR "Missing DESCRIPTION argument")
endif() endif()
if (NOT DEFINED PKGCONFIG_VERSION) if (NOT DEFINED PKGCONFIG_VERSION)
message(FATAL_ERROR "Missing VERSION argument") message(FATAL_ERROR "Missing VERSION argument")
endif() endif()
# Write .pc "header" # Write .pc "header"
file(WRITE "${PKGCONFIG_FILE}" file(WRITE "${PKGCONFIG_FILE}"
"prefix=\"${CMAKE_INSTALL_PREFIX}\"\n" "prefix=\"${CMAKE_INSTALL_PREFIX}\"\n"
"libdir=\"${CMAKE_INSTALL_FULL_LIBDIR}\"\n" "libdir=\"${CMAKE_INSTALL_FULL_LIBDIR}\"\n"
"includedir=\"${CMAKE_INSTALL_FULL_INCLUDEDIR}\"\n" "includedir=\"${CMAKE_INSTALL_FULL_INCLUDEDIR}\"\n"
"\n" "\n"
"Name: ${PKGCONFIG_NAME}\n" "Name: ${PKGCONFIG_NAME}\n"
"Description: ${PKGCONFIG_DESCRIPTION}\n" "Description: ${PKGCONFIG_DESCRIPTION}\n"
"Version: ${PKGCONFIG_VERSION}\n" "Version: ${PKGCONFIG_VERSION}\n"
) )
# Prepare Libs # Prepare Libs
if(NOT DEFINED PKGCONFIG_LIBS_SELF) if(NOT DEFINED PKGCONFIG_LIBS_SELF)
set(PKGCONFIG_LIBS_SELF "${PKGCONFIG_FILE}") set(PKGCONFIG_LIBS_SELF "${PKGCONFIG_FILE}")
endif() endif()
if(NOT DEFINED PKGCONFIG_LIBS) if(NOT DEFINED PKGCONFIG_LIBS)
set(PKGCONFIG_LIBS "-l${PKGCONFIG_LIBS_SELF}") set(PKGCONFIG_LIBS "-l${PKGCONFIG_LIBS_SELF}")
else() else()
list(INSERT PKGCONFIG_LIBS 0 "-l${PKGCONFIG_LIBS_SELF}") list(INSERT PKGCONFIG_LIBS 0 "-l${PKGCONFIG_LIBS_SELF}")
endif() endif()
list(REMOVE_DUPLICATES PKGCONFIG_LIBS) list(REMOVE_DUPLICATES PKGCONFIG_LIBS)
string(REPLACE ";" " " PKGCONFIG_LIBS "${PKGCONFIG_LIBS}") string(REPLACE ";" " " PKGCONFIG_LIBS "${PKGCONFIG_LIBS}")
file(APPEND "${PKGCONFIG_FILE}" "Libs: -L\${libdir} ${PKGCONFIG_LIBS}\n") file(APPEND "${PKGCONFIG_FILE}" "Libs: -L\${libdir} ${PKGCONFIG_LIBS}\n")
# Prepare Libs.private # Prepare Libs.private
if(DEFINED PKGCONFIG_PRIVATE_LIBS) if(DEFINED PKGCONFIG_PRIVATE_LIBS)
list(REMOVE_DUPLICATES PKGCONFIG_PRIVATE_LIBS) list(REMOVE_DUPLICATES PKGCONFIG_PRIVATE_LIBS)
string(REPLACE ";" " " PKGCONFIG_PRIVATE_LIBS "${PKGCONFIG_PRIVATE_LIBS}") string(REPLACE ";" " " PKGCONFIG_PRIVATE_LIBS "${PKGCONFIG_PRIVATE_LIBS}")
file(APPEND "${PKGCONFIG_FILE}" "Libs.private: ${PKGCONFIG_PRIVATE_LIBS}\n") file(APPEND "${PKGCONFIG_FILE}" "Libs.private: ${PKGCONFIG_PRIVATE_LIBS}\n")
endif() endif()
# Prepare Requires.private # Prepare Requires.private
if(DEFINED PKGCONFIG_REQUIRES) if(DEFINED PKGCONFIG_REQUIRES)
list(REMOVE_DUPLICATES PKGCONFIG_REQUIRES) list(REMOVE_DUPLICATES PKGCONFIG_REQUIRES)
string(REPLACE ";" " " PKGCONFIG_REQUIRES "${PKGCONFIG_REQUIRES}") string(REPLACE ";" " " PKGCONFIG_REQUIRES "${PKGCONFIG_REQUIRES}")
file(APPEND "${PKGCONFIG_FILE}" "Requires.private: ${PKGCONFIG_REQUIRES}\n") file(APPEND "${PKGCONFIG_FILE}" "Requires.private: ${PKGCONFIG_REQUIRES}\n")
endif() endif()
# Prepare Cflags # Prepare Cflags
if(DEFINED PKGCONFIG_CFLAGS) if(DEFINED PKGCONFIG_CFLAGS)
string(REPLACE ";" " " PKGCONFIG_CFLAGS "${PKGCONFIG_CFLAGS}") string(REPLACE ";" " " PKGCONFIG_CFLAGS "${PKGCONFIG_CFLAGS}")
else() else()
set(PKGCONFIG_CFLAGS "") set(PKGCONFIG_CFLAGS "")
endif() endif()
file(APPEND "${PKGCONFIG_FILE}" "Cflags: -I\${includedir} ${PKGCONFIG_CFLAGS}\n") file(APPEND "${PKGCONFIG_FILE}" "Cflags: -I\${includedir} ${PKGCONFIG_CFLAGS}\n")
# Install .pc file # Install .pc file
install(FILES "${PKGCONFIG_FILE}" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") install(FILES "${PKGCONFIG_FILE}" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
endfunction() endfunction()
FUNCTION(SanitizeBool VAR) function(SanitizeBool VAR)
STRING(TOLOWER "${${VAR}}" VALUE) string(TOLOWER "${${VAR}}" VALUE)
IF(VALUE STREQUAL "on") if(VALUE STREQUAL "on")
SET(${VAR} "ON" PARENT_SCOPE) set(${VAR} "ON" PARENT_SCOPE)
ELSEIF(VALUE STREQUAL "yes") elseif(VALUE STREQUAL "yes")
SET(${VAR} "ON" PARENT_SCOPE) set(${VAR} "ON" PARENT_SCOPE)
ELSEIF(VALUE STREQUAL "true") elseif(VALUE STREQUAL "true")
SET(${VAR} "ON" PARENT_SCOPE) set(${VAR} "ON" PARENT_SCOPE)
ELSEIF(VALUE STREQUAL "1") elseif(VALUE STREQUAL "1")
SET(${VAR} "ON" PARENT_SCOPE) set(${VAR} "ON" PARENT_SCOPE)
ELSEIF(VALUE STREQUAL "off") elseif(VALUE STREQUAL "off")
SET(${VAR} "OFF" PARENT_SCOPE) set(${VAR} "OFF" PARENT_SCOPE)
ELSEIF(VALUE STREQUAL "no") elseif(VALUE STREQUAL "no")
SET(${VAR} "OFF" PARENT_SCOPE) set(${VAR} "OFF" PARENT_SCOPE)
ELSEIF(VALUE STREQUAL "false") elseif(VALUE STREQUAL "false")
SET(${VAR} "OFF" PARENT_SCOPE) set(${VAR} "OFF" PARENT_SCOPE)
ELSEIF(VALUE STREQUAL "0") elseif(VALUE STREQUAL "0")
SET(${VAR} "OFF" PARENT_SCOPE) set(${VAR} "OFF" PARENT_SCOPE)
ENDIF() endif()
ENDFUNCTION() endfunction()
INCLUDE(SanitizeBool) include(SanitizeBool)
# We try to find any packages our backends might use # We try to find any packages our backends might use
FIND_PACKAGE(GSSAPI) find_package(GSSAPI)
IF (CMAKE_SYSTEM_NAME MATCHES "Darwin") if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
INCLUDE(FindGSSFramework) include(FindGSSFramework)
ENDIF() endif()
IF(USE_GSSAPI) if(USE_GSSAPI)
# Auto-select GSS backend # Auto-select GSS backend
SanitizeBool(USE_GSSAPI) sanitizebool(USE_GSSAPI)
IF (USE_GSSAPI STREQUAL ON) if(USE_GSSAPI STREQUAL ON)
IF (GSSFRAMEWORK_FOUND) if(GSSFRAMEWORK_FOUND)
SET(USE_GSSAPI "GSS.framework") set(USE_GSSAPI "GSS.framework")
ELSEIF(GSSAPI_FOUND) elseif(GSSAPI_FOUND)
SET(USE_GSSAPI "gssapi") set(USE_GSSAPI "gssapi")
ELSE() else()
MESSAGE(FATAL_ERROR "Unable to autodetect a usable GSS backend." message(FATAL_ERROR "Unable to autodetect a usable GSS backend."
"Please pass the backend name explicitly (-DUSE_GSS=backend)") "Please pass the backend name explicitly (-DUSE_GSS=backend)")
ENDIF() endif()
ENDIF() endif()
# Check that we can find what's required for the selected backend # Check that we can find what's required for the selected backend
IF (USE_GSSAPI STREQUAL "GSS.framework") if(USE_GSSAPI STREQUAL "GSS.framework")
IF (NOT GSSFRAMEWORK_FOUND) if(NOT GSSFRAMEWORK_FOUND)
MESSAGE(FATAL_ERROR "Asked for GSS.framework backend, but it wasn't found") message(FATAL_ERROR "Asked for GSS.framework backend, but it wasn't found")
ENDIF() endif()
LIST(APPEND LIBGIT2_LIBS ${GSSFRAMEWORK_LIBRARIES}) list(APPEND LIBGIT2_SYSTEM_LIBS ${GSSFRAMEWORK_LIBRARIES})
SET(GIT_GSSFRAMEWORK 1) set(GIT_GSSFRAMEWORK 1)
ADD_FEATURE_INFO(SPNEGO GIT_GSSFRAMEWORK "SPNEGO authentication support (${USE_GSSAPI})") add_feature_info(SPNEGO GIT_GSSFRAMEWORK "SPNEGO authentication support (${USE_GSSAPI})")
ELSEIF (USE_GSSAPI STREQUAL "gssapi") elseif(USE_GSSAPI STREQUAL "gssapi")
IF (NOT GSSAPI_FOUND) if(NOT GSSAPI_FOUND)
MESSAGE(FATAL_ERROR "Asked for gssapi GSS backend, but it wasn't found") message(FATAL_ERROR "Asked for gssapi GSS backend, but it wasn't found")
ENDIF() endif()
LIST(APPEND LIBGIT2_LIBS ${GSSAPI_LIBRARIES}) list(APPEND LIBGIT2_SYSTEM_LIBS ${GSSAPI_LIBRARIES})
SET(GIT_GSSAPI 1) set(GIT_GSSAPI 1)
ADD_FEATURE_INFO(SPNEGO GIT_GSSAPI "SPNEGO authentication support (${USE_GSSAPI})") add_feature_info(SPNEGO GIT_GSSAPI "SPNEGO authentication support (${USE_GSSAPI})")
ELSE() else()
MESSAGE(FATAL_ERROR "Asked for backend ${USE_GSSAPI} but it wasn't found") message(FATAL_ERROR "Asked for backend ${USE_GSSAPI} but it wasn't found")
ENDIF() endif()
ELSE() else()
SET(GIT_GSSAPI 0) set(GIT_GSSAPI 0)
ADD_FEATURE_INFO(SPNEGO NO "SPNEGO authentication support") add_feature_info(SPNEGO NO "SPNEGO authentication support")
ENDIF() endif()
...@@ -4,7 +4,7 @@ if(USE_HTTP_PARSER STREQUAL "system") ...@@ -4,7 +4,7 @@ if(USE_HTTP_PARSER STREQUAL "system")
if(HTTP_PARSER_FOUND AND HTTP_PARSER_VERSION_MAJOR EQUAL 2) if(HTTP_PARSER_FOUND AND HTTP_PARSER_VERSION_MAJOR EQUAL 2)
list(APPEND LIBGIT2_SYSTEM_INCLUDES ${HTTP_PARSER_INCLUDE_DIRS}) 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") list(APPEND LIBGIT2_PC_LIBS "-lhttp_parser")
add_feature_info(http-parser ON "http-parser support (system)") add_feature_info(http-parser ON "http-parser support (system)")
else() else()
...@@ -13,7 +13,7 @@ if(USE_HTTP_PARSER STREQUAL "system") ...@@ -13,7 +13,7 @@ if(USE_HTTP_PARSER STREQUAL "system")
else() else()
message(STATUS "http-parser version 2 was not found or disabled; using bundled 3rd-party sources.") 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") 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_DEPENDENCY_INCLUDES "${libgit2_SOURCE_DIR}/deps/http-parser")
list(APPEND LIBGIT2_OBJECTS "$<TARGET_OBJECTS:http-parser>") list(APPEND LIBGIT2_DEPENDENCY_OBJECTS "$<TARGET_OBJECTS:http-parser>")
add_feature_info(http-parser ON "http-parser support (bundled)") add_feature_info(http-parser ON "http-parser support (bundled)")
endif() endif()
INCLUDE(SanitizeBool) include(SanitizeBool)
# We try to find any packages our backends might use # We try to find any packages our backends might use
FIND_PACKAGE(OpenSSL) find_package(OpenSSL)
FIND_PACKAGE(mbedTLS) find_package(mbedTLS)
IF (CMAKE_SYSTEM_NAME MATCHES "Darwin") if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
FIND_PACKAGE(Security) find_package(Security)
FIND_PACKAGE(CoreFoundation) find_package(CoreFoundation)
ENDIF() endif()
IF(USE_HTTPS) if(USE_HTTPS)
# Auto-select TLS backend # Auto-select TLS backend
SanitizeBool(USE_HTTPS) sanitizebool(USE_HTTPS)
IF (USE_HTTPS STREQUAL ON) if(USE_HTTPS STREQUAL ON)
IF (SECURITY_FOUND) if(SECURITY_FOUND)
IF (SECURITY_HAS_SSLCREATECONTEXT) if(SECURITY_HAS_SSLCREATECONTEXT)
SET(USE_HTTPS "SecureTransport") set(USE_HTTPS "SecureTransport")
ELSE() else()
MESSAGE(STATUS "Security framework is too old, falling back to OpenSSL") message(STATUS "Security framework is too old, falling back to OpenSSL")
SET(USE_HTTPS "OpenSSL") set(USE_HTTPS "OpenSSL")
ENDIF() endif()
ELSEIF (USE_WINHTTP) elseif(USE_WINHTTP)
SET(USE_HTTPS "WinHTTP") set(USE_HTTPS "WinHTTP")
ELSEIF(OPENSSL_FOUND) elseif(OPENSSL_FOUND)
SET(USE_HTTPS "OpenSSL") set(USE_HTTPS "OpenSSL")
ELSEIF(MBEDTLS_FOUND) elseif(MBEDTLS_FOUND)
SET(USE_HTTPS "mbedTLS") set(USE_HTTPS "mbedTLS")
ELSE() else()
MESSAGE(FATAL_ERROR "Unable to autodetect a usable HTTPS backend." message(FATAL_ERROR "Unable to autodetect a usable HTTPS backend."
"Please pass the backend name explicitly (-DUSE_HTTPS=backend)") "Please pass the backend name explicitly (-DUSE_HTTPS=backend)")
ENDIF() endif()
ENDIF() endif()
# Check that we can find what's required for the selected backend # Check that we can find what's required for the selected backend
IF (USE_HTTPS STREQUAL "SecureTransport") if(USE_HTTPS STREQUAL "SecureTransport")
IF (NOT COREFOUNDATION_FOUND) if(NOT COREFOUNDATION_FOUND)
MESSAGE(FATAL_ERROR "Cannot use SecureTransport backend, CoreFoundation.framework not found") message(FATAL_ERROR "Cannot use SecureTransport backend, CoreFoundation.framework not found")
ENDIF() endif()
IF (NOT SECURITY_FOUND) if(NOT SECURITY_FOUND)
MESSAGE(FATAL_ERROR "Cannot use SecureTransport backend, Security.framework not found") message(FATAL_ERROR "Cannot use SecureTransport backend, Security.framework not found")
ENDIF() endif()
IF (NOT SECURITY_HAS_SSLCREATECONTEXT) if(NOT SECURITY_HAS_SSLCREATECONTEXT)
MESSAGE(FATAL_ERROR "Cannot use SecureTransport backend, SSLCreateContext not supported") message(FATAL_ERROR "Cannot use SecureTransport backend, SSLCreateContext not supported")
ENDIF() endif()
SET(GIT_SECURE_TRANSPORT 1) set(GIT_SECURE_TRANSPORT 1)
LIST(APPEND LIBGIT2_SYSTEM_INCLUDES ${SECURITY_INCLUDE_DIR}) list(APPEND LIBGIT2_SYSTEM_INCLUDES ${SECURITY_INCLUDE_DIR})
LIST(APPEND LIBGIT2_LIBS ${COREFOUNDATION_LDFLAGS} ${SECURITY_LDFLAGS}) list(APPEND LIBGIT2_SYSTEM_LIBS ${COREFOUNDATION_LDFLAGS} ${SECURITY_LDFLAGS})
LIST(APPEND LIBGIT2_PC_LIBS ${COREFOUNDATION_LDFLAGS} ${SECURITY_LDFLAGS}) list(APPEND LIBGIT2_PC_LIBS ${COREFOUNDATION_LDFLAGS} ${SECURITY_LDFLAGS})
ELSEIF (USE_HTTPS STREQUAL "OpenSSL") elseif(USE_HTTPS STREQUAL "OpenSSL")
IF (NOT OPENSSL_FOUND) if(NOT OPENSSL_FOUND)
MESSAGE(FATAL_ERROR "Asked for OpenSSL TLS backend, but it wasn't found") message(FATAL_ERROR "Asked for OpenSSL TLS backend, but it wasn't found")
ENDIF() endif()
SET(GIT_OPENSSL 1) set(GIT_OPENSSL 1)
LIST(APPEND LIBGIT2_SYSTEM_INCLUDES ${OPENSSL_INCLUDE_DIR}) list(APPEND LIBGIT2_SYSTEM_INCLUDES ${OPENSSL_INCLUDE_DIR})
LIST(APPEND LIBGIT2_LIBS ${OPENSSL_LIBRARIES}) list(APPEND LIBGIT2_SYSTEM_LIBS ${OPENSSL_LIBRARIES})
LIST(APPEND LIBGIT2_PC_LIBS ${OPENSSL_LDFLAGS}) list(APPEND LIBGIT2_PC_LIBS ${OPENSSL_LDFLAGS})
LIST(APPEND LIBGIT2_PC_REQUIRES "openssl") list(APPEND LIBGIT2_PC_REQUIRES "openssl")
ELSEIF(USE_HTTPS STREQUAL "mbedTLS") elseif(USE_HTTPS STREQUAL "mbedTLS")
IF (NOT MBEDTLS_FOUND) if(NOT MBEDTLS_FOUND)
MESSAGE(FATAL_ERROR "Asked for mbedTLS backend, but it wasn't found") message(FATAL_ERROR "Asked for mbedTLS backend, but it wasn't found")
ENDIF() endif()
IF(NOT CERT_LOCATION) if(NOT CERT_LOCATION)
MESSAGE(STATUS "Auto-detecting default certificates location") message(STATUS "Auto-detecting default certificates location")
IF(CMAKE_SYSTEM_NAME MATCHES Darwin) if(CMAKE_SYSTEM_NAME MATCHES Darwin)
# Check for an Homebrew installation # Check for an Homebrew installation
SET(OPENSSL_CMD "/usr/local/opt/openssl/bin/openssl") set(OPENSSL_CMD "/usr/local/opt/openssl/bin/openssl")
ELSE() else()
SET(OPENSSL_CMD "openssl") set(OPENSSL_CMD "openssl")
ENDIF() endif()
EXECUTE_PROCESS(COMMAND ${OPENSSL_CMD} version -d OUTPUT_VARIABLE OPENSSL_DIR OUTPUT_STRIP_TRAILING_WHITESPACE) execute_process(COMMAND ${OPENSSL_CMD} version -d OUTPUT_VARIABLE OPENSSL_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
IF(OPENSSL_DIR) if(OPENSSL_DIR)
STRING(REGEX REPLACE "^OPENSSLDIR: \"(.*)\"$" "\\1/" OPENSSL_DIR ${OPENSSL_DIR}) string(REGEX REPLACE "^OPENSSLDIR: \"(.*)\"$" "\\1/" OPENSSL_DIR ${OPENSSL_DIR})
SET(OPENSSL_CA_LOCATIONS set(OPENSSL_CA_LOCATIONS
"ca-bundle.pem" # OpenSUSE Leap 42.1 "ca-bundle.pem" # OpenSUSE Leap 42.1
"cert.pem" # Ubuntu 14.04, FreeBSD "cert.pem" # Ubuntu 14.04, FreeBSD
"certs/ca-certificates.crt" # Ubuntu 16.04 "certs/ca-certificates.crt" # Ubuntu 16.04
"certs/ca.pem" # Debian 7 "certs/ca.pem" # Debian 7
) )
FOREACH(SUFFIX IN LISTS OPENSSL_CA_LOCATIONS) foreach(SUFFIX IN LISTS OPENSSL_CA_LOCATIONS)
SET(LOC "${OPENSSL_DIR}${SUFFIX}") set(LOC "${OPENSSL_DIR}${SUFFIX}")
IF(NOT CERT_LOCATION AND EXISTS "${OPENSSL_DIR}${SUFFIX}") if(NOT CERT_LOCATION AND EXISTS "${OPENSSL_DIR}${SUFFIX}")
SET(CERT_LOCATION ${LOC}) set(CERT_LOCATION ${LOC})
ENDIF() endif()
ENDFOREACH() endforeach()
ELSE() else()
MESSAGE(FATAL_ERROR "Unable to find OpenSSL executable. Please provide default certificate location via CERT_LOCATION") message(FATAL_ERROR "Unable to find OpenSSL executable. Please provide default certificate location via CERT_LOCATION")
ENDIF() endif()
ENDIF() endif()
IF(CERT_LOCATION) if(CERT_LOCATION)
IF(NOT EXISTS ${CERT_LOCATION}) if(NOT EXISTS ${CERT_LOCATION})
MESSAGE(FATAL_ERROR "Cannot use CERT_LOCATION=${CERT_LOCATION} as it doesn't exist") message(FATAL_ERROR "Cannot use CERT_LOCATION=${CERT_LOCATION} as it doesn't exist")
ENDIF() endif()
ADD_FEATURE_INFO(CERT_LOCATION ON "using certificates from ${CERT_LOCATION}") add_feature_info(CERT_LOCATION ON "using certificates from ${CERT_LOCATION}")
ADD_DEFINITIONS(-DGIT_DEFAULT_CERT_LOCATION="${CERT_LOCATION}") add_definitions(-DGIT_DEFAULT_CERT_LOCATION="${CERT_LOCATION}")
ENDIF() endif()
SET(GIT_MBEDTLS 1) set(GIT_MBEDTLS 1)
LIST(APPEND LIBGIT2_SYSTEM_INCLUDES ${MBEDTLS_INCLUDE_DIR}) list(APPEND LIBGIT2_SYSTEM_INCLUDES ${MBEDTLS_INCLUDE_DIR})
LIST(APPEND LIBGIT2_LIBS ${MBEDTLS_LIBRARIES}) list(APPEND LIBGIT2_SYSTEM_LIBS ${MBEDTLS_LIBRARIES})
# mbedTLS has no pkgconfig file, hence we can't require it # mbedTLS has no pkgconfig file, hence we can't require it
# https://github.com/ARMmbed/mbedtls/issues/228 # https://github.com/ARMmbed/mbedtls/issues/228
# For now, pass its link flags as our own # For now, pass its link flags as our own
LIST(APPEND LIBGIT2_PC_LIBS ${MBEDTLS_LIBRARIES}) list(APPEND LIBGIT2_PC_LIBS ${MBEDTLS_LIBRARIES})
ELSEIF (USE_HTTPS STREQUAL "WinHTTP") elseif(USE_HTTPS STREQUAL "WinHTTP")
# WinHTTP setup was handled in the WinHTTP-specific block above # WinHTTP setup was handled in the WinHTTP-specific block above
ELSEIF (USE_HTTPS STREQUAL "OpenSSL-Dynamic") elseif(USE_HTTPS STREQUAL "OpenSSL-Dynamic")
SET(GIT_OPENSSL 1) set(GIT_OPENSSL 1)
SET(GIT_OPENSSL_DYNAMIC 1) set(GIT_OPENSSL_DYNAMIC 1)
LIST(APPEND LIBGIT2_LIBS dl) list(APPEND LIBGIT2_SYSTEM_LIBS dl)
ELSE() else()
MESSAGE(FATAL_ERROR "Asked for backend ${USE_HTTPS} but it wasn't found") message(FATAL_ERROR "Asked for backend ${USE_HTTPS} but it wasn't found")
ENDIF() endif()
SET(GIT_HTTPS 1) set(GIT_HTTPS 1)
ADD_FEATURE_INFO(HTTPS GIT_HTTPS "using ${USE_HTTPS}") add_feature_info(HTTPS GIT_HTTPS "using ${USE_HTTPS}")
ELSE() else()
SET(GIT_HTTPS 0) set(GIT_HTTPS 0)
ADD_FEATURE_INFO(HTTPS NO "") add_feature_info(HTTPS NO "")
ENDIF() endif()
# Select a hash backend # Select a hash backend
INCLUDE(SanitizeBool) include(SanitizeBool)
# USE_SHA1=CollisionDetection(ON)/HTTPS/Generic/OFF # USE_SHA1=CollisionDetection(ON)/HTTPS/Generic/OFF
sanitizebool(USE_SHA1)
SanitizeBool(USE_SHA1) if(USE_SHA1 STREQUAL ON)
IF(USE_SHA1 STREQUAL ON)
SET(USE_SHA1 "CollisionDetection") SET(USE_SHA1 "CollisionDetection")
ELSEIF(USE_SHA1 STREQUAL "HTTPS") elseif(USE_SHA1 STREQUAL "HTTPS")
IF(USE_HTTPS STREQUAL "SecureTransport") if(USE_HTTPS STREQUAL "SecureTransport")
SET(USE_SHA1 "CommonCrypto") set(USE_SHA1 "CommonCrypto")
ELSEIF(USE_HTTPS STREQUAL "WinHTTP") elseif(USE_HTTPS STREQUAL "WinHTTP")
SET(USE_SHA1 "Win32") set(USE_SHA1 "Win32")
ELSEIF(USE_HTTPS) elseif(USE_HTTPS)
SET(USE_SHA1 ${USE_HTTPS}) set(USE_SHA1 ${USE_HTTPS})
ELSE() else()
SET(USE_SHA1 "CollisionDetection") set(USE_SHA1 "CollisionDetection")
ENDIF() endif()
ENDIF() endif()
IF(USE_SHA1 STREQUAL "CollisionDetection") if(USE_SHA1 STREQUAL "CollisionDetection")
SET(GIT_SHA1_COLLISIONDETECT 1) set(GIT_SHA1_COLLISIONDETECT 1)
ADD_DEFINITIONS(-DSHA1DC_NO_STANDARD_INCLUDES=1) add_definitions(-DSHA1DC_NO_STANDARD_INCLUDES=1)
ADD_DEFINITIONS(-DSHA1DC_CUSTOM_INCLUDE_SHA1_C=\"common.h\") add_definitions(-DSHA1DC_CUSTOM_INCLUDE_SHA1_C=\"common.h\")
ADD_DEFINITIONS(-DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C=\"common.h\") add_definitions(-DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C=\"common.h\")
FILE(GLOB SRC_SHA1 hash/sha1/collisiondetect.* hash/sha1/sha1dc/*) elseif(USE_SHA1 STREQUAL "OpenSSL")
ELSEIF(USE_SHA1 STREQUAL "OpenSSL")
# OPENSSL_FOUND should already be set, we're checking USE_HTTPS # OPENSSL_FOUND should already be set, we're checking USE_HTTPS
SET(GIT_SHA1_OPENSSL 1) set(GIT_SHA1_OPENSSL 1)
IF(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
LIST(APPEND LIBGIT2_PC_LIBS "-lssl") list(APPEND LIBGIT2_PC_LIBS "-lssl")
ELSE() else()
LIST(APPEND LIBGIT2_PC_REQUIRES "openssl") list(APPEND LIBGIT2_PC_REQUIRES "openssl")
ENDIF() endif()
FILE(GLOB SRC_SHA1 hash/sha1/openssl.*) elseif(USE_SHA1 STREQUAL "CommonCrypto")
ELSEIF(USE_SHA1 STREQUAL "CommonCrypto") set(GIT_SHA1_COMMON_CRYPTO 1)
SET(GIT_SHA1_COMMON_CRYPTO 1) elseif(USE_SHA1 STREQUAL "mbedTLS")
FILE(GLOB SRC_SHA1 hash/sha1/common_crypto.*) set(GIT_SHA1_MBEDTLS 1)
ELSEIF(USE_SHA1 STREQUAL "mbedTLS") list(APPEND LIBGIT2_SYSTEM_INCLUDES ${MBEDTLS_INCLUDE_DIR})
SET(GIT_SHA1_MBEDTLS 1) list(APPEND LIBGIT2_SYSTEM_LIBS ${MBEDTLS_LIBRARIES})
FILE(GLOB SRC_SHA1 hash/sha1/mbedtls.*)
LIST(APPEND LIBGIT2_SYSTEM_INCLUDES ${MBEDTLS_INCLUDE_DIR})
LIST(APPEND LIBGIT2_LIBS ${MBEDTLS_LIBRARIES})
# mbedTLS has no pkgconfig file, hence we can't require it # mbedTLS has no pkgconfig file, hence we can't require it
# https://github.com/ARMmbed/mbedtls/issues/228 # https://github.com/ARMmbed/mbedtls/issues/228
# For now, pass its link flags as our own # For now, pass its link flags as our own
LIST(APPEND LIBGIT2_PC_LIBS ${MBEDTLS_LIBRARIES}) list(APPEND LIBGIT2_PC_LIBS ${MBEDTLS_LIBRARIES})
ELSEIF(USE_SHA1 STREQUAL "Win32") elseif(USE_SHA1 STREQUAL "Win32")
SET(GIT_SHA1_WIN32 1) set(GIT_SHA1_WIN32 1)
FILE(GLOB SRC_SHA1 hash/sha1/win32.*) elseif(NOT (USE_SHA1 STREQUAL "Generic"))
ELSEIF(USE_SHA1 STREQUAL "Generic") message(FATAL_ERROR "Asked for unknown SHA1 backend: ${USE_SHA1}")
FILE(GLOB SRC_SHA1 hash/sha1/generic.*) endif()
ELSE()
MESSAGE(FATAL_ERROR "Asked for unknown SHA1 backend: ${USE_SHA1}")
ENDIF()
list(APPEND SRC_SHA1 "hash/sha1.h") add_feature_info(SHA ON "using ${USE_SHA1}")
list(SORT SRC_SHA1)
ADD_FEATURE_INFO(SHA ON "using ${USE_SHA1}")
...@@ -27,14 +27,14 @@ elseif(REGEX_BACKEND STREQUAL "pcre2") ...@@ -27,14 +27,14 @@ elseif(REGEX_BACKEND STREQUAL "pcre2")
set(GIT_REGEX_PCRE2 1) set(GIT_REGEX_PCRE2 1)
list(APPEND LIBGIT2_SYSTEM_INCLUDES ${PCRE2_INCLUDE_DIRS}) 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") list(APPEND LIBGIT2_PC_REQUIRES "libpcre2-8")
elseif(REGEX_BACKEND STREQUAL "pcre") elseif(REGEX_BACKEND STREQUAL "pcre")
add_feature_info(regex ON "using system PCRE") add_feature_info(regex ON "using system PCRE")
set(GIT_REGEX_PCRE 1) set(GIT_REGEX_PCRE 1)
list(APPEND LIBGIT2_SYSTEM_INCLUDES ${PCRE_INCLUDE_DIRS}) 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") list(APPEND LIBGIT2_PC_REQUIRES "libpcre")
elseif(REGEX_BACKEND STREQUAL "regcomp") elseif(REGEX_BACKEND STREQUAL "regcomp")
add_feature_info(regex ON "using system regcomp") add_feature_info(regex ON "using system regcomp")
...@@ -44,8 +44,8 @@ elseif(REGEX_BACKEND STREQUAL "builtin") ...@@ -44,8 +44,8 @@ elseif(REGEX_BACKEND STREQUAL "builtin")
set(GIT_REGEX_BUILTIN 1) set(GIT_REGEX_BUILTIN 1)
add_subdirectory("${libgit2_SOURCE_DIR}/deps/pcre" "${libgit2_BINARY_DIR}/deps/pcre") add_subdirectory("${libgit2_SOURCE_DIR}/deps/pcre" "${libgit2_BINARY_DIR}/deps/pcre")
list(APPEND LIBGIT2_INCLUDES "${libgit2_SOURCE_DIR}/deps/pcre") list(APPEND LIBGIT2_DEPENDENCY_INCLUDES "${libgit2_SOURCE_DIR}/deps/pcre")
list(APPEND LIBGIT2_OBJECTS $<TARGET_OBJECTS:pcre>) list(APPEND LIBGIT2_DEPENDENCY_OBJECTS $<TARGET_OBJECTS:pcre>)
else() else()
message(FATAL_ERROR "The REGEX_BACKEND option provided is not supported") message(FATAL_ERROR "The REGEX_BACKEND option provided is not supported")
endif() endif()
...@@ -17,7 +17,7 @@ endif() ...@@ -17,7 +17,7 @@ endif()
if(LIBSSH2_FOUND) if(LIBSSH2_FOUND)
set(GIT_SSH 1) set(GIT_SSH 1)
list(APPEND LIBGIT2_SYSTEM_INCLUDES ${LIBSSH2_INCLUDE_DIRS}) 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}) list(APPEND LIBGIT2_PC_LIBS ${LIBSSH2_LDFLAGS})
check_library_exists("${LIBSSH2_LIBRARIES}" libssh2_userauth_publickey_frommemory "${LIBSSH2_LIBRARY_DIRS}" HAVE_LIBSSH2_MEMORY_CREDENTIALS) check_library_exists("${LIBSSH2_LIBRARIES}" libssh2_userauth_publickey_frommemory "${LIBSSH2_LIBRARY_DIRS}" HAVE_LIBSSH2_MEMORY_CREDENTIALS)
...@@ -31,9 +31,9 @@ endif() ...@@ -31,9 +31,9 @@ endif()
if(WIN32 AND EMBED_SSH_PATH) if(WIN32 AND EMBED_SSH_PATH)
file(GLOB SSH_SRC "${EMBED_SSH_PATH}/src/*.c") file(GLOB SSH_SRC "${EMBED_SSH_PATH}/src/*.c")
list(SORT SSH_SRC) 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\"") 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) set(GIT_SSH 1)
endif() endif()
......
...@@ -5,13 +5,13 @@ if(WIN32 AND WINHTTP) ...@@ -5,13 +5,13 @@ if(WIN32 AND WINHTTP)
# we have to include a private header and generate our own import library # we have to include a private header and generate our own import library
if(MINGW) if(MINGW)
add_subdirectory("${libgit2_SOURCE_DIR}/deps/winhttp" "${libgit2_BINARY_DIR}/deps/winhttp") 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") list(APPEND LIBGIT2_DEPENDENCY_INCLUDES "${libgit2_SOURCE_DIR}/deps/winhttp")
else() else()
list(APPEND LIBGIT2_LIBS "winhttp") list(APPEND LIBGIT2_SYSTEM_LIBS "winhttp")
list(APPEND LIBGIT2_PC_LIBS "-lwinhttp") list(APPEND LIBGIT2_PC_LIBS "-lwinhttp")
endif() endif()
list(APPEND LIBGIT2_LIBS "rpcrt4" "crypt32" "ole32") list(APPEND LIBGIT2_SYSTEM_LIBS "rpcrt4" "crypt32" "ole32")
list(APPEND LIBGIT2_PC_LIBS "-lrpcrt4" "-lcrypt32" "-lole32") list(APPEND LIBGIT2_PC_LIBS "-lrpcrt4" "-lcrypt32" "-lole32")
endif() endif()
...@@ -10,7 +10,7 @@ if(USE_BUNDLED_ZLIB STREQUAL "OFF") ...@@ -10,7 +10,7 @@ if(USE_BUNDLED_ZLIB STREQUAL "OFF")
find_package(ZLIB) find_package(ZLIB)
if(ZLIB_FOUND) if(ZLIB_FOUND)
list(APPEND LIBGIT2_SYSTEM_INCLUDES ${ZLIB_INCLUDE_DIRS}) 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") if(APPLE OR CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
list(APPEND LIBGIT2_PC_LIBS "-lz") list(APPEND LIBGIT2_PC_LIBS "-lz")
else() else()
...@@ -23,12 +23,12 @@ if(USE_BUNDLED_ZLIB STREQUAL "OFF") ...@@ -23,12 +23,12 @@ if(USE_BUNDLED_ZLIB STREQUAL "OFF")
endif() endif()
if(USE_BUNDLED_ZLIB STREQUAL "Chromium") if(USE_BUNDLED_ZLIB STREQUAL "Chromium")
add_subdirectory("${libgit2_SOURCE_DIR}/deps/chromium-zlib" "${libgit2_BINARY_DIR}/deps/chromium-zlib") 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_DEPENDENCY_INCLUDES "${libgit2_SOURCE_DIR}/deps/chromium-zlib")
list(APPEND LIBGIT2_OBJECTS $<TARGET_OBJECTS:chromium_zlib>) list(APPEND LIBGIT2_DEPENDENCY_OBJECTS $<TARGET_OBJECTS:chromium_zlib>)
add_feature_info(zlib ON "using (Chromium) bundled zlib") add_feature_info(zlib ON "using (Chromium) bundled zlib")
elseif(USE_BUNDLED_ZLIB OR NOT ZLIB_FOUND) elseif(USE_BUNDLED_ZLIB OR NOT ZLIB_FOUND)
add_subdirectory("${libgit2_SOURCE_DIR}/deps/zlib" "${libgit2_BINARY_DIR}/deps/zlib") add_subdirectory("${libgit2_SOURCE_DIR}/deps/zlib" "${libgit2_BINARY_DIR}/deps/zlib")
list(APPEND LIBGIT2_INCLUDES "${libgit2_SOURCE_DIR}/deps/zlib") list(APPEND LIBGIT2_DEPENDENCY_INCLUDES "${libgit2_SOURCE_DIR}/deps/zlib")
list(APPEND LIBGIT2_OBJECTS $<TARGET_OBJECTS:zlib>) list(APPEND LIBGIT2_DEPENDENCY_OBJECTS $<TARGET_OBJECTS:zlib>)
add_feature_info(zlib ON "using bundled zlib") add_feature_info(zlib ON "using bundled zlib")
endif() endif()
include_directories(${LIBGIT2_INCLUDES}) file(GLOB SRC_EXAMPLES *.c *.h)
include_directories(SYSTEM ${LIBGIT2_SYSTEM_INCLUDES})
file(GLOB LG2_SOURCES *.c *.h) add_executable(lg2 ${SRC_EXAMPLES})
add_executable(lg2 ${LG2_SOURCES})
set_target_properties(lg2 PROPERTIES C_STANDARD 90) set_target_properties(lg2 PROPERTIES C_STANDARD 90)
# Ensure that we do not use deprecated functions internally # Ensure that we do not use deprecated functions internally
add_definitions(-DGIT_DEPRECATE_HARD) add_definitions(-DGIT_DEPRECATE_HARD)
target_include_directories(lg2 PRIVATE ${LIBGIT2_INCLUDES} ${LIBGIT2_DEPENDENCY_INCLUDES})
target_include_directories(lg2 SYSTEM PRIVATE ${LIBGIT2_SYSTEM_INCLUDES})
if(WIN32 OR ANDROID) if(WIN32 OR ANDROID)
target_link_libraries(lg2 git2) target_link_libraries(lg2 git2)
else() else()
......
link_directories(${LIBGIT2_LIBDIRS})
include_directories(${LIBGIT2_INCLUDES})
include_directories(SYSTEM ${LIBGIT2_SYSTEM_INCLUDES})
if(BUILD_FUZZERS AND NOT USE_STANDALONE_FUZZERS) if(BUILD_FUZZERS AND NOT USE_STANDALONE_FUZZERS)
set(CMAKE_REQUIRED_FLAGS "-fsanitize=fuzzer-no-link") set(CMAKE_REQUIRED_FLAGS "-fsanitize=fuzzer-no-link")
add_c_flag(-fsanitize=fuzzer) add_c_flag(-fsanitize=fuzzer)
...@@ -9,8 +5,8 @@ if(BUILD_FUZZERS AND NOT USE_STANDALONE_FUZZERS) ...@@ -9,8 +5,8 @@ if(BUILD_FUZZERS AND NOT USE_STANDALONE_FUZZERS)
unset(CMAKE_REQUIRED_FLAGS) unset(CMAKE_REQUIRED_FLAGS)
endif() endif()
file(GLOB SRC_FUZZ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *_fuzzer.c) file(GLOB SRC_FUZZERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *_fuzzer.c)
foreach(fuzz_target_src ${SRC_FUZZ}) foreach(fuzz_target_src ${SRC_FUZZERS})
string(REPLACE ".c" "" fuzz_target_name ${fuzz_target_src}) string(REPLACE ".c" "" fuzz_target_name ${fuzz_target_src})
string(REPLACE "_fuzzer" "" fuzz_name ${fuzz_target_name}) string(REPLACE "_fuzzer" "" fuzz_name ${fuzz_target_name})
...@@ -20,7 +16,11 @@ foreach(fuzz_target_src ${SRC_FUZZ}) ...@@ -20,7 +16,11 @@ foreach(fuzz_target_src ${SRC_FUZZ})
endif() endif()
add_executable(${fuzz_target_name} ${${fuzz_target_name}_SOURCES}) add_executable(${fuzz_target_name} ${${fuzz_target_name}_SOURCES})
set_target_properties(${fuzz_target_name} PROPERTIES C_STANDARD 90) set_target_properties(${fuzz_target_name} PROPERTIES C_STANDARD 90)
target_link_libraries(${fuzz_target_name} ${LIBGIT2_LIBS})
target_include_directories(${fuzz_target_name} PRIVATE ${LIBGIT2_INCLUDES} ${LIBGIT2_DEPENDENCY_INCLUDES})
target_include_directories(${fuzz_target_name} SYSTEM PRIVATE ${LIBGIT2_SYSTEM_INCLUDES})
target_link_libraries(${fuzz_target_name} ${LIBGIT2_SYSTEM_LIBS})
add_test(${fuzz_target_name} "${CMAKE_CURRENT_BINARY_DIR}/${fuzz_target_name}" "${CMAKE_CURRENT_SOURCE_DIR}/corpora/${fuzz_name}") add_test(${fuzz_target_name} "${CMAKE_CURRENT_BINARY_DIR}/${fuzz_target_name}" "${CMAKE_CURRENT_SOURCE_DIR}/corpora/${fuzz_name}")
endforeach() endforeach()
...@@ -38,8 +38,6 @@ set(LIBGIT2_INCLUDES ...@@ -38,8 +38,6 @@ set(LIBGIT2_INCLUDES
"${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}"
"${libgit2_SOURCE_DIR}/src" "${libgit2_SOURCE_DIR}/src"
"${libgit2_SOURCE_DIR}/include") "${libgit2_SOURCE_DIR}/include")
set(LIBGIT2_SYSTEM_INCLUDES "")
set(LIBGIT2_LIBS "")
if(HAVE_FUTIMENS) if(HAVE_FUTIMENS)
set(GIT_USE_FUTIMENS 1) set(GIT_USE_FUTIMENS 1)
...@@ -59,23 +57,23 @@ check_function_exists(qsort_s GIT_QSORT_S) ...@@ -59,23 +57,23 @@ check_function_exists(qsort_s GIT_QSORT_S)
# Find required dependencies # Find required dependencies
if(WIN32) if(WIN32)
list(APPEND LIBGIT2_LIBS ws2_32) list(APPEND LIBGIT2_SYSTEM_LIBS ws2_32)
elseif(CMAKE_SYSTEM_NAME MATCHES "(Solaris|SunOS)") elseif(CMAKE_SYSTEM_NAME MATCHES "(Solaris|SunOS)")
list(APPEND LIBGIT2_LIBS socket nsl) list(APPEND LIBGIT2_SYSTEM_LIBS socket nsl)
list(APPEND LIBGIT2_PC_LIBS "-lsocket" "-lnsl") list(APPEND LIBGIT2_PC_LIBS "-lsocket" "-lnsl")
elseif(CMAKE_SYSTEM_NAME MATCHES "Haiku") elseif(CMAKE_SYSTEM_NAME MATCHES "Haiku")
list(APPEND LIBGIT2_LIBS network) list(APPEND LIBGIT2_SYSTEM_LIBS network)
list(APPEND LIBGIT2_PC_LIBS "-lnetwork") list(APPEND LIBGIT2_PC_LIBS "-lnetwork")
endif() endif()
check_library_exists(rt clock_gettime "time.h" NEED_LIBRT) check_library_exists(rt clock_gettime "time.h" NEED_LIBRT)
if(NEED_LIBRT) if(NEED_LIBRT)
list(APPEND LIBGIT2_LIBS rt) list(APPEND LIBGIT2_SYSTEM_LIBS rt)
list(APPEND LIBGIT2_PC_LIBS "-lrt") list(APPEND LIBGIT2_PC_LIBS "-lrt")
endif() endif()
if(USE_THREADS) if(USE_THREADS)
list(APPEND LIBGIT2_LIBS ${CMAKE_THREAD_LIBS_INIT}) list(APPEND LIBGIT2_SYSTEM_LIBS ${CMAKE_THREAD_LIBS_INIT})
list(APPEND LIBGIT2_PC_LIBS ${CMAKE_THREAD_LIBS_INIT}) list(APPEND LIBGIT2_PC_LIBS ${CMAKE_THREAD_LIBS_INIT})
endif() endif()
add_feature_info(threadsafe USE_THREADS "threadsafe support") add_feature_info(threadsafe USE_THREADS "threadsafe support")
...@@ -99,14 +97,29 @@ include(SelectSSH) ...@@ -99,14 +97,29 @@ include(SelectSSH)
include(SelectWinHTTP) include(SelectWinHTTP)
include(SelectZlib) include(SelectZlib)
if(USE_SHA1 STREQUAL "CollisionDetection")
file(GLOB SRC_SHA1 hash/sha1/collisiondetect.* hash/sha1/sha1dc/*)
elseif(USE_SHA1 STREQUAL "OpenSSL")
file(GLOB SRC_SHA1 hash/sha1/openssl.*)
elseif(USE_SHA1 STREQUAL "CommonCrypto")
file(GLOB SRC_SHA1 hash/sha1/common_crypto.*)
elseif(USE_SHA1 STREQUAL "mbedTLS")
file(GLOB SRC_SHA1 hash/sha1/mbedtls.*)
elseif(USE_SHA1 STREQUAL "Win32")
file(GLOB SRC_SHA1 hash/sha1/win32.*)
elseif(USE_SHA1 STREQUAL "Generic")
file(GLOB SRC_SHA1 hash/sha1/generic.*)
endif()
list(APPEND SRC_SHA1 "hash/sha1.h")
target_sources(git2internal PRIVATE ${SRC_SHA1}) target_sources(git2internal PRIVATE ${SRC_SHA1})
# Optional external dependency: ntlmclient # Optional external dependency: ntlmclient
if(USE_NTLMCLIENT) if(USE_NTLMCLIENT)
set(GIT_NTLM 1) set(GIT_NTLM 1)
add_subdirectory("${libgit2_SOURCE_DIR}/deps/ntlmclient" "${libgit2_BINARY_DIR}/deps/ntlmclient") add_subdirectory("${libgit2_SOURCE_DIR}/deps/ntlmclient" "${libgit2_BINARY_DIR}/deps/ntlmclient")
list(APPEND LIBGIT2_INCLUDES "${libgit2_SOURCE_DIR}/deps/ntlmclient") list(APPEND LIBGIT2_DEPENDENCY_INCLUDES "${libgit2_SOURCE_DIR}/deps/ntlmclient")
list(APPEND LIBGIT2_OBJECTS "$<TARGET_OBJECTS:ntlmclient>") list(APPEND LIBGIT2_DEPENDENCY_OBJECTS "$<TARGET_OBJECTS:ntlmclient>")
endif() endif()
add_feature_info(ntlmclient GIT_NTLM "NTLM authentication support for Unix") add_feature_info(ntlmclient GIT_NTLM "NTLM authentication support for Unix")
...@@ -121,7 +134,7 @@ endif() ...@@ -121,7 +134,7 @@ endif()
if(ICONV_FOUND) if(ICONV_FOUND)
set(GIT_USE_ICONV 1) set(GIT_USE_ICONV 1)
list(APPEND LIBGIT2_SYSTEM_INCLUDES ${ICONV_INCLUDE_DIR}) list(APPEND LIBGIT2_SYSTEM_INCLUDES ${ICONV_INCLUDE_DIR})
list(APPEND LIBGIT2_LIBS ${ICONV_LIBRARIES}) list(APPEND LIBGIT2_SYSTEM_LIBS ${ICONV_LIBRARIES})
list(APPEND LIBGIT2_PC_LIBS ${ICONV_LIBRARIES}) list(APPEND LIBGIT2_PC_LIBS ${ICONV_LIBRARIES})
endif() endif()
add_feature_info(iconv GIT_USE_ICONV "iconv encoding conversion support") add_feature_info(iconv GIT_USE_ICONV "iconv encoding conversion support")
...@@ -210,15 +223,17 @@ endif() ...@@ -210,15 +223,17 @@ endif()
configure_file(features.h.in git2/sys/features.h) configure_file(features.h.in git2/sys/features.h)
ide_split_sources(git2internal) ide_split_sources(git2internal)
list(APPEND LIBGIT2_OBJECTS $<TARGET_OBJECTS:git2internal>) list(APPEND LIBGIT2_OBJECTS $<TARGET_OBJECTS:git2internal> ${LIBGIT2_DEPENDENCY_OBJECTS})
target_include_directories(git2internal PRIVATE ${LIBGIT2_INCLUDES} PUBLIC ${libgit2_SOURCE_DIR}/include) target_include_directories(git2internal PRIVATE ${LIBGIT2_INCLUDES} ${LIBGIT2_DEPENDENCY_INCLUDES} PUBLIC ${libgit2_SOURCE_DIR}/include)
target_include_directories(git2internal SYSTEM PRIVATE ${LIBGIT2_SYSTEM_INCLUDES}) target_include_directories(git2internal SYSTEM PRIVATE ${LIBGIT2_SYSTEM_INCLUDES})
set(LIBGIT2_OBJECTS ${LIBGIT2_OBJECTS} PARENT_SCOPE)
set(LIBGIT2_INCLUDES ${LIBGIT2_INCLUDES} PARENT_SCOPE) set(LIBGIT2_INCLUDES ${LIBGIT2_INCLUDES} PARENT_SCOPE)
set(LIBGIT2_OBJECTS ${LIBGIT2_OBJECTS} PARENT_SCOPE)
set(LIBGIT2_DEPENDENCY_INCLUDES ${LIBGIT2_DEPENDENCY_INCLUDES} PARENT_SCOPE)
set(LIBGIT2_DEPENDENCY_OBJECTS ${LIBGIT2_DEPENDENCY_OBJECTS} PARENT_SCOPE)
set(LIBGIT2_SYSTEM_INCLUDES ${LIBGIT2_SYSTEM_INCLUDES} PARENT_SCOPE) set(LIBGIT2_SYSTEM_INCLUDES ${LIBGIT2_SYSTEM_INCLUDES} PARENT_SCOPE)
set(LIBGIT2_LIBS ${LIBGIT2_LIBS} PARENT_SCOPE) set(LIBGIT2_SYSTEM_LIBS ${LIBGIT2_SYSTEM_LIBS} PARENT_SCOPE)
if(XCODE_VERSION) if(XCODE_VERSION)
# This is required for Xcode to actually link the libgit2 library # This is required for Xcode to actually link the libgit2 library
...@@ -229,7 +244,7 @@ endif() ...@@ -229,7 +244,7 @@ endif()
# Compile and link libgit2 # Compile and link libgit2
add_library(git2 ${WIN_RC} ${LIBGIT2_OBJECTS}) add_library(git2 ${WIN_RC} ${LIBGIT2_OBJECTS})
target_link_libraries(git2 ${LIBGIT2_LIBS}) target_link_libraries(git2 ${LIBGIT2_SYSTEM_LIBS})
set_target_properties(git2 PROPERTIES C_STANDARD 90) set_target_properties(git2 PROPERTIES C_STANDARD 90)
set_target_properties(git2 PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${libgit2_BINARY_DIR}) set_target_properties(git2 PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${libgit2_BINARY_DIR})
......
...@@ -16,7 +16,7 @@ add_definitions(-D_FILE_OFFSET_BITS=64) ...@@ -16,7 +16,7 @@ add_definitions(-D_FILE_OFFSET_BITS=64)
# Ensure that we do not use deprecated functions internally # Ensure that we do not use deprecated functions internally
add_definitions(-DGIT_DEPRECATE_HARD) add_definitions(-DGIT_DEPRECATE_HARD)
include_directories(${CLAR_PATH} ${libgit2_BINARY_DIR}/src) set(TEST_INCLUDES "${CLAR_PATH}" "${CMAKE_CURRENT_BINARY_DIR}")
file(GLOB_RECURSE SRC_TEST ${CLAR_PATH}/*/*.c ${CLAR_PATH}/*/*.h) file(GLOB_RECURSE SRC_TEST ${CLAR_PATH}/*/*.c ${CLAR_PATH}/*/*.h)
set(SRC_CLAR "main.c" "clar_libgit2.c" "clar_libgit2_trace.c" "clar_libgit2_timer.c" "clar.c") set(SRC_CLAR "main.c" "clar_libgit2.c" "clar_libgit2_trace.c" "clar_libgit2_timer.c" "clar.c")
...@@ -30,22 +30,20 @@ add_custom_command( ...@@ -30,22 +30,20 @@ add_custom_command(
DEPENDS ${SRC_TEST} DEPENDS ${SRC_TEST}
WORKING_DIRECTORY ${CLAR_PATH} WORKING_DIRECTORY ${CLAR_PATH}
) )
include_directories(${CMAKE_CURRENT_BINARY_DIR})
set_source_files_properties( set_source_files_properties(
${CLAR_PATH}/clar.c ${CLAR_PATH}/clar.c
PROPERTIES OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/clar.suite) PROPERTIES OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/clar.suite)
include_directories(${LIBGIT2_INCLUDES})
include_directories(SYSTEM ${LIBGIT2_SYSTEM_INCLUDES})
add_executable(libgit2_tests ${SRC_CLAR} ${SRC_TEST} ${LIBGIT2_OBJECTS}) add_executable(libgit2_tests ${SRC_CLAR} ${SRC_TEST} ${LIBGIT2_OBJECTS})
set_target_properties(libgit2_tests PROPERTIES C_STANDARD 90) set_target_properties(libgit2_tests PROPERTIES C_STANDARD 90)
set_target_properties(libgit2_tests PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${libgit2_BINARY_DIR}) set_target_properties(libgit2_tests PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${libgit2_BINARY_DIR})
target_include_directories(libgit2_tests PRIVATE ../src PUBLIC ../include) target_include_directories(libgit2_tests PRIVATE ${TEST_INCLUDES} ${LIBGIT2_INCLUDES} ${LIBGIT2_DEPENDENCY_INCLUDES})
target_link_libraries(libgit2_tests ${LIBGIT2_LIBS}) target_include_directories(libgit2_tests SYSTEM PRIVATE ${LIBGIT2_SYSTEM_INCLUDES})
target_link_libraries(libgit2_tests ${LIBGIT2_SYSTEM_LIBS})
ide_split_sources(libgit2_tests) ide_split_sources(libgit2_tests)
# #
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment