diff --git a/CMakeInstallation.cmake b/CMakeInstallation.cmake index b44c8920627..2a49c2b20c1 100644 --- a/CMakeInstallation.cmake +++ b/CMakeInstallation.cmake @@ -52,6 +52,24 @@ endif () #----------------------------------------------------------------------------- if (NOT HDF5_EXTERNALLY_CONFIGURED) if (HDF5_EXPORTED_TARGETS) + if (HDF5_ENABLE_JNI) + install ( + EXPORT ${HDF5_EXPORTED_TARGETS}_java + DESTINATION ${HDF5_INSTALL_CMAKE_DIR} + FILE ${HDF5_PACKAGE}${HDF_PACKAGE_EXT}_java-targets.cmake + NAMESPACE ${HDF_PACKAGE_NAMESPACE} + COMPONENT configinstall + ) + endif () + if (BUILD_STATIC_LIBS AND BUILD_SHARED_LIBS) + install ( + EXPORT ${HDF5_EXPORTED_TARGETS}_static + DESTINATION ${HDF5_INSTALL_CMAKE_DIR} + FILE ${HDF5_PACKAGE}${HDF_PACKAGE_EXT}_static-targets.cmake + NAMESPACE ${HDF_PACKAGE_NAMESPACE} + COMPONENT configinstall + ) + endif () install ( EXPORT ${HDF5_EXPORTED_TARGETS} DESTINATION ${HDF5_INSTALL_CMAKE_DIR} @@ -61,16 +79,17 @@ if (NOT HDF5_EXTERNALLY_CONFIGURED) ) endif () - #----------------------------------------------------------------------------- - # Export all exported targets to the build tree for use by parent project - #----------------------------------------------------------------------------- - export ( - TARGETS ${HDF5_LIBRARIES_TO_EXPORT} ${HDF5_LIB_DEPENDENCIES} ${HDF5_UTILS_TO_EXPORT} - FILE ${HDF5_PACKAGE}${HDF_PACKAGE_EXT}-targets.cmake - NAMESPACE ${HDF_PACKAGE_NAMESPACE} - ) endif () +#----------------------------------------------------------------------------- +# Export all exported targets to the build tree for use by parent project +#----------------------------------------------------------------------------- +export ( + TARGETS ${HDF5_LIBRARIES_TO_EXPORT} ${HDF5_LIB_DEPENDENCIES} ${HDF5_UTILS_TO_EXPORT} + FILE ${HDF5_PACKAGE}${HDF_PACKAGE_EXT}-targets.cmake + NAMESPACE ${HDF_PACKAGE_NAMESPACE} +) + #----------------------------------------------------------------------------- # Set includes needed for build #----------------------------------------------------------------------------- diff --git a/c++/src/CMakeLists.txt b/c++/src/CMakeLists.txt index 65e35a94b23..78162b4b752 100644 --- a/c++/src/CMakeLists.txt +++ b/c++/src/CMakeLists.txt @@ -96,7 +96,7 @@ if (BUILD_STATIC_LIBS) set_global_variable (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF5_CPP_LIB_TARGET}") H5_SET_LIB_OPTIONS (${HDF5_CPP_LIB_TARGET} ${HDF5_CPP_LIB_NAME} STATIC 0) set_target_properties (${HDF5_CPP_LIB_TARGET} PROPERTIES FOLDER libraries/cpp) - set (install_targets ${HDF5_CPP_LIB_TARGET}) + set (install_targets_static ${HDF5_CPP_LIB_TARGET}) endif () if (BUILD_SHARED_LIBS) @@ -122,7 +122,7 @@ if (BUILD_SHARED_LIBS) set_global_variable (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF5_CPP_LIBSH_TARGET}") H5_SET_LIB_OPTIONS (${HDF5_CPP_LIBSH_TARGET} ${HDF5_CPP_LIB_NAME} SHARED "CXX") set_target_properties (${HDF5_CPP_LIBSH_TARGET} PROPERTIES FOLDER libraries/cpp) - set (install_targets ${install_targets} ${HDF5_CPP_LIBSH_TARGET}) + set (install_targets_shared ${HDF5_CPP_LIBSH_TARGET}) endif () #----------------------------------------------------------------------------- @@ -154,22 +154,39 @@ install ( if (HDF5_EXPORTED_TARGETS) if (BUILD_SHARED_LIBS) INSTALL_TARGET_PDB (${HDF5_CPP_LIBSH_TARGET} ${HDF5_INSTALL_BIN_DIR} cpplibraries) + + install ( + TARGETS + ${install_targets_shared} + EXPORT + ${HDF5_EXPORTED_TARGETS} + LIBRARY DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT cpplibraries + ARCHIVE DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT cpplibraries + RUNTIME DESTINATION ${HDF5_INSTALL_BIN_DIR} COMPONENT cpplibraries + FRAMEWORK DESTINATION ${HDF5_INSTALL_FWRK_DIR} COMPONENT cpplibraries + INCLUDES DESTINATION include + ) endif () if (BUILD_STATIC_LIBS) INSTALL_TARGET_PDB (${HDF5_CPP_LIB_TARGET} ${HDF5_INSTALL_LIB_DIR} cpplibraries) - endif () - install ( - TARGETS - ${install_targets} - EXPORT - ${HDF5_EXPORTED_TARGETS} - LIBRARY DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT cpplibraries - ARCHIVE DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT cpplibraries - RUNTIME DESTINATION ${HDF5_INSTALL_BIN_DIR} COMPONENT cpplibraries - FRAMEWORK DESTINATION ${HDF5_INSTALL_FWRK_DIR} COMPONENT cpplibraries - INCLUDES DESTINATION include - ) + if (BUILD_SHARED_LIBS) + set (_static_export ${HDF5_EXPORTED_TARGETS}_static) + else () + set (_static_export ${HDF5_EXPORTED_TARGETS}) + endif () + install ( + TARGETS + ${install_targets_static} + EXPORT + ${_static_export} + LIBRARY DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT cpplibraries + ARCHIVE DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT cpplibraries + RUNTIME DESTINATION ${HDF5_INSTALL_BIN_DIR} COMPONENT cpplibraries + FRAMEWORK DESTINATION ${HDF5_INSTALL_FWRK_DIR} COMPONENT cpplibraries + INCLUDES DESTINATION include + ) + endif () endif () #----------------------------------------------------------------------------- diff --git a/config/install/hdf5-config.cmake.in b/config/install/hdf5-config.cmake.in index 3c8374b3f7f..bb9a8d60f09 100644 --- a/config/install/hdf5-config.cmake.in +++ b/config/install/hdf5-config.cmake.in @@ -181,15 +181,31 @@ set (${HDF5_PACKAGE_NAME}_VERSION_MINOR @HDF5_VERSION_MINOR@) if (NOT TARGET "@HDF5_PACKAGE@") if (${HDF5_PACKAGE_NAME}_PROVIDES_ZLIB_SUPPORT) if (${HDF5_PACKAGE_NAME}_PACKAGE_EXTLIBS AND @ZLIB_USE_EXTERNAL@) - include (@PACKAGE_SHARE_INSTALL_DIR@/@ZLIB_PACKAGE_NAME@@HDF_PACKAGE_EXT@-targets.cmake) + include ("@PACKAGE_SHARE_INSTALL_DIR@/@ZLIB_PACKAGE_NAME@@HDF_PACKAGE_EXT@-targets.cmake") endif () endif () if (${HDF5_PACKAGE_NAME}_PROVIDES_SZIP_SUPPORT) if (${HDF5_PACKAGE_NAME}_PACKAGE_EXTLIBS AND @SZIP_USE_EXTERNAL@) - include (@PACKAGE_SHARE_INSTALL_DIR@/@LIBAEC_PACKAGE_NAME@@HDF_PACKAGE_EXT@-targets.cmake) + include ("@PACKAGE_SHARE_INSTALL_DIR@/@LIBAEC_PACKAGE_NAME@@HDF_PACKAGE_EXT@-targets.cmake") endif () endif () - include (@PACKAGE_SHARE_INSTALL_DIR@/@HDF5_PACKAGE@@HDF_PACKAGE_EXT@-targets.cmake) + include ("@PACKAGE_SHARE_INSTALL_DIR@/@HDF5_PACKAGE@@HDF_PACKAGE_EXT@-targets.cmake") + # OPTIONAL: some packages ship HDF5 in such a way that the static and + # Java targets files may not be available. + if (${HDF5_PACKAGE_NAME}_PROVIDES_STATIC_LIBS AND ${HDF5_PACKAGE_NAME}_PROVIDES_SHARED_LIBS) + include ("@PACKAGE_SHARE_INSTALL_DIR@/@HDF5_PACKAGE@@HDF_PACKAGE_EXT@_static-targets.cmake" OPTIONAL RESULT_VARIABLE _hdf5_static_loaded) + if (NOT _hdf5_static_loaded) + set (${CMAKE_FIND_PACKAGE_NAME}_static_FOUND FALSE) + endif () + unset (_hdf5_static_loaded) + endif () + if (${HDF5_PACKAGE_NAME}_PROVIDES_JAVA) + include ("@PACKAGE_SHARE_INSTALL_DIR@/@HDF5_PACKAGE@@HDF_PACKAGE_EXT@_java-targets.cmake" OPTIONAL RESULT_VARIABLE _hdf5_java_loaded) + if (NOT _hdf5_java_loaded) + set (${CMAKE_FIND_PACKAGE_NAME}_Java_FOUND FALSE) + endif () + unset (_hdf5_java_loaded) + endif () endif () # Handle default component(static) : diff --git a/fortran/src/CMakeLists.txt b/fortran/src/CMakeLists.txt index a7c1d4bd558..41e77c2efc3 100644 --- a/fortran/src/CMakeLists.txt +++ b/fortran/src/CMakeLists.txt @@ -273,7 +273,7 @@ if (BUILD_STATIC_LIBS) LINKER_LANGUAGE C ) add_dependencies (${HDF5_F90_C_LIB_TARGET} H5gen_i) - set (install_targets ${HDF5_F90_C_LIB_TARGET}) + set (install_targets_static ${HDF5_F90_C_LIB_TARGET}) endif () if (BUILD_SHARED_LIBS) @@ -293,7 +293,7 @@ if (BUILD_SHARED_LIBS) LINKER_LANGUAGE C ) add_dependencies (${HDF5_F90_C_LIBSH_TARGET} H5gen_iSH) - set (install_targets ${install_targets} ${HDF5_F90_C_LIBSH_TARGET}) + set (install_targets_shared ${HDF5_F90_C_LIBSH_TARGET}) endif () #----------------------------------------------------------------------------- @@ -466,9 +466,9 @@ if (BUILD_STATIC_LIBS) LINKER_LANGUAGE Fortran Fortran_MODULE_DIRECTORY ${CMAKE_Fortran_MODULE_DIRECTORY}/static ) - H5_SET_LIB_OPTIONS (${HDF5_F90_LIB_TARGET} ${HDF5_F90_LIB_NAME} STATIC 0) set_global_variable (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF5_F90_LIB_TARGET}") - set (install_targets ${install_targets} ${HDF5_F90_LIB_TARGET}) + H5_SET_LIB_OPTIONS (${HDF5_F90_LIB_TARGET} ${HDF5_F90_LIB_NAME} STATIC 0) + set (install_targets_static ${install_targets_static} ${HDF5_F90_LIB_TARGET}) add_dependencies (${HDF5_F90_LIB_TARGET} H5gen) endif () @@ -504,7 +504,7 @@ if (BUILD_SHARED_LIBS) ) set_global_variable (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF5_F90_LIBSH_TARGET}") H5_SET_LIB_OPTIONS (${HDF5_F90_LIBSH_TARGET} ${HDF5_F90_LIB_NAME} SHARED "F") - set (install_targets ${install_targets} ${HDF5_F90_LIBSH_TARGET}) + set (install_targets_shared ${install_targets_shared} ${HDF5_F90_LIBSH_TARGET}) add_dependencies(${HDF5_F90_LIBSH_TARGET} H5genSH) endif () @@ -605,21 +605,36 @@ if (HDF5_EXPORTED_TARGETS) if (BUILD_SHARED_LIBS) INSTALL_TARGET_PDB (${HDF5_F90_C_LIBSH_TARGET} ${HDF5_INSTALL_BIN_DIR} fortlibraries) #INSTALL_TARGET_PDB (${HDF5_F90_LIBSH_TARGET} ${HDF5_INSTALL_BIN_DIR} fortlibraries) + + install ( + TARGETS ${install_targets_shared} + EXPORT ${HDF5_EXPORTED_TARGETS} + LIBRARY DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT fortlibraries + ARCHIVE DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT fortlibraries + RUNTIME DESTINATION ${HDF5_INSTALL_BIN_DIR} COMPONENT fortlibraries + FRAMEWORK DESTINATION ${HDF5_INSTALL_FWRK_DIR} COMPONENT fortlibraries + INCLUDES DESTINATION include + ) endif () if (BUILD_STATIC_LIBS) INSTALL_TARGET_PDB (${HDF5_F90_C_LIB_TARGET} ${HDF5_INSTALL_LIB_DIR} fortlibraries) #INSTALL_TARGET_PDB (${HDF5_F90_LIB_TARGET} ${HDF5_INSTALL_LIB_DIR} fortlibraries) - endif () - install ( - TARGETS ${install_targets} - EXPORT ${HDF5_EXPORTED_TARGETS} - LIBRARY DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT fortlibraries - ARCHIVE DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT fortlibraries - RUNTIME DESTINATION ${HDF5_INSTALL_BIN_DIR} COMPONENT fortlibraries - FRAMEWORK DESTINATION ${HDF5_INSTALL_FWRK_DIR} COMPONENT fortlibraries - INCLUDES DESTINATION include - ) + if (BUILD_SHARED_LIBS) + set (_static_export ${HDF5_EXPORTED_TARGETS}_static) + else () + set (_static_export ${HDF5_EXPORTED_TARGETS}) + endif () + install ( + TARGETS ${install_targets_static} + EXPORT ${_static_export} + LIBRARY DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT fortlibraries + ARCHIVE DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT fortlibraries + RUNTIME DESTINATION ${HDF5_INSTALL_BIN_DIR} COMPONENT fortlibraries + FRAMEWORK DESTINATION ${HDF5_INSTALL_FWRK_DIR} COMPONENT fortlibraries + INCLUDES DESTINATION include + ) + endif () endif () #----------------------------------------------------------------------------- diff --git a/hl/c++/src/CMakeLists.txt b/hl/c++/src/CMakeLists.txt index e72c1b86f60..2dbb61772b2 100644 --- a/hl/c++/src/CMakeLists.txt +++ b/hl/c++/src/CMakeLists.txt @@ -25,7 +25,7 @@ if (BUILD_STATIC_LIBS) set_global_variable (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF5_HL_CPP_LIB_TARGET}") H5_SET_LIB_OPTIONS (${HDF5_HL_CPP_LIB_TARGET} ${HDF5_HL_CPP_LIB_NAME} STATIC 0) set_target_properties (${HDF5_HL_CPP_LIB_TARGET} PROPERTIES FOLDER libraries/hl) - set (install_targets ${HDF5_HL_CPP_LIB_TARGET}) + set (install_targets_static ${HDF5_HL_CPP_LIB_TARGET}) endif () if (BUILD_SHARED_LIBS) @@ -41,7 +41,7 @@ if (BUILD_SHARED_LIBS) set_global_variable (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF5_HL_CPP_LIBSH_TARGET}") H5_SET_LIB_OPTIONS (${HDF5_HL_CPP_LIBSH_TARGET} ${HDF5_HL_CPP_LIB_NAME} SHARED "HL_CXX") set_target_properties (${HDF5_HL_CPP_LIBSH_TARGET} PROPERTIES FOLDER libraries/hl) - set (install_targets ${install_targets} ${HDF5_HL_CPP_LIBSH_TARGET}) + set (install_targets_shared ${HDF5_HL_CPP_LIBSH_TARGET}) endif () #----------------------------------------------------------------------------- @@ -73,22 +73,39 @@ install ( if (HDF5_EXPORTED_TARGETS) if (BUILD_SHARED_LIBS) INSTALL_TARGET_PDB (${HDF5_HL_CPP_LIBSH_TARGET} ${HDF5_INSTALL_BIN_DIR} hlcpplibraries) + + install ( + TARGETS + ${install_targets_shared} + EXPORT + ${HDF5_EXPORTED_TARGETS} + LIBRARY DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT hlcpplibraries + ARCHIVE DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT hlcpplibraries + RUNTIME DESTINATION ${HDF5_INSTALL_BIN_DIR} COMPONENT hlcpplibraries + FRAMEWORK DESTINATION ${HDF5_INSTALL_FWRK_DIR} COMPONENT hlcpplibraries + INCLUDES DESTINATION include + ) endif () if (BUILD_STATIC_LIBS) INSTALL_TARGET_PDB (${HDF5_HL_CPP_LIB_TARGET} ${HDF5_INSTALL_LIB_DIR} hlcpplibraries) - endif () - install ( - TARGETS - ${install_targets} - EXPORT - ${HDF5_EXPORTED_TARGETS} - LIBRARY DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT hlcpplibraries - ARCHIVE DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT hlcpplibraries - RUNTIME DESTINATION ${HDF5_INSTALL_BIN_DIR} COMPONENT hlcpplibraries - FRAMEWORK DESTINATION ${HDF5_INSTALL_FWRK_DIR} COMPONENT hlcpplibraries - INCLUDES DESTINATION include - ) + if (BUILD_SHARED_LIBS) + set (_static_export ${HDF5_EXPORTED_TARGETS}_static) + else () + set (_static_export ${HDF5_EXPORTED_TARGETS}) + endif () + install ( + TARGETS + ${install_targets_static} + EXPORT + ${_static_export} + LIBRARY DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT hlcpplibraries + ARCHIVE DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT hlcpplibraries + RUNTIME DESTINATION ${HDF5_INSTALL_BIN_DIR} COMPONENT hlcpplibraries + FRAMEWORK DESTINATION ${HDF5_INSTALL_FWRK_DIR} COMPONENT hlcpplibraries + INCLUDES DESTINATION include + ) + endif () endif () #----------------------------------------------------------------------------- diff --git a/hl/fortran/src/CMakeLists.txt b/hl/fortran/src/CMakeLists.txt index 42a00bdc3fe..87fedb4b008 100644 --- a/hl/fortran/src/CMakeLists.txt +++ b/hl/fortran/src/CMakeLists.txt @@ -79,7 +79,7 @@ if (BUILD_STATIC_LIBS) FOLDER libraries/hl/fortran LINKER_LANGUAGE C ) - set (install_targets ${HDF5_HL_F90_C_LIB_TARGET}) + set (install_targets_static ${HDF5_HL_F90_C_LIB_TARGET}) endif () if (BUILD_SHARED_LIBS) add_library (${HDF5_HL_F90_C_LIBSH_TARGET} SHARED ${HDF5_HL_F90_C_SOURCES} ${HDF5_HL_F90_HEADERS}) @@ -97,7 +97,7 @@ if (BUILD_SHARED_LIBS) FOLDER libraries/hl/fortran LINKER_LANGUAGE C ) - set (install_targets ${install_targets} ${HDF5_HL_F90_C_LIBSH_TARGET}) + set (install_targets_shared ${HDF5_HL_F90_C_LIBSH_TARGET}) endif () #----------------------------------------------------------------------------- @@ -232,9 +232,9 @@ if (BUILD_STATIC_LIBS) LINKER_LANGUAGE Fortran Fortran_MODULE_DIRECTORY ${CMAKE_Fortran_MODULE_DIRECTORY}/static ) - H5_SET_LIB_OPTIONS (${HDF5_HL_F90_LIB_TARGET} ${HDF5_HL_F90_LIB_NAME} STATIC 0) set_global_variable (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF5_HL_F90_LIB_TARGET}") - set (install_targets ${install_targets} ${HDF5_HL_F90_LIB_TARGET}) + H5_SET_LIB_OPTIONS (${HDF5_HL_F90_LIB_TARGET} ${HDF5_HL_F90_LIB_NAME} STATIC 0) + set (install_targets_static ${install_targets_static} ${HDF5_HL_F90_LIB_TARGET}) add_dependencies(${HDF5_HL_F90_LIB_TARGET} H5HLgen) endif () if (BUILD_SHARED_LIBS) @@ -271,9 +271,9 @@ if (BUILD_SHARED_LIBS) LINKER_LANGUAGE Fortran Fortran_MODULE_DIRECTORY ${CMAKE_Fortran_MODULE_DIRECTORY}/shared ) - H5_SET_LIB_OPTIONS (${HDF5_HL_F90_LIBSH_TARGET} ${HDF5_HL_F90_LIB_NAME} SHARED "HL_F") set_global_variable (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF5_HL_F90_LIBSH_TARGET}") - set (install_targets ${install_targets} ${HDF5_HL_F90_LIBSH_TARGET}) + H5_SET_LIB_OPTIONS (${HDF5_HL_F90_LIBSH_TARGET} ${HDF5_HL_F90_LIB_NAME} SHARED "HL_F") + set (install_targets_shared ${install_targets_shared} ${HDF5_HL_F90_LIBSH_TARGET}) add_dependencies(${HDF5_HL_F90_LIBSH_TARGET} H5HLgenSH) endif () @@ -333,21 +333,36 @@ if (HDF5_EXPORTED_TARGETS) if (BUILD_SHARED_LIBS) INSTALL_TARGET_PDB (${HDF5_HL_F90_C_LIBSH_TARGET} ${HDF5_INSTALL_BIN_DIR} hlfortlibraries) #INSTALL_TARGET_PDB (${HDF5_HL_F90_LIBSH_TARGET} ${HDF5_INSTALL_BIN_DIR} hlfortlibraries) + + install ( + TARGETS ${install_targets_shared} + EXPORT ${HDF5_EXPORTED_TARGETS} + LIBRARY DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT hlfortlibraries + ARCHIVE DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT hlfortlibraries + RUNTIME DESTINATION ${HDF5_INSTALL_BIN_DIR} COMPONENT hlfortlibraries + FRAMEWORK DESTINATION ${HDF5_INSTALL_FWRK_DIR} COMPONENT hlfortlibraries + INCLUDES DESTINATION include + ) endif () if (BUILD_STATIC_LIBS) INSTALL_TARGET_PDB (${HDF5_HL_F90_C_LIB_TARGET} ${HDF5_INSTALL_LIB_DIR} hlfortlibraries) #INSTALL_TARGET_PDB (${HDF5_HL_F90_LIB_TARGET} ${HDF5_INSTALL_LIB_DIR} hlfortlibraries) - endif () - install ( - TARGETS ${install_targets} - EXPORT ${HDF5_EXPORTED_TARGETS} - LIBRARY DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT hlfortlibraries - ARCHIVE DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT hlfortlibraries - RUNTIME DESTINATION ${HDF5_INSTALL_BIN_DIR} COMPONENT hlfortlibraries - FRAMEWORK DESTINATION ${HDF5_INSTALL_FWRK_DIR} COMPONENT hlfortlibraries - INCLUDES DESTINATION include - ) + if (BUILD_SHARED_LIBS) + set (_static_export ${HDF5_EXPORTED_TARGETS}_static) + else () + set (_static_export ${HDF5_EXPORTED_TARGETS}) + endif () + install ( + TARGETS ${install_targets_static} + EXPORT ${_static_export} + LIBRARY DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT hlfortlibraries + ARCHIVE DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT hlfortlibraries + RUNTIME DESTINATION ${HDF5_INSTALL_BIN_DIR} COMPONENT hlfortlibraries + FRAMEWORK DESTINATION ${HDF5_INSTALL_FWRK_DIR} COMPONENT hlfortlibraries + INCLUDES DESTINATION include + ) + endif () endif () #----------------------------------------------------------------------------- diff --git a/hl/src/CMakeLists.txt b/hl/src/CMakeLists.txt index ad24d1dcb6d..cf4def6ebe6 100644 --- a/hl/src/CMakeLists.txt +++ b/hl/src/CMakeLists.txt @@ -55,10 +55,10 @@ if (BUILD_STATIC_LIBS) target_compile_options(${HDF5_HL_LIB_TARGET} PRIVATE "${HDF5_CMAKE_C_FLAGS}") TARGET_C_PROPERTIES (${HDF5_HL_LIB_TARGET} STATIC) target_link_libraries (${HDF5_HL_LIB_TARGET} PUBLIC ${HDF5_LIB_TARGET}) + set_global_variable (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF5_HL_LIB_TARGET}") H5_SET_LIB_OPTIONS (${HDF5_HL_LIB_TARGET} ${HDF5_HL_LIB_NAME} STATIC 0) set_target_properties (${HDF5_HL_LIB_TARGET} PROPERTIES FOLDER libraries/hl) - set_global_variable (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF5_HL_LIB_TARGET}") - set (install_targets ${HDF5_HL_LIB_TARGET}) + set (install_targets_static ${HDF5_HL_LIB_TARGET}) endif () if (BUILD_SHARED_LIBS) @@ -71,10 +71,10 @@ if (BUILD_SHARED_LIBS) target_compile_definitions(${HDF5_HL_LIBSH_TARGET} PUBLIC "H5_BUILT_AS_DYNAMIC_LIB") TARGET_C_PROPERTIES (${HDF5_HL_LIBSH_TARGET} SHARED) target_link_libraries (${HDF5_HL_LIBSH_TARGET} PUBLIC ${HDF5_LIBSH_TARGET}) + set_global_variable (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF5_HL_LIBSH_TARGET}") H5_SET_LIB_OPTIONS (${HDF5_HL_LIBSH_TARGET} ${HDF5_HL_LIB_NAME} SHARED "HL") set_target_properties (${HDF5_HL_LIBSH_TARGET} PROPERTIES FOLDER libraries/hl) - set_global_variable (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF5_HL_LIBSH_TARGET}") - set (install_targets ${install_targets} ${HDF5_HL_LIBSH_TARGET}) + set (install_targets_shared ${HDF5_HL_LIBSH_TARGET}) endif () #----------------------------------------------------------------------------- @@ -106,22 +106,39 @@ install ( if (HDF5_EXPORTED_TARGETS) if (BUILD_SHARED_LIBS) INSTALL_TARGET_PDB (${HDF5_HL_LIBSH_TARGET} ${HDF5_INSTALL_BIN_DIR} hllibraries) + + install ( + TARGETS + ${install_targets_shared} + EXPORT + ${HDF5_EXPORTED_TARGETS} + LIBRARY DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT hllibraries + ARCHIVE DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT hllibraries + RUNTIME DESTINATION ${HDF5_INSTALL_BIN_DIR} COMPONENT hllibraries + FRAMEWORK DESTINATION ${HDF5_INSTALL_FWRK_DIR} COMPONENT hllibraries + INCLUDES DESTINATION include + ) endif () if (BUILD_STATIC_LIBS) INSTALL_TARGET_PDB (${HDF5_HL_LIB_TARGET} ${HDF5_INSTALL_LIB_DIR} hllibraries) - endif () - install ( - TARGETS - ${install_targets} - EXPORT - ${HDF5_EXPORTED_TARGETS} - LIBRARY DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT hllibraries - ARCHIVE DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT hllibraries - RUNTIME DESTINATION ${HDF5_INSTALL_BIN_DIR} COMPONENT hllibraries - FRAMEWORK DESTINATION ${HDF5_INSTALL_FWRK_DIR} COMPONENT hllibraries - INCLUDES DESTINATION include - ) + if (BUILD_SHARED_LIBS) + set (_static_export ${HDF5_EXPORTED_TARGETS}_static) + else () + set (_static_export ${HDF5_EXPORTED_TARGETS}) + endif () + install ( + TARGETS + ${install_targets_static} + EXPORT + ${_static_export} + LIBRARY DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT hllibraries + ARCHIVE DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT hllibraries + RUNTIME DESTINATION ${HDF5_INSTALL_BIN_DIR} COMPONENT hllibraries + FRAMEWORK DESTINATION ${HDF5_INSTALL_FWRK_DIR} COMPONENT hllibraries + INCLUDES DESTINATION include + ) + endif () endif () #----------------------------------------------------------------------------- diff --git a/java/src-jni/jni/CMakeLists.txt b/java/src-jni/jni/CMakeLists.txt index 71319cf1e65..1248bbf4b6c 100644 --- a/java/src-jni/jni/CMakeLists.txt +++ b/java/src-jni/jni/CMakeLists.txt @@ -110,7 +110,7 @@ if (HDF5_EXPORTED_TARGETS) TARGETS ${HDF5_JAVA_JNI_LIB_TARGET} EXPORT - ${HDF5_EXPORTED_TARGETS} + ${HDF5_EXPORTED_TARGETS}_java LIBRARY DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT libraries ARCHIVE DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT libraries RUNTIME DESTINATION ${HDF5_INSTALL_BIN_DIR} COMPONENT libraries diff --git a/release_docs/CHANGELOG.md b/release_docs/CHANGELOG.md index d3ea781d3aa..13aa32ce1c1 100644 --- a/release_docs/CHANGELOG.md +++ b/release_docs/CHANGELOG.md @@ -59,6 +59,10 @@ We would like to thank the many HDF5 community members who contributed to this r A new `Findlibaec.cmake` CMake module has been added. This module is intended to locate libaec on the system for SZIP support in HDF5 when libaec was built with Autotools instead of CMake. When SZIP support is enabled in HDF5 with the `HDF5_ENABLE_SZIP_SUPPORT` option, this module will first check for an existing CMake-built libaec and use that if it's available. Otherwise, the module will heuristically search for libaec on the system. If necessary, the module can be hinted toward a particular libaec installation by setting the CMake variable `libaec_ROOT` to point to a directory. If it is known that a CMake-built libaec installation exists on the system in a non-standard location, the CMake variable `libaec_DIR` can instead be set to a directory containing a `libaec-config.cmake` file to cause the module to prefer that libaec installation. +### Refactored CMake library export mechanism + + The CMake build system now uses separate export targets for different library types: static libraries use `${HDF5_EXPORTED_TARGETS}_static`, Java libraries use `${HDF5_EXPORTED_TARGETS}_java`, and shared libraries continue using the main `${HDF5_EXPORTED_TARGETS}`. The generated `hdf5-config.cmake` file conditionally includes the appropriate target files (`hdf5-targets_static.cmake` and `hdf5-targets_java.cmake`), allowing downstream projects to selectively link against specific library variants. This refactoring improves build system maintainability and applies consistently across all HDF5 components (core, C++, Fortran, high-level APIs, tools, and Java JNI). + ## Library ## Parallel Library diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 70aa3cd13e4..17a4690e049 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1267,7 +1267,7 @@ if (BUILD_STATIC_LIBS) H5_SET_LIB_OPTIONS (${HDF5_LIB_TARGET} ${HDF5_LIB_NAME} STATIC 0) set_target_properties (${HDF5_LIB_TARGET} PROPERTIES FOLDER libraries) - set (install_targets ${HDF5_LIB_TARGET}) + set (install_targets_static ${HDF5_LIB_TARGET}) endif () if (BUILD_SHARED_LIBS) @@ -1296,7 +1296,7 @@ if (BUILD_SHARED_LIBS) H5_SET_LIB_OPTIONS (${HDF5_LIBSH_TARGET} ${HDF5_LIB_NAME} SHARED "LIB") set_target_properties (${HDF5_LIBSH_TARGET} PROPERTIES FOLDER libraries) - set (install_targets ${install_targets} ${HDF5_LIBSH_TARGET}) + set (install_targets_shared ${HDF5_LIBSH_TARGET}) endif () #----------------------------------------------------------------------------- @@ -1332,22 +1332,39 @@ endif () if (HDF5_EXPORTED_TARGETS) if (BUILD_SHARED_LIBS) INSTALL_TARGET_PDB (${HDF5_LIBSH_TARGET} ${HDF5_INSTALL_BIN_DIR} libraries) + + install ( + TARGETS + ${install_targets_shared} + EXPORT + ${HDF5_EXPORTED_TARGETS} + LIBRARY DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT libraries + ARCHIVE DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT libraries + RUNTIME DESTINATION ${HDF5_INSTALL_BIN_DIR} COMPONENT libraries + FRAMEWORK DESTINATION ${HDF5_INSTALL_FWRK_DIR} COMPONENT libraries + INCLUDES DESTINATION include + ) endif () if (BUILD_STATIC_LIBS) INSTALL_TARGET_PDB (${HDF5_LIB_TARGET} ${HDF5_INSTALL_LIB_DIR} libraries) - endif () - install ( - TARGETS - ${install_targets} - EXPORT - ${HDF5_EXPORTED_TARGETS} - LIBRARY DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT libraries - ARCHIVE DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT libraries - RUNTIME DESTINATION ${HDF5_INSTALL_BIN_DIR} COMPONENT libraries - FRAMEWORK DESTINATION ${HDF5_INSTALL_FWRK_DIR} COMPONENT libraries - INCLUDES DESTINATION include - ) + if (BUILD_SHARED_LIBS) + set (_static_export ${HDF5_EXPORTED_TARGETS}_static) + else () + set (_static_export ${HDF5_EXPORTED_TARGETS}) + endif () + install ( + TARGETS + ${install_targets_static} + EXPORT + ${_static_export} + LIBRARY DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT libraries + ARCHIVE DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT libraries + RUNTIME DESTINATION ${HDF5_INSTALL_BIN_DIR} COMPONENT libraries + FRAMEWORK DESTINATION ${HDF5_INSTALL_FWRK_DIR} COMPONENT libraries + INCLUDES DESTINATION include + ) + endif () endif () #----------------------------------------------------------------------------- diff --git a/tools/lib/CMakeLists.txt b/tools/lib/CMakeLists.txt index 8d1f2315c79..0fde818f93a 100644 --- a/tools/lib/CMakeLists.txt +++ b/tools/lib/CMakeLists.txt @@ -59,7 +59,7 @@ if (BUILD_STATIC_LIBS) set_global_variable (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF5_TOOLS_LIB_TARGET}") H5_SET_LIB_OPTIONS (${HDF5_TOOLS_LIB_TARGET} ${HDF5_TOOLS_LIB_NAME} STATIC 0) set_target_properties (${HDF5_TOOLS_LIB_TARGET} PROPERTIES FOLDER libraries/tools) - set (install_targets ${HDF5_TOOLS_LIB_TARGET}) + set (install_targets_static ${HDF5_TOOLS_LIB_TARGET}) endif () if (BUILD_SHARED_LIBS) @@ -85,7 +85,7 @@ if (BUILD_SHARED_LIBS) set_global_variable (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF5_TOOLS_LIBSH_TARGET}") H5_SET_LIB_OPTIONS (${HDF5_TOOLS_LIBSH_TARGET} ${HDF5_TOOLS_LIB_NAME} SHARED "TOOLS") set_target_properties (${HDF5_TOOLS_LIBSH_TARGET} PROPERTIES FOLDER libraries/tools) - set (install_targets ${install_targets} ${HDF5_TOOLS_LIBSH_TARGET}) + set (install_targets_shared ${HDF5_TOOLS_LIBSH_TARGET}) endif () #----------------------------------------------------------------------------- @@ -111,20 +111,37 @@ endif () if (HDF5_EXPORTED_TARGETS) if (BUILD_SHARED_LIBS) INSTALL_TARGET_PDB (${HDF5_TOOLS_LIBSH_TARGET} ${HDF5_INSTALL_BIN_DIR} toolslibraries) + + install ( + TARGETS + ${install_targets_shared} + EXPORT + ${HDF5_EXPORTED_TARGETS} + LIBRARY DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT toolslibraries + ARCHIVE DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT toolslibraries + RUNTIME DESTINATION ${HDF5_INSTALL_BIN_DIR} COMPONENT toolslibraries + FRAMEWORK DESTINATION ${HDF5_INSTALL_FWRK_DIR} COMPONENT toolslibraries + INCLUDES DESTINATION include + ) endif () if (BUILD_STATIC_LIBS) INSTALL_TARGET_PDB (${HDF5_TOOLS_LIB_TARGET} ${HDF5_INSTALL_LIB_DIR} toolslibraries) - endif () - install ( - TARGETS - ${install_targets} - EXPORT - ${HDF5_EXPORTED_TARGETS} - LIBRARY DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT toolslibraries - ARCHIVE DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT toolslibraries - RUNTIME DESTINATION ${HDF5_INSTALL_BIN_DIR} COMPONENT toolslibraries - FRAMEWORK DESTINATION ${HDF5_INSTALL_FWRK_DIR} COMPONENT toolslibraries - INCLUDES DESTINATION include - ) + if (BUILD_SHARED_LIBS) + set (_static_export ${HDF5_EXPORTED_TARGETS}_static) + else () + set (_static_export ${HDF5_EXPORTED_TARGETS}) + endif () + install ( + TARGETS + ${install_targets_static} + EXPORT + ${_static_export} + LIBRARY DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT toolslibraries + ARCHIVE DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT toolslibraries + RUNTIME DESTINATION ${HDF5_INSTALL_BIN_DIR} COMPONENT toolslibraries + FRAMEWORK DESTINATION ${HDF5_INSTALL_FWRK_DIR} COMPONENT toolslibraries + INCLUDES DESTINATION include + ) + endif () endif ()