Skip to content

Commit 70db57d

Browse files
authored
Merge pull request libgit2#4398 from pks-t/pks/generic-sha1
cmake: allow explicitly choosing SHA1 backend
2 parents eebc5e0 + 70aa614 commit 70db57d

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" OFF )
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
@@ -122,10 +122,6 @@ ELSE ()
122122
PKG_CHECK_MODULES(CURL libcurl)
123123
ENDIF ()
124124

125-
IF (NOT AMIGA AND (USE_HTTPS STREQUAL "OpenSSL" OR USE_HTTPS STREQUAL "ON"))
126-
FIND_PACKAGE(OpenSSL QUIET)
127-
ENDIF ()
128-
129125
IF (CURL_FOUND)
130126
SET(GIT_CURL 1)
131127
LIST(APPEND LIBGIT2_INCLUDES ${CURL_INCLUDE_DIRS})
@@ -178,6 +174,8 @@ IF (USE_HTTPS)
178174
LIST(APPEND LIBGIT2_LIBS ${COREFOUNDATION_LIBRARIES} ${SECURITY_LIBRARIES})
179175
LIST(APPEND LIBGIT2_PC_LIBS ${COREFOUNDATION_LDFLAGS} ${SECURITY_LDFLAGS})
180176
ELSEIF (HTTPS_BACKEND STREQUAL "OpenSSL")
177+
FIND_PACKAGE(OpenSSL)
178+
181179
IF (NOT OPENSSL_FOUND)
182180
MESSAGE(FATAL_ERROR "Asked for OpenSSL TLS backend, but it wasn't found")
183181
ENDIF()
@@ -199,34 +197,42 @@ ELSE()
199197
ENDIF()
200198

201199
# Specify sha1 implementation
202-
IF (USE_SHA1DC)
203-
ADD_FEATURE_INFO(SHA ON "using SHA1DC")
200+
IF(SHA1_BACKEND STREQUAL "OpenSSL")
201+
IF(NOT OPENSSL_FOUND)
202+
FIND_PACKAGE(OpenSSL)
203+
IF(NOT OPENSSL_FOUND)
204+
MESSAGE(FATAL_ERROR "Requested OpenSSL SHA1 backend, but OpenSSL could not be found")
205+
ENDIF()
206+
ENDIF()
207+
208+
ADD_FEATURE_INFO(SHA ON "using OpenSSL")
209+
SET(GIT_SHA1_OPENSSL 1)
210+
IF(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
211+
LIST(APPEND LIBGIT2_PC_LIBS "-lssl")
212+
ELSE()
213+
SET(LIBGIT2_PC_REQUIRES "${LIBGIT2_PC_REQUIRES} openssl")
214+
ENDIF()
215+
ELSEIF(SHA1_BACKEND STREQUAL "CollisionDetection")
216+
ADD_FEATURE_INFO(SHA ON "using CollisionDetection")
204217
SET(GIT_SHA1_COLLISIONDETECT 1)
205218
ADD_DEFINITIONS(-DSHA1DC_NO_STANDARD_INCLUDES=1)
206219
ADD_DEFINITIONS(-DSHA1DC_CUSTOM_INCLUDE_SHA1_C=\"common.h\")
207220
ADD_DEFINITIONS(-DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C=\"common.h\")
208221
FILE(GLOB SRC_SHA1 hash/hash_collisiondetect.c hash/sha1dc/*)
209-
ELSEIF (WIN32 AND NOT MINGW)
210-
ADD_FEATURE_INFO(SHA ON "using SHA1_WIN32")
222+
ELSEIF(SHA1_BACKEND STREQUAL "Generic")
223+
ADD_FEATURE_INFO(SHA ON "using Generic")
224+
FILE(GLOB SRC_SHA1 hash/hash_generic.c)
225+
ELSEIF(SHA1_BACKEND STREQUAL "Win32")
226+
ADD_FEATURE_INFO(SHA ON "using Win32")
211227
SET(GIT_SHA1_WIN32 1)
212228
FILE(GLOB SRC_SHA1 hash/hash_win32.c)
213-
ELSEIF (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
229+
ELSEIF(SHA1_BACKEND STREQUAL "CommonCrypto")
214230
ADD_FEATURE_INFO(SHA ON "using CommonCrypto")
215231
SET(GIT_SHA1_COMMON_CRYPTO 1)
216-
ELSEIF (OPENSSL_FOUND)
217-
ADD_FEATURE_INFO(SHA ON "using OpenSSL")
218-
SET(GIT_SHA1_OPENSSL 1)
219-
IF (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
220-
LIST(APPEND LIBGIT2_PC_LIBS "-lssl")
221-
ELSE()
222-
SET(LIBGIT2_PC_REQUIRES "${LIBGIT2_PC_REQUIRES} openssl")
223-
ENDIF ()
224232
ELSE()
225-
ADD_FEATURE_INFO(SHA ON "using generic")
226-
FILE(GLOB SRC_SHA1 hash/hash_generic.c)
233+
MESSAGE(FATAL_ERROR "Asked for unknown SHA1 backend ${SHA1_BACKEND}")
227234
ENDIF()
228235

229-
230236
# Include POSIX regex when it is required
231237
IF(WIN32 OR AMIGA OR CMAKE_SYSTEM_NAME MATCHES "(Solaris|SunOS)")
232238
ADD_SUBDIRECTORY("${libgit2_SOURCE_DIR}/deps/regex" "${libgit2_BINARY_DIR}/deps/regex")

0 commit comments

Comments
 (0)