diff --git a/CMakeLists.txt b/CMakeLists.txt index 3200c2d28..d011ad261 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -501,13 +501,16 @@ if(ENABLE_MAC) tr_fixup_auto_option(ENABLE_MAC MAC_FOUND MAC_IS_REQUIRED) endif() +# Don't build libdeflate as subdirectory as its CMakeLists.txt +# messes with global CMAKE_* variables and global compiler options if(WIN32 AND NOT MINGW) set(DEFLATE_LIB_NAME deflatestatic) else() set(DEFLATE_LIB_NAME deflate) endif() -tr_add_external_auto_library_legacy(DEFLATE libdeflate ${DEFLATE_LIB_NAME} - TARGET deflate::deflate +tr_add_external_auto_library(DEFLATE libdeflate + LIBNAME ${DEFLATE_LIB_NAME} + TARGET libdeflate::libdeflate CMAKE_ARGS -DLIBDEFLATE_BUILD_SHARED_LIB=OFF -DLIBDEFLATE_BUILD_GZIP=OFF) diff --git a/cmake/FindDEFLATE.cmake b/cmake/FindDEFLATE.cmake deleted file mode 100644 index e57d84b4c..000000000 --- a/cmake/FindDEFLATE.cmake +++ /dev/null @@ -1,49 +0,0 @@ -if(DEFLATE_PREFER_STATIC_LIB) - set(DEFLATE_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) - if(WIN32) - set(CMAKE_FIND_LIBRARY_SUFFIXES .a .lib ${CMAKE_FIND_LIBRARY_SUFFIXES}) - else() - set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) - endif() -endif() - -if(UNIX) - find_package(PkgConfig QUIET) - # pkg-config support added in libdeflate v1.9 - pkg_check_modules(_DEFLATE QUIET libdeflate) -endif() - -find_path(DEFLATE_INCLUDE_DIR - NAMES libdeflate.h - HINTS ${_DEFLATE_INCLUDEDIR}) -find_library(DEFLATE_LIBRARY - NAMES deflate - HINTS ${_DEFLATE_LIBDIR}) - -set(DEFLATE_INCLUDE_DIRS ${DEFLATE_INCLUDE_DIR}) -set(DEFLATE_LIBRARIES ${DEFLATE_LIBRARY}) - -if(_DEFLATE_VERSION) - set(DEFLATE_VERSION ${_DEFLATE_VERSION}) -elseif(DEFLATE_INCLUDE_DIR) - file(STRINGS "${DEFLATE_INCLUDE_DIR}/libdeflate.h" DEFLATE_VERSION_STR - REGEX "^#define[\t ]+LIBDEFLATE_VERSION_STRING[\t ]+\"[^\"]+\"") - if(DEFLATE_VERSION_STR MATCHES "\"([^\"]+)\"") - set(DEFLATE_VERSION "${CMAKE_MATCH_1}") - endif() -endif() - -include(FindPackageHandleStandardArgs) - -find_package_handle_standard_args(DEFLATE - REQUIRED_VARS - DEFLATE_INCLUDE_DIR - DEFLATE_LIBRARY - VERSION_VAR DEFLATE_VERSION) - -mark_as_advanced(DEFLATE_INCLUDE_DIR DEFLATE_LIBRARY) - -if(DEFLATE_PREFER_STATIC_LIB) - set(CMAKE_FIND_LIBRARY_SUFFIXES ${DEFLATE_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES}) - unset(DEFLATE_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES) -endif() diff --git a/cmake/Findlibdeflate.cmake b/cmake/Findlibdeflate.cmake new file mode 100644 index 000000000..1cce4da11 --- /dev/null +++ b/cmake/Findlibdeflate.cmake @@ -0,0 +1,73 @@ +find_package(${CMAKE_FIND_PACKAGE_NAME} QUIET NO_MODULE) + +include(FindPackageHandleStandardArgs) +if(${CMAKE_FIND_PACKAGE_NAME}_FOUND) + if(TARGET libdeflate::libdeflate_static AND (${CMAKE_FIND_PACKAGE_NAME}_PREFER_STATIC_LIB OR NOT TARGET libdeflate::libdeflate_shared)) + add_library(libdeflate::libdeflate ALIAS libdeflate::libdeflate_static) + else() + add_library(libdeflate::libdeflate ALIAS libdeflate::libdeflate_shared) + endif() + + find_package_handle_standard_args(${CMAKE_FIND_PACKAGE_NAME} CONFIG_MODE) + return() +endif() + +if(${CMAKE_FIND_PACKAGE_NAME}_PREFER_STATIC_LIB) + set(${CMAKE_FIND_PACKAGE_NAME}_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) + if(WIN32) + set(CMAKE_FIND_LIBRARY_SUFFIXES .a .lib ${CMAKE_FIND_LIBRARY_SUFFIXES}) + else() + set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) + endif() +endif() + +if(UNIX) + find_package(PkgConfig QUIET) + # pkg-config support added in libdeflate v1.9 + pkg_check_modules(_DEFLATE QUIET libdeflate) +endif() + +find_path(${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIR + NAMES libdeflate.h + HINTS ${_DEFLATE_INCLUDEDIR}) +find_library(${CMAKE_FIND_PACKAGE_NAME}_LIBRARY + NAMES deflate + HINTS ${_DEFLATE_LIBDIR}) + +if(_DEFLATE_VERSION) + set(${CMAKE_FIND_PACKAGE_NAME}_VERSION ${_DEFLATE_VERSION}) +elseif(${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIR) + file(STRINGS "${${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIR}/libdeflate.h" ${CMAKE_FIND_PACKAGE_NAME}_VERSION_STR + REGEX "^#define[\t ]+LIBDEFLATE_VERSION_STRING[\t ]+\"[^\"]+\"") + if(${CMAKE_FIND_PACKAGE_NAME}_VERSION_STR MATCHES "\"([^\"]+)\"") + set(${CMAKE_FIND_PACKAGE_NAME}_VERSION "${CMAKE_MATCH_1}") + endif() +endif() + +find_package_handle_standard_args(${CMAKE_FIND_PACKAGE_NAME} + REQUIRED_VARS + ${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIR + ${CMAKE_FIND_PACKAGE_NAME}_LIBRARY + VERSION_VAR ${CMAKE_FIND_PACKAGE_NAME}_VERSION) + +if(${CMAKE_FIND_PACKAGE_NAME}_FOUND) + set(${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIRS ${${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIR}) + set(${CMAKE_FIND_PACKAGE_NAME}_LIBRARIES ${${CMAKE_FIND_PACKAGE_NAME}_LIBRARY}) + + if(NOT TARGET libdeflate::libdeflate) + add_library(libdeflate::libdeflate INTERFACE IMPORTED) + target_include_directories(libdeflate::libdeflate + INTERFACE + ${${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIR}) + target_link_libraries(libdeflate::libdeflate + INTERFACE + ${${CMAKE_FIND_PACKAGE_NAME}_LIBRARY}) + endif() +endif() + +mark_as_advanced(${CMAKE_FIND_PACKAGE_NAME}_INCLUDE_DIR ${CMAKE_FIND_PACKAGE_NAME}_LIBRARY) + +if(${CMAKE_FIND_PACKAGE_NAME}_PREFER_STATIC_LIB) + set(CMAKE_FIND_LIBRARY_SUFFIXES ${${CMAKE_FIND_PACKAGE_NAME}_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES}) + unset(${CMAKE_FIND_PACKAGE_NAME}_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES) +endif() diff --git a/libtransmission/CMakeLists.txt b/libtransmission/CMakeLists.txt index 99fc38b83..b3f5c815f 100644 --- a/libtransmission/CMakeLists.txt +++ b/libtransmission/CMakeLists.txt @@ -271,7 +271,7 @@ endif() target_link_libraries(${TR_NAME} PRIVATE Threads::Threads - deflate::deflate + libdeflate::libdeflate CURL::libcurl FastFloat::fast_float psl::psl