Skip to content

Commit 541de51

Browse files
committed
cmake: streamline backend detection
We're currently doing unnecessary work to auto-detect backends even if the functionality is disabled altogether. Let's fix this by removing the extraneous FOO_BACKEND variables, instead letting auto-detection modify the variable itself.
1 parent 7d3c705 commit 541de51

File tree

4 files changed

+66
-91
lines changed

4 files changed

+66
-91
lines changed

cmake/Modules/SelectGSSAPI.cmake

Lines changed: 18 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,46 @@
1-
# Select the backend to use
2-
3-
# We try to find any packages our backends might use
4-
51
INCLUDE(SanitizeBool)
62

3+
# We try to find any packages our backends might use
74
FIND_PACKAGE(GSSAPI)
85
IF (CMAKE_SYSTEM_NAME MATCHES "Darwin")
96
INCLUDE(FindGSSFramework)
107
ENDIF()
118

12-
# Auto-select GSS backend
13-
SanitizeBool(USE_GSSAPI)
14-
IF (USE_GSSAPI STREQUAL ON)
15-
IF (GSSFRAMEWORK_FOUND)
16-
SET(GSS_BACKEND "GSS.framework")
17-
ELSEIF(GSSAPI_FOUND)
18-
SET(GSS_BACKEND "gssapi")
19-
ELSE()
20-
MESSAGE(FATAL_ERROR "Unable to autodetect a usable GSS backend."
21-
"Please pass the backend name explicitly (-DUSE_GSS=backend)")
9+
IF(USE_GSSAPI)
10+
# Auto-select GSS backend
11+
SanitizeBool(USE_GSSAPI)
12+
IF (USE_GSSAPI STREQUAL ON)
13+
IF (GSSFRAMEWORK_FOUND)
14+
SET(USE_GSSAPI "GSS.framework")
15+
ELSEIF(GSSAPI_FOUND)
16+
SET(USE_GSSAPI "gssapi")
17+
ELSE()
18+
MESSAGE(FATAL_ERROR "Unable to autodetect a usable GSS backend."
19+
"Please pass the backend name explicitly (-DUSE_GSS=backend)")
20+
ENDIF()
2221
ENDIF()
23-
ELSEIF(USE_GSSAPI)
24-
# Backend was explicitly set
25-
SET(GSS_BACKEND ${USE_GSSAPI})
26-
ELSE()
27-
SET(GSS_BACKEND NO)
28-
ENDIF()
2922

30-
IF(GSS_BACKEND)
3123
# Check that we can find what's required for the selected backend
32-
IF (GSS_BACKEND STREQUAL "GSS.framework")
24+
IF (USE_GSSAPI STREQUAL "GSS.framework")
3325
IF (NOT GSSFRAMEWORK_FOUND)
3426
MESSAGE(FATAL_ERROR "Asked for GSS.framework backend, but it wasn't found")
3527
ENDIF()
3628

3729
LIST(APPEND LIBGIT2_LIBS ${GSSFRAMEWORK_LIBRARIES})
3830

3931
SET(GIT_GSSFRAMEWORK 1)
40-
ADD_FEATURE_INFO(SPNEGO GIT_GSSFRAMEWORK "SPNEGO authentication support (${GSS_BACKEND})")
41-
ELSEIF (GSS_BACKEND STREQUAL "gssapi")
32+
ADD_FEATURE_INFO(SPNEGO GIT_GSSFRAMEWORK "SPNEGO authentication support (${USE_GSSAPI})")
33+
ELSEIF (USE_GSSAPI STREQUAL "gssapi")
4234
IF (NOT GSSAPI_FOUND)
4335
MESSAGE(FATAL_ERROR "Asked for gssapi GSS backend, but it wasn't found")
4436
ENDIF()
4537

4638
LIST(APPEND LIBGIT2_LIBS ${GSSAPI_LIBRARIES})
4739

4840
SET(GIT_GSSAPI 1)
49-
ADD_FEATURE_INFO(SPNEGO GIT_GSSAPI "SPNEGO authentication support (${GSS_BACKEND})")
41+
ADD_FEATURE_INFO(SPNEGO GIT_GSSAPI "SPNEGO authentication support (${USE_GSSAPI})")
5042
ELSE()
51-
MESSAGE(FATAL_ERROR "Asked for backend ${GSS_BACKEND} but it wasn't found")
43+
MESSAGE(FATAL_ERROR "Asked for backend ${USE_GSSAPI} but it wasn't found")
5244
ENDIF()
5345
ELSE()
5446
SET(GIT_GSSAPI 0)

cmake/Modules/SelectHTTPSBackend.cmake

Lines changed: 25 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
# Select the backend to use
2-
31
INCLUDE(SanitizeBool)
42

