]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Rework the crypto probe to check a list of algorithms for
authorTim Kientzle <kientzle@gmail.com>
Sat, 17 Dec 2011 07:38:11 +0000 (02:38 -0500)
committerTim Kientzle <kientzle@gmail.com>
Sat, 17 Dec 2011 07:38:11 +0000 (02:38 -0500)
a single library, rather than a list of libraries for each algorithm.
Use this to order libmd to be checked after OpenSSL/libcrypto.

SVN-Revision: 3928

CMakeLists.txt

index 04ee4dabe89b12b8dec8770e1076ff3e3754d1a3..757898acd78c4caec2d87415a1c1ece5dc3da977 100644 (file)
@@ -341,22 +341,23 @@ ENDIF(LIBMD_FOUND)
 # platforms, just see if archive_crypto.c can compile and link against
 # required libraries.
 #
-MACRO(CHECK_CRYPTO CRYPTO IMPLEMENTATIONS)
+MACRO(CHECK_CRYPTO ALGORITHMS IMPLEMENTATION)
     IF(HAVE_SYS_TYPES_H)
         SET(CRYPTO_HEADER_CONFIG "#define HAVE_SYS_TYPES_H 1\n")
     ELSE(HAVE_SYS_TYPES_H)
         SET(CRYPTO_HEADER_CONFIG "")
     ENDIF(HAVE_SYS_TYPES_H)
-    STRING(TOLOWER "${CRYPTO}" lower_crypto)
-    STRING(TOUPPER "${CRYPTO}" crypto)
 
-    FOREACH(IMPLEMENTATION ${IMPLEMENTATIONS})
+    FOREACH(ALGORITHM ${ALGORITHMS})
+      STRING(TOLOWER "${ALGORITHM}" lower_algorithm)
+      STRING(TOUPPER "${ALGORITHM}" algorithm)
       IF ("${IMPLEMENTATION}" MATCHES "^OPENSSL$" AND NOT OPENSSL_FOUND)
-        SET(ARCHIVE_CRYPTO_${CRYPTO}_${IMPLEMENTATION} FALSE)
+        SET(ARCHIVE_CRYPTO_${ALGORITHM}_${IMPLEMENTATION} FALSE)
       ELSEIF("${IMPLEMENTATION}" MATCHES "^NETTLE$" AND NOT NETTLE_FOUND)
-        SET(ARCHIVE_CRYPTO_${CRYPTO}_${IMPLEMENTATION} FALSE)
+        SET(ARCHIVE_CRYPTO_${ALGORITHM}_${IMPLEMENTATION} FALSE)
       ENDIF("${IMPLEMENTATION}" MATCHES "^OPENSSL$" AND NOT OPENSSL_FOUND)
