--- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,6 +4,7 @@ cmake_minimum_required(VERSION 3.22) OPTION (ENABLE_CHECK_VERSION "Check for version updates" ON) OPTION (ENABLE_TELEMETRY "Enable sending telemetry" ON) +OPTION (ENABLE_VENDORING "Use vendored dependencies" ON) # We use FetchContent_Populate() instead of FetchContent_MakeAvailable() to allow EXCLUDE_FROM_ALL # This prevents the dependencies from being built by default, which is our desired behavior @@ -58,410 +59,156 @@ if (APPLE) endforeach() endif(APPLE) +## Preferentially build the bundled code. Full vendoring is to follow in a later version. + # Bundled code will occasionally use identical options - eg, BUILD_TESTING. set(BUILD_TESTING OFF) set(BUILD_STATIC_LIBS ON) set(BUILD_SHARED_LIBS OFF) -include(FetchContent) - -# Bundled liblzma -set(LIBLZMA_VERSION "5.8.1") -FetchContent_Declare(xz - GIT_REPOSITORY https://github.com/tukaani-project/xz.git - GIT_TAG v${LIBLZMA_VERSION} - ${USE_OVERRIDE_FIND_PACKAGE} -) -set(XZ_MICROLZMA_DECODER OFF CACHE BOOL "" FORCE) -set(XZ_MICROLZMA_ENCODER OFF CACHE BOOL "" FORCE) -set(XZ_LZIP_DECODER OFF CACHE BOOL "" FORCE) -set(XZ_ENABLE_SANDBOX OFF CACHE BOOL "" FORCE) -set(XZ_BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE) -set(XZ_ENABLE_DOXYGEN OFF CACHE BOOL "" FORCE) -set(XZ_DECODERS - lzma1 - lzma2 - delta -) -set(XZ_ENCODERS - lzma1 - lzma2 - delta -) -set(CREATE_LZMA_SYMLINKS OFF CACHE BOOL "" FORCE) -set(CREATE_XZ_SYMLINKS OFF CACHE BOOL "" FORCE) -FetchContent_GetProperties(xz) -if(NOT xz_POPULATED) - FetchContent_Populate(xz) - add_subdirectory(${xz_SOURCE_DIR} ${xz_BINARY_DIR} EXCLUDE_FROM_ALL) -endif() -unset(XZ_MICROLZMA_DECODER) -unset(XZ_MICROLZMA_ENCODER) -unset(XZ_LZIP_DECODER) -unset(XZ_ENABLE_SANDBOX) -unset(XZ_BUILD_SHARED_LIBS) -unset(XZ_ENABLE_DOXYGEN) -unset(CREATE_LZMA_SYMLINKS) -unset(CREATE_XZ_SYMLINKS) -set(LIBLZMA_FOUND true CACHE BOOL "" FORCE) -set(LIBLZMA_INCLUDE_DIR ${xz_SOURCE_DIR}/src/liblzma/api CACHE PATH "" FORCE) -set(LIBLZMA_INCLUDE_DIRS ${xz_SOURCE_DIR}/src/liblzma/api CACHE PATH "" FORCE) -set(LIBLZMA_LIBRARY liblzma CACHE FILEPATH "" FORCE) -set(LIBLZMA_LIBRARIES ${xz_BINARY_DIR}/liblzma.a CACHE FILEPATH "" FORCE) -set(LIBLZMA_HAS_AUTO_DECODER true CACHE BOOL "" FORCE) -set(LIBLZMA_HAS_EASY_ENCODER true CACHE BOOL "" FORCE) -set(LIBLZMA_HAS_LZMA_PRESET true CACHE BOOL "" FORCE) - -# Bundled zstd -set(ZSTD_VERSION "1.5.7") -FetchContent_Declare(zstd - GIT_REPOSITORY https://github.com/facebook/zstd.git - GIT_TAG v${ZSTD_VERSION} - SOURCE_SUBDIR build/cmake - ${USE_OVERRIDE_FIND_PACKAGE} -) -set(ZSTD_BUILD_PROGRAMS OFF CACHE BOOL "" FORCE) -set(ZSTD_BUILD_SHARED OFF CACHE BOOL "" FORCE) -set(ZSTD_BUILD_STATIC ON CACHE BOOL "" FORCE) -set(ZSTD_BUILD_TESTS OFF CACHE BOOL "" FORCE) -set(ZSTD_BUILD_DICTBUILDER OFF CACHE BOOL "" FORCE) -FetchContent_GetProperties(zstd) -if(NOT zstd_POPULATED) - FetchContent_Populate(zstd) - add_subdirectory(${zstd_SOURCE_DIR}/build/cmake ${zstd_BINARY_DIR} EXCLUDE_FROM_ALL) -endif() -unset(ZSTD_BUILD_PROGRAMS) -unset(ZSTD_BUILD_SHARED) -unset(ZSTD_BUILD_STATIC) -unset(ZSTD_BUILD_TESTS) -unset(ZSTD_BUILD_DICTBUILDER) -set(ZSTD_FOUND true CACHE BOOL "" FORCE) -set(Zstd_VERSION ${ZSTD_VERSION} CACHE STRING "" FORCE) -set(Zstd_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/_deps/zstd-src/lib CACHE PATH "" FORCE) -set(ZSTD_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/_deps/zstd-src/lib CACHE PATH "" FORCE) -set(Zstd_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/_deps/zstd-src/lib CACHE PATH "" FORCE) -set(ZSTD_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/_deps/zstd-src/lib CACHE PATH "" FORCE) -set(Zstd_LIBRARIES libzstd_static CACHE FILEPATH "" FORCE) -set(ZSTD_LIBRARIES libzstd_static CACHE FILEPATH "" FORCE) -set(ZSTD_LIBRARY ${CMAKE_CURRENT_BINARY_DIR}/_deps/zstd-build/lib/libzstd.a CACHE FILEPATH "" FORCE) - -# Remote nghttp2 -set(NGHTTP2_VERSION "1.65.0") -FetchContent_Declare(nghttp2 - GIT_REPOSITORY https://github.com/nghttp2/nghttp2.git - GIT_TAG v${NGHTTP2_VERSION} - ${USE_OVERRIDE_FIND_PACKAGE} -) -set(BUILD_EXAMPLES OFF) -set(ENABLE_LIB_ONLY ON) -set(ENABLE_FAILMALLOC OFF) -FetchContent_GetProperties(nghttp2) -if(NOT nghttp2_POPULATED) - FetchContent_Populate(nghttp2) - add_subdirectory(${nghttp2_SOURCE_DIR} ${nghttp2_BINARY_DIR} EXCLUDE_FROM_ALL) -endif() -unset(ENABLE_LIB_ONLY) -unset(ENABLE_FAILMALLOC) -unset(BUILD_EXAMPLES) -set(NGHTTP2_LIBRARIES nghttp2_static CACHE FILEPATH "" FORCE) -set(NGHTTP2_LIBRARY nghttp2_static CACHE FILEPATH "" FORCE) -set(NGHTTP2_INCLUDE_DIR ${nghttp2_SOURCE_DIR}/lib CACHE PATH "" FORCE) -set(NGHTTP2_INCLUDE_DIRS ${nghttp2_SOURCE_DIR}/lib CACHE PATH "" FORCE) -set(NGHTTP2_FOUND true CACHE BOOL "" FORCE) - - -# Bundled zlib -set(ZLIB_VERSION "1.4.1.1") -set(ZLIB_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) -set(ZLIB_BUILD_SHARED OFF CACHE BOOL "" FORCE) -set(ZLIB_BUILD_STATIC ON CACHE BOOL "" FORCE) -set(ZLIB_BUILD_TESTS OFF CACHE BOOL "" FORCE) -set(SKIP_INSTALL_ALL ON CACHE BOOL "" FORCE) -FetchContent_Declare(zlib - GIT_REPOSITORY https://github.com/madler/zlib.git - GIT_TAG 5a82f71ed1dfc0bec044d9702463dbdf84ea3b71 # v1.4.1.1, as of 27/05/2025 - ${USE_OVERRIDE_FIND_PACKAGE} -) -FetchContent_GetProperties(zlib) -if(NOT zlib_POPULATED) - FetchContent_Populate(zlib) - add_subdirectory(${zlib_SOURCE_DIR} ${zlib_BINARY_DIR} EXCLUDE_FROM_ALL) -endif() -unset(ZLIB_BUILD_EXAMPLES) -unset(ZLIB_BUILD_SHARED) -unset(ZLIB_BUILD_STATIC) -unset(ZLIB_BUILD_TESTS) -unset(SKIP_INSTALL_ALL) -# Set zlib variables that libarchive's CMake will use -set(ZLIB_USE_STATIC_LIBS ON CACHE BOOL "" FORCE) # This is to help FindZlib.cmake find the static library over the shared one -set(ZLIB_ROOT ${zlib_SOURCE_DIR} CACHE PATH "" FORCE) - -# On Windows with MinGW, zlib builds with .a extension, not .lib -# Set the correct library path before find_package -if (WIN32 AND CMAKE_COMPILER_IS_GNUCXX) - set(ZLIB_LIBRARY ${zlib_BINARY_DIR}/libzlibstatic.a CACHE FILEPATH "" FORCE) - set(ZLIB_LIBRARIES ${zlib_BINARY_DIR}/libzlibstatic.a CACHE STRING "" FORCE) -else() - set(ZLIB_LIBRARY ${zlib_BINARY_DIR}/libz.a CACHE FILEPATH "" FORCE) - set(ZLIB_LIBRARIES ${zlib_BINARY_DIR}/libz.a CACHE STRING "" FORCE) -endif() - -# Since we're building zlib ourselves with EXCLUDE_FROM_ALL, we don't need find_package -# Instead, we'll create the ZLIB::ZLIB target manually and set all required variables -set(ZLIB_INCLUDE_DIR ${zlib_SOURCE_DIR} CACHE PATH "" FORCE) -set(ZLIB_INCLUDE_DIRS ${zlib_SOURCE_DIR} CACHE PATH "" FORCE) - -# Create ZLIB::ZLIB target manually since we're not using find_package -# Set zlib variables that other packages expect -set(ZLIB_FOUND TRUE CACHE BOOL "" FORCE) -add_library(ZLIB::ZLIB STATIC IMPORTED) -if (WIN32 AND CMAKE_COMPILER_IS_GNUCXX) - set_target_properties(ZLIB::ZLIB PROPERTIES - IMPORTED_LOCATION "${zlib_BINARY_DIR}/libzlibstatic.a" - INTERFACE_INCLUDE_DIRECTORIES "${zlib_SOURCE_DIR};${zlib_BINARY_DIR}" - ) - add_dependencies(ZLIB::ZLIB zlibstatic) -else() - set_target_properties(ZLIB::ZLIB PROPERTIES - IMPORTED_LOCATION "${zlib_BINARY_DIR}/libz.a" - INTERFACE_INCLUDE_DIRECTORIES "${zlib_SOURCE_DIR};${zlib_BINARY_DIR}" +if(ENABLE_VENDORING) + # Bundled liblzma + set(XZ_MICROLZMA_DECODER OFF) + set(XZ_MICROLZMA_ENCODER OFF) + set(XZ_LZIP_DECODER OFF) + set(XZ_ENABLE_SANDBOX OFF) + set(XZ_BUILD_SHARED_LIBS OFF) + set(XZ_ENABLE_DOXYGEN OFF) + set(XZ_DECODERS + lzma1 + lzma2 + delta ) - add_dependencies(ZLIB::ZLIB zlibstatic) -endif() - -# Debug output -message(STATUS "ZLIB_LIBRARY set to: ${ZLIB_LIBRARY}") -message(STATUS "ZLIB_LIBRARIES set to: ${ZLIB_LIBRARIES}") -message(STATUS "ZLIB_INCLUDE_DIRS set to: ${ZLIB_INCLUDE_DIRS}") - -# Bundled libarchive - -set(ENABLE_WERROR OFF CACHE BOOL "") -set(ENABLE_INSTALL OFF CACHE BOOL "") -set(ENABLE_TEST OFF CACHE BOOL "") -set(ENABLE_CNG OFF CACHE BOOL "") -set(ENABLE_MBEDTLS OFF CACHE BOOL "") -set(ENABLE_NETTLE OFF CACHE BOOL "") -set(ENABLE_OPENSSL OFF CACHE BOOL "") -# Configure libarchive with explicit zlib support -set(ENABLE_ZLIB ON CACHE BOOL "") -set(ENABLE_BZip2 OFF CACHE BOOL "") -set(ENABLE_LZ4 OFF CACHE BOOL "") -set(ENABLE_LZO OFF CACHE BOOL "") -set(ENABLE_LIBB2 OFF CACHE BOOL "") -set(ENABLE_LIBXML2 OFF CACHE BOOL "") -set(ENABLE_EXPAT OFF CACHE BOOL "") -set(ENABLE_PCREPOSIX OFF CACHE BOOL "") -set(ENABLE_PCRE2POSIX OFF CACHE BOOL "") -set(ENABLE_LIBGCC OFF CACHE BOOL "") -set(ENABLE_TAR OFF CACHE BOOL "") -set(ENABLE_CPIO OFF CACHE BOOL "") -set(ENABLE_CAT OFF CACHE BOOL "") -set(BUILD_SHARED_LIBS OFF CACHE BOOL "") -set(ARCHIVE_BUILD_STATIC_LIBS ON CACHE BOOL "") -set(ARCHIVE_BUILD_EXAMPLES OFF CACHE BOOL "") -set(ENABLE_ZSTD ON CACHE BOOL "") -set(POSIX_REGEX_LIB "libc" CACHE STRING "" FORCE) -set(LIBARCHIVE_VERSION "3.8.0") - -# Create a patch script to fix ZSTD detection in libarchive -set(LIBARCHIVE_PATCH_FILE "${CMAKE_CURRENT_BINARY_DIR}/libarchive_zstd_patch.cmake") -file(WRITE ${LIBARCHIVE_PATCH_FILE} " -# Read the original CMakeLists.txt -file(READ \"\${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt\" CONTENT) - -# Find the start and end of the ZSTD section -string(FIND \"\${CONTENT}\" \"IF(ZSTD_FOUND)\" ZSTD_START) -string(FIND \"\${CONTENT}\" \"MARK_AS_ADVANCED(CLEAR ZSTD_INCLUDE_DIR)\" ZSTD_END) - -if(ZSTD_START GREATER -1 AND ZSTD_END GREATER -1) - # Calculate positions - math(EXPR ZSTD_END \"\${ZSTD_END} + 40\") # Length of \"MARK_AS_ADVANCED(CLEAR ZSTD_INCLUDE_DIR)\" - - # Extract parts before and after the ZSTD section - string(SUBSTRING \"\${CONTENT}\" 0 \${ZSTD_START} BEFORE_ZSTD) - string(SUBSTRING \"\${CONTENT}\" \${ZSTD_END} -1 AFTER_ZSTD) - - # Create the new ZSTD section - set(NEW_ZSTD_SECTION \"IF(ZSTD_FOUND) - SET(HAVE_ZSTD_H 1) - INCLUDE_DIRECTORIES(\\\${ZSTD_INCLUDE_DIR}) - LIST(APPEND ADDITIONAL_LIBS \\\${ZSTD_LIBRARY}) - - # Check if ZSTD variables were provided externally (indicating static build) - get_property(ZSTD_LIB_IS_CACHE CACHE ZSTD_LIBRARY PROPERTY TYPE) - get_property(ZSTD_INC_IS_CACHE CACHE ZSTD_INCLUDE_DIR PROPERTY TYPE) - if(ZSTD_LIB_IS_CACHE AND ZSTD_INC_IS_CACHE) - # Skip function checks for static builds and assume all functions are available - message(STATUS \\\"Using provided ZSTD library: \\\${ZSTD_LIBRARY}\\\") - SET(HAVE_LIBZSTD 1) - SET(HAVE_ZSTD_compressStream 1) - SET(HAVE_ZSTD_minCLevel 1) - else() - # Original function checks for dynamic builds - CMAKE_PUSH_CHECK_STATE() - SET(CMAKE_REQUIRED_LIBRARIES \\\${ZSTD_LIBRARY}) - SET(CMAKE_REQUIRED_INCLUDES \\\${ZSTD_INCLUDE_DIR}) - CHECK_FUNCTION_EXISTS(ZSTD_decompressStream HAVE_LIBZSTD) - CHECK_FUNCTION_EXISTS(ZSTD_compressStream HAVE_ZSTD_compressStream) - CHECK_FUNCTION_EXISTS(ZSTD_minCLevel HAVE_ZSTD_minCLevel) - CMAKE_POP_CHECK_STATE() - endif() -ENDIF(ZSTD_FOUND) -MARK_AS_ADVANCED(CLEAR ZSTD_INCLUDE_DIR)\") - - # Combine the parts - set(NEW_CONTENT \"\${BEFORE_ZSTD}\${NEW_ZSTD_SECTION}\") - - # Write the modified content back - file(WRITE \"\${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt\" \"\${NEW_CONTENT}\${AFTER_ZSTD}\") - message(STATUS \"Patched libarchive CMakeLists.txt for static ZSTD support\") -else() - message(WARNING \"Could not find ZSTD section in libarchive CMakeLists.txt\") -endif() -") - -FetchContent_Declare(libarchive - GIT_REPOSITORY https://github.com/libarchive/libarchive.git - GIT_TAG v${LIBARCHIVE_VERSION} - PATCH_COMMAND ${CMAKE_COMMAND} -P ${LIBARCHIVE_PATCH_FILE} - ${USE_OVERRIDE_FIND_PACKAGE} -) -FetchContent_GetProperties(libarchive) -if(NOT libarchive_POPULATED) - FetchContent_Populate(libarchive) - add_subdirectory(${libarchive_SOURCE_DIR} ${libarchive_BINARY_DIR} EXCLUDE_FROM_ALL) -endif() - -# Ensure libarchive is built after zlib -if (TARGET archive_static AND TARGET ZLIB::ZLIB) - add_dependencies(archive_static ZLIB::ZLIB) -endif() - -unset(POSIX_REGEX_LIB) -unset(ENABLE_WERROR) -unset(ENABLE_INSTALL) -unset(ENABLE_TEST) -unset(ENABLE_CNG) -unset(ENABLE_MBEDTLS) -unset(ENABLE_NETTLE) -unset(ENABLE_OPENSSL) -unset(ENABLE_ZLIB) -unset(ENABLE_BZip2) -unset(ENABLE_LZ4) -unset(ENABLE_LZO) -unset(ENABLE_LIBB2) -unset(ENABLE_LIBXML2) -unset(ENABLE_EXPAT) -unset(ENABLE_PCREPOSIX) -unset(ENABLE_PCRE2POSIX) -unset(ENABLE_LIBGCC) -unset(ENABLE_TAR) -unset(ENABLE_CPIO) -unset(ENABLE_CAT) -unset(ARCHIVE_BUILD_SHARED_LIBS) -unset(ENABLE_ZSTD) -set(LibArchive_FOUND true CACHE BOOL "" FORCE) -set(LibArchive_LIBRARIES archive_static CACHE FILEPATH "" FORCE) -set(LibArchive_INCLUDE_DIR ${libarchive_SOURCE_DIR}/libarchive CACHE PATH "" FORCE) -set(LibArchive_INCLUDE_DIRS ${libarchive_SOURCE_DIR}/libarchive CACHE PATH "" FORCE) - -# Bundled libcurl -set(CURL_VERSION "8.13.0") -string(REPLACE "." "_" CURL_TAG ${CURL_VERSION}) -FetchContent_Declare(curl - GIT_REPOSITORY https://github.com/curl/curl.git - GIT_TAG curl-${CURL_TAG} - ${USE_OVERRIDE_FIND_PACKAGE} -) -set(BUILD_CURL_EXE OFF CACHE BOOL "" FORCE) -set(BUILD_LIBCURL_DOCS OFF CACHE BOOL "" FORCE) -set(BUILD_MISC_DOCS OFF CACHE BOOL "" FORCE) -set(ENABLE_CURL_MANUAL OFF CACHE BOOL "" FORCE) -set(BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) -set(CURL_USE_LIBPSL OFF CACHE BOOL "" FORCE) -set(CURL_USE_LIBSSH2 OFF CACHE BOOL "" FORCE) -set(CURL_DISABLE_ALTSVC ON CACHE BOOL "" FORCE) -set(CURL_DISABLE_KERBEROS_AUTH ON CACHE BOOL "" FORCE) -set(CURL_DISABLE_DICT ON CACHE BOOL "" FORCE) -set(CURL_DISABLE_DISABLE_FORM_API ON CACHE BOOL "" FORCE) -set(CURL_DISABLE_FTP ON CACHE BOOL "" FORCE) -set(CURL_DISABLE_GOPHER ON CACHE BOOL "" FORCE) -set(CURL_DISABLE_IMAP ON CACHE BOOL "" FORCE) -set(CURL_DISABLE_LDAP ON CACHE BOOL "" FORCE) -set(CURL_DISABLE_LDAPS ON CACHE BOOL "" FORCE) -set(CURL_DISABLE_MQTT ON CACHE BOOL "" FORCE) -set(CURL_DISABLE_NETRC ON CACHE BOOL "" FORCE) -set(CURL_DISABLE_POP3 ON CACHE BOOL "" FORCE) -set(CURL_DISABLE_RTSP ON CACHE BOOL "" FORCE) -set(CURL_DISABLE_SMTP ON CACHE BOOL "" FORCE) -set(CURL_DISABLE_TELNET ON CACHE BOOL "" FORCE) -set(CURL_DISABLE_TFTP ON CACHE BOOL "" FORCE) -set(CURL_ZSTD ON) -set(CURL_ENABLE_EXPORT_TARGET OFF CACHE BOOL "" FORCE) -set(CURL_DISABLE_INSTALL ON) -if (APPLE) - # TODO: SecureTransport is a deprecated API in macOS, supporting - # only up to TLS v1.2. cURL has not implemented the replacement, - # Network.framework, and so we will need to select an alternative. - # Best recommendation: Libressl, as used by Apple in the curl binary - # on macOS. - set(CURL_USE_SECTRANSP ON) - set(CURL_DEFAULT_SSL_BACKEND "secure-transport") - set(USE_APPLE_IDN ON) -else() - if (WIN32) - set(CURL_USE_SCHANNEL ON) - set(CURL_DEFAULT_SSL_BACKEND "schannel") - else () - set(CURL_USE_GNUTLS ON) - set(CURL_DEFAULT_SSL_BACKEND "gnutls") - endif(WIN32) -endif(APPLE) - -FetchContent_GetProperties(curl) -if(NOT curl_POPULATED) - FetchContent_Populate(curl) - add_subdirectory(${curl_SOURCE_DIR} ${curl_BINARY_DIR} EXCLUDE_FROM_ALL) + set(XZ_ENCODERS "") + set(CREATE_LZMA_SYMLINKS OFF) + set(CREATE_XZ_SYMLINKS OFF) + add_subdirectory(dependencies/xz-5.8.1) + set(LIBLZMA_FOUND true) + set(LIBLZMA_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/dependencies/xz-5.8.1/src/liblzma/api FORCE) + set(LIBLZMA_INCLUDE_DIRS ${CMAKE_CURRENT_LIST_DIR}/dependencies/xz-5.8.1/src/liblzma/api FORCE) + set(LIBLZMA_LIBRARY liblzma) + set(LIBLZMA_LIBRARIES liblzma) + + # Bundled zstd + set(ZSTD_BUILD_PROGRAMS OFF CACHE BOOL "" FORCE) + set(ZSTD_BUILD_SHARED OFF CACHE BOOL "" FORCE) + set(ZSTD_BUILD_TESTS OFF CACHE BOOL "" FORCE) + set(ZSTD_BUILD_DICTBUILDER OFF CACHE BOOL "" FORCE) + add_subdirectory(dependencies/zstd-1.5.7/build/cmake) + set(Zstd_FOUND true) + set(ZSTD_FOUND true) + set(Zstd_VERSION "1.5.7") + set(ZSTD_VERSION "1.5.7") + set(Zstd_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/dependencies/zstd-1.5.7/lib) + set(ZSTD_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/dependencies/zstd-1.5.7/lib) + set(Zstd_INCLUDE_DIRS ${CMAKE_CURRENT_LIST_DIR}/dependencies/zstd-1.5.7/lib) + set(ZSTD_INCLUDE_DIRS ${CMAKE_CURRENT_LIST_DIR}/dependencies/zstd-1.5.7/lib) + set(Zstd_LIBRARIES libzstd_static) + set(ZSTD_LIBRARIES libzstd_static) + set(ZSTD_LIBRARY libzstd_static) + + # Bundled zlib + set(ZLIB_BUILD_EXAMPLES OFF) + set(SKIP_INSTALL_ALL ON) + add_subdirectory(dependencies/zlib-1.4.1.1) + set(ZLIB_FOUND TRUE) + set(ZLIB_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/dependencies/zlib-1.4.1.1 CACHE PATH "zlib include dir") + set(ZLIB_INCLUDE_DIRS ${CMAKE_CURRENT_LIST_DIR}/dependencies/zlib-1.4.1.1 CACHE PATH "zlib include dir") + set(ZLIB_LIBRARY zlibstatic) + set(ZLIB_LIBRARIES zlibstatic) + + # Bundled libarchive + set(ARCHIVE_ENABLE_WERROR OFF CACHE BOOL "") + set(ARCHIVE_ENABLE_INSTALL OFF CACHE BOOL "") + set(ARCHIVE_ENABLE_TEST OFF CACHE BOOL "") + set(ARCHIVE_ENABLE_CNG OFF CACHE BOOL "") + set(ARCHIVE_ENABLE_MBEDTLS OFF CACHE BOOL "") + set(ARCHIVE_ENABLE_NETTLE OFF CACHE BOOL "") + set(ARCHIVE_ENABLE_OPENSSL OFF CACHE BOOL "") + set(ARCHIVE_ENABLE_BZip2 OFF CACHE BOOL "") + set(ARCHIVE_ENABLE_LZ4 OFF CACHE BOOL "") + set(ARCHIVE_ENABLE_LZO OFF CACHE BOOL "") + set(ARCHIVE_ENABLE_LIBB2 OFF CACHE BOOL "") + set(ARCHIVE_ENABLE_LIBXML2 OFF CACHE BOOL "") + set(ARCHIVE_ENABLE_EXPAT OFF CACHE BOOL "") + set(ARCHIVE_ENABLE_PCREPOSIX OFF CACHE BOOL "") + set(ARCHIVE_ENABLE_PCRE2POSIX OFF CACHE BOOL "") + set(ARCHIVE_ENABLE_LIBGCC OFF CACHE BOOL "") + set(ARCHIVE_ENABLE_TAR OFF CACHE BOOL "") + set(ARCHIVE_ENABLE_CPIO OFF CACHE BOOL "") + set(ARCHIVE_ENABLE_CAT OFF CACHE BOOL "") + set(ARCHIVE_BUILD_SHARED_LIBS OFF CACHE BOOL "") + add_subdirectory(dependencies/libarchive-3.7.7) + set(LibArchive_FOUND true) + set(LibArchive_LIBRARIES archive_static) + set(LibArchive_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/dependencies/libarchive-3.7.8/libarchive) + + # Bundled libcurl + set(CMAKE_CURL_INCLUDES) + set(BUILD_CURL_EXE OFF CACHE BOOL "" FORCE) + set(BUILD_LIBCURL_DOCS OFF CACHE BOOL "" FORCE) + set(ENABLE_CURL_MANUAL OFF CACHE BOOL "" FORCE) + set(CURL_USE_LIBPSL OFF) + set(CURL_USE_LIBSSH2 OFF) + set(CURL_DISABLE_ALTSVC ON) + set(CURL_DISABLE_KERBEROS_AUTH ON) + set(CURL_DISABLE_DICT ON) + set(CURL_DISABLE_DISABLE_FORM_API ON) + set(CURL_DISABLE_FTP ON) + set(CURL_DISABLE_GOPHER ON) + set(CURL_DISABLE_IMAP ON) + set(CURL_DISABLE_LDAP ON) + set(CURL_DISABLE_LDAPS ON) + set(CURL_DISABLE_MQTT ON) + set(CURL_DISABLE_NETRC ON) + set(CURL_DISABLE_POP3 ON) + set(CURL_DISABLE_RTSP ON) + set(CURL_DISABLE_SMTP ON) + set(CURL_DISABLE_TELNET ON) + set(CURL_DISABLE_TFTP ON) + set(CURL_ZSTD ON) + set(CURL_ENABLE_EXPORT_TARGET OFF CACHE BOOL "" FORCE) + set(CURL_DISABLE_INSTALL ON) + if (APPLE) + # TODO: SecureTransport is a deprecated API in macOS, supporting + # only up to TLS v1.2. cURL has not implemented the replacement, + # Network.framework, and so we will need to select an alternative. + # Best recommendation: Libressl, as used by Apple in the curl binary + # on macOS. + set(CURL_USE_SECTRANSP ON) + set(CURL_DEFAULT_SSL_BACKEND "secure-transport") + set(USE_APPLE_IDN ON) + else() + if (WIN32) + set(CURL_USE_SCHANNEL ON) + set(CURL_DEFAULT_SSL_BACKEND "schannel") + else () + set(CURL_USE_GNUTLS ON) + set(CURL_DEFAULT_SSL_BACKEND "gnutls") + endif(WIN32) + endif(APPLE) + + add_subdirectory(dependencies/curl-8.13.0) + set(CURL_FOUND true) + set(CURL_LIBRARIES libcurl_static) + set(CURL_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/dependencies/curl-8.13.0/include) + set(CURL_INCLUDE_DIRS ${CMAKE_CURRENT_LIST_DIR}/dependencies/curl-8.13.0/include) + +elseif (NOT ENABLE_VENDORING AND UNIX) + # Find the libraries that were subject to vendoring in the system instead, + # To keep the possibility of delivery via Linux distro packages + find_package(ZLIB) + if(ZLIB_FOUND) + set(EXTRALIBS ${EXTRALIBS} ZLIB::ZLIB) + endif() + find_package(LibLZMA) + if(LIBLZMA_FOUND) + set(EXTRALIBS ${EXTRALIBS} LibLZMA::LibLZMA) + endif() + find_package(CURL 8.13.0 REQUIRED) + find_package(LibArchive 3.7.8 REQUIRED) endif() -unset(BUILD_CURL_EXE) -unset(BUILD_LIBCURL_DOCS) -unset(BUILD_MISC_DOCS) -unset(ENABLE_CURL_MANUAL) -unset(BUILD_EXAMPLES) -unset(CURL_USE_LIBPSL) -unset(CURL_USE_LIBSSH2) -unset(CURL_DISABLE_ALTSVC) -unset(CURL_DISABLE_KERBEROS_AUTH) -unset(CURL_DISABLE_DICT) -unset(CURL_DISABLE_DISABLE_FORM_API) -unset(CURL_DISABLE_FTP) -unset(CURL_DISABLE_GOPHER) -unset(CURL_DISABLE_IMAP) -unset(CURL_DISABLE_LDAP) -unset(CURL_DISABLE_LDAPS) -unset(CURL_DISABLE_MQTT) -unset(CURL_DISABLE_NETRC) -unset(CURL_DISABLE_POP3) -unset(CURL_DISABLE_RTSP) -unset(CURL_DISABLE_SMTP) -unset(CURL_DISABLE_TELNET) -unset(CURL_DISABLE_TFTP) -unset(CURL_ZSTD) -unset(CURL_ENABLE_EXPORT_TARGET) -unset(CURL_DISABLE_INSTALL) -unset(CURL_USE_SECTRANSP) -unset(CURL_DEFAULT_SSL_BACKEND) -unset(USE_APPLE_IDN) -unset(CURL_USE_SCHANNEL) -unset(CURL_USE_GNUTLS) - -set(CURL_FOUND true CACHE BOOL "" FORCE) -set(CURL_LIBRARIES libcurl_static CACHE FILEPATH "" FORCE) -set(CURL_INCLUDE_DIR ${curl_SOURCE_DIR}/include CACHE PATH "" FORCE) -set(CURL_INCLUDE_DIRS ${curl_SOURCE_DIR}/include CACHE PATH "" FORCE) - # Adding headers explicity so they are displayed in Qt Creator set(HEADERS config.h imagewriter.h networkaccessmanagerfactory.h nan.h drivelistitem.h drivelistmodel.h drivelistmodelpollthread.h driveformatthread.h powersaveblocker.h cli.h devicewrapper.h devicewrapperblockcacheentry.h devicewrapperpartition.h devicewrapperstructs.h devicewrapperfatpartition.h wlancredentials.h @@ -928,11 +675,6 @@ else() if (NOT LSBLK) message(FATAL_ERROR "Unable to locate lsblk (used for disk enumeration)") endif() - - execute_process(COMMAND "${LSBLK}" "--json" OUTPUT_QUIET RESULT_VARIABLE ret) - if (ret EQUAL "1") - message(FATAL_ERROR "util-linux package too old. lsblk does not support --json (used for disk enumeration)") - endif() endif() install(TARGETS ${PROJECT_NAME} DESTINATION bin)