53
# We try to find any packages our backends might use
@@ -10,36 +8,31 @@ IF (CMAKE_SYSTEM_NAME MATCHES "Darwin")
108
FIND_PACKAGE(CoreFoundation)
119
ENDIF()
1210

13-
# Auto-select TLS backend
14-
SanitizeBool(USE_HTTPS)
15-
IF (USE_HTTPS STREQUAL ON)
16-
IF (SECURITY_FOUND)
17-
IF (SECURITY_HAS_SSLCREATECONTEXT)
18-
SET(HTTPS_BACKEND "SecureTransport")
11+
IF(USE_HTTPS)
12+
# Auto-select TLS backend
13+
SanitizeBool(USE_HTTPS)
14+
IF (USE_HTTPS STREQUAL ON)
15+
IF (SECURITY_FOUND)
16+
IF (SECURITY_HAS_SSLCREATECONTEXT)
17+
SET(USE_HTTPS "SecureTransport")
18+
ELSE()
19+
MESSAGE(STATUS "Security framework is too old, falling back to OpenSSL")
20+
SET(USE_HTTPS "OpenSSL")
21+
ENDIF()
22+
ELSEIF (WINHTTP)
23+
SET(USE_HTTPS "WinHTTP")
24+
ELSEIF(OPENSSL_FOUND)
25+
SET(USE_HTTPS "OpenSSL")
26+
ELSEIF(MBEDTLS_FOUND)
27+
SET(USE_HTTPS "mbedTLS")
1928
ELSE()
20-
MESSAGE(STATUS "Security framework is too old, falling back to OpenSSL")
21-
SET(HTTPS_BACKEND "OpenSSL")
29+
MESSAGE(FATAL_ERROR "Unable to autodetect a usable HTTPS backend."
30+
"Please pass the backend name explicitly (-DUSE_HTTPS=backend)")
2231
ENDIF()
23-
ELSEIF (WINHTTP)
24-
SET(HTTPS_BACKEND "WinHTTP")
25-
ELSEIF(OPENSSL_FOUND)
26-
SET(HTTPS_BACKEND "OpenSSL")
27-
ELSEIF(MBEDTLS_FOUND)
28-
SET(HTTPS_BACKEND "mbedTLS")
29-
ELSE()
30-
MESSAGE(FATAL_ERROR "Unable to autodetect a usable HTTPS backend."
31-
"Please pass the backend name explicitly (-DUSE_HTTPS=backend)")
3232
ENDIF()
33-
ELSEIF(USE_HTTPS)
34-
# HTTPS backend was explicitly set
35-
SET(HTTPS_BACKEND ${USE_HTTPS})
36-
ELSE()
37-
SET(HTTPS_BACKEND NO)
38-
ENDIF()
3933

40-
IF(HTTPS_BACKEND)
4134
# Check that we can find what's required for the selected backend
42-
IF (HTTPS_BACKEND STREQUAL "SecureTransport")
35+
IF (USE_HTTPS STREQUAL "SecureTransport")
4336
IF (NOT COREFOUNDATION_FOUND)
4437
MESSAGE(FATAL_ERROR "Cannot use SecureTransport backend, CoreFoundation.framework not found")
4538
ENDIF()
@@ -54,7 +47,7 @@ IF(HTTPS_BACKEND)
5447
LIST(APPEND LIBGIT2_SYSTEM_INCLUDES ${SECURITY_INCLUDE_DIR})
5548
LIST(APPEND LIBGIT2_LIBS ${COREFOUNDATION_LDFLAGS} ${SECURITY_LDFLAGS})
5649
LIST(APPEND LIBGIT2_PC_LIBS ${COREFOUNDATION_LDFLAGS} ${SECURITY_LDFLAGS})
57-
ELSEIF (HTTPS_BACKEND STREQUAL "OpenSSL")
50+
ELSEIF (USE_HTTPS STREQUAL "OpenSSL")
5851
IF (NOT OPENSSL_FOUND)
5952
MESSAGE(FATAL_ERROR "Asked for OpenSSL TLS backend, but it wasn't found")
6053
ENDIF()
@@ -64,7 +57,7 @@ IF(HTTPS_BACKEND)
6457
LIST(APPEND LIBGIT2_LIBS ${OPENSSL_LIBRARIES})
6558
LIST(APPEND LIBGIT2_PC_LIBS ${OPENSSL_LDFLAGS})
6659
LIST(APPEND LIBGIT2_PC_REQUIRES "openssl")
67-
ELSEIF(HTTPS_BACKEND STREQUAL "mbedTLS")
60+
ELSEIF(USE_HTTPS STREQUAL "mbedTLS")
6861
IF (NOT MBEDTLS_FOUND)
6962
MESSAGE(FATAL_ERROR "Asked for mbedTLS backend, but it wasn't found")
7063
ENDIF()
@@ -113,14 +106,14 @@ IF(HTTPS_BACKEND)
113106
# https://github.com/ARMmbed/mbedtls/issues/228
114107
# For now, pass its link flags as our own
115108
LIST(APPEND LIBGIT2_PC_LIBS ${MBEDTLS_LIBRARIES})
116-
ELSEIF (HTTPS_BACKEND STREQUAL "WinHTTP")
109+
ELSEIF (USE_HTTPS STREQUAL "WinHTTP")
117110
# WinHTTP setup was handled in the WinHTTP-specific block above
118111
ELSE()
119-
MESSAGE(FATAL_ERROR "Asked for backend ${HTTPS_BACKEND} but it wasn't found")
112+
MESSAGE(FATAL_ERROR "Asked for backend ${USE_HTTPS} but it wasn't found")
120113
ENDIF()
121114

