]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Fix an annoying build problem where you could
authorTim Kientzle <kientzle@gmail.com>
Mon, 29 Nov 2010 01:35:18 +0000 (20:35 -0500)
committerTim Kientzle <kientzle@gmail.com>
Mon, 29 Nov 2010 01:35:18 +0000 (20:35 -0500)
configure with cmake, make some changes, re-configure,
and the build would consistently break with missing crypto
libraries.

The solution is to separate testing for available
implementations (the try-compiles happen only if
the decision hasn't been cached) from deciding which
additional libraries to add to the build (which happens
regardless).

SVN-Revision: 2806

CMakeLists.txt

index 7a81d474080f40f8fe726c0f17d9bd368224a415..436d57ed90be3af900dc9e602c95ab5b75eeea7c 100644 (file)
@@ -286,22 +286,19 @@ MACRO(CHECK_MD HASH IMPLEMENTATIONS)
     ELSE(HAVE_SYS_TYPES_H)
         SET(HASH_HEADER_CONFIG "")
     ENDIF(HAVE_SYS_TYPES_H)
+    STRING(TOLOWER "${HASH}" lower_hash)
+    STRING(TOUPPER "${HASH}" hash)
 
     FOREACH(IMPLEMENTATION ${IMPLEMENTATIONS})
       IF(NOT DEFINED ARCHIVE_HASH_${HASH}_${IMPLEMENTATION})
-       STRING(TOLOWER "${HASH}" lower_hash)
-       STRING(TOUPPER "${HASH}" hash)
-
-       SET(HASH_REQUIRED_INCLUDES)
+        # Probe the local implementation for whether this
+       # hash implementation is available on this platform.
        SET(TRY_HASH_REQUIRED_INCLUDES
          "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_CURRENT_SOURCE_DIR}/libarchive")
-       SET(HASH_REQUIRED_LIBS)
        SET(TRY_HASH_REQUIRED_LIBS)
        IF ("${IMPLEMENTATION}" MATCHES "^OPENSSL$" AND OPENSSL_FOUND)
-           SET(HASH_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR})
            SET(TRY_HASH_REQUIRED_INCLUDES
              "${TRY_HASH_REQUIRED_INCLUDES};${OPENSSL_INCLUDE_DIR}")
-           SET(HASH_REQUIRED_LIBS ${OPENSSL_LIBRARIES})
            SET(TRY_HASH_REQUIRED_LIBS
                "-DLINK_LIBRARIES:STRING=${OPENSSL_LIBRARIES}")
        ENDIF ("${IMPLEMENTATION}" MATCHES "^OPENSSL$" AND OPENSSL_FOUND)
@@ -335,28 +332,27 @@ main(int argc, char **argv)
           "${TRY_HASH_REQUIRED_INCLUDES}"
          OUTPUT_VARIABLE OUTPUT)
 
-       IF (ARCHIVE_HASH_${HASH}_${IMPLEMENTATION})
-           MESSAGE(STATUS "Checking support for ARCHIVE_HASH_${HASH}_${IMPLEMENTATION} -- found")
-           IF (HASH_REQUIRED_INCLUDES)
-               INCLUDE_DIRECTORIES(${HASH_REQUIRED_INCLUDES})
-           ENDIF (HASH_REQUIRED_INCLUDES)
-           IF (HASH_REQUIRED_LIBS)
-               LIST(APPEND ADDITIONAL_LIBS ${HASH_REQUIRED_LIBS})
-               LIST(REMOVE_DUPLICATES ADDITIONAL_LIBS)
-           ENDIF (HASH_REQUIRED_LIBS)
-           BREAK()
-       ENDIF (ARCHIVE_HASH_${HASH}_${IMPLEMENTATION})
-
-       MESSAGE(STATUS "Checking support for ARCHIVE_HASH_${HASH}_${IMPLEMENTATION} -- not found")
-       FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+       # Inform user whether or not we found it; if not, log why we didn't.
+        IF (ARCHIVE_HASH_${HASH}_${IMPLEMENTATION})
+          MESSAGE(STATUS "Checking support for ARCHIVE_HASH_${HASH}_${IMPLEMENTATION} -- found")
+        ELSE (ARCHIVE_HASH_${HASH}_${IMPLEMENTATION})
+          MESSAGE(STATUS "Checking support for ARCHIVE_HASH_${HASH}_${IMPLEMENTATION} -- not found")
+          FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
            "Checking support for ARCHIVE_HASH_${HASH}_${IMPLEMENTATION} failed with the following output:\n"
            "${OUTPUT}\n"
            "Source file was:\n${SOURCE}\n")
-      ELSE(NOT DEFINED ARCHIVE_HASH_${HASH}_${IMPLEMENTATION})
-        IF(ARCHIVE_HASH_${HASH}_${IMPLEMENTATION})
-           BREAK()
-        ENDIF(ARCHIVE_HASH_${HASH}_${IMPLEMENTATION})
+        ENDIF (ARCHIVE_HASH_${HASH}_${IMPLEMENTATION})
       ENDIF(NOT DEFINED ARCHIVE_HASH_${HASH}_${IMPLEMENTATION})
+
+      # Add appropriate libs/includes depending on whether the implementation
+      # was found on this platform.
+      IF (ARCHIVE_HASH_${HASH}_${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_HASH_${HASH}_${IMPLEMENTATION})
     ENDFOREACH(IMPLEMENTATION)
 ENDMACRO(CHECK_MD HASH IMPLEMENTATIONS)