From c53d650d9a047ab12b2c7e5808878aff37d3cfc5 Mon Sep 17 00:00:00 2001 From: Theodore Tsirpanis Date: Tue, 7 Nov 2023 14:35:43 +0200 Subject: [PATCH 1/3] Export a `zstd::libzstd` target if only static or dynamic linkage is specified. --- build/cmake/CMakeLists.txt | 11 ++++++----- build/cmake/zstdConfig.cmake | 1 - build/cmake/zstdConfig.cmake.in | 16 ++++++++++++++++ 3 files changed, 22 insertions(+), 6 deletions(-) delete mode 100644 build/cmake/zstdConfig.cmake create mode 100644 build/cmake/zstdConfig.cmake.in diff --git a/build/cmake/CMakeLists.txt b/build/cmake/CMakeLists.txt index 0bffc87d9..6f68bc425 100644 --- a/build/cmake/CMakeLists.txt +++ b/build/cmake/CMakeLists.txt @@ -193,10 +193,6 @@ export(EXPORT zstdExports FILE "${CMAKE_CURRENT_BINARY_DIR}/zstdTargets.cmake" NAMESPACE zstd:: ) -configure_file(zstdConfig.cmake - "${CMAKE_CURRENT_BINARY_DIR}/zstdConfig.cmake" - COPYONLY - ) # A Package Config file that works from the installation directory set(ConfigPackageLocation ${CMAKE_INSTALL_LIBDIR}/cmake/zstd) @@ -205,8 +201,13 @@ install(EXPORT zstdExports NAMESPACE zstd:: DESTINATION ${ConfigPackageLocation} ) +configure_package_config_file( + zstdConfig.cmake.in + "${CMAKE_CURRENT_BINARY_DIR}/zstdConfig.cmake" + INSTALL_DESTINATION ${ConfigPackageLocation} +) install(FILES - zstdConfig.cmake + "${CMAKE_CURRENT_BINARY_DIR}/zstdConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/zstdConfigVersion.cmake" DESTINATION ${ConfigPackageLocation} ) diff --git a/build/cmake/zstdConfig.cmake b/build/cmake/zstdConfig.cmake deleted file mode 100644 index ebbfcc38f..000000000 --- a/build/cmake/zstdConfig.cmake +++ /dev/null @@ -1 +0,0 @@ -include("${CMAKE_CURRENT_LIST_DIR}/zstdTargets.cmake") diff --git a/build/cmake/zstdConfig.cmake.in b/build/cmake/zstdConfig.cmake.in new file mode 100644 index 000000000..752f3ab11 --- /dev/null +++ b/build/cmake/zstdConfig.cmake.in @@ -0,0 +1,16 @@ +@PACKAGE_INIT@ + +include(CMakeFindDependencyMacro) +if(@ZSTD_MULTITHREAD_SUPPORT@ AND "@UNIX@") + find_dependency(Threads) +endif() + +include("${CMAKE_CURRENT_LIST_DIR}/zstdTargets.cmake") + +if(@ZSTD_BUILD_SHARED@ AND NOT @ZSTD_BUILD_STATIC@) + add_library(zstd::libzstd ALIAS zstd::libzstd_shared) +elseif(NOT @ZSTD_BUILD_SHARED@ AND @ZSTD_BUILD_STATIC@) + add_library(zstd::libzstd ALIAS zstd::libzstd_static) +endif() + +check_required_components("zstd") From 475da4fb2e2aef102edecba04278b38fce44fb81 Mon Sep 17 00:00:00 2001 From: Theodore Tsirpanis Date: Tue, 19 Dec 2023 15:06:03 +0200 Subject: [PATCH 2/3] Make `zstd::libzstd` an imported interface target. It cannot be an alias, because it would lock the package to use either static or shared libraries at its build time. We want to decide this at the time `find_package` is called. --- build/cmake/zstdConfig.cmake.in | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/build/cmake/zstdConfig.cmake.in b/build/cmake/zstdConfig.cmake.in index 752f3ab11..0a7f773d7 100644 --- a/build/cmake/zstdConfig.cmake.in +++ b/build/cmake/zstdConfig.cmake.in @@ -7,10 +7,18 @@ endif() include("${CMAKE_CURRENT_LIST_DIR}/zstdTargets.cmake") -if(@ZSTD_BUILD_SHARED@ AND NOT @ZSTD_BUILD_STATIC@) - add_library(zstd::libzstd ALIAS zstd::libzstd_shared) -elseif(NOT @ZSTD_BUILD_SHARED@ AND @ZSTD_BUILD_STATIC@) - add_library(zstd::libzstd ALIAS zstd::libzstd_static) +if(NOT TARGET zstd::libzstd) + if(@ZSTD_BUILD_SHARED@ AND NOT @ZSTD_BUILD_STATIC@) + add_library(zstd::libzstd INTERFACE IMPORTED) + set_target_properties(zstd::libzstd PROPERTIES + INTERFACE_LINK_LIBRARIES "zstd::libzstd_shared" + ) + elseif(NOT @ZSTD_BUILD_SHARED@ AND @ZSTD_BUILD_STATIC@) + add_library(zstd::libzstd INTERFACE IMPORTED) + set_target_properties(zstd::libzstd PROPERTIES + INTERFACE_LINK_LIBRARIES "zstd::libzstd_static" + ) + endif() endif() check_required_components("zstd") From dcd713ce06fd9729e2e1eefa079be866f5e2f519 Mon Sep 17 00:00:00 2001 From: Theodore Tsirpanis Date: Tue, 27 Feb 2024 23:39:59 +0200 Subject: [PATCH 3/3] Define the unified target inside the CMake project, and export it. This is less error-prone. --- build/cmake/lib/CMakeLists.txt | 10 ++++++++++ build/cmake/zstdConfig.cmake.in | 14 -------------- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/build/cmake/lib/CMakeLists.txt b/build/cmake/lib/CMakeLists.txt index 2b64a07e2..7e16470fd 100644 --- a/build/cmake/lib/CMakeLists.txt +++ b/build/cmake/lib/CMakeLists.txt @@ -145,6 +145,16 @@ if (ZSTD_BUILD_STATIC) add_definition(libzstd_static ZSTDLIB_STATIC_API) add_definition(libzstd_static ZDICTLIB_STATIC_API) endif () +if (ZSTD_BUILD_SHARED AND NOT ZSTD_BUILD_STATIC) + add_library(libzstd INTERFACE) + target_link_libraries(libzstd INTERFACE libzstd_shared) + list(APPEND library_targets libzstd) +endif () +if (ZSTD_BUILD_STATIC AND NOT ZSTD_BUILD_SHARED) + add_library(libzstd INTERFACE) + target_link_libraries(libzstd INTERFACE libzstd_static) + list(APPEND library_targets libzstd) +endif () # Add specific compile definitions for MSVC project if (MSVC) diff --git a/build/cmake/zstdConfig.cmake.in b/build/cmake/zstdConfig.cmake.in index 0a7f773d7..f4190f989 100644 --- a/build/cmake/zstdConfig.cmake.in +++ b/build/cmake/zstdConfig.cmake.in @@ -7,18 +7,4 @@ endif() include("${CMAKE_CURRENT_LIST_DIR}/zstdTargets.cmake") -if(NOT TARGET zstd::libzstd) - if(@ZSTD_BUILD_SHARED@ AND NOT @ZSTD_BUILD_STATIC@) - add_library(zstd::libzstd INTERFACE IMPORTED) - set_target_properties(zstd::libzstd PROPERTIES - INTERFACE_LINK_LIBRARIES "zstd::libzstd_shared" - ) - elseif(NOT @ZSTD_BUILD_SHARED@ AND @ZSTD_BUILD_STATIC@) - add_library(zstd::libzstd INTERFACE IMPORTED) - set_target_properties(zstd::libzstd PROPERTIES - INTERFACE_LINK_LIBRARIES "zstd::libzstd_static" - ) - endif() -endif() - check_required_components("zstd")