diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake index d06a276..5d97fd3 100644 --- a/cmake/dependencies.cmake +++ b/cmake/dependencies.cmake @@ -134,7 +134,22 @@ if(USE_HDF5) ##### # First, find the C and HL libraries. ##### - find_package(HDF5 COMPONENTS C HL REQUIRED) + find_package(HDF5 NAMES hdf5 CONFIG COMPONENTS C HL REQUIRED) + if(TARGET HDF5::HDF5) + # pass + elseif(TARGET hdf5::hdf5-shared) + add_library(HDF5::HDF5 ALIAS hdf5::hdf5-shared) + elseif(TARGET hdf5::hdf5-static) + add_library(HDF5::HDF5 ALIAS hdf5::hdf5-static) + endif() + if(TARGET hdf5::hdf5_hl) + # pass + elseif(TARGET hdf5::hdf5_hl-shared) + add_library(hdf5::hdf5_hl ALIAS hdf5::hdf5_hl-shared) + elseif(TARGET hdf5::hdf5_hl-static) + add_library(hdf5::hdf5_hl ALIAS hdf5::hdf5_hl-static) + endif() + set(HDF5_IS_PARALLEL "${HDF5_ENABLE_PARALLEL}") message(STATUS "Found HDF5 version: ${HDF5_VERSION}") if(${HDF5_VERSION} VERSION_LESS ${HDF5_VERSION_REQUIRED}) @@ -144,7 +159,6 @@ if(USE_HDF5) message(STATUS "Using HDF5 include dir: ${HDF5_INCLUDE_DIRS}") target_link_libraries(netcdf PRIVATE - HDF5::HDF5 ) find_package(Threads) @@ -244,10 +258,10 @@ if( NETCDF_ENABLE_DAP2 OR NETCDF_ENABLE_DAP4 OR NETCDF_ENABLE_BYTERANGE_SUPPORT # ${CURL_INCLUDE_DIRS} #) if(CURL_FOUND) + set(CURL_LIBRARIES "") set(FOUND_CURL TRUE) target_link_libraries(netcdf PRIVATE - CURL::libcurl ) else() set(FOUND_CURL FALSE) @@ -345,6 +359,10 @@ if(NOT WIN32) set(HAVE_LIBM "") endif() else(NOT HAVE_LIBM) + find_library(HAVE_LIBM_M NAMES m) + if(HAVE_LIBM STREQUAL HAVE_LIBM_M) + set(HAVE_LIBM m) + endif() message(STATUS "Found Math library: ${HAVE_LIBM}") endif() endif() @@ -354,6 +372,7 @@ endif() ################################ # See if we have zlib find_package(ZLIB) +set(ZLIB_LIBRARY ZLIB::ZLIB) # Define a test flag for have zlib library if(ZLIB_FOUND) @@ -371,18 +390,25 @@ endif() ################################ MESSAGE(STATUS "Checking for filter libraries") IF (NETCDF_ENABLE_FILTER_SZIP) - find_package(Szip) + find_package(libaec CONFIG REQUIRED) + set(Szip_FOUND 1) + set(Szip_LIBRARY libaec::sz) + set(Szip_LIBRARIES "${Szip_LIBRARY}") elseif(NETCDF_ENABLE_NCZARR) - find_package(Szip) + # purely transitive endif() IF (NETCDF_ENABLE_FILTER_BZ2) - find_package(Bz2) + find_package(BZip2 REQUIRED) + set(Bz2_FOUND 1) + set(Bz2_LIBRARIES BZip2::BZip2) + set(Bzip2_LIBRARIES "${Bz2_LIBRARIES}") endif() IF (NETCDF_ENABLE_FILTER_BLOSC) find_package(Blosc) endif() IF (NETCDF_ENABLE_FILTER_ZSTD) - find_package(Zstd) + find_package(Zstd NAMES zstd REQUIRED) + set(Zstd_LIBRARIES zstd::libzstd) endif() # Accumulate standard filters @@ -412,7 +438,8 @@ endif() set(STD_FILTERS "${STD_FILTERS}${FOUND_STD_FILTERS}") IF (NETCDF_ENABLE_NCZARR_ZIP) - find_package(Zip) + find_package(Zip NAMES libzip REQUIRED) + set(Zip_LIBRARIES libzip::zip) if(Zip_FOUND) target_include_directories(netcdf PRIVATE diff --git a/libdispatch/CMakeLists.txt b/libdispatch/CMakeLists.txt index 0f5d66d..13ef7ca 100644 --- a/libdispatch/CMakeLists.txt +++ b/libdispatch/CMakeLists.txt @@ -14,6 +14,10 @@ target_sources(dispatch ncproplist.c ) +if(NETCDF_ENABLE_DAP2 OR NETCDF_ENABLE_DAP4 OR NETCDF_ENABLE_BYTERANGE) + target_link_libraries(dispatch PRIVATE CURL::libcurl) +endif() + if (NETCDF_ENABLE_DLL) target_compile_definitions(dispatch PRIVATE DLL_NETCDF DLL_EXPORT) endif() diff --git a/liblib/CMakeLists.txt b/liblib/CMakeLists.txt index cc482d5..5f263c5 100644 --- a/liblib/CMakeLists.txt +++ b/liblib/CMakeLists.txt @@ -43,7 +43,6 @@ if(USE_HDF4) endif() if(FOUND_CURL) - target_link_libraries(netcdf PRIVATE CURL::libcurl) endif() if(NETCDF_ENABLE_DAP2) @@ -60,6 +59,7 @@ if(NETCDF_ENABLE_DAP4) $ $ ) + list(APPEND EXTRA_DEPS tinyxml2::tinyxml2) endif() if(NETCDF_ENABLE_NCZARR) @@ -74,6 +74,7 @@ if(NETCDF_ENABLE_S3_INTERNAL) PRIVATE $ ) + list(APPEND EXTRA_DEPS tinyxml2::tinyxml2) endif() if(NETCDF_ENABLE_PLUGINS) @@ -185,6 +186,14 @@ endif() if(TLL_LIBS) list(REMOVE_DUPLICATES TLL_LIBS) + # Plugins only + list(REMOVE_ITEM TLL_LIBS + ${Blosc_LIBRARIES} + ${Bz2_LIBRARIES} + ${Szip_LIBRARIES} + ${ZLIB_LIBRARY} + ${Zstd_LIBRARIES} + ) endif() target_link_libraries(netcdf PRIVATE ${TLL_LIBS}) diff --git a/libncxml/CMakeLists.txt b/libncxml/CMakeLists.txt index b8fa4b2..65f1c18 100644 --- a/libncxml/CMakeLists.txt +++ b/libncxml/CMakeLists.txt @@ -1,7 +1,7 @@ if(HAVE_LIBXML2) set(libncxml_SOURCES ncxml_xml2.c) else() - set(libncxml_SOURCES ncxml_tinyxml2.cpp tinyxml2.cpp tinyxml2.h) + set(libncxml_SOURCES ncxml_tinyxml2.cpp) endif() add_library(ncxml OBJECT ${libncxml_SOURCES}) @@ -13,6 +13,8 @@ if(HAVE_LIBXML2) ${LIBXML2_INCLUDE_DIRS} ) else() + find_package(tinyxml2 CONFIG REQUIRED GLOBAL) + target_link_libraries(ncxml PRIVATE $) target_include_directories(ncxml PUBLIC ./include diff --git a/netCDFConfig.cmake.in b/netCDFConfig.cmake.in index 987b2ad..0dfda8e 100644 --- a/netCDFConfig.cmake.in +++ b/netCDFConfig.cmake.in @@ -4,6 +4,17 @@ # @PACKAGE_INIT@ +if(NOT "@BUILD_SHARED_LIBS@") + include(CMakeFindDependencyMacro) + find_dependency(tinyxml2 CONFIG) + if("@FOUND_CURL@") + find_dependency(CURL) + endif() + if("@NETCDF_ENABLE_NCZARR_ZIP@") + find_dependency(libzip CONFIG) + endif() +endif() + set(NetCDFVersion "@PACKAGE_VERSION@") set_and_check(netCDF_INSTALL_PREFIX "@CMAKE_INSTALL_PREFIX@") set_and_check(netCDF_INCLUDE_DIR "@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_INCLUDEDIR@") @@ -42,7 +53,7 @@ set(netCDF_HAS_DISKLESS @HAS_DISKLESS@) set(netCDF_HAS_MMAP @HAS_MMAP@) if (netCDF_HAS_HDF4 OR netCDF_HAS_HDF5) include(CMakeFindDependencyMacro) - find_dependency(HDF5) + find_dependency(hdf5 CONFIG) endif () if (@HAS_PARALLEL@) diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index fbaeb21..8cdb5d4 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -4,7 +4,7 @@ # University Corporation for Atmospheric Research/Unidata. # See netcdf-c/COPYRIGHT file for more info. -set(CMAKE_BUILD_TYPE "") +set(ALL_TLL_LIBS ${HAVE_LIBM}) if(WIN32) set(PLUGINEXT "dll") @@ -86,10 +86,13 @@ buildplugin(h5unknown "h5unknown") buildplugin(h5shuffle "h5shuffle") buildplugin(h5fletcher32 "h5fletcher32") -buildplugin(h5deflate "h5deflate") +buildplugin(h5deflate "h5deflate" ZLIB::ZLIB) buildplugin(nczmisc "zmisc") buildplugin(nczhdf5filters "zhdf5filters" netcdf) +if(HAVE_SZ) + target_link_libraries(nczhdf5filters PRIVATE ${Szip_LIBRARIES}) +endif() if(NETCDF_ENABLE_BLOSC) set(h5blosc_SOURCES H5Zblosc.c)