|
| 1 | +diff --git a/CMakeLists.txt b/CMakeLists.txt |
| 2 | +index 38664d2..d0882b2 100644 |
| 3 | +--- a/CMakeLists.txt |
| 4 | ++++ b/CMakeLists.txt |
| 5 | +@@ -439,6 +439,8 @@ IF(0) |
| 6 | + ENDIF(DEFINED __GNUWIN32PATH AND EXISTS "${__GNUWIN32PATH}") |
| 7 | + |
| 8 | + SET(ADDITIONAL_LIBS "") |
| 9 | ++SET(LIBARCHIVE_LIBS_PRIVATE "") # additional libs for which the pc module is unknown |
| 10 | ++SET(LIBSREQUIRED "") # pc modules for additonal libs |
| 11 | + # |
| 12 | + # Find ZLIB |
| 13 | + # |
| 14 | +@@ -455,6 +457,7 @@ IF(ZLIB_FOUND) |
| 15 | + SET(HAVE_ZLIB_H 1) |
| 16 | + INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIR}) |
| 17 | + LIST(APPEND ADDITIONAL_LIBS ${ZLIB_LIBRARIES}) |
| 18 | ++ STRING(APPEND LIBSREQUIRED " zlib") |
| 19 | + IF(WIN32 AND NOT CYGWIN) |
| 20 | + # |
| 21 | + # Test if ZLIB_WINAPI macro is needed to use. |
| 22 | +@@ -494,6 +497,7 @@ IF(BZIP2_FOUND) |
| 23 | + SET(HAVE_BZLIB_H 1) |
| 24 | + INCLUDE_DIRECTORIES(${BZIP2_INCLUDE_DIR}) |
| 25 | + LIST(APPEND ADDITIONAL_LIBS ${BZIP2_LIBRARIES}) |
| 26 | ++ STRING(APPEND LIBSREQUIRED " bzip2") |
| 27 | + # Test if a macro is needed for the library. |
| 28 | + TRY_MACRO_FOR_LIBRARY( |
| 29 | + "${BZIP2_INCLUDE_DIR}" "${BZIP2_LIBRARIES}" |
| 30 | +@@ -522,6 +526,8 @@ ENDIF() |
| 31 | + IF(LIBLZMA_FOUND) |
| 32 | + SET(HAVE_LIBLZMA 1) |
| 33 | + SET(HAVE_LZMA_H 1) |
| 34 | ++ LIST(APPEND ADDITIONAL_LIBS LibLZMA::LibLZMA) |
| 35 | ++ STRING(APPEND LIBSREQUIRED " liblzma") |
| 36 | + CMAKE_PUSH_CHECK_STATE() |
| 37 | + SET(CMAKE_REQUIRED_INCLUDES ${LIBLZMA_INCLUDE_DIR}) |
| 38 | + SET(CMAKE_REQUIRED_LIBRARIES ${LIBLZMA_LIBRARIES}) |
| 39 | +@@ -569,6 +575,7 @@ IF(LZO2_FOUND) |
| 40 | + SET(HAVE_LZO_LZO1X_H 1) |
| 41 | + INCLUDE_DIRECTORIES(${LZO2_INCLUDE_DIR}) |
| 42 | + LIST(APPEND ADDITIONAL_LIBS ${LZO2_LIBRARY}) |
| 43 | ++ STRING(APPEND LIBSREQUIRED " lzo2") |
| 44 | + # |
| 45 | + # TODO: test for static library. |
| 46 | + # |
| 47 | +@@ -598,6 +605,7 @@ IF(LIBB2_FOUND) |
| 48 | + SET(ARCHIVE_BLAKE2 FALSE) |
| 49 | + LIST(APPEND ADDITIONAL_LIBS ${LIBB2_LIBRARY}) |
| 50 | + INCLUDE_DIRECTORIES(${LIBB2_INCLUDE_DIR}) |
| 51 | ++ LIST(APPEND LIBARCHIVE_LIBS_PRIVATE ${LIBB2_LIBRARY}) |
| 52 | + CMAKE_PUSH_CHECK_STATE() |
| 53 | + SET(CMAKE_REQUIRED_LIBRARIES ${LIBB2_LIBRARY}) |
| 54 | + SET(CMAKE_REQUIRED_INCLUDES ${LIBB2_INCLUDE_DIR}) |
| 55 | +@@ -615,6 +623,8 @@ ENDIF(LIBB2_FOUND) |
| 56 | + # Find LZ4 |
| 57 | + # |
| 58 | + IF(ENABLE_LZ4) |
| 59 | ++ FIND_PACKAGE(LZ4 NAMES lz4 CONFIG REQUIRED) |
| 60 | ++elseif(0) |
| 61 | + IF (LZ4_INCLUDE_DIR) |
| 62 | + # Already in cache, be silent |
| 63 | + SET(LZ4_FIND_QUIETLY TRUE) |
| 64 | +@@ -630,6 +640,10 @@ ENDIF(ENABLE_LZ4) |
| 65 | + IF(LZ4_FOUND) |
| 66 | + SET(HAVE_LIBLZ4 1) |
| 67 | + SET(HAVE_LZ4_H 1) |
| 68 | ++ SET(HAVE_LZ4HC_H 1) |
| 69 | ++ LIST(APPEND ADDITIONAL_LIBS lz4::lz4) |
| 70 | ++ STRING(APPEND LIBSREQUIRED " liblz4") |
| 71 | ++elseif(0) |
| 72 | + CMAKE_PUSH_CHECK_STATE() # Save the state of the variables |
| 73 | + SET(CMAKE_REQUIRED_INCLUDES ${LZ4_INCLUDE_DIR}) |
| 74 | + CHECK_INCLUDE_FILES("lz4hc.h" HAVE_LZ4HC_H) |
| 75 | +@@ -646,6 +660,8 @@ MARK_AS_ADVANCED(CLEAR LZ4_LIBRARY) |
| 76 | + # Find Zstd |
| 77 | + # |
| 78 | + IF(ENABLE_ZSTD) |
| 79 | ++ FIND_PACKAGE(ZSTD NAMES zstd CONFIG REQUIRED) |
| 80 | ++elseif(0) |
| 81 | + IF (ZSTD_INCLUDE_DIR) |
| 82 | + # Already in cache, be silent |
| 83 | + SET(ZSTD_FIND_QUIETLY TRUE) |
| 84 | +@@ -665,6 +681,11 @@ ELSE(ENABLE_ZSTD) |
| 85 | + ENDIF(ENABLE_ZSTD) |
| 86 | + IF(ZSTD_FOUND) |
| 87 | + SET(HAVE_ZSTD_H 1) |
| 88 | ++ SET(HAVE_LIBZSTD 1) |
| 89 | ++ SET(HAVE_ZSTD_compressStream 1) |
| 90 | ++ LIST(APPEND ADDITIONAL_LIBS zstd::libzstd) |
| 91 | ++ STRING(APPEND LIBSREQUIRED " libzstd") |
| 92 | ++elseif(0) |
| 93 | + INCLUDE_DIRECTORIES(${ZSTD_INCLUDE_DIR}) |
| 94 | + LIST(APPEND ADDITIONAL_LIBS ${ZSTD_LIBRARY}) |
| 95 | + CMAKE_PUSH_CHECK_STATE() |
| 96 | +@@ -774,6 +795,7 @@ IF(ENABLE_CNG) |
| 97 | + LA_CHECK_INCLUDE_FILE("bcrypt.h" HAVE_BCRYPT_H) |
| 98 | + IF(HAVE_BCRYPT_H) |
| 99 | + LIST(APPEND ADDITIONAL_LIBS "bcrypt") |
| 100 | ++ LIST(APPEND LIBARCHIVE_LIBS_PRIVATE "bcrypt") |
| 101 | + ENDIF(HAVE_BCRYPT_H) |
| 102 | + ELSE(ENABLE_CNG) |
| 103 | + UNSET(HAVE_BCRYPT_H CACHE) |
| 104 | +@@ -805,6 +827,7 @@ IF(ENABLE_MBEDTLS) |
| 105 | + IF(MBEDTLS_FOUND) |
| 106 | + SET(HAVE_LIBMBEDCRYPTO 1) |
| 107 | + LIST(APPEND ADDITIONAL_LIBS ${MBEDCRYPTO_LIBRARY}) |
| 108 | ++ LIST(APPEND LIBARCHIVE_LIBS_PRIVATE ${MBEDCRYPTO_LIBRARY}) |
| 109 | + INCLUDE_DIRECTORIES(${MBEDTLS_INCLUDE_DIRS}) |
| 110 | + |
| 111 | + LIST(APPEND CMAKE_REQUIRED_INCLUDES ${MBEDTLS_INCLUDE_DIRS}) |
| 112 | +@@ -825,6 +848,7 @@ IF(ENABLE_NETTLE) |
| 113 | + IF(NETTLE_FOUND) |
| 114 | + SET(HAVE_LIBNETTLE 1) |
| 115 | + LIST(APPEND ADDITIONAL_LIBS ${NETTLE_LIBRARIES}) |
| 116 | ++ STRING(APPEND LIBSREQUIRED " nettle") |
| 117 | + INCLUDE_DIRECTORIES(${NETTLE_INCLUDE_DIR}) |
| 118 | + |
| 119 | + LIST(APPEND CMAKE_REQUIRED_INCLUDES ${NETTLE_INCLUDE_DIR}) |
| 120 | +@@ -848,8 +872,8 @@ IF(ENABLE_OPENSSL AND NOT CMAKE_SYSTEM_NAME MATCHES "Darwin") |
| 121 | + FIND_PACKAGE(OpenSSL) |
| 122 | + IF(OPENSSL_FOUND) |
| 123 | + SET(HAVE_LIBCRYPTO 1) |
| 124 | +- INCLUDE_DIRECTORIES(${OPENSSL_INCLUDE_DIR}) |
| 125 | +- LIST(APPEND ADDITIONAL_LIBS ${OPENSSL_CRYPTO_LIBRARY}) |
| 126 | ++ LIST(APPEND ADDITIONAL_LIBS OpenSSL::Crypto) |
| 127 | ++ STRING(APPEND LIBSREQUIRED " libcrypto") |
| 128 | + SET(CMAKE_REQUIRED_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY}) |
| 129 | + SET(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR}) |
| 130 | + LA_CHECK_INCLUDE_FILE("openssl/evp.h" HAVE_OPENSSL_EVP_H) |
| 131 | +@@ -868,6 +892,7 @@ IF(NOT OPENSSL_FOUND) |
| 132 | + SET(CMAKE_REQUIRED_LIBRARIES "md") |
| 133 | + FIND_LIBRARY(LIBMD_LIBRARY NAMES md) |
| 134 | + LIST(APPEND ADDITIONAL_LIBS ${LIBMD_LIBRARY}) |
| 135 | ++ LIST(APPEND LIBARCHIVE_LIBS_PRIVATE ${LIBMD_LIBRARY}) |
| 136 | + CMAKE_POP_CHECK_STATE() # Restore the state of the variables |
| 137 | + ENDIF(LIBMD_FOUND) |
| 138 | + ENDIF(NOT OPENSSL_FOUND) |
| 139 | +@@ -981,7 +1006,7 @@ main(int argc, char **argv) |
| 140 | + IF ("${IMPLEMENTATION}" MATCHES "^OPENSSL$" AND OPENSSL_FOUND) |
| 141 | + INCLUDE_DIRECTORIES(${OPENSSL_INCLUDE_DIR}) |
| 142 | + LIST(APPEND ADDITIONAL_LIBS ${OPENSSL_LIBRARIES}) |
| 143 | +- LIST(REMOVE_DUPLICATES ADDITIONAL_LIBS) |
| 144 | ++ STRING(APPEND LIBSREQUIRED " libssl") |
| 145 | + ENDIF ("${IMPLEMENTATION}" MATCHES "^OPENSSL$" AND OPENSSL_FOUND) |
| 146 | + ENDIF (ARCHIVE_CRYPTO_${ALGORITHM}_${IMPLEMENTATION}) |
| 147 | + ENDIF(NOT ARCHIVE_CRYPTO_${ALGORITHM}) |
| 148 | +@@ -1155,6 +1180,7 @@ IF(ENABLE_ICONV) |
| 149 | + IF (HAVE_ICONV) |
| 150 | + SET(HAVE_LIBICONV 1) |
| 151 | + LIST(APPEND ADDITIONAL_LIBS ${LIBICONV_PATH}) |
| 152 | ++ LIST(APPEND LIBARCHIVE_LIBS_PRIVATE ${LIBICONV_PATH}) |
| 153 | + ENDIF(HAVE_ICONV) |
| 154 | + ENDIF(NOT HAVE_ICONV AND LIBICONV_PATH) |
| 155 | + ENDIF(ICONV_INCLUDE_DIR) |
| 156 | +@@ -1188,6 +1214,7 @@ IF(ENABLE_ICONV) |
| 157 | + ENDIF(WIN32 AND NOT CYGWIN) |
| 158 | + IF(HAVE_LOCALE_CHARSET) |
| 159 | + LIST(APPEND ADDITIONAL_LIBS ${LIBCHARSET_PATH}) |
| 160 | ++ LIST(APPEND LIBARCHIVE_LIBS_PRIVATE ${LIBCHARSET_PATH}) |
| 161 | + ENDIF(HAVE_LOCALE_CHARSET) |
| 162 | + ENDIF(LIBCHARSET_PATH) |
| 163 | + ENDIF(LIBICONV_PATH) |
| 164 | +@@ -1222,6 +1249,7 @@ IF(LIBXML2_FOUND) |
| 165 | + CMAKE_PUSH_CHECK_STATE() # Save the state of the variables |
| 166 | + INCLUDE_DIRECTORIES(${LIBXML2_INCLUDE_DIR}) |
| 167 | + LIST(APPEND ADDITIONAL_LIBS ${LIBXML2_LIBRARIES}) |
| 168 | ++ STRING(APPEND LIBSREQUIRED " libxml-2.0") |
| 169 | + SET(HAVE_LIBXML2 1) |
| 170 | + # libxml2's include files use iconv.h |
| 171 | + SET(CMAKE_REQUIRED_INCLUDES ${ICONV_INCLUDE_DIR} ${LIBXML2_INCLUDE_DIR}) |
| 172 | +@@ -1252,6 +1280,7 @@ ELSE(LIBXML2_FOUND) |
| 173 | + CMAKE_PUSH_CHECK_STATE() # Save the state of the variables |
| 174 | + INCLUDE_DIRECTORIES(${EXPAT_INCLUDE_DIR}) |
| 175 | + LIST(APPEND ADDITIONAL_LIBS ${EXPAT_LIBRARIES}) |
| 176 | ++ STRING(APPEND LIBSREQUIRED " expat") |
| 177 | + SET(HAVE_LIBEXPAT 1) |
| 178 | + LA_CHECK_INCLUDE_FILE("expat.h" HAVE_EXPAT_H) |
| 179 | + CMAKE_POP_CHECK_STATE() # Restore the state of the variables |
| 180 | +@@ -1272,6 +1301,7 @@ ELSE(LIBXML2_FOUND) |
| 181 | + IF(HAVE_XMLLITE_H) |
| 182 | + SET(XMLLITE_FOUND TRUE) |
| 183 | + LIST(APPEND ADDITIONAL_LIBS "xmllite" "uuid") |
| 184 | ++ LIST(APPEND LIBARCHIVE_LIBS_PRIVATE xmllite uuid) |
| 185 | + ENDIF() |
| 186 | + ENDIF() |
| 187 | + ENDIF(EXPAT_FOUND) |
| 188 | +@@ -1301,6 +1331,7 @@ IF(POSIX_REGEX_LIB MATCHES "^(AUTO|LIBC|LIBREGEX)$") |
| 189 | + CHECK_FUNCTION_EXISTS_GLIBC(regcomp HAVE_REGCOMP_LIBREGEX) |
| 190 | + IF(HAVE_REGCOMP_LIBREGEX) |
| 191 | + LIST(APPEND ADDITIONAL_LIBS ${REGEX_LIBRARY}) |
| 192 | ++ LIST(APPEND LIBARCHIVE_LIBS_PRIVATE ${REGEX_LIBRARY}) |
| 193 | + # |
| 194 | + # If regex.h is not found, retry looking for regex.h at |
| 195 | + # REGEX_INCLUDE_DIR |
| 196 | +@@ -1350,6 +1381,7 @@ IF(NOT FOUND_POSIX_REGEX_LIB AND POSIX_REGEX_LIB MATCHES "^(AUTO|LIBPCREPOSIX)$" |
| 197 | + IF(PCREPOSIX_FOUND) |
| 198 | + INCLUDE_DIRECTORIES(${PCRE_INCLUDE_DIR}) |
| 199 | + LIST(APPEND ADDITIONAL_LIBS ${PCREPOSIX_LIBRARIES}) |
| 200 | ++ LIST(APPEND LIBARCHIVE_LIBS_PRIVATE ${PCREPOSIX_LIBRARIES}) |
| 201 | + # Test if a macro is needed for the library. |
| 202 | + TRY_MACRO_FOR_LIBRARY( |
| 203 | + "${PCRE_INCLUDE_DIR}" "${PCREPOSIX_LIBRARIES}" |
| 204 | +@@ -1361,6 +1393,7 @@ IF(NOT FOUND_POSIX_REGEX_LIB AND POSIX_REGEX_LIB MATCHES "^(AUTO|LIBPCREPOSIX)$" |
| 205 | + ELSEIF(NOT WITHOUT_PCRE_STATIC AND NOT PCRE_STATIC AND PCRE_FOUND) |
| 206 | + # Determine if pcre static libraries are to be used. |
| 207 | + LIST(APPEND ADDITIONAL_LIBS ${PCRE_LIBRARIES}) |
| 208 | ++ LIST(APPEND LIBARCHIVE_LIBS_PRIVATE ${PCRE_LIBRARIES}) |
| 209 | + SET(TMP_LIBRARIES ${PCREPOSIX_LIBRARIES} ${PCRE_LIBRARIES}) |
| 210 | + MESSAGE(STATUS "trying again with -lpcre included") |
| 211 | + TRY_MACRO_FOR_LIBRARY( |
| 212 | +@@ -1376,6 +1409,7 @@ IF(NOT FOUND_POSIX_REGEX_LIB AND POSIX_REGEX_LIB MATCHES "^(AUTO|LIBPCREPOSIX)$" |
| 213 | + # ___chkstk_ms. |
| 214 | + MESSAGE(STATUS "Visual Studio build detected, trying again with -lgcc included") |
| 215 | + LIST(APPEND ADDITIONAL_LIBS ${LIBGCC_LIBRARIES}) |
| 216 | ++ LIST(APPEND LIBARCHIVE_LIBS_PRIVATE ${LIBGCC_LIBRARIES}) |
| 217 | + SET(TMP_LIBRARIES ${PCREPOSIX_LIBRARIES} ${PCRE_LIBRARIES} ${LIBGCC_LIBRARIES}) |
| 218 | + TRY_MACRO_FOR_LIBRARY( |
| 219 | + "${PCRE_INCLUDE_DIR}" "${TMP_LIBRARIES}" |
| 220 | +@@ -1954,6 +1988,7 @@ IF(ENABLE_ACL) |
| 221 | + SET(CMAKE_REQUIRED_LIBRARIES "acl") |
| 222 | + FIND_LIBRARY(ACL_LIBRARY NAMES acl) |
| 223 | + LIST(APPEND ADDITIONAL_LIBS ${ACL_LIBRARY}) |
| 224 | ++ LIST(APPEND LIBARCHIVE_LIBS_PRIVATE ${ACL_LIBRARY}) |
| 225 | + pkg_check_modules(LIBACL libacl) |
| 226 | + IF(LIBACL_VERSION) |
| 227 | + SET(LIBACL_PKGCONFIG_VERSION ${LIBACL_VERSION}) |
| 228 | +@@ -2099,6 +2134,7 @@ int main(void) { return ACL_SYNCHRONIZE; }" HAVE_DECL_ACL_SYNCHRONIZE) |
| 229 | + SET(CMAKE_REQUIRED_LIBRARIES "richacl") |
| 230 | + FIND_LIBRARY(RICHACL_LIBRARY NAMES richacl) |
| 231 | + LIST(APPEND ADDITIONAL_LIBS ${RICHACL_LIBRARY}) |
| 232 | ++ LIST(APPEND LIBARCHIVE_LIBS_PRIVATE ${RICHACL_LIBRARY}) |
| 233 | + pkg_check_modules(LIBRICHACL librichacl) |
| 234 | + IF(LIBRICHACL_VERSION) |
| 235 | + SET(LIBRICHACL_PKGCONFIG_VERSION ${LIBRICHACL_VERSION}) |
| 236 | +diff --git a/build/cmake/CreatePkgConfigFile.cmake b/build/cmake/CreatePkgConfigFile.cmake |
| 237 | +index bc5a43f..422b83b 100644 |
| 238 | +--- a/build/cmake/CreatePkgConfigFile.cmake |
| 239 | ++++ b/build/cmake/CreatePkgConfigFile.cmake |
| 240 | +@@ -8,7 +8,7 @@ SET(libdir \${exec_prefix}/lib) |
| 241 | + SET(includedir \${prefix}/include) |
| 242 | + # Now, this is not particularly pretty, nor is it terribly accurate... |
| 243 | + # Loop over all our additional libs |
| 244 | +-FOREACH(mylib ${ADDITIONAL_LIBS}) |
| 245 | ++FOREACH(mylib ${LIBARCHIVE_LIBS_PRIVATE}) |
| 246 | + # Extract the filename from the absolute path |
| 247 | + GET_FILENAME_COMPONENT(mylib_name ${mylib} NAME_WE) |
| 248 | + # Strip the lib prefix |
| 249 | +@@ -16,10 +16,6 @@ FOREACH(mylib ${ADDITIONAL_LIBS}) |
| 250 | + # Append it to our LIBS string |
| 251 | + SET(LIBS "${LIBS} -l${mylib_name}") |
| 252 | + ENDFOREACH() |
| 253 | +-# libxml2 is easier, since it's already using pkg-config |
| 254 | +-FOREACH(mylib ${PC_LIBXML_STATIC_LDFLAGS}) |
| 255 | +- SET(LIBS "${LIBS} ${mylib}") |
| 256 | +-ENDFOREACH() |
| 257 | + # FIXME: The order of the libraries doesn't take dependencies into account, |
| 258 | + # thus there's a good chance it'll make some binutils versions unhappy... |
| 259 | + # This only affects Libs.private (looked up for static builds) though. |
0 commit comments