Skip to content

Commit 70aa614

Browse files
committed
cmake: allow explicitly choosing SHA1 backend
Right now, if SHA1DC is disabled, the SHA1 backend is mostly chosen based on which system libgit2 is being compiled on and which libraries have been found. To give developers and distributions more choice, enable them to request specific backends by passing in a `-DSHA1_BACKEND=<BACKEND>` option instead. This completely replaces the previous auto-selection.
1 parent e7495ce commit 70aa614

File tree

2 files changed

+27
-21
lines changed

2 files changed

+27
-21
lines changed

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ OPTION( PROFILE "Generate profiling information" OFF )
4242
OPTION( ENABLE_TRACE "Enables tracing support" OFF )
4343
OPTION( LIBGIT2_FILENAME "Name of the produced binary" OFF )
4444

45-
OPTION( USE_SHA1DC "Use SHA-1 with collision detection" ON )
45+
SET(SHA1_BACKEND "CollisionDetection" CACHE STRING "Backend to use for SHA1. One of Generic, OpenSSL, Win32, CommonCrypto, CollisionDetection. ")
4646
OPTION( USE_SSH "Link with libssh to enable SSH support" ON )
4747
OPTION( USE_HTTPS "Enable HTTPS support. Can be set to a specific backend" ON )
4848
OPTION( USE_GSSAPI "Link with libgssapi for SPNEGO auth" OFF )

src/CMakeLists.txt

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -127,10 +127,6 @@ ELSE ()
127127
PKG_CHECK_MODULES(CURL libcurl)
128128
ENDIF ()
129129

130-
IF (NOT AMIGA AND (USE_HTTPS STREQUAL "OpenSSL" OR USE_HTTPS STREQUAL "ON"))
131-
FIND_PACKAGE(OpenSSL QUIET)
132-
ENDIF ()
133-
134130
IF (CURL_FOUND)
135131
SET(GIT_CURL 1)
136132
LIST(APPEND LIBGIT2_INCLUDES ${CURL_INCLUDE_DIRS})
@@ -183,6 +179,8 @@ IF (USE_HTTPS)
183179
LIST(APPEND LIBGIT2_LIBS ${COREFOUNDATION_LIBRARIES} ${SECURITY_LIBRARIES})
184180
LIST(APPEND LIBGIT2_PC_LIBS ${COREFOUNDATION_LDFLAGS} ${SECURITY_LDFLAGS})
185181
ELSEIF (HTTPS_BACKEND STREQUAL "OpenSSL")
182+
FIND_PACKAGE(OpenSSL)
183+
186184
IF (NOT OPENSSL_FOUND)
187185
MESSAGE(FATAL_ERROR "Asked for OpenSSL TLS backend, but it wasn't found")
188186
ENDIF()
@@ -204,34 +202,42 @@ ELSE()
204202
ENDIF()
205203

206204
# Specify sha1 implementation
207-
IF (USE_SHA1DC)
208-
ADD_FEATURE_INFO(SHA ON "using SHA1DC")
205+
IF(SHA1_BACKEND STREQUAL "OpenSSL")
206+
IF(NOT OPENSSL_FOUND)
207+
FIND_PACKAGE(OpenSSL)
208+
IF(NOT OPENSSL_FOUND)
209+
MESSAGE(FATAL_ERROR "Requested OpenSSL SHA1 backend, but OpenSSL could not be found")
210+
ENDIF()
211+
ENDIF()
212+
213+
ADD_FEATURE_INFO(SHA ON "using OpenSSL")
214+
SET(GIT_SHA1_OPENSSL 1)
215+
IF(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
216+
LIST(APPEND LIBGIT2_PC_LIBS "-lssl")
217+
ELSE()
218+
SET(LIBGIT2_PC_REQUIRES "${LIBGIT2_PC_REQUIRES} openssl")
219+
ENDIF()
220+
ELSEIF(SHA1_BACKEND STREQUAL "CollisionDetection")
221+
ADD_FEATURE_INFO(SHA ON "using CollisionDetection")
209222
SET(GIT_SHA1_COLLISIONDETECT 1)
210223
ADD_DEFINITIONS(-DSHA1DC_NO_STANDARD_INCLUDES=1)
211224
ADD_DEFINITIONS(-DSHA1DC_CUSTOM_INCLUDE_SHA1_C=\"common.h\")
212225
ADD_DEFINITIONS(-DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C=\"common.h\")
213226
FILE(GLOB SRC_SHA1 hash/hash_collisiondetect.c hash/sha1dc/*)
214-
ELSEIF (WIN32 AND NOT MINGW)
215-
ADD_FEATURE_INFO(SHA ON "using SHA1_WIN32")
227+
ELSEIF(SHA1_BACKEND STREQUAL "Generic")
228+
ADD_FEATURE_INFO(SHA ON "using Generic")
229+
FILE(GLOB SRC_SHA1 hash/hash_generic.c)
230+
ELSEIF(SHA1_BACKEND STREQUAL "Win32")
231+
ADD_FEATURE_INFO(SHA ON "using Win32")
216232
SET(GIT_SHA1_WIN32 1)
217233
FILE(GLOB SRC_SHA1 hash/hash_win32.c)
218-
ELSEIF (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
234+
ELSEIF(SHA1_BACKEND STREQUAL "CommonCrypto")
219235
ADD_FEATURE_INFO(SHA ON "using CommonCrypto")
220236
SET(GIT_SHA1_COMMON_CRYPTO 1)
221-
ELSEIF (OPENSSL_FOUND)
222-
ADD_FEATURE_INFO(SHA ON "using OpenSSL")
223-
SET(GIT_SHA1_OPENSSL 1)
224-
IF (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
225-
LIST(APPEND LIBGIT2_PC_LIBS "-lssl")
226-
ELSE()
227-
SET(LIBGIT2_PC_REQUIRES "${LIBGIT2_PC_REQUIRES} openssl")
228-
ENDIF ()
229237
ELSE()
230-
ADD_FEATURE_INFO(SHA ON "using generic")
231-
FILE(GLOB SRC_SHA1 hash/hash_generic.c)
238+
MESSAGE(FATAL_ERROR "Asked for unknown SHA1 backend ${SHA1_BACKEND}")
232239
ENDIF()
233240

234-
235241
# Include POSIX regex when it is required
236242
IF(WIN32 OR AMIGA OR CMAKE_SYSTEM_NAME MATCHES "(Solaris|SunOS)")
237243
ADD_SUBDIRECTORY("${libgit2_SOURCE_DIR}/deps/regex" "${libgit2_BINARY_DIR}/deps/regex")

0 commit comments

Comments
 (0)