From eb062bc339dc0e1f12da9b28213d0efd46127c21 Mon Sep 17 00:00:00 2001 From: Cristian Le Date: Tue, 23 Sep 2025 10:29:44 +0200 Subject: [PATCH] Split lib target types in their own export groups This allows for the non-primary library to be missing in the Config.cmake file, e.g. if the devel files have a separate static-devel package Signed-off-by: Cristian Le --- build/cmake/CMakeModules/ZstdPackage.cmake | 27 ++++++++++--------- build/cmake/lib/CMakeLists.txt | 31 ++++++++++------------ build/cmake/zstdConfig.cmake.in | 3 +++ 3 files changed, 32 insertions(+), 29 deletions(-) diff --git a/build/cmake/CMakeModules/ZstdPackage.cmake b/build/cmake/CMakeModules/ZstdPackage.cmake index 5e40dd2c1..ed20f3c97 100644 --- a/build/cmake/CMakeModules/ZstdPackage.cmake +++ b/build/cmake/CMakeModules/ZstdPackage.cmake @@ -11,21 +11,24 @@ write_basic_package_version_file( COMPATIBILITY SameMajorVersion ) -# Export targets for build directory -export(EXPORT zstdExports - FILE "${CMAKE_CURRENT_BINARY_DIR}/zstdTargets.cmake" - NAMESPACE zstd:: -) - # Configure package for installation set(ConfigPackageLocation ${CMAKE_INSTALL_LIBDIR}/cmake/zstd) -# Install exported targets -install(EXPORT zstdExports - FILE zstdTargets.cmake - NAMESPACE zstd:: - DESTINATION ${ConfigPackageLocation} -) +foreach(target_suffix IN ITEMS "_shared" "_static" "") + if(TARGET "libzstd${target_suffix}") + # Export targets for build directory + export(EXPORT "zstdExports${target_suffix}" + FILE "${CMAKE_CURRENT_BINARY_DIR}/zstdTargets${target_suffix}.cmake" + NAMESPACE zstd:: + ) + # Install exported targets + install(EXPORT "zstdExports${target_suffix}" + FILE "zstdTargets${target_suffix}.cmake" + NAMESPACE zstd:: + DESTINATION ${ConfigPackageLocation} + ) + endif() +endforeach() # Configure and install package config file configure_package_config_file( diff --git a/build/cmake/lib/CMakeLists.txt b/build/cmake/lib/CMakeLists.txt index a6b894c4d..04177925f 100644 --- a/build/cmake/lib/CMakeLists.txt +++ b/build/cmake/lib/CMakeLists.txt @@ -122,11 +122,9 @@ endmacro () set(PUBLIC_INCLUDE_DIRS ${LIBRARY_DIR}) set(CMAKE_RC_FLAGS "${CMAKE_RC_FLAGS} /I \"${LIBRARY_DIR}\"") # Split project to static and shared libraries build -set(library_targets) if (ZSTD_BUILD_SHARED) add_library(libzstd_shared SHARED ${Sources} ${Headers} ${PlatformDependResources}) target_include_directories(libzstd_shared INTERFACE $) - list(APPEND library_targets libzstd_shared) if (ZSTD_MULTITHREAD_SUPPORT) target_compile_definitions(libzstd_shared PUBLIC ZSTD_MULTITHREAD) if (UNIX) @@ -140,7 +138,6 @@ endif () if (ZSTD_BUILD_STATIC) add_library(libzstd_static STATIC ${Sources} ${Headers}) target_include_directories(libzstd_static INTERFACE $) - list(APPEND library_targets libzstd_static) if (ZSTD_MULTITHREAD_SUPPORT) target_compile_definitions(libzstd_static PUBLIC ZSTD_MULTITHREAD) if (UNIX) @@ -159,7 +156,6 @@ if (ZSTD_BUILD_SHARED AND NOT ZSTD_BUILD_STATIC) endif () 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) if (BUILD_SHARED_LIBS) @@ -167,7 +163,6 @@ if (ZSTD_BUILD_STATIC AND NOT ZSTD_BUILD_SHARED) endif () add_library(libzstd INTERFACE) target_link_libraries(libzstd INTERFACE libzstd_static) - list(APPEND library_targets libzstd) endif () if (ZSTD_BUILD_SHARED AND ZSTD_BUILD_STATIC) # If both ZSTD_BUILD_SHARED and ZSTD_BUILD_STATIC are set, which is the @@ -176,11 +171,9 @@ if (ZSTD_BUILD_SHARED AND ZSTD_BUILD_STATIC) if (BUILD_SHARED_LIBS) add_library(libzstd INTERFACE) target_link_libraries(libzstd INTERFACE libzstd_shared) - list(APPEND library_targets libzstd) else () add_library(libzstd INTERFACE) target_link_libraries(libzstd INTERFACE libzstd_static) - list(APPEND library_targets libzstd) endif () endif () @@ -274,16 +267,20 @@ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libzstd.pc" DESTINATION "${CMAKE_INST # install target install(FILES ${PublicHeaders} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") -install(TARGETS ${library_targets} - EXPORT zstdExports - INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" - BUNDLE DESTINATION "${CMAKE_INSTALL_BINDIR}" - FRAMEWORK DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT runtime OPTIONAL - PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" - ) +foreach(target_suffix IN ITEMS "_shared" "_static" "") + if(TARGET "libzstd${target_suffix}") + install(TARGETS "libzstd${target_suffix}" + EXPORT "zstdExports${target_suffix}" + INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" + BUNDLE DESTINATION "${CMAKE_INSTALL_BINDIR}" + FRAMEWORK DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT runtime OPTIONAL + PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" + ) + endif() +endforeach() # uninstall target if (NOT TARGET uninstall) diff --git a/build/cmake/zstdConfig.cmake.in b/build/cmake/zstdConfig.cmake.in index f4190f989..a719d7899 100644 --- a/build/cmake/zstdConfig.cmake.in +++ b/build/cmake/zstdConfig.cmake.in @@ -5,6 +5,9 @@ if(@ZSTD_MULTITHREAD_SUPPORT@ AND "@UNIX@") find_dependency(Threads) endif() +foreach(lib_suffix IN ITEMS "_shared" "_static") + include("${CMAKE_CURRENT_LIST_DIR}/zstdTargets${lib_suffix}.cmake" OPTIONAL) +endforeach() include("${CMAKE_CURRENT_LIST_DIR}/zstdTargets.cmake") check_required_components("zstd") -- 2.47.3