From: Tim Kientzle Date: Mon, 29 Nov 2010 01:35:18 +0000 (-0500) Subject: Fix an annoying build problem where you could X-Git-Tag: v3.0.0a~834 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4d49cfcf93bdedda2466cdc1242d730b44107b5d;p=thirdparty%2Flibarchive.git Fix an annoying build problem where you could 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 --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 7a81d4740..436d57ed9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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)