-      IF(NOT DEFINED ARCHIVE_CRYPTO_${CRYPTO}_${IMPLEMENTATION})
+
+      IF(NOT DEFINED ARCHIVE_CRYPTO_${ALGORITHM}_${IMPLEMENTATION})
         # Probe the local implementation for whether this
        # crypto implementation is available on this platform.
        SET(TRY_CRYPTO_REQUIRED_INCLUDES
@@ -379,8 +380,8 @@ MACRO(CHECK_CRYPTO CRYPTO IMPLEMENTATIONS)
             ARCHIVE_CRYPTO_C)
 
        SET(SOURCE "
-#define ARCHIVE_${crypto}_COMPILE_TEST
-#define ARCHIVE_CRYPTO_${crypto}_${IMPLEMENTATION}
+#define ARCHIVE_${algorithm}_COMPILE_TEST
+#define ARCHIVE_CRYPTO_${algorithm}_${IMPLEMENTATION}
 #define PLATFORM_CONFIG_H \"check_crypto_md.h\"
 
 ${ARCHIVE_CRYPTO_C}
@@ -398,9 +399,9 @@ main(int argc, char **argv)
 
   FILE(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/check_crypto_md.h" "")
        FILE(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/check_crypto_md.c" "${SOURCE}")
-       MESSAGE(STATUS "Checking support for ARCHIVE_CRYPTO_${CRYPTO}_${IMPLEMENTATION}")
+       MESSAGE(STATUS "Checking support for ARCHIVE_CRYPTO_${ALGORITHM}_${IMPLEMENTATION}")
 
-       TRY_COMPILE(ARCHIVE_CRYPTO_${CRYPTO}_${IMPLEMENTATION}
+       TRY_COMPILE(ARCHIVE_CRYPTO_${ALGORITHM}_${IMPLEMENTATION}
          ${CMAKE_BINARY_DIR}
          ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/check_crypto_md.c
          CMAKE_FLAGS
@@ -409,28 +410,28 @@ main(int argc, char **argv)
          OUTPUT_VARIABLE OUTPUT)
 
        # Inform user whether or not we found it; if not, log why we didn't.
-        IF (ARCHIVE_CRYPTO_${CRYPTO}_${IMPLEMENTATION})
-          MESSAGE(STATUS "Checking support for ARCHIVE_CRYPTO_${CRYPTO}_${IMPLEMENTATION} -- found")
-        ELSE (ARCHIVE_CRYPTO_${CRYPTO}_${IMPLEMENTATION})
-          MESSAGE(STATUS "Checking support for ARCHIVE_CRYPTO_${CRYPTO}_${IMPLEMENTATION} -- not found")
+        IF (ARCHIVE_CRYPTO_${ALGORITHM}_${IMPLEMENTATION})
+          MESSAGE(STATUS "Checking support for ARCHIVE_CRYPTO_${ALGORITHM}_${IMPLEMENTATION} -- found")
+        ELSE (ARCHIVE_CRYPTO_${ALGORITHM}_${IMPLEMENTATION})
+          MESSAGE(STATUS "Checking support for ARCHIVE_CRYPTO_${ALGORITHM}_${IMPLEMENTATION} -- not found")
           FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-           "Checking support for ARCHIVE_CRYPTO_${CRYPTO}_${IMPLEMENTATION} failed with the following output:\n"
+           "Checking support for ARCHIVE_CRYPTO_${ALGORITHM}_${IMPLEMENTATION} failed with the following output:\n"
            "${OUTPUT}\n"
            "Source file was:\n${SOURCE}\n")
-        ENDIF (ARCHIVE_CRYPTO_${CRYPTO}_${IMPLEMENTATION})
-      ENDIF(NOT DEFINED ARCHIVE_CRYPTO_${CRYPTO}_${IMPLEMENTATION})
+        ENDIF (ARCHIVE_CRYPTO_${ALGORITHM}_${IMPLEMENTATION})
+      ENDIF(NOT DEFINED ARCHIVE_CRYPTO_${ALGORITHM}_${IMPLEMENTATION})
 
       # Add appropriate libs/includes depending on whether the implementation
       # was found on this platform.
-      IF (ARCHIVE_CRYPTO_${CRYPTO}_${IMPLEMENTATION})
+      IF (ARCHIVE_CRYPTO_${ALGORITHM}_${IMPLEMENTATION})
         IF ("${IMPLEMENTATION}" MATCHES "^OPENSSL$" AND OPENSSL_FOUND)
           INCLUDE_DIRECTORIES(${OPENSSL_INCLUDE_DIR})
          LIST(APPEND ADDITIONAL_LIBS ${OPENSSL_LIBRARIES})
           LIST(REMOVE_DUPLICATES ADDITIONAL_LIBS)
         ENDIF ("${IMPLEMENTATION}" MATCHES "^OPENSSL$" AND OPENSSL_FOUND)
-      ENDIF (ARCHIVE_CRYPTO_${CRYPTO}_${IMPLEMENTATION})
+      ENDIF (ARCHIVE_CRYPTO_${ALGORITHM}_${IMPLEMENTATION})
     ENDFOREACH(IMPLEMENTATION ${IMPLEMENTATIONS})
-ENDMACRO(CHECK_CRYPTO CRYPTO IMPLEMENTATIONS)
+ENDMACRO(CHECK_CRYPTO ALGORITHMS IMPLEMENTATION)
 
 #
 # CRYPTO functions on Windows is defined at archive_windows.c, thus we do not
@@ -1048,12 +1049,16 @@ ENDIF(ENABLE_ACL)
 # Check MD5/RMD160/SHA support
 # NOTE: Crypto checks must be run last before generating config.h
 #
-CHECK_CRYPTO(MD5 "LIBC;LIBMD;LIBSYSTEM;NETTLE;OPENSSL")
-CHECK_CRYPTO(RMD160 "LIBC;NETTLE;OPENSSL")
-CHECK_CRYPTO(SHA1 "LIBC;LIBMD;LIBSYSTEM;NETTLE;OPENSSL")
-CHECK_CRYPTO(SHA256 "LIBC;LIBC2;LIBC3;LIBMD;LIBSYSTEM;NETTLE;OPENSSL")
-CHECK_CRYPTO(SHA384 "LIBC;LIBC2;LIBC3;LIBSYSTEM;NETTLE;OPENSSL")
-CHECK_CRYPTO(SHA512 "LIBC;LIBC2;LIBC3;LIBMD;LIBSYSTEM;NETTLE;OPENSSL")
+CHECK_CRYPTO("MD5;RMD160;SHA1;SHA256;SHA384;SHA512" LIBC)
+CHECK_CRYPTO("SHA256;SHA384;SHA512" LIBC2)
+CHECK_CRYPTO("SHA256;SHA384;SHA512" LIBC3)
+CHECK_CRYPTO("MD5;SHA1;SHA256;SHA384;SHA512" LIBSYSTEM)
+CHECK_CRYPTO("MD5;RMD160;SHA1;SHA256;SHA384;SHA512" NETTLE)
+CHECK_CRYPTO("MD5;RMD160;SHA1;SHA256;SHA384;SHA512" OPENSSL)
+
+# Libmd has to be probed after OpenSSL.
+CHECK_CRYPTO("MD5;RMD160;SHA1;SHA256;SHA512" LIBMD)
+
 CHECK_CRYPTO_WIN("MD5;SHA1;SHA256;SHA384;SHA512")
 
 # Generate "config.h" from "build/cmake/config.h.in"