122115
SET(GIT_HTTPS 1)
123-
ADD_FEATURE_INFO(HTTPS GIT_HTTPS "using ${HTTPS_BACKEND}")
116+
ADD_FEATURE_INFO(HTTPS GIT_HTTPS "using ${USE_HTTPS}")
124117
ELSE()
125118
SET(GIT_HTTPS 0)
126119
ADD_FEATURE_INFO(HTTPS NO "")

cmake/Modules/SelectHashes.cmake

Lines changed: 18 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -5,37 +5,28 @@ INCLUDE(SanitizeBool)
55
# USE_SHA1=CollisionDetection(ON)/HTTPS/Generic/OFF
66

77
SanitizeBool(USE_SHA1)
8-
IF(USE_SHA1 STREQUAL ON OR USE_SHA1 STREQUAL "CollisionDetection")
9-
SET(SHA1_BACKEND "CollisionDetection")
8+
IF(USE_SHA1 STREQUAL ON)
9+
SET(USE_SHA1 "CollisionDetection")
1010
ELSEIF(USE_SHA1 STREQUAL "HTTPS")
11-
message(STATUS "Checking HTTPS backend… ${HTTPS_BACKEND}")
12-
IF(HTTPS_BACKEND STREQUAL "SecureTransport")
13-
SET(SHA1_BACKEND "CommonCrypto")
14-
ELSEIF(HTTPS_BACKEND STREQUAL "WinHTTP")
15-
SET(SHA1_BACKEND "Win32")
16-
ELSEIF(HTTPS_BACKEND)
17-
SET(SHA1_BACKEND ${HTTPS_BACKEND})
11+
IF(USE_HTTPS STREQUAL "SecureTransport")
12+
SET(USE_SHA1 "CommonCrypto")
13+
ELSEIF(USE_HTTPS STREQUAL "WinHTTP")
14+
SET(USE_SHA1 "Win32")
15+
ELSEIF(USE_HTTPS)
16+
SET(USE_SHA1 ${USE_HTTPS})
1817
ELSE()
18+
SET(USE_SHA1 "CollisionDetection")
1919
ENDIF()
20-
IF(NOT HTTPS_BACKEND)
21-
SET(SHA1_BACKEND "CollisionDetection")
22-
ENDIF()
23-
message(STATUS "Using SHA1 backend ${SHA1_BACKEND}")
24-
ELSEIF(USE_SHA1 STREQUAL "Generic")
25-
SET(SHA1_BACKEND "Generic")
26-
# ELSEIF(NOT USE_SHA1)
27-
ELSE()
28-
MESSAGE(FATAL_ERROR "Invalid value for USE_SHA1: ${USE_SHA1}")
2920
ENDIF()
3021

