From a9f8430961f9d8bf2a9560767100bcc433004e24 Mon Sep 17 00:00:00 2001 From: Sean Warren Date: Wed, 6 Mar 2019 06:09:22 +1100 Subject: [hdf5] Use cmake wrapper to ensure consuming libraries link to szip (#5467) * [hdf5] Use cmake wrapper to ensure consuming libraries link to szip in static build * [hdf5] Move hdf5 cmake code from vcpkg.cmake to vcpkg-cmake-wrapper * [hdf5] Do not force search in config mode * [hdf5] balance needs of vtk and kealib --- ports/hdf5/portfile.cmake | 6 ++++++ ports/hdf5/vcpkg-cmake-wrapper.cmake | 29 +++++++++++++++++++++++++++++ scripts/buildsystems/vcpkg.cmake | 13 ------------- 3 files changed, 35 insertions(+), 13 deletions(-) create mode 100644 ports/hdf5/vcpkg-cmake-wrapper.cmake diff --git a/ports/hdf5/portfile.cmake b/ports/hdf5/portfile.cmake index 1da61178b..61235fab1 100644 --- a/ports/hdf5/portfile.cmake +++ b/ports/hdf5/portfile.cmake @@ -57,5 +57,11 @@ file(RENAME ${CURRENT_PACKAGES_DIR}/share/hdf5/data/COPYING ${CURRENT_PACKAGES_D vcpkg_fixup_cmake_targets(CONFIG_PATH share/hdf5) +configure_file( + ${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake + ${CURRENT_PACKAGES_DIR}/share/hdf5 + @ONLY +) + file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/share) file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include) diff --git a/ports/hdf5/vcpkg-cmake-wrapper.cmake b/ports/hdf5/vcpkg-cmake-wrapper.cmake new file mode 100644 index 000000000..879d2516d --- /dev/null +++ b/ports/hdf5/vcpkg-cmake-wrapper.cmake @@ -0,0 +1,29 @@ +if (NOT PROJECT_NAME STREQUAL "VTK") + _find_package(${ARGS} CONFIG) + # Fill in missing static/shared targets + foreach(HDF5TARGET hdf5 hdf5_hl hdf5_cpp hdf5_hl_cpp) + if(TARGET hdf5::${HDF5TARGET}-static AND NOT TARGET hdf5::${HDF5TARGET}-shared) + _add_library(hdf5::${HDF5TARGET}-shared INTERFACE IMPORTED) + set_target_properties(hdf5::${HDF5TARGET}-shared PROPERTIES INTERFACE_LINK_LIBRARIES "hdf5::${HDF5TARGET}-static") + elseif(TARGET hdf5::${HDF5TARGET}-shared AND NOT TARGET hdf5::${HDF5TARGET}-static) + _add_library(hdf5::${HDF5TARGET}-static INTERFACE IMPORTED) + set_target_properties(hdf5::${HDF5TARGET}-static PROPERTIES INTERFACE_LINK_LIBRARIES "hdf5::${HDF5TARGET}-shared") + endif() + endforeach() +else () + _find_package(${ARGS}) +endif() + +if("static" STREQUAL "static") +find_package(SZIP CONFIG REQUIRED) +foreach(HDF5TARGET hdf5 hdf5_hl hdf5_cpp hdf5_hl_cpp) + if(TARGET hdf5::${HDF5TARGET}-static) + if (TARGET szip-shared) + set_property(TARGET hdf5::${HDF5TARGET}-static APPEND PROPERTY INTERFACE_LINK_LIBRARIES szip-shared) + else () + set_property(TARGET hdf5::${HDF5TARGET}-static APPEND PROPERTY INTERFACE_LINK_LIBRARIES szip-static) + endif () + endif() +endforeach() +endif() + diff --git a/scripts/buildsystems/vcpkg.cmake b/scripts/buildsystems/vcpkg.cmake index a946ce889..733e5432f 100644 --- a/scripts/buildsystems/vcpkg.cmake +++ b/scripts/buildsystems/vcpkg.cmake @@ -214,19 +214,6 @@ macro(find_package name) if(TIFF_LIBRARIES) list(APPEND TIFF_LIBRARIES ${LIBLZMA_LIBRARIES}) endif() - elseif(("${name}" STREQUAL "HDF5" OR "${name}" STREQUAL "hdf5") AND NOT PROJECT_NAME STREQUAL "VTK" AND EXISTS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/include/hdf5.h") - # This is a hack to make VTK work. TODO: find another way to suppress the built-in find module. - _find_package(${ARGV} CONFIG) - # Fill in missing static/shared targets - foreach(HDF5TARGET hdf5 hdf5_hl hdf5_cpp hdf5_hl_cpp) - if(TARGET hdf5::${HDF5TARGET}-static AND NOT TARGET hdf5::${HDF5TARGET}-shared) - _add_library(hdf5::${HDF5TARGET}-shared INTERFACE IMPORTED) - set_target_properties(hdf5::${HDF5TARGET}-shared PROPERTIES INTERFACE_LINK_LIBRARIES "hdf5::${HDF5TARGET}-static") - elseif(TARGET hdf5::${HDF5TARGET}-shared AND NOT TARGET hdf5::${HDF5TARGET}-static) - _add_library(hdf5::${HDF5TARGET}-static INTERFACE IMPORTED) - set_target_properties(hdf5::${HDF5TARGET}-static PROPERTIES INTERFACE_LINK_LIBRARIES "hdf5::${HDF5TARGET}-shared") - endif() - endforeach() elseif("${name}" STREQUAL "GSL" AND EXISTS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/include/gsl") _find_package(${ARGV}) if(GSL_FOUND AND TARGET GSL::gsl) -- cgit v1.2.3