31-
IF(SHA1_BACKEND STREQUAL "CollisionDetection")
22+
IF(USE_SHA1 STREQUAL "CollisionDetection")
3223
SET(GIT_SHA1_COLLISIONDETECT 1)
3324
ADD_DEFINITIONS(-DSHA1DC_NO_STANDARD_INCLUDES=1)
3425
ADD_DEFINITIONS(-DSHA1DC_CUSTOM_INCLUDE_SHA1_C=\"common.h\")
3526
ADD_DEFINITIONS(-DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C=\"common.h\")
3627
FILE(GLOB SRC_SHA1 hash/sha1/collisiondetect.* hash/sha1/sha1dc/*)
37-
ELSEIF(SHA1_BACKEND STREQUAL "OpenSSL")
38-
# OPENSSL_FOUND should already be set, we're checking HTTPS_BACKEND
28+
ELSEIF(USE_SHA1 STREQUAL "OpenSSL")
29+
# OPENSSL_FOUND should already be set, we're checking USE_HTTPS
3930

4031
SET(GIT_SHA1_OPENSSL 1)
4132
IF(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
@@ -44,10 +35,10 @@ ELSEIF(SHA1_BACKEND STREQUAL "OpenSSL")
4435
LIST(APPEND LIBGIT2_PC_REQUIRES "openssl")
4536
ENDIF()
4637
FILE(GLOB SRC_SHA1 hash/sha1/openssl.*)
47-
ELSEIF(SHA1_BACKEND STREQUAL "CommonCrypto")
38+
ELSEIF(USE_SHA1 STREQUAL "CommonCrypto")
4839
SET(GIT_SHA1_COMMON_CRYPTO 1)
4940
FILE(GLOB SRC_SHA1 hash/sha1/common_crypto.*)
50-
ELSEIF(SHA1_BACKEND STREQUAL "mbedTLS")
41+
ELSEIF(USE_SHA1 STREQUAL "mbedTLS")
5142
SET(GIT_SHA1_MBEDTLS 1)
5243
FILE(GLOB SRC_SHA1 hash/sha1/mbedtls.*)
5344
LIST(APPEND LIBGIT2_SYSTEM_INCLUDES ${MBEDTLS_INCLUDE_DIR})
@@ -56,14 +47,13 @@ ELSEIF(SHA1_BACKEND STREQUAL "mbedTLS")
5647
# https://github.com/ARMmbed/mbedtls/issues/228
5748
# For now, pass its link flags as our own
5849
LIST(APPEND LIBGIT2_PC_LIBS ${MBEDTLS_LIBRARIES})
59-
ELSEIF(SHA1_BACKEND STREQUAL "Win32")
50+
ELSEIF(USE_SHA1 STREQUAL "Win32")
6051
SET(GIT_SHA1_WIN32 1)
6152
FILE(GLOB SRC_SHA1 hash/sha1/win32.*)
62-
ELSEIF(SHA1_BACKEND STREQUAL "Generic")
53+
ELSEIF(USE_SHA1 STREQUAL "Generic")
6354
FILE(GLOB SRC_SHA1 hash/sha1/generic.*)
64-
# ELSEIF(NOT USE_SHA1)
6555
ELSE()
66-
MESSAGE(FATAL_ERROR "Asked for unknown SHA1 backend: ${SHA1_BACKEND}")
56+
MESSAGE(FATAL_ERROR "Asked for unknown SHA1 backend: ${USE_SHA1}")
6757
ENDIF()
6858

69-
ADD_FEATURE_INFO(SHA ON "using ${SHA1_BACKEND}")
59+
ADD_FEATURE_INFO(SHA ON "using ${USE_SHA1}")

deps/ntlmclient/CMakeLists.txt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,20 @@ ADD_DEFINITIONS(-DNTLM_STATIC=1)
44

55
DISABLE_WARNINGS(implicit-fallthrough)
66

7-
IF (HTTPS_BACKEND STREQUAL "SecureTransport")
7+
IF(USE_HTTPS STREQUAL "SecureTransport")
88
ADD_DEFINITIONS(-DCRYPT_COMMONCRYPTO)
99
SET(SRC_NTLMCLIENT_CRYPTO "crypt_commoncrypto.c")
1010
# CC_MD4 has been deprecated in macOS 10.15.
1111
SET_SOURCE_FILES_PROPERTIES("crypt_commoncrypto.c" COMPILE_FLAGS "-Wno-deprecated")
12-
ELSEIF (HTTPS_BACKEND STREQUAL "OpenSSL")
12+
ELSEIF(USE_HTTPS STREQUAL "OpenSSL")
1313
ADD_DEFINITIONS(-DCRYPT_OPENSSL)
1414
INCLUDE_DIRECTORIES(${OPENSSL_INCLUDE_DIR})
1515
SET(SRC_NTLMCLIENT_CRYPTO "crypt_openssl.c")
16-
ELSEIF (HTTPS_BACKEND STREQUAL "mbedTLS")
16+
ELSEIF(USE_HTTPS STREQUAL "mbedTLS")
1717
ADD_DEFINITIONS(-DCRYPT_MBEDTLS)
1818
SET(SRC_NTLMCLIENT_CRYPTO "crypt_mbedtls.c")
19-
ELSE ()
20-
MESSAGE(FATAL_ERROR "Unable to use libgit2's HTTPS backend (${HTTPS_BACKEND}) for NTLM crypto")
19+
ELSE()
20+
MESSAGE(FATAL_ERROR "Unable to use libgit2's HTTPS backend (${USE_HTTPS}) for NTLM crypto")
2121
ENDIF()
2222

2323
ADD_LIBRARY(ntlmclient OBJECT ${SRC_NTLMCLIENT} ${SRC_NTLMCLIENT_CRYPTO})

0 commit comments

Comments
 (0)