From 887c4795334016db4831f17eeec3e20884912e03 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Fri, 19 Jan 2024 09:25:24 -0600 Subject: [PATCH 01/74] setting up packaging in its own directory, using netcdf as a target for compile options --- CMakeLists.txt | 91 ++---------- cmake/dependencies.cmake | 67 +++++++-- liblib/CMakeLists.txt | 295 +++++++++++++++++++++------------------ libsrc/CMakeLists.txt | 81 ++++++----- libsrc4/CMakeLists.txt | 30 ++-- packaging/CMakeLists.txt | 63 +++++++++ 6 files changed, 348 insertions(+), 279 deletions(-) create mode 100644 packaging/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 602f3dc3a..603c0a30e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,6 +33,15 @@ if (NOT DEFINED NETCDF_IS_TOP_LEVEL) endif () endif () + +################################ +# The target +################################ + +add_library(netcdf) +add_library(netCDF::netcdf ALIAS netcdf) + + ##### # Version Info: # @@ -1402,11 +1411,6 @@ add_definitions(-DHAVE_CONFIG_H) include_directories(${netCDF_BINARY_DIR}) # End autotools-style checks for config.h -##### -# Set core names of the libraries. -##### -set(netCDF_LIB_CORENAME "netcdf") - ##### # Set the true names of all the libraries, if customized by external project ##### @@ -1477,7 +1481,7 @@ endif() # For tests and utilities, we are no longer # exporting symbols but rather importing them. if(BUILD_DLL) - REMOVE_DEFINITIONS(-DDLL_EXPORT) + remove_definitions(-DDLL_EXPORT) endif() # Enable Utilities. @@ -1716,14 +1720,14 @@ else() endif() if(WITH_S3_TESTING STREQUAL PUBLIC) -set(ENABLE_S3_TESTING "public") + set(ENABLE_S3_TESTING "public") elseif(WITH_S3_TESTING) -set(ENABLE_S3_TESTING "yes") -set(ENABLE_S3_TESTALL "yes") + set(ENABLE_S3_TESTING "yes") + set(ENABLE_S3_TESTALL "yes") elseif(NOT WITH_S3_TESTING) -set(ENABLE_S3_TESTING "no") + set(ENABLE_S3_TESTING "no") else() -set(ENABLE_S3_TESTING "no") + set(ENABLE_S3_TESTING "no") endif() # The Unidata testing S3 bucket @@ -1833,68 +1837,3 @@ endif() if(DEFINED ENV{LIB_FUZZING_ENGINE}) add_subdirectory(fuzz) endif(DEFINED ENV{LIB_FUZZING_ENGINE}) - -#### -# Export files -#### - -# Create CMake package configuration files. With these, other packages using -# cmake should be able to find netcdf using find_package and find_library. -# The EXPORT call is paired with one in liblib. -set(ConfigPackageLocation ${CMAKE_INSTALL_LIBDIR}/cmake/netCDF) - -install(EXPORT netCDFTargets - DESTINATION ${ConfigPackageLocation} - COMPONENT headers - NAMESPACE netCDF:: - ) - -include(CMakePackageConfigHelpers) -CONFIGURE_PACKAGE_CONFIG_file( - "${CMAKE_CURRENT_SOURCE_DIR}/netCDFConfig.cmake.in" - "${CMAKE_CURRENT_BINARY_DIR}/netCDFConfig.cmake" - INSTALL_DESTINATION "${ConfigPackageLocation}" - NO_CHECK_REQUIRED_COMPONENTS_MACRO - PATH_VARS - CMAKE_INSTALL_PREFIX - CMAKE_INSTALL_INCLUDEDIR - CMAKE_INSTALL_LIBDIR - ) - -install( - FILES "${CMAKE_CURRENT_BINARY_DIR}/netCDFConfig.cmake" - DESTINATION "${ConfigPackageLocation}" - COMPONENT headers - ) - -add_library(netCDF::netcdf ALIAS netcdf) -target_include_directories(netcdf - PUBLIC - $ - $ -) - -# Create export configuration -write_basic_package_version_file( - "${CMAKE_CURRENT_BINARY_DIR}/netCDF/netCDFConfigVersion.cmake" - VERSION ${netCDF_VERSION} - COMPATIBILITY SameMajorVersion - ) - -install( - FILES - "${CMAKE_CURRENT_BINARY_DIR}/netCDF/netCDFConfigVersion.cmake" - DESTINATION ${ConfigPackageLocation} - COMPONENT headers - ) - -#### -# End export files -#### - -# CPack inclusion must come last. -option(NETCDF_PACKAGE "Create netCDF-C package " ${NETCDF_IS_TOP_LEVEL}) - -if (NETCDF_PACKAGE) - include(CMakeInstallation.cmake) -endif() diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake index 37767ed5c..7921a4871 100644 --- a/cmake/dependencies.cmake +++ b/cmake/dependencies.cmake @@ -22,7 +22,11 @@ if(ENABLE_HDF4) if(NOT MFHDF_H_INCLUDE_DIR) message(FATAL_ERROR "HDF4 Support specified, cannot find file mfhdf.h") else() - include_directories(${MFHDF_H_INCLUDE_DIR}) + + target_include_directories(netcdf + PRIVATE + ${MFHDF_H_INCLUDE_DIR} + ) endif() find_library(HDF4_DF_LIB NAMES df libdf hdf) @@ -50,7 +54,11 @@ if(ENABLE_HDF4) else() set(HAVE_JPEGLIB_H ON CACHE BOOL "") set(HAVE_LIBJPEG TRUE ) - include_directories(${JPEGLIB_H_INCLUDE_DIR}) + + target_include_directories(netcdf + PRIVATE + ${JPEGLIB_H_INCLUDE_DIR} + ) endif() find_library(JPEG_LIB NAMES jpeg libjpeg) @@ -115,7 +123,10 @@ if(USE_HDF5) set(HDF5_C_LIBRARIES ${HDF5_C_LIBRARY} ) set(HDF5_C_LIBRARY_hdf5 ${HDF5_C_LIBRARY} ) set(HDF5_HL_LIBRARIES ${HDF5_HL_LIBRARY} ) - include_directories(${HDF5_INCLUDE_DIR}) + target_include_directories(netcdf + PRIVATE + ${HDF5_INCLUDE_DIR} + ) message(STATUS "Using HDF5 C Library: ${HDF5_C_LIBRARY}") message(STATUS "Using HDF5 HL LIbrary: ${HDF5_HL_LIBRARY}") if (EXISTS "${HDF5_INCLUDE_DIR}/H5pubconf.h") @@ -231,7 +242,10 @@ if(USE_HDF5) set(HDF5_INCLUDE_DIR ${HDF5_INCLUDE_DIRS} ) endif() message(STATUS "Using HDF5 include dir: ${HDF5_INCLUDE_DIR}") - include_directories(${HDF5_INCLUDE_DIR}) + target_include_directories(netcdf + PRIVATE + ${HDF5_INCLUDE_DIR} + ) ### # This is the block where we figure out what the appropriate @@ -299,7 +313,10 @@ if(USE_HDF5) if(NOT HAVE_HDF5_H) message(FATAL_ERROR "Compiling a test with hdf5 failed. Either hdf5.h cannot be found, or the log messages should be checked for another reason.") else(NOT HAVE_HDF5_H) - include_directories(${HAVE_HDF5_H}) + target_include_directories(netcdf + PRIVATE + ${HAVE_HDF5_H} + ) endif(NOT HAVE_HDF5_H) set (CMAKE_REQUIRED_INCLUDES ${HDF5_INCLUDE_DIR}) @@ -407,11 +424,17 @@ if(USE_HDF5) if(NOT HAVE_HDF5_H) message(FATAL_ERROR "Compiling a test with hdf5 failed. Either hdf5.h cannot be found, or the log messages should be checked for another reason.") else(NOT HAVE_HDF5_H) - include_directories(${HAVE_HDF5_H}) + target_include_directories(netcdf + PRIVATE + ${HAVE_HDF5_H} + ) endif(NOT HAVE_HDF5_H) #option to include HDF5 High Level header file (hdf5_hl.h) in case we are not doing a make install - include_directories(${HDF5_HL_INCLUDE_DIR}) + target_include_directories(netcdf + PRIVATE + ${HDF5_HL_INCLUDE_DIR} + ) endif(USE_HDF5) @@ -420,8 +443,14 @@ endif(USE_HDF5) ################################ # See if we have libcurl find_package(CURL) -ADD_DEFINITIONS(-DCURL_STATICLIB=1) -include_directories(${CURL_INCLUDE_DIRS}) +target_compile_options(netcdf + PRIVATE + -DCURL_STATICLIB=1 +) +target_include_directories(netcdf + PRIVATE + ${CURL_INCLUDE_DIRS} +) # Define a test flag for have curl library if(CURL_LIBRARIES OR CURL_LIBRARY) @@ -527,7 +556,10 @@ find_package(ZLIB) # Define a test flag for have zlib library if(ZLIB_FOUND) - include_directories(${ZLIB_INCLUDE_DIRS}) + target_include_directories(netcdf + PRIVATE + ${ZLIB_INCLUDE_DIRS} + ) set(ENABLE_ZLIB TRUE) else() set(ENABLE_ZLIB FALSE) @@ -573,7 +605,10 @@ endif() IF (ENABLE_NCZARR_ZIP) find_package(Zip REQUIRED) - include_directories(${Zip_INCLUDE_DIRS}) + target_include_directories(netcdf + PRIVATE + ${Zip_INCLUDE_DIRS} + ) endif () ################################ @@ -588,7 +623,10 @@ if(ENABLE_S3) find_package(AWSSDK REQUIRED COMPONENTS s3;transfer) if(AWSSDK_FOUND) set(ENABLE_S3_AWS ON CACHE BOOL "S3 AWS" FORCE) - include_directories(${AWSSDK_INCLUDE_DIR}) + target_include_directories(netcdf + PRIVATE + ${AWSSDK_INCLUDE_DIR} + ) else(AWSSDK_FOUND) set(ENABLE_S3_AWS OFF CACHE BOOL "S3 AWS" FORCE) endif(AWSSDK_FOUND) @@ -618,7 +656,10 @@ if(ENABLE_LIBXML2) find_package(LibXml2) if(LibXml2_FOUND) set(HAVE_LIBXML2 TRUE) - include_directories(${LIBXML2_INCLUDE_DIRS}) + target_include_directories(netcdf + PRIVATE + ${LIBXML2_INCLUDE_DIRS} + ) set(XMLPARSER "libxml2") else() set(HAVE_LIBXML2 FALSE) diff --git a/liblib/CMakeLists.txt b/liblib/CMakeLists.txt index 4e54e0081..a419ec1af 100644 --- a/liblib/CMakeLists.txt +++ b/liblib/CMakeLists.txt @@ -4,194 +4,221 @@ # University Corporation for Atmospheric Research/Unidata. # See netcdf-c/COPYRIGHT file for more info. -SET(liblib_LIBS dispatch netcdf3) ##### # Add target objects/modules based on options. ##### -IF(USE_NETCDF4) - SET(liblib_LIBS ${liblib_LIBS} netcdf4) -ENDIF() -IF(USE_HDF5) - SET(liblib_LIBS ${liblib_LIBS} netcdfhdf5) -ENDIF() +if(USE_NETCDF4) + target_sources(netcdf + PRIVATE + $ + ) +endif() -IF(USE_PNETCDF) - SET(liblib_LIBS ${liblib_LIBS} netcdfp) -ENDIF() +if(USE_HDF5) + target_sources(netcdf + PRIVATE + $ + ) +endif() -IF(USE_HDF4) - SET(liblib_LIBS ${liblib_LIBS} netcdfhdf4) -ENDIF() +if(USE_PNETCDF) + target_sources(netcdf + PRIVATE + $ + ) +endif() -IF(ENABLE_DAP2) - SET(liblib_LIBS ${liblib_LIBS} oc2 dap2) -ENDIF() +if(USE_HDF4) + target_sources(netcdf + PRIVATE + $ + ) +endif() -IF(ENABLE_DAP4) - SET(liblib_LIBS ${liblib_LIBS} dap4) - SET(liblib_LIBS ${liblib_LIBS} ncxml) -ENDIF() +if(ENABLE_DAP2) + target_sources(netcdf + PRIVATE + $ + $ + ) +endif() -IF(ENABLE_NCZARR) - SET(liblib_LIBS ${liblib_LIBS} nczarr) -ENDIF() +if(ENABLE_DAP4) + target_sources(netcdf + PRIVATE + $ + $ + ) +endif() -IF(ENABLE_S3_INTERNAL) - SET(liblib_LIBS ${liblib_LIBS} ncxml) -ENDIF() +if(ENABLE_NCZARR) + target_sources(netcdf + PRIVATE + $ + ) +endif() -IF(ENABLE_PLUGINS) - SET(liblib_LIBS ${liblib_LIBS} ncpoco) -ENDIF() +if(ENABLE_S3_INTERNAL) + target_sources(netcdf + PRIVATE + $ + ) +endif() -FOREACH(LIBS ${liblib_LIBS}) - SET(LARGS ${LARGS} $) -ENDFOREACH() +if(ENABLE_PLUGINS) + target_sources(netcdf + PRIVATE + $ + ) +endif() -ADD_LIBRARY(netcdf nc_initialize.c ${LARGS} ) +target_sources(netcdf + PRIVATE + nc_initialize.c +) -IF(STATUS_PARALLEL) +if(STATUS_PARALLEL) # TODO: Make PUBLIC when other dependencies have PUBLIC/PRIVATE specified target_link_libraries(netcdf MPI::MPI_C) -ENDIF(STATUS_PARALLEL) +endif(STATUS_PARALLEL) -IF(TARGET MPI::MPI_C) +if(TARGET MPI::MPI_C) target_link_libraries(netcdf MPI::MPI_C) -ENDIF(TARGET MPI::MPI_C) +endif(TARGET MPI::MPI_C) -IF(MOD_NETCDF_NAME) - SET_TARGET_PROPERTIES(netcdf PROPERTIES LIBRARY_OUTPUT_NAME ${NETCDF_LIB_NAME}) - SET_TARGET_PROPERTIES(netcdf PROPERTIES ARCHIVE_OUTPUT_NAME ${NETCDF_LIB_NAME}) - SET_TARGET_PROPERTIES(netcdf PROPERTIES RUNTIME_OUTPUT_NAME ${NETCDF_LIB_NAME}) -ENDIF() +if(MOD_NETCDF_NAME) + set_target_properties(netcdf PROPERTIES LIBRARY_OUTPUT_NAME ${NETCDF_LIB_NAME}) + set_target_properties(netcdf PROPERTIES ARCHIVE_OUTPUT_NAME ${NETCDF_LIB_NAME}) + set_target_properties(netcdf PROPERTIES RUNTIME_OUTPUT_NAME ${NETCDF_LIB_NAME}) +endif() # Make sure that netcdf.dll path does not include the build configuration -IF(MSVC) - SET_TARGET_PROPERTIES(netcdf PROPERTIES - RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_BINARY_DIR} - RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_BINARY_DIR}) -ENDIF() +if(MSVC) + set_target_properties(netcdf PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_BINARY_DIR} + RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_BINARY_DIR}) +endif() ##### # Add dependencies required for linking. ##### -SET(TLL_LIBS "") +set(TLL_LIBS "") -SET(TLL_LIBS ${TLL_LIBS} ${HAVE_LIBM} ${ZLIB_LIBRARY}) +set(TLL_LIBS ${TLL_LIBS} ${HAVE_LIBM} ${ZLIB_LIBRARY}) # Add extra dependencies specified via NC_EXTRA_DEPS -SET(TLL_LIBS ${TLL_LIBS} ${EXTRA_DEPS}) +set(TLL_LIBS ${TLL_LIBS} ${EXTRA_DEPS}) -IF(ENABLE_NCZARR_ZIP) - SET(TLL_LIBS ${TLL_LIBS} ${Zip_LIBRARIES}) -ENDIF() +if(ENABLE_NCZARR_ZIP) + set(TLL_LIBS ${TLL_LIBS} ${Zip_LIBRARIES}) +endif() -IF(Blosc_FOUND) -SET(TLL_LIBS ${TLL_LIBS} ${Blosc_LIBRARIES}) -ENDIF() -IF(Zstd_FOUND) -SET(TLL_LIBS ${TLL_LIBS} ${Zstd_LIBRARIES}) -ENDIF() -IF(Bz2_FOUND) -SET(TLL_LIBS ${TLL_LIBS} ${Bz2_LIBRARIES}) -ENDIF() -IF(SZIP_FOUND) -SET(TLL_LIBS ${TLL_LIBS} ${Szip_LIBRARY}) -ENDIF() +if(Blosc_FOUND) + set(TLL_LIBS ${TLL_LIBS} ${Blosc_LIBRARIES}) +endif() +if(Zstd_FOUND) + set(TLL_LIBS ${TLL_LIBS} ${Zstd_LIBRARIES}) +endif() +if(Bz2_FOUND) + set(TLL_LIBS ${TLL_LIBS} ${Bz2_LIBRARIES}) +endif() +if(SZIP_FOUND) + set(TLL_LIBS ${TLL_LIBS} ${Szip_LIBRARY}) +endif() -IF(HAVE_LIBDL) - SET(TLL_LIBS ${LIBDL} ${TLL_LIBS}) -ENDIF() +if(HAVE_LIBDL) + set(TLL_LIBS ${LIBDL} ${TLL_LIBS}) +endif() -IF(ENABLE_NCZARR_ZIP) - SET(TLL_LIBS ${TLL_LIBS} ${Zip_LIBRARIES}) -ENDIF() +if(ENABLE_NCZARR_ZIP) + set(TLL_LIBS ${TLL_LIBS} ${Zip_LIBRARIES}) +endif() -IF(USE_HDF5) - IF(NOT MSVC) +if(USE_HDF5) + if(NOT MSVC) # Some version of cmake define HDF5_hdf5_LIBRARY instead of # HDF5_LIBRARY. Same with HDF5_HL_LIBRARIES - IF(HDF5_hdf5_LIBRARY AND NOT HDF5_C_LIBRARIES) - SET(HDF5_C_LIBRARIES ${HDF5_hdf5_LIBRARY}) - ENDIF() - IF(HDF5_hdf5_hl_LIBRARY AND NOT HDF5_HL_LIBRARIES) - SET(HDF5_HL_LIBRARIES ${HDF5_hdf5_hl_LIBRARY}) - ENDIF() + if(HDF5_hdf5_LIBRARY AND NOT HDF5_C_LIBRARIES) + set(HDF5_C_LIBRARIES ${HDF5_hdf5_LIBRARY}) + endif() + if(HDF5_hdf5_hl_LIBRARY AND NOT HDF5_HL_LIBRARIES) + set(HDF5_HL_LIBRARIES ${HDF5_hdf5_hl_LIBRARY}) + endif() # The order of the libraries is important here for static # builds: # Make sure that HDF5_C_LIBRARY appears *after* # HDF5_HL_LIBRARY. - SET(TLL_LIBS ${HDF5_HL_LIBRARIES} ${HDF5_C_LIBRARIES} ${HDF5_LIBRARIES} ${TLL_LIBS} ${Szip_LIBRARY}) - ELSE() # Windows CMake defines HDF5_LIBRARIES. - SET(TLL_LIBS ${HDF5_LIBRARIES} ${TLL_LIBS} ${Szip_LIBRARY}) - ENDIF() -ENDIF() + set(TLL_LIBS ${HDF5_HL_LIBRARIES} ${HDF5_C_LIBRARIES} ${HDF5_LIBRARIES} ${TLL_LIBS} ${Szip_LIBRARY}) + else() # Windows CMake defines HDF5_LIBRARIES. + set(TLL_LIBS ${HDF5_LIBRARIES} ${TLL_LIBS} ${Szip_LIBRARY}) + endif() +endif() -IF(FOUND_CURL) - SET(TLL_LIBS ${TLL_LIBS} ${CURL_LIBRARIES}) -ENDIF() +if(FOUND_CURL) + set(TLL_LIBS ${TLL_LIBS} ${CURL_LIBRARIES}) +endif() -IF(USE_HDF4) - SET(TLL_LIBS ${HDF4_MFHDF_LIB} ${HDF4_DF_LIB} ${TLL_LIBS}) -ENDIF() +if(USE_HDF4) + set(TLL_LIBS ${HDF4_MFHDF_LIB} ${HDF4_DF_LIB} ${TLL_LIBS}) +endif() -IF(ENABLE_PNETCDF AND PNETCDF) - SET(TLL_LIBS ${TLL_LIBS} ${PNETCDF}) -ENDIF() +if(ENABLE_PNETCDF AND PNETCDF) + set(TLL_LIBS ${TLL_LIBS} ${PNETCDF}) +endif() -IF(ENABLE_S3) - IF(ENABLE_S3_AWS) +if(ENABLE_S3) + if(ENABLE_S3_AWS) TARGET_LINK_DIRECTORIES(netcdf PUBLIC ${AWSSDK_LIB_DIR}) - SET(TLL_LIBS ${AWSSDK_LINK_LIBRARIES} ${TLL_LIBS}) - ELSEIF(ENABLE_S3_INTERNAL) - IF(OPENSSL_FOUND) - SET(TLL_LIBS ${OPENSSL_SSL_LIBRARIES} ${OPENSSL_CRYPTO_LIBRARIES} ${TLL_LIBS}) - ENDIF(OPENSSL_FOUND) - ENDIF(ENABLE_S3_AWS) -ENDIF(ENABLE_S3) + set(TLL_LIBS ${AWSSDK_LINK_LIBRARIES} ${TLL_LIBS}) + elseif(ENABLE_S3_INTERNAL) + if(OPENSSL_FOUND) + set(TLL_LIBS ${OPENSSL_SSL_LIBRARIES} ${OPENSSL_CRYPTO_LIBRARIES} ${TLL_LIBS}) + endif(OPENSSL_FOUND) + endif(ENABLE_S3_AWS) +endif(ENABLE_S3) -IF(HAVE_LIBXML2) - SET(TLL_LIBS ${TLL_LIBS} ${LIBXML2_LIBRARIES}) -ENDIF() +if(HAVE_LIBXML2) + set(TLL_LIBS ${TLL_LIBS} ${LIBXML2_LIBRARIES}) +endif() -IF(NOT WIN32) - IF(NOT APPLE) - IF(CMAKE_DL_LIBS) +if(NOT WIN32) + if(NOT APPLE) + if(CMAKE_DL_LIBS) TARGET_LINK_LIBRARIES(netcdf ${CMAKE_DL_LIBS}) - ENDIF() - ENDIF() -ENDIF() + endif() + endif() +endif() -IF(TLL_LIBS) - LIST(REMOVE_DUPLICATES TLL_LIBS) -ENDIF() +if(TLL_LIBS) + list(REMOVE_DUPLICATES TLL_LIBS) +endif() -TARGET_LINK_LIBRARIES(netcdf ${TLL_LIBS}) +target_link_libraries(netcdf ${TLL_LIBS}) -SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${TLL_LIBS}) -IF(MSVC) - SET_TARGET_PROPERTIES(netcdf PROPERTIES +set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${TLL_LIBS}) +if(MSVC) + set_target_properties(netcdf PROPERTIES LINK_FLAGS_DEBUG " /NODEFAULTLIB:MSVCRT" ) -ENDIF() +endif() -IF(NOT MSVC) - IF(BUILD_SHARED_LIBS) - SET_TARGET_PROPERTIES(netcdf PROPERTIES LINK_FLAGS -shared) - ENDIF() -ENDIF() +if(NOT MSVC) + if(BUILD_SHARED_LIBS) + set_target_properties(netcdf PROPERTIES LINK_FLAGS -shared) + endif() +endif() -IF(ENABLE_SHARED_LIBRARY_VERSION) - SET_TARGET_PROPERTIES(netcdf PROPERTIES +if(ENABLE_SHARED_LIBRARY_VERSION) + set_target_properties(netcdf PROPERTIES VERSION ${netCDF_LIB_VERSION} SOVERSION ${netCDF_SO_VERSION} ) -ENDIF(ENABLE_SHARED_LIBRARY_VERSION) +endif(ENABLE_SHARED_LIBRARY_VERSION) ### # The INCLUDES directive was introduced in 2.8.12. @@ -200,7 +227,7 @@ ENDIF(ENABLE_SHARED_LIBRARY_VERSION) # https://github.com/Unidata/netcdf-c/issues/135 # for more information. ### -IF(${CMAKE_VERSION} VERSION_LESS 2.8.12) +if(${CMAKE_VERSION} VERSION_LESS 2.8.12) INSTALL( TARGETS netcdf EXPORT netCDFTargets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries @@ -208,7 +235,7 @@ IF(${CMAKE_VERSION} VERSION_LESS 2.8.12) RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} ) -ELSE() +else() INSTALL( TARGETS netcdf EXPORT netCDFTargets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries @@ -216,11 +243,11 @@ ELSE() RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} ) -ENDIF() +endif() -SET(ALL_TLL_LIBS ${TLL_LIBS} PARENT_SCOPE) -SET(NC_LIBS ${NC_LIBS} PARENT_SCOPE) +set(ALL_TLL_LIBS ${TLL_LIBS} PARENT_SCOPE) +set(NC_LIBS ${NC_LIBS} PARENT_SCOPE) FILE(GLOB CUR_EXTRA_DIST RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/*.h ${CMAKE_CURRENT_SOURCE_DIR}/*.c) -SET(CUR_EXTRA_DIST ${CUR_EXTRA_DIST} CMakeLists.txt Makefile.am) +set(CUR_EXTRA_DIST ${CUR_EXTRA_DIST} CMakeLists.txt Makefile.am) ADD_EXTRA_DIST("${CUR_EXTRA_DIST}") diff --git a/libsrc/CMakeLists.txt b/libsrc/CMakeLists.txt index 533b64c7b..8aa7f5db0 100644 --- a/libsrc/CMakeLists.txt +++ b/libsrc/CMakeLists.txt @@ -1,77 +1,76 @@ ## This is a CMake file, part of Unidata's netCDF package. # Copyright 2012-2018, see the COPYRIGHT file for more information. -SET(libsrc_SOURCES v1hpg.c putget.c attr.c nc3dispatch.c +set(libsrc_SOURCES v1hpg.c putget.c attr.c nc3dispatch.c nc3internal.c var.c dim.c ncx.c lookup3.c ncio.c) # Process these files with m4. -SET(m4_SOURCES attr ncx putget) +set(m4_SOURCES attr ncx putget) foreach (f ${m4_SOURCES}) GEN_m4(${f} dest) - LIST(APPEND libsrc_SOURCES ${dest}) + list(APPEND libsrc_SOURCES ${dest}) endforeach(f) -LIST(APPEND libsrc_SOURCES pstdint.h ncio.h ncx.h) +list(APPEND libsrc_SOURCES pstdint.h ncio.h ncx.h) -LIST(APPEND libsrc_SOURCES memio.c) +list(APPEND libsrc_SOURCES memio.c) -IF (BUILD_MMAP) - LIST(APPEND libsrc_SOURCES mmapio.c) -ENDIF( BUILD_MMAP) +if (BUILD_MMAP) + list(APPEND libsrc_SOURCES mmapio.c) +endif( BUILD_MMAP) -IF (USE_FFIO) - LIST(APPEND libsrc_SOURCES ffio.c) -ELSEIF (USE_STDIO) +if (USE_FFIO) + list(APPEND libsrc_SOURCES ffio.c) +elseif (USE_STDIO) IST(APPEND libsrc_SOURCES ncstdio.c) -ELSE (USE_FFIO) - LIST(APPEND libsrc_SOURCES posixio.c) -ENDIF (USE_FFIO) +else (USE_FFIO) + list(APPEND libsrc_SOURCES posixio.c) +ENDif (USE_FFIO) -IF (ENABLE_BYTERANGE) - LIST(APPEND libsrc_SOURCES httpio.c) -IF (ENABLE_S3) - LIST(APPEND libsrc_SOURCES s3io.c) -ENDIF(ENABLE_S3) -ENDIF(ENABLE_BYTERANGE) +if (ENABLE_BYTERANGE) + list(APPEND libsrc_SOURCES httpio.c) +if (ENABLE_S3) + list(APPEND libsrc_SOURCES s3io.c) +endif(ENABLE_S3) +endif(ENABLE_BYTERANGE) add_library(netcdf3 OBJECT ${libsrc_SOURCES}) -IF(STATUS_PARALLEL) +if(STATUS_PARALLEL) target_link_libraries(netcdf3 PUBLIC MPI::MPI_C) -ENDIF(STATUS_PARALLEL) +endif(STATUS_PARALLEL) # The C API man page. -SET(MAN_FILES netcdf.3) +set(MAN_FILES netcdf.3) set(ARGS_MANPAGE -DAPI=C) -IF (USE_HDF5) - SET(ARGS_MANPAGE ${ARGS_MANPAGE} -DNETCDF4=TRUE) -ENDIF(USE_HDF5) +if (USE_HDF5) + set(ARGS_MANPAGE ${ARGS_MANPAGE} -DNETCDF4=TRUE) +endif(USE_HDF5) -IF (BUILD_DAP) - SET(ARGS_MANPAGE ${ARGS_MANPAGE} -DDAP=TRUE) -ENDIF(BUILD_DAP) +if (BUILD_DAP) + set(ARGS_MANPAGE ${ARGS_MANPAGE} -DDAP=TRUE) +endif(BUILD_DAP) -IF (BUILD_PARALLEL) - SET(ARGS_MANPAGE ${ARGS_MANPAGE} -DPARALLEL_IO=TRUE) -ENDIF(BUILD_PARALLEL) +if (BUILD_PARALLEL) + set(ARGS_MANPAGE ${ARGS_MANPAGE} -DPARALLEL_IO=TRUE) +endif(BUILD_PARALLEL) # Generate the man page. -IF(HAVE_M4) +if(HAVE_M4) FILE(GLOB libsrc_MANPAGE ${CMAKE_CURRENT_SOURCE_DIR}/../docs/netcdf.m4) FILE(COPY ${libsrc_MANPAGE} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) -IF(NOT MSVC) - ADD_CUSTOM_TARGET(manpage ALL - - COMMAND ${NC_M4} ${ARGS_MANPAGE} "${CMAKE_CURRENT_BINARY_DIR}/netcdf.m4" > "${CMAKE_CURRENT_BINARY_DIR}/netcdf.3" - WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" + if(NOT MSVC) + add_custom_target(manpage ALL + COMMAND ${NC_M4} ${ARGS_MANPAGE} "${CMAKE_CURRENT_BINARY_DIR}/netcdf.m4" > "${CMAKE_CURRENT_BINARY_DIR}/netcdf.3" + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" ) - INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/netcdf.3" DESTINATION "share/man/man3" COMPONENT documentation) -ENDIF(NOT MSVC) + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/netcdf.3" DESTINATION "share/man/man3" COMPONENT documentation) + endif(NOT MSVC) -ENDIF() +endif() \ No newline at end of file diff --git a/libsrc4/CMakeLists.txt b/libsrc4/CMakeLists.txt index 40c71ab6a..8ae1a029f 100644 --- a/libsrc4/CMakeLists.txt +++ b/libsrc4/CMakeLists.txt @@ -6,18 +6,18 @@ # See netcdf-c/COPYRIGHT file for more info. # Process these files with m4. -SET(libsrc4_SOURCES nc4dispatch.c nc4attr.c nc4dim.c nc4grp.c +set(libsrc4_SOURCES nc4dispatch.c nc4attr.c nc4dim.c nc4grp.c nc4internal.c nc4type.c nc4var.c ncfunc.c ncindex.c nc4cache.c) add_library(netcdf4 OBJECT ${libsrc4_SOURCES}) -IF(STATUS_PARALLEL) - target_link_libraries(netcdf4 PUBLIC MPI::MPI_C) -ENDIF(STATUS_PARALLEL) +if(STATUS_PARALLEL) + target_link_libraries(netcdf4 PUBLIC MPI::MPI_C) +endif(STATUS_PARALLEL) # Files for make dist -FILE(GLOB libsrc4_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/*.h ${CMAKE_CURRENT_SOURCE_DIR}/*.sh) -SET(CUR_EXTRA_DIST CMakeLists.txt Makefile.am) +file(GLOB libsrc4_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/*.h ${CMAKE_CURRENT_SOURCE_DIR}/*.sh) +set(CUR_EXTRA_DIST CMakeLists.txt Makefile.am) ADD_EXTRA_DIST("${libsrc4_SOURCES}") ADD_EXTRA_DIST("${libsrc4_HEADERS}") ADD_EXTRA_DIST("${CUR_EXTRA_DIST}") @@ -34,14 +34,14 @@ set(man_MANS netcdf.3) set(ARGS_MANPAGE -DAPI=C) -IF (USE_HDF5) - SET(ARGS_MANPAGE ${ARGS_MANPAGE} -DNETCDF4=TRUE) -ENDIF(USE_HDF5) +if (USE_HDF5) + set(ARGS_MANPAGE ${ARGS_MANPAGE} -DNETCDF4=TRUE) +endif(USE_HDF5) -IF (BUILD_DAP) - SET(ARGS_MANPAGE ${ARGS_MANPAGE} -DDAP=TRUE) -ENDIF(BUILD_DAP) +if (BUILD_DAP) + set(ARGS_MANPAGE ${ARGS_MANPAGE} -DDAP=TRUE) +endif(BUILD_DAP) -IF (BUILD_PARALLEL) - SET(ARGS_MANPAGE ${ARGS_MANPAGE} -DPARALLEL_IO=TRUE) -ENDIF(BUILD_PARALLEL) +if (BUILD_PARALLEL) + set(ARGS_MANPAGE ${ARGS_MANPAGE} -DPARALLEL_IO=TRUE) +endif(BUILD_PARALLEL) diff --git a/packaging/CMakeLists.txt b/packaging/CMakeLists.txt new file mode 100644 index 000000000..a67ce3a7c --- /dev/null +++ b/packaging/CMakeLists.txt @@ -0,0 +1,63 @@ +#### +# Export files +#### + +# Create CMake package configuration files. With these, other packages using +# cmake should be able to find netcdf using find_package and find_library. +# The EXPORT call is paired with one in liblib. +set(ConfigPackageLocation ${CMAKE_INSTALL_LIBDIR}/cmake/netCDF) + +install(EXPORT netCDFTargets + DESTINATION ${ConfigPackageLocation} + COMPONENT headers + NAMESPACE netCDF:: + ) + +include(CMakePackageConfigHelpers) +CONFIGURE_PACKAGE_CONFIG_file( + "${CMAKE_CURRENT_SOURCE_DIR}/netCDFConfig.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/netCDFConfig.cmake" + INSTALL_DESTINATION "${ConfigPackageLocation}" + NO_CHECK_REQUIRED_COMPONENTS_MACRO + PATH_VARS + CMAKE_INSTALL_PREFIX + CMAKE_INSTALL_INCLUDEDIR + CMAKE_INSTALL_LIBDIR + ) + +install( + FILES "${CMAKE_CURRENT_BINARY_DIR}/netCDFConfig.cmake" + DESTINATION "${ConfigPackageLocation}" + COMPONENT headers + ) + +target_include_directories(netcdf + PUBLIC + $ + $ +) + +# Create export configuration +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/netCDF/netCDFConfigVersion.cmake" + VERSION ${netCDF_VERSION} + COMPATIBILITY SameMajorVersion + ) + +install( + FILES + "${CMAKE_CURRENT_BINARY_DIR}/netCDF/netCDFConfigVersion.cmake" + DESTINATION ${ConfigPackageLocation} + COMPONENT headers + ) + +#### +# End export files +#### + +# CPack inclusion must come last. +option(NETCDF_PACKAGE "Create netCDF-C package " ${NETCDF_IS_TOP_LEVEL}) + +if (NETCDF_PACKAGE) + include(CMakeInstallation.cmake) +endif() \ No newline at end of file From ca182c0979aba3b930468419bf2654e6ae59bfe1 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Fri, 26 Jan 2024 13:29:38 -0600 Subject: [PATCH 02/74] using target_sources --- CMakeLists.txt | 2 +- libhdf5/CMakeLists.txt | 14 ++-- liblib/CMakeLists.txt | 42 ++++++++-- libsrc/CMakeLists.txt | 4 +- plugins/CMakeLists.txt | 178 ++++++++++++++++++++--------------------- 5 files changed, 135 insertions(+), 105 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 603c0a30e..e2a71efb8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,7 +6,7 @@ # Set Project Properties ################################## -cmake_minimum_required(VERSION 3.12.0) +cmake_minimum_required(VERSION 3.13.0) #Project Name project(netCDF diff --git a/libhdf5/CMakeLists.txt b/libhdf5/CMakeLists.txt index f1195a087..b88ee4e5a 100644 --- a/libhdf5/CMakeLists.txt +++ b/libhdf5/CMakeLists.txt @@ -6,22 +6,22 @@ # Ed Hartnett # The source files for the HDF5 dispatch layer. -SET(libnchdf5_SOURCES nc4hdf.c nc4info.c hdf5file.c hdf5attr.c +set(libnchdf5_SOURCES nc4hdf.c nc4info.c hdf5file.c hdf5attr.c hdf5dim.c hdf5grp.c hdf5type.c hdf5internal.c hdf5create.c hdf5open.c hdf5var.c nc4mem.c nc4memcb.c hdf5dispatch.c hdf5filter.c hdf5set_format_compatibility.c hdf5debug.c) -IF(ENABLE_BYTERANGE) -SET(libnchdf5_SOURCES ${libnchdf5_SOURCES} H5FDhttp.c) -ENDIF() +if(ENABLE_BYTERANGE) + set(libnchdf5_SOURCES ${libnchdf5_SOURCES} H5FDhttp.c) +endif() # Build the HDF5 dispatch layer as a library that will be included in # the netCDF library. add_library(netcdfhdf5 OBJECT ${libnchdf5_SOURCES}) -IF(STATUS_PARALLEL) +if(STATUS_PARALLEL) target_link_libraries(netcdfhdf5 PUBLIC MPI::MPI_C) -ENDIF(STATUS_PARALLEL) +endif(STATUS_PARALLEL) # Remember to package this file for CMake builds. -ADD_EXTRA_DIST(${libnchdf5_SOURCES} CMakeLists.txt) +add_extra_dist(${libnchdf5_SOURCES} CMakeLists.txt) diff --git a/liblib/CMakeLists.txt b/liblib/CMakeLists.txt index a419ec1af..3b634c718 100644 --- a/liblib/CMakeLists.txt +++ b/liblib/CMakeLists.txt @@ -8,6 +8,11 @@ ##### # Add target objects/modules based on options. ##### +target_sources(netcdf + PRIVATE + $ + $ +) if(USE_NETCDF4) target_sources(netcdf @@ -75,8 +80,8 @@ if(ENABLE_PLUGINS) endif() target_sources(netcdf - PRIVATE - nc_initialize.c + PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR}/nc_initialize.c ) if(STATUS_PARALLEL) @@ -189,7 +194,7 @@ endif() if(NOT WIN32) if(NOT APPLE) if(CMAKE_DL_LIBS) - TARGET_LINK_LIBRARIES(netcdf ${CMAKE_DL_LIBS}) + target_link_libraries(netcdf ${CMAKE_DL_LIBS}) endif() endif() endif() @@ -228,7 +233,7 @@ endif(ENABLE_SHARED_LIBRARY_VERSION) # for more information. ### if(${CMAKE_VERSION} VERSION_LESS 2.8.12) - INSTALL( + install( TARGETS netcdf EXPORT netCDFTargets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries @@ -236,7 +241,7 @@ if(${CMAKE_VERSION} VERSION_LESS 2.8.12) PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} ) else() - INSTALL( + install( TARGETS netcdf EXPORT netCDFTargets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries @@ -248,6 +253,31 @@ endif() set(ALL_TLL_LIBS ${TLL_LIBS} PARENT_SCOPE) set(NC_LIBS ${NC_LIBS} PARENT_SCOPE) -FILE(GLOB CUR_EXTRA_DIST RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/*.h ${CMAKE_CURRENT_SOURCE_DIR}/*.c) +file(GLOB CUR_EXTRA_DIST RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/*.h ${CMAKE_CURRENT_SOURCE_DIR}/*.c) set(CUR_EXTRA_DIST ${CUR_EXTRA_DIST} CMakeLists.txt Makefile.am) ADD_EXTRA_DIST("${CUR_EXTRA_DIST}") + +# [ 10%] Linking C shared library libnetcdf.dylib +# /opt/homebrew/Cellar/cmake/3.27.1/bin/cmake -E cmake_link_script CMakeFiles/netcdf.dir/link.txt --verbose=1 +# /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc +# -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -g -Wall -Wshorten-64-to-32 -Wconversion -arch arm64 +# -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk -dynamiclib -Wl,-headerpad_max_install_names +# -shared -L/opt/homebrew/opt/llvm/lib/c++ -Wl,-rpath,/opt/homebrew/opt/llvm/lib/c++ -compatibility_version 19.0.0 -current_version 19.0.0 +# -o libnetcdf.19.dylib -install_name @rpath/libnetcdf.19.dylib +# CMakeFiles/netcdf.dir/liblib/nc_initialize.c.o libsrc4/CMakeFiles/netcdf4.dir/nc4dispatch.c.o libsrc4/CMakeFiles/netcdf4.dir/nc4attr.c.o +# libsrc4/CMakeFiles/netcdf4.dir/nc4dim.c.o libsrc4/CMakeFiles/netcdf4.dir/nc4grp.c.o libsrc4/CMakeFiles/netcdf4.dir/nc4internal.c.o libsrc4/CMakeFiles/netcdf4.dir/nc4type.c.o libsrc4/CMakeFiles/netcdf4.dir/nc4var.c.o libsrc4/CMakeFiles/netcdf4.dir/ncfunc.c.o libsrc4/CMakeFiles/netcdf4.dir/ncindex.c.o libsrc4/CMakeFiles/netcdf4.dir/nc4cache.c.o libhdf5/CMakeFiles/netcdfhdf5.dir/nc4hdf.c.o libhdf5/CMakeFiles/netcdfhdf5.dir/nc4info.c.o libhdf5/CMakeFiles/netcdfhdf5.dir/hdf5file.c.o libhdf5/CMakeFiles/netcdfhdf5.dir/hdf5attr.c.o +# libhdf5/CMakeFiles/netcdfhdf5.dir/hdf5dim.c.o libhdf5/CMakeFiles/netcdfhdf5.dir/hdf5grp.c.o libhdf5/CMakeFiles/netcdfhdf5.dir/hdf5type.c.o libhdf5/CMakeFiles/netcdfhdf5.dir/hdf5internal.c.o libhdf5/CMakeFiles/netcdfhdf5.dir/hdf5create.c.o libhdf5/CMakeFiles/netcdfhdf5.dir/hdf5open.c.o libhdf5/CMakeFiles/netcdfhdf5.dir/hdf5var.c.o libhdf5/CMakeFiles/netcdfhdf5.dir/nc4mem.c.o libhdf5/CMakeFiles/netcdfhdf5.dir/nc4memcb.c.o libhdf5/CMakeFiles/netcdfhdf5.dir/hdf5dispatch.c.o libhdf5/CMakeFiles/netcdfhdf5.dir/hdf5filter.c.o libhdf5/CMakeFiles/netcdfhdf5.dir/hdf5set_format_compatibility.c.o libhdf5/CMakeFiles/netcdfhdf5.dir/hdf5debug.c.o libhdf5/CMakeFiles/netcdfhdf5.dir/H5FDhttp.c.o +# oc2/CMakeFiles/oc2.dir/oc.c.o oc2/CMakeFiles/oc2.dir/daplex.c.o oc2/CMakeFiles/oc2.dir/dapparse.c.o oc2/CMakeFiles/oc2.dir/dapy.c.o oc2/CMakeFiles/oc2.dir/occompile.c.o oc2/CMakeFiles/oc2.dir/occurlfunctions.c.o oc2/CMakeFiles/oc2.dir/ocdata.c.o oc2/CMakeFiles/oc2.dir/ocdebug.c.o oc2/CMakeFiles/oc2.dir/ocdump.c.o oc2/CMakeFiles/oc2.dir/ocinternal.c.o oc2/CMakeFiles/oc2.dir/ocnode.c.o oc2/CMakeFiles/oc2.dir/ochttp.c.o oc2/CMakeFiles/oc2.dir/ocread.c.o oc2/CMakeFiles/oc2.dir/ocutil.c.o oc2/CMakeFiles/oc2.dir/xxdr.c.o +# libdap2/CMakeFiles/dap2.dir/constraints.c.o libdap2/CMakeFiles/dap2.dir/dapcvt.c.o libdap2/CMakeFiles/dap2.dir/dapodom.c.o libdap2/CMakeFiles/dap2.dir/daputil.c.o libdap2/CMakeFiles/dap2.dir/ncdaperr.c.o libdap2/CMakeFiles/dap2.dir/cdf.c.o libdap2/CMakeFiles/dap2.dir/cache.c.o libdap2/CMakeFiles/dap2.dir/dapdump.c.o libdap2/CMakeFiles/dap2.dir/dapdebug.c.o libdap2/CMakeFiles/dap2.dir/dapattr.c.o libdap2/CMakeFiles/dap2.dir/ncd2dispatch.c.o libdap2/CMakeFiles/dap2.dir/getvara.c.o libdap2/CMakeFiles/dap2.dir/dceconstraints.c.o libdap2/CMakeFiles/dap2.dir/dcetab.c.o libdap2/CMakeFiles/dap2.dir/dceparse.c.o libdap2/CMakeFiles/dap2.dir/dcelex.c.o +# libdap4/CMakeFiles/dap4.dir/d4curlfunctions.c.o libdap4/CMakeFiles/dap4.dir/d4fix.c.o libdap4/CMakeFiles/dap4.dir/d4data.c.o libdap4/CMakeFiles/dap4.dir/d4file.c.o libdap4/CMakeFiles/dap4.dir/d4parser.c.o libdap4/CMakeFiles/dap4.dir/d4meta.c.o libdap4/CMakeFiles/dap4.dir/d4varx.c.o libdap4/CMakeFiles/dap4.dir/d4dump.c.o libdap4/CMakeFiles/dap4.dir/d4swap.c.o libdap4/CMakeFiles/dap4.dir/d4chunk.c.o libdap4/CMakeFiles/dap4.dir/d4printer.c.o libdap4/CMakeFiles/dap4.dir/d4read.c.o libdap4/CMakeFiles/dap4.dir/d4http.c.o libdap4/CMakeFiles/dap4.dir/d4util.c.o libdap4/CMakeFiles/dap4.dir/d4odom.c.o libdap4/CMakeFiles/dap4.dir/d4cvt.c.o libdap4/CMakeFiles/dap4.dir/d4debug.c.o libdap4/CMakeFiles/dap4.dir/ncd4dispatch.c.o +# libncxml/CMakeFiles/ncxml.dir/ncxml_xml2.c.o +# libnczarr/CMakeFiles/nczarr.dir/zarr.c.o libnczarr/CMakeFiles/nczarr.dir/zattr.c.o libnczarr/CMakeFiles/nczarr.dir/zxcache.c.o libnczarr/CMakeFiles/nczarr.dir/zchunking.c.o libnczarr/CMakeFiles/nczarr.dir/zclose.c.o libnczarr/CMakeFiles/nczarr.dir/zcreate.c.o libnczarr/CMakeFiles/nczarr.dir/zcvt.c.o libnczarr/CMakeFiles/nczarr.dir/zdim.c.o libnczarr/CMakeFiles/nczarr.dir/zdispatch.c.o libnczarr/CMakeFiles/nczarr.dir/zfile.c.o libnczarr/CMakeFiles/nczarr.dir/zfilter.c.o libnczarr/CMakeFiles/nczarr.dir/zgrp.c.o libnczarr/CMakeFiles/nczarr.dir/zinternal.c.o libnczarr/CMakeFiles/nczarr.dir/zmap.c.o libnczarr/CMakeFiles/nczarr.dir/zmap_file.c.o libnczarr/CMakeFiles/nczarr.dir/zodom.c.o libnczarr/CMakeFiles/nczarr.dir/zopen.c.o libnczarr/CMakeFiles/nczarr.dir/zprov.c.o libnczarr/CMakeFiles/nczarr.dir/zsync.c.o libnczarr/CMakeFiles/nczarr.dir/ztype.c.o libnczarr/CMakeFiles/nczarr.dir/zutil.c.o libnczarr/CMakeFiles/nczarr.dir/zvar.c.o libnczarr/CMakeFiles/nczarr.dir/zwalk.c.o libnczarr/CMakeFiles/nczarr.dir/zdebug.c.o +# libncpoco/CMakeFiles/ncpoco.dir/ncpoco.c.o libncpoco/CMakeFiles/ncpoco.dir/cp_unix.c.o +# /opt/homebrew/lib/libhdf5_hl.dylib /opt/homebrew/lib/libhdf5.dylib +# /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk/usr/lib/libm.tbd +# /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk/usr/lib/libz.tbd +# /opt/homebrew/lib/libzstd.dylib +# /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk/usr/lib/libbz2.tbd +# /opt/homebrew/lib/libsz.dylib +# /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk/usr/lib/libcurl.tbd +# /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk/usr/lib/libxml2.tbd diff --git a/libsrc/CMakeLists.txt b/libsrc/CMakeLists.txt index 8aa7f5db0..991720829 100644 --- a/libsrc/CMakeLists.txt +++ b/libsrc/CMakeLists.txt @@ -61,8 +61,8 @@ endif(BUILD_PARALLEL) # Generate the man page. if(HAVE_M4) - FILE(GLOB libsrc_MANPAGE ${CMAKE_CURRENT_SOURCE_DIR}/../docs/netcdf.m4) - FILE(COPY ${libsrc_MANPAGE} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) + file(GLOB libsrc_MANPAGE ${CMAKE_CURRENT_SOURCE_DIR}/../docs/netcdf.m4) + file(COPY ${libsrc_MANPAGE} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) if(NOT MSVC) add_custom_target(manpage ALL diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index 4f101773d..33a9f4a59 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -4,73 +4,73 @@ # University Corporation for Atmospheric Research/Unidata. # See netcdf-c/COPYRIGHT file for more info. -SET(CMAKE_BUILD_TYPE "") +set(CMAKE_BUILD_TYPE "") -IF(MSVC) - SET(PLUGINEXT "dll") - SET(PLUGINPRE "__nc") -ELSE() - SET(PLUGINPRE "lib__nc") +if(MSVC) + set(PLUGINEXT "dll") + set(PLUGINPRE "__nc") +else() + set(PLUGINPRE "lib__nc") if(APPLE) - SET(PLUGINEXT "dylib") - ELSE() - SET(PLUGINEXT "so") - ENDIF() -ENDIF() + set(PLUGINEXT "dylib") + else() + set(PLUGINEXT "so") + endif() +endif() -FILE(READ H5Znoop.c NOOP_SOURCE) -FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/H5Znoop1.c "#define NOOP_INSTANCE 1\n") -FILE(APPEND ${CMAKE_CURRENT_BINARY_DIR}/H5Znoop1.c "${NOOP_SOURCE}") +file(READ H5Znoop.c NOOP_SOURCE) +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/H5Znoop1.c "#define NOOP_INSTANCE 1\n") +file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/H5Znoop1.c "${NOOP_SOURCE}") -SET(h5misc_SOURCES H5Zmisc.c H5Zutil.c h5misc.h) +set(h5misc_SOURCES H5Zmisc.c H5Zutil.c h5misc.h) -SET(h5noop_SOURCES H5Znoop.c H5Zutil.c h5noop.h) -SET_SOURCE_FILES_PROPERTIES(H5Znoop.c PROPERTIES COMPILE_OPTIONS -DNOOP_INSTANCE=0) +set(h5noop_SOURCES H5Znoop.c H5Zutil.c h5noop.h) +set_source_files_properties(H5Znoop.c PROPERTIES COMPILE_OPTIONS -DNOOP_INSTANCE=0) -SET(h5noop1_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/H5Znoop1.c H5Zutil.c h5noop.h) -SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_BINARY_DIR}/H5Znoop1.c PROPERTIES COMPILE_OPTIONS -DNOOP_INSTANCE=1) +set(h5noop1_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/H5Znoop1.c H5Zutil.c h5noop.h) +set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/H5Znoop1.c PROPERTIES COMPILE_OPTIONS -DNOOP_INSTANCE=1) -SET(h5unknown_SOURCES H5Zunknown.c) +set(h5unknown_SOURCES H5Zunknown.c) -SET(h5shuffle_SOURCES H5Zshuffle.c) -SET(h5fletcher32_SOURCES H5Zfletcher32.c H5checksum.c) -SET(h5deflate_SOURCES H5Zdeflate.c) +set(h5shuffle_SOURCES H5Zshuffle.c) +set(h5fletcher32_SOURCES H5Zfletcher32.c H5checksum.c) +set(h5deflate_SOURCES H5Zdeflate.c) -SET(nczmisc_SOURCES NCZmisc.c) -SET(nczhdf5filters_SOURCES NCZhdf5filters.c) -SET(nczstdfilters_SOURCES NCZstdfilters.c) +set(nczmisc_SOURCES NCZmisc.c) +set(nczhdf5filters_SOURCES NCZhdf5filters.c) +set(nczstdfilters_SOURCES NCZstdfilters.c) -IF(ENABLE_PLUGINS) +if(ENABLE_PLUGINS) # LDFLAGS = -module -avoid-version -shared -export-dynamic -no-undefined -SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") -SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${CMAKE_CURRENT_BINARY_DIR}") -SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_BINARY_DIR}") +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${CMAKE_CURRENT_BINARY_DIR}") +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_BINARY_DIR}") -MACRO(buildplugin TARGET TARGETLIB) - SET(MANGLELIB "${PLUGINPRE}${TARGETLIB}") - ADD_LIBRARY(${TARGET} MODULE ${${TARGET}_SOURCES}) - SET_TARGET_PROPERTIES(${TARGET} PROPERTIES LIBRARY_OUTPUT_NAME ${MANGLELIB}) - SET_TARGET_PROPERTIES(${TARGET} PROPERTIES ARCHIVE_OUTPUT_NAME ${MANGLELIB}) - SET_TARGET_PROPERTIES(${TARGET} PROPERTIES RUNTIME_OUTPUT_NAME ${MANGLELIB}) - SET_TARGET_PROPERTIES(${TARGET} PROPERTIES PREFIX "") # Critical that this be set to "" - SET_TARGET_PROPERTIES(${TARGET} PROPERTIES SUFFIX ".${PLUGINEXT}") - TARGET_LINK_LIBRARIES(${TARGET} PUBLIC ${ALL_TLL_LIBS};${ARGN}) - IF(MSVC) +macro(buildplugin TARGET TARGETLIB) + set(MANGLELIB "${PLUGINPRE}${TARGETLIB}") + add_library(${TARGET} MODULE ${${TARGET}_SOURCES}) + set_target_properties(${TARGET} PROPERTIES LIBRARY_OUTPUT_NAME ${MANGLELIB}) + set_target_properties(${TARGET} PROPERTIES ARCHIVE_OUTPUT_NAME ${MANGLELIB}) + set_target_properties(${TARGET} PROPERTIES RUNTIME_OUTPUT_NAME ${MANGLELIB}) + set_target_properties(${TARGET} PROPERTIES PREFIX "") # Critical that this be set to "" + set_target_properties(${TARGET} PROPERTIES SUFFIX ".${PLUGINEXT}") + target_link_libraries(${TARGET} PUBLIC ${ALL_TLL_LIBS};${ARGN}) + if(MSVC) target_compile_options(${TARGET} PRIVATE /Zi) # Tell linker to include symbol data set_target_properties(${TARGET} PROPERTIES LINK_FLAGS "/INCREMENTAL:NO /DEBUG /OPT:REF /OPT:ICF") # Set file name & location set_target_properties(${TARGET} PROPERTIES COMPILE_PDB_NAME ${TARGET} COMPILE_PDB_OUTPUT_DIR ${CMAKE_BINARY_DIR}) - IF(MPI_C_INCLUDE_PATH) + if(MPI_C_INCLUDE_PATH) target_include_directories(${TARGET} PRIVATE ${MPI_C_INCLUDE_PATH}) - ENDIF(MPI_C_INCLUDE_PATH) - ENDIF() + endif(MPI_C_INCLUDE_PATH) + endif() - IF(STATUS_PARALLEL) + if(STATUS_PARALLEL) target_link_libraries(${TARGET} PUBLIC MPI::MPI_C) - ENDIF(STATUS_PARALLEL) -ENDMACRO() + endif(STATUS_PARALLEL) +endmacro() buildplugin(h5misc "h5misc" netcdf) buildplugin(h5noop "h5noop") @@ -85,67 +85,67 @@ buildplugin(nczmisc "zmisc") buildplugin(nczhdf5filters "zhdf5filters" netcdf) buildplugin(nczstdfilters "zstdfilters" netcdf) -IF(ENABLE_BLOSC) -SET(h5blosc_SOURCES H5Zblosc.c) -buildplugin(h5blosc "h5blosc" netcdf;${Blosc_LIBRARIES}) -ENDIF() +if(ENABLE_BLOSC) + set(h5blosc_SOURCES H5Zblosc.c) + buildplugin(h5blosc "h5blosc" netcdf;${Blosc_LIBRARIES}) +endif() -IF(ENABLE_ZSTD) -SET(h5zstd_SOURCES H5Zzstd.c H5Zzstd.h) -buildplugin(h5zstd "h5zstd" netcdf;${Zstd_LIBRARIES}) -ENDIF() +if(ENABLE_ZSTD) + set(h5zstd_SOURCES H5Zzstd.c H5Zzstd.h) + buildplugin(h5zstd "h5zstd" netcdf;${Zstd_LIBRARIES}) +endif() # Need our version of szip if libsz available and we are not using HDF5 -IF(HAVE_SZ) - SET(h5szip_SOURCES H5Zszip.c H5Zszip.h) +if(HAVE_SZ) + set(h5szip_SOURCES H5Zszip.c H5Zszip.h) buildplugin(h5szip "h5szip" ${Szip_LIBRARIES}) -ENDIF() +endif() -IF(HAVE_LOCAL_BZ2) -SET(h5bzip2_SOURCES H5Zbzip2.c blocksort.c huffman.c crctable.c randtable.c compress.c decompress.c bzlib.c bzlib.h bzlib_private.h) -buildplugin(h5bzip2 "h5bzip2") -ELSE() -SET(h5bzip2_SOURCES H5Zbzip2.c) -buildplugin(h5bzip2 "h5bzip2" ${Bzip2_LIBRARIES}) -ENDIF() +if(HAVE_LOCAL_BZ2) + set(h5bzip2_SOURCES H5Zbzip2.c blocksort.c huffman.c crctable.c randtable.c compress.c decompress.c bzlib.c bzlib.h bzlib_private.h) + buildplugin(h5bzip2 "h5bzip2") +else() + set(h5bzip2_SOURCES H5Zbzip2.c) + buildplugin(h5bzip2 "h5bzip2" ${Bzip2_LIBRARIES}) +endif() # Installation -IF(ENABLE_PLUGIN_INSTALL) +if(ENABLE_PLUGIN_INSTALL) -MACRO(installplugin PLUG) - SET(INSTALLED_PLUGIN_LIB "${PLUGINPRE}${PLUG}.${PLUGINEXT}") - MESSAGE(STATUS "Installing: ${INSTALLED_PLUGIN_LIB} into ${PLUGIN_INSTALL_DIR}") +macro(installplugin PLUG) + set(INSTALLED_PLUGIN_LIB "${PLUGINPRE}${PLUG}.${PLUGINEXT}") + message(STATUS "Installing: ${INSTALLED_PLUGIN_LIB} into ${PLUGIN_INSTALL_DIR}") install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${INSTALLED_PLUGIN_LIB} DESTINATION ${PLUGIN_INSTALL_DIR}) -ENDMACRO() +endmacro() install(DIRECTORY DESTINATION ${PLUGIN_INSTALL_DIR}) -IF(Bzip2_FOUND) -installplugin(h5bzip2) -ENDIF() -IF(Zstd_FOUND) -installplugin(h5zstd) -ENDIF() -IF(Blosc_FOUND) -installplugin(h5blosc) -ENDIF() -IF(ENABLE_NCZARR) +if(Bzip2_FOUND) + installplugin(h5bzip2) +endif() +if(Zstd_FOUND) + installplugin(h5zstd) +endif() +if(Blosc_FOUND) + installplugin(h5blosc) +endif() +if(ENABLE_NCZARR) installplugin(h5fletcher32) installplugin(h5shuffle) installplugin(h5deflate) installplugin(zhdf5filters) installplugin(zstdfilters) -IF(Szip_FOUND) - installplugin(h5szip) -ENDIF() -ENDIF() + if(Szip_FOUND) + installplugin(h5szip) + endif() +endif() -ENDIF(ENABLE_PLUGIN_INSTALL) +endif(ENABLE_PLUGIN_INSTALL) -ENDIF(ENABLE_PLUGINS) +endif(ENABLE_PLUGINS) # Copy some test files from current source dir to out-of-tree build dir. -FILE(COPY ${COPY_FILES} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/) -IF(MSVC) - FILE(COPY ${COPY_FILES} DESTINATION ${RUNTIME_OUTPUT_DIRECTORY}/) -ENDIF() +file(COPY ${COPY_FILES} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/) +if(MSVC) + file(COPY ${COPY_FILES} DESTINATION ${RUNTIME_OUTPUT_DIRECTORY}/) +endif() From 207a70ef9abfe68e261577ad6038fdb09dbec688 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Fri, 26 Jan 2024 13:51:19 -0600 Subject: [PATCH 03/74] undoing packaging --- CMakeLists.txt | 66 +++++++++++++++++++++++++++++++++++++++- packaging/CMakeLists.txt | 63 -------------------------------------- 2 files changed, 65 insertions(+), 64 deletions(-) delete mode 100644 packaging/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index e2a71efb8..707dc9265 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -123,7 +123,7 @@ include(GNUInstallDirs) if(MSVC) set(GLOBAL PROPERTY USE_FOLDERS ON) - add_compile_options("/utf-8") + target_compile_options(netcdf "/utf-8") endif() # auto-configure style checks, other CMake modules. @@ -1837,3 +1837,67 @@ endif() if(DEFINED ENV{LIB_FUZZING_ENGINE}) add_subdirectory(fuzz) endif(DEFINED ENV{LIB_FUZZING_ENGINE}) + +#### +# Export files +#### + +# Create CMake package configuration files. With these, other packages using +# cmake should be able to find netcdf using find_package and find_library. +# The EXPORT call is paired with one in liblib. +set(ConfigPackageLocation ${CMAKE_INSTALL_LIBDIR}/cmake/netCDF) + +install(EXPORT netCDFTargets + DESTINATION ${ConfigPackageLocation} + COMPONENT headers + NAMESPACE netCDF:: + ) + +include(CMakePackageConfigHelpers) +CONFIGURE_PACKAGE_CONFIG_file( + "${CMAKE_CURRENT_SOURCE_DIR}/netCDFConfig.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/netCDFConfig.cmake" + INSTALL_DESTINATION "${ConfigPackageLocation}" + NO_CHECK_REQUIRED_COMPONENTS_MACRO + PATH_VARS + CMAKE_INSTALL_PREFIX + CMAKE_INSTALL_INCLUDEDIR + CMAKE_INSTALL_LIBDIR + ) + +install( + FILES "${CMAKE_CURRENT_BINARY_DIR}/netCDFConfig.cmake" + DESTINATION "${ConfigPackageLocation}" + COMPONENT headers + ) + +target_include_directories(netcdf + PUBLIC + $ + $ +) + +# Create export configuration +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/netCDF/netCDFConfigVersion.cmake" + VERSION ${netCDF_VERSION} + COMPATIBILITY SameMajorVersion + ) + +install( + FILES + "${CMAKE_CURRENT_BINARY_DIR}/netCDF/netCDFConfigVersion.cmake" + DESTINATION ${ConfigPackageLocation} + COMPONENT headers + ) + +#### +# End export files +#### + +# CPack inclusion must come last. +option(NETCDF_PACKAGE "Create netCDF-C package " ${NETCDF_IS_TOP_LEVEL}) + +if (NETCDF_PACKAGE) + include(CMakeInstallation.cmake) +endif() \ No newline at end of file diff --git a/packaging/CMakeLists.txt b/packaging/CMakeLists.txt deleted file mode 100644 index a67ce3a7c..000000000 --- a/packaging/CMakeLists.txt +++ /dev/null @@ -1,63 +0,0 @@ -#### -# Export files -#### - -# Create CMake package configuration files. With these, other packages using -# cmake should be able to find netcdf using find_package and find_library. -# The EXPORT call is paired with one in liblib. -set(ConfigPackageLocation ${CMAKE_INSTALL_LIBDIR}/cmake/netCDF) - -install(EXPORT netCDFTargets - DESTINATION ${ConfigPackageLocation} - COMPONENT headers - NAMESPACE netCDF:: - ) - -include(CMakePackageConfigHelpers) -CONFIGURE_PACKAGE_CONFIG_file( - "${CMAKE_CURRENT_SOURCE_DIR}/netCDFConfig.cmake.in" - "${CMAKE_CURRENT_BINARY_DIR}/netCDFConfig.cmake" - INSTALL_DESTINATION "${ConfigPackageLocation}" - NO_CHECK_REQUIRED_COMPONENTS_MACRO - PATH_VARS - CMAKE_INSTALL_PREFIX - CMAKE_INSTALL_INCLUDEDIR - CMAKE_INSTALL_LIBDIR - ) - -install( - FILES "${CMAKE_CURRENT_BINARY_DIR}/netCDFConfig.cmake" - DESTINATION "${ConfigPackageLocation}" - COMPONENT headers - ) - -target_include_directories(netcdf - PUBLIC - $ - $ -) - -# Create export configuration -write_basic_package_version_file( - "${CMAKE_CURRENT_BINARY_DIR}/netCDF/netCDFConfigVersion.cmake" - VERSION ${netCDF_VERSION} - COMPATIBILITY SameMajorVersion - ) - -install( - FILES - "${CMAKE_CURRENT_BINARY_DIR}/netCDF/netCDFConfigVersion.cmake" - DESTINATION ${ConfigPackageLocation} - COMPONENT headers - ) - -#### -# End export files -#### - -# CPack inclusion must come last. -option(NETCDF_PACKAGE "Create netCDF-C package " ${NETCDF_IS_TOP_LEVEL}) - -if (NETCDF_PACKAGE) - include(CMakeInstallation.cmake) -endif() \ No newline at end of file From d816309e53a8920135517aa6f1cb5c1797e2a796 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Fri, 26 Jan 2024 13:56:19 -0600 Subject: [PATCH 04/74] targeting netcdf for compile definitions --- CMakeLists.txt | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 707dc9265..ced0e6970 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -285,17 +285,15 @@ if(MINGW) endif() endif() -add_definitions() - # Suppress CRT Warnings. # Only necessary for Windows if(MSVC) - add_definitions(-D_CRT_SECURE_NO_WARNINGS) + target_compile_definitions(netcdf -D_CRT_SECURE_NO_WARNINGS) endif() # Support ANSI format specifiers for *printf on MINGW: if(MINGW) - add_definitions(-D__USE_MINGW_ANSI_STDIO=1) + target_compile_definitions(-D__USE_MINGW_ANSI_STDIO=1) endif() ##### @@ -471,8 +469,8 @@ if(WIN32) option(ENABLE_DLL "Build a Windows DLL." ${BUILD_SHARED_LIBS}) if(ENABLE_DLL) set(BUILD_DLL ON CACHE BOOL "") - add_definitions(-DDLL_NETCDF) - add_definitions(-DDLL_EXPORT) + target_compile_definitions(-DDLL_NETCDF) + target_compile_definitions(-DDLL_EXPORT) endif() endif() # Did the user specify a default minimum blocksize for posixio? @@ -495,14 +493,14 @@ if(NOT ENABLE_NETCDF_4) set(ENABLE_LOGGING OFF) endif() if(ENABLE_LOGGING) - add_definitions(-DLOGGING) - add_definitions(-DENABLE_SET_LOG_LEVEL) + target_compile_definitions(-DLOGGING) + target_compile_definitions(-DENABLE_SET_LOG_LEVEL) set(LOGGING ON) set(ENABLE_SET_LOG_LEVEL ON) endif() option(ENABLE_SET_LOG_LEVEL_FUNC "Enable definition of nc_set_log_level()." ON) if(ENABLE_NETCDF_4 AND NOT ENABLE_LOGGING AND ENABLE_SET_LOG_LEVEL_FUNC) - add_definitions(-DENABLE_SET_LOG_LEVEL) + target_compile_definitions(-DENABLE_SET_LOG_LEVEL) set(ENABLE_SET_LOG_LEVEL ON) endif() @@ -995,7 +993,7 @@ endif() if(ENABLE_ZERO_LENGTH_COORD_BOUND) message(STATUS "Enabling a more relaxed check for NC_EINVALCOORDS") - add_definitions(-DRELAX_COORD_BOUND) + target_compile_definitions(-DRELAX_COORD_BOUND) endif() # Enable Parallel Tests. @@ -1407,7 +1405,7 @@ endif(ENABLE_BASH_SCRIPT_TESTING) # Create config.h file. configure_file("${netCDF_SOURCE_DIR}/config.h.cmake.in" "${netCDF_BINARY_DIR}/config.h") -add_definitions(-DHAVE_CONFIG_H) +target_compile_definitions(-DHAVE_CONFIG_H) include_directories(${netCDF_BINARY_DIR}) # End autotools-style checks for config.h From 5cd1f4e9b1b88c29ad791263c909afdd387b47dd Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Fri, 26 Jan 2024 14:28:16 -0600 Subject: [PATCH 05/74] leaving HAVE_CONFIG_H as top level definition for now --- CMakeLists.txt | 20 +++++++++++--------- liblib/CMakeLists.txt | 29 ++--------------------------- 2 files changed, 13 insertions(+), 36 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ced0e6970..9532429a2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -288,12 +288,12 @@ endif() # Suppress CRT Warnings. # Only necessary for Windows if(MSVC) - target_compile_definitions(netcdf -D_CRT_SECURE_NO_WARNINGS) + target_compile_definitions(netcdf PRIVATE -D_CRT_SECURE_NO_WARNINGS) endif() # Support ANSI format specifiers for *printf on MINGW: if(MINGW) - target_compile_definitions(-D__USE_MINGW_ANSI_STDIO=1) + target_compile_definitions(netcdf PRIVATE -D__USE_MINGW_ANSI_STDIO=1) endif() ##### @@ -469,8 +469,8 @@ if(WIN32) option(ENABLE_DLL "Build a Windows DLL." ${BUILD_SHARED_LIBS}) if(ENABLE_DLL) set(BUILD_DLL ON CACHE BOOL "") - target_compile_definitions(-DDLL_NETCDF) - target_compile_definitions(-DDLL_EXPORT) + target_compile_definitions(netcdf PRIVATE -DDLL_NETCDF) + target_compile_definitions(netcdf PRIVATE -DDLL_EXPORT) endif() endif() # Did the user specify a default minimum blocksize for posixio? @@ -493,14 +493,14 @@ if(NOT ENABLE_NETCDF_4) set(ENABLE_LOGGING OFF) endif() if(ENABLE_LOGGING) - target_compile_definitions(-DLOGGING) - target_compile_definitions(-DENABLE_SET_LOG_LEVEL) + target_compile_definitions(netcdf PRIVATE -DLOGGING) + target_compile_definitions(netcdf PRIVATE -DENABLE_SET_LOG_LEVEL) set(LOGGING ON) set(ENABLE_SET_LOG_LEVEL ON) endif() option(ENABLE_SET_LOG_LEVEL_FUNC "Enable definition of nc_set_log_level()." ON) if(ENABLE_NETCDF_4 AND NOT ENABLE_LOGGING AND ENABLE_SET_LOG_LEVEL_FUNC) - target_compile_definitions(-DENABLE_SET_LOG_LEVEL) + target_compile_definitions(netcdf PRIVATE -DENABLE_SET_LOG_LEVEL) set(ENABLE_SET_LOG_LEVEL ON) endif() @@ -993,7 +993,7 @@ endif() if(ENABLE_ZERO_LENGTH_COORD_BOUND) message(STATUS "Enabling a more relaxed check for NC_EINVALCOORDS") - target_compile_definitions(-DRELAX_COORD_BOUND) + target_compile_definitions(netcdf PRIVATE -DRELAX_COORD_BOUND) endif() # Enable Parallel Tests. @@ -1405,7 +1405,9 @@ endif(ENABLE_BASH_SCRIPT_TESTING) # Create config.h file. configure_file("${netCDF_SOURCE_DIR}/config.h.cmake.in" "${netCDF_BINARY_DIR}/config.h") -target_compile_definitions(-DHAVE_CONFIG_H) + +add_compile_definitions(-DHAVE_CONFIG_H) + include_directories(${netCDF_BINARY_DIR}) # End autotools-style checks for config.h diff --git a/liblib/CMakeLists.txt b/liblib/CMakeLists.txt index 3b634c718..12063b5ab 100644 --- a/liblib/CMakeLists.txt +++ b/liblib/CMakeLists.txt @@ -80,7 +80,7 @@ if(ENABLE_PLUGINS) endif() target_sources(netcdf - PUBLIC + PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/nc_initialize.c ) @@ -255,29 +255,4 @@ set(NC_LIBS ${NC_LIBS} PARENT_SCOPE) file(GLOB CUR_EXTRA_DIST RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/*.h ${CMAKE_CURRENT_SOURCE_DIR}/*.c) set(CUR_EXTRA_DIST ${CUR_EXTRA_DIST} CMakeLists.txt Makefile.am) -ADD_EXTRA_DIST("${CUR_EXTRA_DIST}") - -# [ 10%] Linking C shared library libnetcdf.dylib -# /opt/homebrew/Cellar/cmake/3.27.1/bin/cmake -E cmake_link_script CMakeFiles/netcdf.dir/link.txt --verbose=1 -# /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc -# -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -g -Wall -Wshorten-64-to-32 -Wconversion -arch arm64 -# -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk -dynamiclib -Wl,-headerpad_max_install_names -# -shared -L/opt/homebrew/opt/llvm/lib/c++ -Wl,-rpath,/opt/homebrew/opt/llvm/lib/c++ -compatibility_version 19.0.0 -current_version 19.0.0 -# -o libnetcdf.19.dylib -install_name @rpath/libnetcdf.19.dylib -# CMakeFiles/netcdf.dir/liblib/nc_initialize.c.o libsrc4/CMakeFiles/netcdf4.dir/nc4dispatch.c.o libsrc4/CMakeFiles/netcdf4.dir/nc4attr.c.o -# libsrc4/CMakeFiles/netcdf4.dir/nc4dim.c.o libsrc4/CMakeFiles/netcdf4.dir/nc4grp.c.o libsrc4/CMakeFiles/netcdf4.dir/nc4internal.c.o libsrc4/CMakeFiles/netcdf4.dir/nc4type.c.o libsrc4/CMakeFiles/netcdf4.dir/nc4var.c.o libsrc4/CMakeFiles/netcdf4.dir/ncfunc.c.o libsrc4/CMakeFiles/netcdf4.dir/ncindex.c.o libsrc4/CMakeFiles/netcdf4.dir/nc4cache.c.o libhdf5/CMakeFiles/netcdfhdf5.dir/nc4hdf.c.o libhdf5/CMakeFiles/netcdfhdf5.dir/nc4info.c.o libhdf5/CMakeFiles/netcdfhdf5.dir/hdf5file.c.o libhdf5/CMakeFiles/netcdfhdf5.dir/hdf5attr.c.o -# libhdf5/CMakeFiles/netcdfhdf5.dir/hdf5dim.c.o libhdf5/CMakeFiles/netcdfhdf5.dir/hdf5grp.c.o libhdf5/CMakeFiles/netcdfhdf5.dir/hdf5type.c.o libhdf5/CMakeFiles/netcdfhdf5.dir/hdf5internal.c.o libhdf5/CMakeFiles/netcdfhdf5.dir/hdf5create.c.o libhdf5/CMakeFiles/netcdfhdf5.dir/hdf5open.c.o libhdf5/CMakeFiles/netcdfhdf5.dir/hdf5var.c.o libhdf5/CMakeFiles/netcdfhdf5.dir/nc4mem.c.o libhdf5/CMakeFiles/netcdfhdf5.dir/nc4memcb.c.o libhdf5/CMakeFiles/netcdfhdf5.dir/hdf5dispatch.c.o libhdf5/CMakeFiles/netcdfhdf5.dir/hdf5filter.c.o libhdf5/CMakeFiles/netcdfhdf5.dir/hdf5set_format_compatibility.c.o libhdf5/CMakeFiles/netcdfhdf5.dir/hdf5debug.c.o libhdf5/CMakeFiles/netcdfhdf5.dir/H5FDhttp.c.o -# oc2/CMakeFiles/oc2.dir/oc.c.o oc2/CMakeFiles/oc2.dir/daplex.c.o oc2/CMakeFiles/oc2.dir/dapparse.c.o oc2/CMakeFiles/oc2.dir/dapy.c.o oc2/CMakeFiles/oc2.dir/occompile.c.o oc2/CMakeFiles/oc2.dir/occurlfunctions.c.o oc2/CMakeFiles/oc2.dir/ocdata.c.o oc2/CMakeFiles/oc2.dir/ocdebug.c.o oc2/CMakeFiles/oc2.dir/ocdump.c.o oc2/CMakeFiles/oc2.dir/ocinternal.c.o oc2/CMakeFiles/oc2.dir/ocnode.c.o oc2/CMakeFiles/oc2.dir/ochttp.c.o oc2/CMakeFiles/oc2.dir/ocread.c.o oc2/CMakeFiles/oc2.dir/ocutil.c.o oc2/CMakeFiles/oc2.dir/xxdr.c.o -# libdap2/CMakeFiles/dap2.dir/constraints.c.o libdap2/CMakeFiles/dap2.dir/dapcvt.c.o libdap2/CMakeFiles/dap2.dir/dapodom.c.o libdap2/CMakeFiles/dap2.dir/daputil.c.o libdap2/CMakeFiles/dap2.dir/ncdaperr.c.o libdap2/CMakeFiles/dap2.dir/cdf.c.o libdap2/CMakeFiles/dap2.dir/cache.c.o libdap2/CMakeFiles/dap2.dir/dapdump.c.o libdap2/CMakeFiles/dap2.dir/dapdebug.c.o libdap2/CMakeFiles/dap2.dir/dapattr.c.o libdap2/CMakeFiles/dap2.dir/ncd2dispatch.c.o libdap2/CMakeFiles/dap2.dir/getvara.c.o libdap2/CMakeFiles/dap2.dir/dceconstraints.c.o libdap2/CMakeFiles/dap2.dir/dcetab.c.o libdap2/CMakeFiles/dap2.dir/dceparse.c.o libdap2/CMakeFiles/dap2.dir/dcelex.c.o -# libdap4/CMakeFiles/dap4.dir/d4curlfunctions.c.o libdap4/CMakeFiles/dap4.dir/d4fix.c.o libdap4/CMakeFiles/dap4.dir/d4data.c.o libdap4/CMakeFiles/dap4.dir/d4file.c.o libdap4/CMakeFiles/dap4.dir/d4parser.c.o libdap4/CMakeFiles/dap4.dir/d4meta.c.o libdap4/CMakeFiles/dap4.dir/d4varx.c.o libdap4/CMakeFiles/dap4.dir/d4dump.c.o libdap4/CMakeFiles/dap4.dir/d4swap.c.o libdap4/CMakeFiles/dap4.dir/d4chunk.c.o libdap4/CMakeFiles/dap4.dir/d4printer.c.o libdap4/CMakeFiles/dap4.dir/d4read.c.o libdap4/CMakeFiles/dap4.dir/d4http.c.o libdap4/CMakeFiles/dap4.dir/d4util.c.o libdap4/CMakeFiles/dap4.dir/d4odom.c.o libdap4/CMakeFiles/dap4.dir/d4cvt.c.o libdap4/CMakeFiles/dap4.dir/d4debug.c.o libdap4/CMakeFiles/dap4.dir/ncd4dispatch.c.o -# libncxml/CMakeFiles/ncxml.dir/ncxml_xml2.c.o -# libnczarr/CMakeFiles/nczarr.dir/zarr.c.o libnczarr/CMakeFiles/nczarr.dir/zattr.c.o libnczarr/CMakeFiles/nczarr.dir/zxcache.c.o libnczarr/CMakeFiles/nczarr.dir/zchunking.c.o libnczarr/CMakeFiles/nczarr.dir/zclose.c.o libnczarr/CMakeFiles/nczarr.dir/zcreate.c.o libnczarr/CMakeFiles/nczarr.dir/zcvt.c.o libnczarr/CMakeFiles/nczarr.dir/zdim.c.o libnczarr/CMakeFiles/nczarr.dir/zdispatch.c.o libnczarr/CMakeFiles/nczarr.dir/zfile.c.o libnczarr/CMakeFiles/nczarr.dir/zfilter.c.o libnczarr/CMakeFiles/nczarr.dir/zgrp.c.o libnczarr/CMakeFiles/nczarr.dir/zinternal.c.o libnczarr/CMakeFiles/nczarr.dir/zmap.c.o libnczarr/CMakeFiles/nczarr.dir/zmap_file.c.o libnczarr/CMakeFiles/nczarr.dir/zodom.c.o libnczarr/CMakeFiles/nczarr.dir/zopen.c.o libnczarr/CMakeFiles/nczarr.dir/zprov.c.o libnczarr/CMakeFiles/nczarr.dir/zsync.c.o libnczarr/CMakeFiles/nczarr.dir/ztype.c.o libnczarr/CMakeFiles/nczarr.dir/zutil.c.o libnczarr/CMakeFiles/nczarr.dir/zvar.c.o libnczarr/CMakeFiles/nczarr.dir/zwalk.c.o libnczarr/CMakeFiles/nczarr.dir/zdebug.c.o -# libncpoco/CMakeFiles/ncpoco.dir/ncpoco.c.o libncpoco/CMakeFiles/ncpoco.dir/cp_unix.c.o -# /opt/homebrew/lib/libhdf5_hl.dylib /opt/homebrew/lib/libhdf5.dylib -# /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk/usr/lib/libm.tbd -# /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk/usr/lib/libz.tbd -# /opt/homebrew/lib/libzstd.dylib -# /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk/usr/lib/libbz2.tbd -# /opt/homebrew/lib/libsz.dylib -# /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk/usr/lib/libcurl.tbd -# /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk/usr/lib/libxml2.tbd +ADD_EXTRA_DIST("${CUR_EXTRA_DIST}") \ No newline at end of file From e31d535bed120547ff816b7a57fdc94f8ee398a1 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Fri, 26 Jan 2024 14:44:19 -0600 Subject: [PATCH 06/74] removing some compile things --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9532429a2..7f7852bcc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -469,8 +469,8 @@ if(WIN32) option(ENABLE_DLL "Build a Windows DLL." ${BUILD_SHARED_LIBS}) if(ENABLE_DLL) set(BUILD_DLL ON CACHE BOOL "") - target_compile_definitions(netcdf PRIVATE -DDLL_NETCDF) - target_compile_definitions(netcdf PRIVATE -DDLL_EXPORT) + add_compile_definitions(-DDLL_NETCDF) + add_compile_definitions(-DDLL_EXPORT) endif() endif() # Did the user specify a default minimum blocksize for posixio? From d7e7714168197c6e644e8aaab60d2cc7e684dce6 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Fri, 26 Jan 2024 15:46:26 -0600 Subject: [PATCH 07/74] trying to let netcdf4 find hdf5 --- libsrc4/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/libsrc4/CMakeLists.txt b/libsrc4/CMakeLists.txt index 8ae1a029f..b9e0f857a 100644 --- a/libsrc4/CMakeLists.txt +++ b/libsrc4/CMakeLists.txt @@ -36,6 +36,7 @@ set(ARGS_MANPAGE -DAPI=C) if (USE_HDF5) set(ARGS_MANPAGE ${ARGS_MANPAGE} -DNETCDF4=TRUE) + target_include_directories(netcdf4 PRIVATE ${HDF5_INCLUDE_DIR}) endif(USE_HDF5) if (BUILD_DAP) From 46105aa7dc11e756d54eb6b6d09d0f44a6af89dc Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Fri, 26 Jan 2024 15:53:05 -0600 Subject: [PATCH 08/74] linking hdf5 to hdf5 --- libhdf5/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libhdf5/CMakeLists.txt b/libhdf5/CMakeLists.txt index b88ee4e5a..769d34406 100644 --- a/libhdf5/CMakeLists.txt +++ b/libhdf5/CMakeLists.txt @@ -23,5 +23,7 @@ if(STATUS_PARALLEL) target_link_libraries(netcdfhdf5 PUBLIC MPI::MPI_C) endif(STATUS_PARALLEL) +target_include_directories(netcdfhdf5 PRIVATE ${HDF5_INCLUDE_DIR}) + # Remember to package this file for CMake builds. add_extra_dist(${libnchdf5_SOURCES} CMakeLists.txt) From 559c336a7aedc175ea9efcd752fe800b6c919178 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Fri, 26 Jan 2024 16:04:15 -0600 Subject: [PATCH 09/74] connecting dispatch to hdf5 --- libdispatch/CMakeLists.txt | 67 ++++++++++++++++++++------------------ 1 file changed, 36 insertions(+), 31 deletions(-) diff --git a/libdispatch/CMakeLists.txt b/libdispatch/CMakeLists.txt index 1d867369b..9c7e7687f 100644 --- a/libdispatch/CMakeLists.txt +++ b/libdispatch/CMakeLists.txt @@ -4,57 +4,62 @@ # University Corporation for Atmospheric Research/Unidata. # See netcdf-c/COPYRIGHT file for more info. -SET(libdispatch_SOURCES dcopy.c dfile.c ddim.c datt.c dattinq.c dattput.c dattget.c derror.c dvar.c dvarget.c dvarput.c dvarinq.c ddispatch.c nclog.c dstring.c dutf8.c dinternal.c doffsets.c ncuri.c nclist.c ncbytes.c nchashmap.c nctime.c nc.c nclistmgr.c utf8proc.h utf8proc.c dpathmgr.c dutil.c drc.c dauth.c dreadonly.c dnotnc4.c dnotnc3.c dinfermodel.c +set(libdispatch_SOURCES dcopy.c dfile.c ddim.c datt.c dattinq.c dattput.c dattget.c derror.c dvar.c dvarget.c dvarput.c dvarinq.c ddispatch.c nclog.c dstring.c dutf8.c dinternal.c doffsets.c ncuri.c nclist.c ncbytes.c nchashmap.c nctime.c nc.c nclistmgr.c utf8proc.h utf8proc.c dpathmgr.c dutil.c drc.c dauth.c dreadonly.c dnotnc4.c dnotnc3.c dinfermodel.c daux.c dinstance.c dinstance_intern.c dcrc32.c dcrc32.h dcrc64.c ncexhash.c ncxcache.c ncjson.c ds3util.c dparallel.c dmissing.c) # Netcdf-4 only functions. Must be defined even if not used -SET(libdispatch_SOURCES ${libdispatch_SOURCES} dgroup.c dvlen.c dcompound.c dtype.c denum.c dopaque.c dfilter.c) +set(libdispatch_SOURCES ${libdispatch_SOURCES} dgroup.c dvlen.c dcompound.c dtype.c denum.c dopaque.c dfilter.c) -IF(BUILD_V2) - SET(libdispatch_SOURCES ${libdispatch_SOURCES} dv2i.c) -ENDIF(BUILD_V2) +if(BUILD_V2) + set(libdispatch_SOURCES ${libdispatch_SOURCES} dv2i.c) +endif(BUILD_V2) -IF(ENABLE_BYTERANGE) - SET(libdispatch_SOURCES ${libdispatch_SOURCES} dhttp.c) +if(ENABLE_BYTERANGE) + set(libdispatch_SOURCES ${libdispatch_SOURCES} dhttp.c) ENDIF(ENABLE_BYTERANGE) IF(ENABLE_S3) - IF(ENABLE_S3_INTERNAL) - SET(libdispatch_SOURCES ${libdispatch_SOURCES} ncs3sdk_h5.c nch5s3comms.c nch5s3comms.h nccurl_sha256.c nccurl_sha256.h nccurl_hmac.c nccurl_hmac.h nccurl_setup.h) - ELSE() - SET(libdispatch_SOURCES ${libdispatch_SOURCES} ncs3sdk_aws.cpp awsincludes.h) - ENDIF() -ENDIF() + if(ENABLE_S3_INTERNAL) + set(libdispatch_SOURCES ${libdispatch_SOURCES} ncs3sdk_h5.c nch5s3comms.c nch5s3comms.h nccurl_sha256.c nccurl_sha256.h nccurl_hmac.c nccurl_hmac.h nccurl_setup.h) + else() + set(libdispatch_SOURCES ${libdispatch_SOURCES} ncs3sdk_aws.cpp awsincludes.h) + endif() +endif() -IF(REGEDIT) - SET(libdispatch_SOURCES ${libdispatch_SOURCES} dreg.c) -ENDIF(REGEDIT) +if(REGEDIT) + set(libdispatch_SOURCES ${libdispatch_SOURCES} dreg.c) +endif(REGEDIT) add_library(dispatch OBJECT ${libdispatch_SOURCES}) -IF(STATUS_PARALLEL) + +if (USE_HDF5) + target_include_directories(dispatch PRIVATE ${HDF5_INCLUDE_DIR}) +endif(USE_HDF5) + +if(STATUS_PARALLEL) target_link_libraries(dispatch PUBLIC MPI::MPI_C) -ENDIF(STATUS_PARALLEL) +endif(STATUS_PARALLEL) -IF(ENABLE_NCZARR) +if(ENABLE_NCZARR) target_include_directories(dispatch PUBLIC ../libnczarr) -ENDIF(ENABLE_NCZARR) +endif(ENABLE_NCZARR) -IF(ENABLE_S3) - IF(ENABLE_S3_AWS) +if(ENABLE_S3) + if(ENABLE_S3_AWS) target_include_directories(dispatch PUBLIC ${AWSSDK_INCLUDE_DIRS}) - IF(NOT MSVC) + if(NOT MSVC) target_compile_features(dispatch PUBLIC cxx_std_11) - ENDIF() - ELSE() + endif() + else() target_include_directories(dispatch PUBLIC ../libncxml) - ENDIF() -ENDIF() + endif() +endif() -IF(ENABLE_TESTS) +if(ENABLE_TESTS) BUILD_BIN_TEST(ncrandom) -ENDIF() +endif() -FILE(GLOB CUR_EXTRA_DIST RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/*.h ${CMAKE_CURRENT_SOURCE_DIR}/*.c) -SET(CUR_EXTRA_DIST ${CUR_EXTRA_DIST} CMakeLists.txt Makefile.am) +file(GLOB CUR_EXTRA_DIST RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/*.h ${CMAKE_CURRENT_SOURCE_DIR}/*.c) +set(CUR_EXTRA_DIST ${CUR_EXTRA_DIST} CMakeLists.txt Makefile.am) ADD_EXTRA_DIST("${CUR_EXTRA_DIST}") From dcf9fb5bfd974580db5d67d68d445d7378e39b53 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Fri, 26 Jan 2024 16:23:15 -0600 Subject: [PATCH 10/74] linking xml to libxml --- libncxml/CMakeLists.txt | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/libncxml/CMakeLists.txt b/libncxml/CMakeLists.txt index a30bf232d..4f3adb93d 100644 --- a/libncxml/CMakeLists.txt +++ b/libncxml/CMakeLists.txt @@ -1,11 +1,18 @@ IF(HAVE_LIBXML2) -SET(libncxml_SOURCES ncxml_xml2.c) + SET(libncxml_SOURCES ncxml_xml2.c) ELSE() -SET(libncxml_SOURCES ncxml_tinyxml2.cpp tinyxml2.cpp tinyxml2.h) + SET(libncxml_SOURCES ncxml_tinyxml2.cpp tinyxml2.cpp tinyxml2.h) ENDIF() add_library(ncxml OBJECT ${libncxml_SOURCES}) -TARGET_INCLUDE_DIRECTORIES(ncxml PUBLIC ./include) +target_include_directories(ncxml + PUBLIC + ./include + PRIVATE + ${LIBXML2_INCLUDE_DIRS} +) + + #IF(NOT MSVC) #target_compile_features(ncxml PUBLIC cxx_std_11) From 4d54e74e4b1a69641a7d02bc4eb583aa659b295a Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Fri, 26 Jan 2024 16:44:46 -0600 Subject: [PATCH 11/74] adding hdf5 to plugins --- plugins/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index 33a9f4a59..cf98a11f9 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -70,6 +70,10 @@ macro(buildplugin TARGET TARGETLIB) if(STATUS_PARALLEL) target_link_libraries(${TARGET} PUBLIC MPI::MPI_C) endif(STATUS_PARALLEL) + + if (USE_HDF5) + target_include_directories(${TARGET} PRIVATE ${HDF5_INCLUDE_DIR}) +endif(USE_HDF5) endmacro() buildplugin(h5misc "h5misc" netcdf) From f41178f6e0eb33e2372639493be9222e10166dfc Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Fri, 26 Jan 2024 16:48:50 -0600 Subject: [PATCH 12/74] adding hdf5 to nczarr --- libnczarr/CMakeLists.txt | 24 ++++++++++++++---------- plugins/CMakeLists.txt | 2 +- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/libnczarr/CMakeLists.txt b/libnczarr/CMakeLists.txt index 1a6c5e951..7e42de778 100644 --- a/libnczarr/CMakeLists.txt +++ b/libnczarr/CMakeLists.txt @@ -8,7 +8,7 @@ #add_compile_options("/showincludes") # The source files for the HDF5 dispatch layer. -SET(libnczarr_SOURCES +set(libnczarr_SOURCES zarr.c zattr.c zxcache.c @@ -46,24 +46,28 @@ zfilter.h zdebug.h ) -IF(ENABLE_NCZARR_ZIP) -SET(libnczarr_SOURCES ${libnczarr_SOURCES} zmap_zip.c) -ENDIF() +if(ENABLE_NCZARR_ZIP) + set(libnczarr_SOURCES ${libnczarr_SOURCES} zmap_zip.c) +endif() -IF(ENABLE_S3) -SET(libnczarr_SOURCES ${libnczarr_SOURCES} zmap_s3sdk.c) -ENDIF() +if(ENABLE_S3) + set(libnczarr_SOURCES ${libnczarr_SOURCES} zmap_s3sdk.c) +endif() # Build the Zarr dispatch layer as a library that will be included in # the netCDF library. add_library(nczarr OBJECT ${libnczarr_SOURCES}) -TARGET_INCLUDE_DIRECTORIES(nczarr PUBLIC ../libncpoco) +target_include_directories(nczarr PUBLIC ../libncpoco) -IF(STATUS_PARALLEL) +if (USE_HDF5) + target_include_directories(nczarr PRIVATE ${HDF5_INCLUDE_DIR}) +endif(USE_HDF5) + +if(STATUS_PARALLEL) target_link_libraries(nczarr PUBLIC MPI::MPI_C) -ENDIF(STATUS_PARALLEL) +endif(STATUS_PARALLEL) # Remember to package this file for CMake builds. ADD_EXTRA_DIST(${libnczarr_SOURCES} CMakeLists.txt) diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index cf98a11f9..8f5ac6a22 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -73,7 +73,7 @@ macro(buildplugin TARGET TARGETLIB) if (USE_HDF5) target_include_directories(${TARGET} PRIVATE ${HDF5_INCLUDE_DIR}) -endif(USE_HDF5) + endif(USE_HDF5) endmacro() buildplugin(h5misc "h5misc" netcdf) From 7c2c9554505ad23df1f497ffa873a67e491c9d55 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Wed, 7 Feb 2024 10:06:46 -0600 Subject: [PATCH 13/74] correcting target_sources --- libdispatch/CMakeLists.txt | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/libdispatch/CMakeLists.txt b/libdispatch/CMakeLists.txt index 2bbc3341b..c1af58d11 100644 --- a/libdispatch/CMakeLists.txt +++ b/libdispatch/CMakeLists.txt @@ -6,10 +6,11 @@ # See netcdf-c/COPYRIGHT file for more info. add_library(dispatch OBJECT) -target_sources(dispatch - dcopy.c dfile.c ddim.c datt.c dattinq.c dattput.c dattget.c derror.c dvar.c dvarget.c dvarput.c dvarinq.c ddispatch.c nclog.c dstring.c dutf8.c dinternal.c doffsets.c ncuri.c nclist.c ncbytes.c nchashmap.c nctime.c nc.c nclistmgr.c utf8proc.h utf8proc.c dpathmgr.c dutil.c drc.c dauth.c dreadonly.c dnotnc4.c dnotnc3.c dinfermodel.c - daux.c dinstance.c dinstance_intern.c - dcrc32.c dcrc32.h dcrc64.c ncexhash.c ncxcache.c ncjson.c ds3util.c dparallel.c dmissing.c +target_sources(dispatch + PRIVATE + dcopy.c dfile.c ddim.c datt.c dattinq.c dattput.c dattget.c derror.c dvar.c dvarget.c dvarput.c dvarinq.c ddispatch.c nclog.c dstring.c dutf8.c dinternal.c doffsets.c ncuri.c nclist.c ncbytes.c nchashmap.c nctime.c nc.c nclistmgr.c utf8proc.h utf8proc.c dpathmgr.c dutil.c drc.c dauth.c dreadonly.c dnotnc4.c dnotnc3.c dinfermodel.c + daux.c dinstance.c dinstance_intern.c + dcrc32.c dcrc32.h dcrc64.c ncexhash.c ncxcache.c ncjson.c ds3util.c dparallel.c dmissing.c ) ## @@ -27,36 +28,42 @@ set_property(SOURCE dinstance_intern.c dinstance.c dvarput.c # Netcdf-4 only functions. Must be defined even if not used target_sources(dispatch - dgroup.c dvlen.c dcompound.c dtype.c denum.c dopaque.c dfilter.c + PRIVATE + dgroup.c dvlen.c dcompound.c dtype.c denum.c dopaque.c dfilter.c ) if(BUILD_V2) target_sources(dispatch - dv2i.c + PRIVATE + dv2i.c ) endif(BUILD_V2) if(ENABLE_BYTERANGE) target_sources(dispatch - dhttp.c + PRIVATE + dhttp.c ) ENDIF(ENABLE_BYTERANGE) IF(ENABLE_S3) if(ENABLE_S3_INTERNAL) target_sources(dispatch - ncs3sdk_h5.c nch5s3comms.c nch5s3comms.h nccurl_sha256.c nccurl_sha256.h nccurl_hmac.c nccurl_hmac.h nccurl_setup.h + PRIVATE + ncs3sdk_h5.c nch5s3comms.c nch5s3comms.h nccurl_sha256.c nccurl_sha256.h nccurl_hmac.c nccurl_hmac.h nccurl_setup.h ) else() target_sources(dispatch - ncs3sdk_aws.cpp awsincludes.h + PRIVATE + ncs3sdk_aws.cpp awsincludes.h ) endif() endif() if(REGEDIT) target_sources(dispatch - dreg.c + PRIVATE + dreg.c ) endif(REGEDIT) From 89f0ba0a576f73eae6d2f42ecf1973a6f00e92f9 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Wed, 7 Feb 2024 13:37:36 -0600 Subject: [PATCH 14/74] trying to link libraries correctly --- liblib/CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/liblib/CMakeLists.txt b/liblib/CMakeLists.txt index 6d6745f81..20429c82e 100644 --- a/liblib/CMakeLists.txt +++ b/liblib/CMakeLists.txt @@ -174,7 +174,7 @@ endif() if(ENABLE_S3) if(ENABLE_S3_AWS) - TARGET_LINK_DIRECTORIES(netcdf PUBLIC ${AWSSDK_LIB_DIR}) + target_link_directories(netcdf PUBLIC ${AWSSDK_LIB_DIR}) set(TLL_LIBS ${AWSSDK_LINK_LIBRARIES} ${TLL_LIBS}) elseif(ENABLE_S3_INTERNAL) if(OPENSSL_FOUND) @@ -190,7 +190,7 @@ endif() if(NOT WIN32) if(NOT APPLE) if(CMAKE_DL_LIBS) - target_link_libraries(netcdf ${CMAKE_DL_LIBS}) + target_link_libraries(netcdf PRIVATE ${CMAKE_DL_LIBS}) endif() endif() endif() @@ -199,7 +199,7 @@ if(TLL_LIBS) list(REMOVE_DUPLICATES TLL_LIBS) endif() -target_link_libraries(netcdf ${TLL_LIBS}) +target_link_libraries(netcdf PRIVATE ${TLL_LIBS}) set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${TLL_LIBS}) if(MSVC) From 47d5c5b0f7addc2b2812049b174cdf002783ca99 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Wed, 7 Feb 2024 14:09:57 -0600 Subject: [PATCH 15/74] trying to target objects for the libraries? --- liblib/CMakeLists.txt | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/liblib/CMakeLists.txt b/liblib/CMakeLists.txt index 20429c82e..53ffe1833 100644 --- a/liblib/CMakeLists.txt +++ b/liblib/CMakeLists.txt @@ -10,72 +10,72 @@ ##### target_link_libraries(netcdf PRIVATE - netcdf3 - dispatch + $ + $ ) if(USE_NETCDF4) target_link_libraries(netcdf PRIVATE - netcdf4 + $ ) endif() if(USE_HDF5) target_link_libraries(netcdf PRIVATE - netcdfhdf5 + $ ) endif() if(USE_PNETCDF) target_link_libraries(netcdf PRIVATE - netcdfp + $ ) endif() if(USE_HDF4) target_link_libraries(netcdf PRIVATE - netcdfhdf4 + $ ) endif() if(ENABLE_DAP2) target_link_libraries(netcdf PRIVATE - oc2 - dap2 + $ + $ ) endif() if(ENABLE_DAP4) target_link_libraries(netcdf PRIVATE - dap4 - ncxml + $ + $ ) endif() if(ENABLE_NCZARR) target_link_libraries(netcdf PRIVATE - nczarr + $ ) endif() if(ENABLE_S3_INTERNAL) target_link_libraries(netcdf PRIVATE - ncxml + $ ) endif() if(ENABLE_PLUGINS) target_link_libraries(netcdf PRIVATE - ncpoco + $ ) endif() From 7248e18e1a6064a92adfe20f8f992bec44a19657 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Wed, 7 Feb 2024 15:55:19 -0600 Subject: [PATCH 16/74] trying to use target_sources for libraries built by netcdf --- liblib/CMakeLists.txt | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/liblib/CMakeLists.txt b/liblib/CMakeLists.txt index 53ffe1833..92e1b94a1 100644 --- a/liblib/CMakeLists.txt +++ b/liblib/CMakeLists.txt @@ -8,42 +8,42 @@ ##### # Add target objects/modules based on options. ##### -target_link_libraries(netcdf +target_sources(netcdf PRIVATE $ $ ) if(USE_NETCDF4) - target_link_libraries(netcdf + target_sources(netcdf PRIVATE $ ) endif() if(USE_HDF5) - target_link_libraries(netcdf + target_sources(netcdf PRIVATE $ ) endif() if(USE_PNETCDF) - target_link_libraries(netcdf + target_sources(netcdf PRIVATE $ ) endif() if(USE_HDF4) - target_link_libraries(netcdf + target_sources(netcdf PRIVATE $ ) endif() if(ENABLE_DAP2) - target_link_libraries(netcdf + target_sources(netcdf PRIVATE $ $ @@ -51,7 +51,7 @@ if(ENABLE_DAP2) endif() if(ENABLE_DAP4) - target_link_libraries(netcdf + target_sources(netcdf PRIVATE $ $ @@ -59,21 +59,21 @@ if(ENABLE_DAP4) endif() if(ENABLE_NCZARR) - target_link_libraries(netcdf + target_sources(netcdf PRIVATE $ ) endif() if(ENABLE_S3_INTERNAL) - target_link_libraries(netcdf + target_sources(netcdf PRIVATE $ ) endif() if(ENABLE_PLUGINS) - target_link_libraries(netcdf + target_sources(netcdf PRIVATE $ ) From 0b78616ddb2eb585869b693ae054e9ad92f3f2a3 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Fri, 9 Feb 2024 16:27:18 -0600 Subject: [PATCH 17/74] lowercase things --- libhdf5/CMakeLists.txt | 27 ++-- liblib/CMakeLists.txt | 31 +---- ncdump/CMakeLists.txt | 310 +++++++++++++++++++++-------------------- 3 files changed, 179 insertions(+), 189 deletions(-) diff --git a/libhdf5/CMakeLists.txt b/libhdf5/CMakeLists.txt index 769d34406..ea6149a33 100644 --- a/libhdf5/CMakeLists.txt +++ b/libhdf5/CMakeLists.txt @@ -5,19 +5,24 @@ # # Ed Hartnett -# The source files for the HDF5 dispatch layer. -set(libnchdf5_SOURCES nc4hdf.c nc4info.c hdf5file.c hdf5attr.c -hdf5dim.c hdf5grp.c hdf5type.c hdf5internal.c hdf5create.c hdf5open.c -hdf5var.c nc4mem.c nc4memcb.c hdf5dispatch.c hdf5filter.c -hdf5set_format_compatibility.c hdf5debug.c) - -if(ENABLE_BYTERANGE) - set(libnchdf5_SOURCES ${libnchdf5_SOURCES} H5FDhttp.c) -endif() - # Build the HDF5 dispatch layer as a library that will be included in # the netCDF library. -add_library(netcdfhdf5 OBJECT ${libnchdf5_SOURCES}) +add_library(netcdfhdf5 OBJECT) + +# The source files for the HDF5 dispatch layer. +target_sources(netcdfhdf5 PRIVATE + nc4hdf.c nc4info.c hdf5file.c hdf5attr.c + hdf5dim.c hdf5grp.c hdf5type.c hdf5internal.c hdf5create.c hdf5open.c + hdf5var.c nc4mem.c nc4memcb.c hdf5dispatch.c hdf5filter.c + hdf5set_format_compatibility.c hdf5debug.c +) + +if(ENABLE_BYTERANGE) + target_sources(netcdfhdf5 PRIVATE + H5FDhttp.c + ) +endif() + if(STATUS_PARALLEL) target_link_libraries(netcdfhdf5 PUBLIC MPI::MPI_C) diff --git a/liblib/CMakeLists.txt b/liblib/CMakeLists.txt index 92e1b94a1..2adbb4f9b 100644 --- a/liblib/CMakeLists.txt +++ b/liblib/CMakeLists.txt @@ -221,30 +221,13 @@ if(ENABLE_SHARED_LIBRARY_VERSION) ) endif(ENABLE_SHARED_LIBRARY_VERSION) -### -# The INCLUDES directive was introduced in 2.8.12. -# However, 2.8.11 is still the default on some -# popular linux distributions. See -# https://github.com/Unidata/netcdf-c/issues/135 -# for more information. -### -if(${CMAKE_VERSION} VERSION_LESS 2.8.12) - install( - TARGETS netcdf EXPORT netCDFTargets - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries - PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} - ) -else() - install( - TARGETS netcdf EXPORT netCDFTargets - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries - INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} - ) -endif() +install( + TARGETS netcdf EXPORT netCDFTargets + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} +) set(ALL_TLL_LIBS ${TLL_LIBS} PARENT_SCOPE) set(NC_LIBS ${NC_LIBS} PARENT_SCOPE) diff --git a/ncdump/CMakeLists.txt b/ncdump/CMakeLists.txt index 1e7e9313b..c723d29e4 100644 --- a/ncdump/CMakeLists.txt +++ b/ncdump/CMakeLists.txt @@ -9,20 +9,20 @@ # remove_definitions(-DDLL_NETCDF) #ENDIF() -SET(RCMERGE OFF) +set(RCMERGE OFF) -IF(USE_X_GETOPT) -SET(XGETOPTSRC "${CMAKE_CURRENT_SOURCE_DIR}/../libdispatch/XGetopt.c") -ENDIF() +if(USE_X_GETOPT) + set(XGETOPTSRC "${CMAKE_CURRENT_SOURCE_DIR}/../libdispatch/XGetopt.c") +endif() -SET(ncdump_FILES ncdump.c vardata.c dumplib.c indent.c nctime0.c utils.c nciter.c ${XGETOPTSRC}) -SET(nccopy_FILES nccopy.c nciter.c chunkspec.c utils.c dimmap.c list.c ${XGETOPTSRC}) -SET(ocprint_FILES ocprint.c ${XGETOPTSRC}) -SET(ncvalidator_FILES ncvalidator.c ${XGETOPTSRC}) -SET(printfqn_FILES printfqn.c ${XGETOPTSRC}) -SET(ncpathcvt_FILES ncpathcvt.c ${XGETOPTSRC}) -SET(ncfilteravail_FILES ncfilteravail.c ${XGETOPTSRC}) -SET(nchdf5version_FILES nchdf5version.c) +set(ncdump_FILES ncdump.c vardata.c dumplib.c indent.c nctime0.c utils.c nciter.c ${XGETOPTSRC}) +set(nccopy_FILES nccopy.c nciter.c chunkspec.c utils.c dimmap.c list.c ${XGETOPTSRC}) +set(ocprint_FILES ocprint.c ${XGETOPTSRC}) +set(ncvalidator_FILES ncvalidator.c ${XGETOPTSRC}) +set(printfqn_FILES printfqn.c ${XGETOPTSRC}) +set(ncpathcvt_FILES ncpathcvt.c ${XGETOPTSRC}) +set(ncfilteravail_FILES ncfilteravail.c ${XGETOPTSRC}) +set(nchdf5version_FILES nchdf5version.c) ## # Turn off inclusion of particular files when using the cmake-native @@ -37,37 +37,37 @@ set_property(SOURCE dumplib.c PROPERTY SKIP_UNITY_BUILD_INCLUSION ON) -ADD_EXECUTABLE(ncdump ${ncdump_FILES}) -ADD_EXECUTABLE(nccopy ${nccopy_FILES}) -ADD_EXECUTABLE(ncvalidator ${ncvalidator_FILES}) -ADD_EXECUTABLE(ncpathcvt ${ncpathcvt_FILES}) -ADD_EXECUTABLE(ncfilteravail ${ncfilteravail_FILES}) +add_executable(ncdump ${ncdump_FILES}) +add_executable(nccopy ${nccopy_FILES}) +add_executable(ncvalidator ${ncvalidator_FILES}) +add_executable(ncpathcvt ${ncpathcvt_FILES}) +add_executable(ncfilteravail ${ncfilteravail_FILES}) -IF(USE_HDF5) - ADD_EXECUTABLE(nc4print nc4print.c nc4printer.c) - ADD_EXECUTABLE(printfqn ${printfqn_FILES}) - ADD_EXECUTABLE(nchdf5version ${nchdf5version_FILES}) -ENDIF(USE_HDF5) +if(USE_HDF5) + add_executable(nc4print nc4print.c nc4printer.c) + add_executable(printfqn ${printfqn_FILES}) + add_executable(nchdf5version ${nchdf5version_FILES}) +endif(USE_HDF5) -IF(ENABLE_DAP) - ADD_EXECUTABLE(ocprint ${ocprint_FILES}) -ENDIF(ENABLE_DAP) +if(ENABLE_DAP) + add_executable(ocprint ${ocprint_FILES}) +endif(ENABLE_DAP) -TARGET_LINK_LIBRARIES(ncdump netcdf ${ALL_TLL_LIBS}) -TARGET_LINK_LIBRARIES(nccopy netcdf ${ALL_TLL_LIBS}) -TARGET_LINK_LIBRARIES(ncvalidator netcdf ${ALL_TLL_LIBS}) -TARGET_LINK_LIBRARIES(ncpathcvt netcdf ${ALL_TLL_LIBS}) -TARGET_LINK_LIBRARIES(ncfilteravail netcdf ${ALL_TLL_LIBS}) +target_link_libraries(ncdump netcdf ${ALL_TLL_LIBS}) +target_link_libraries(nccopy netcdf ${ALL_TLL_LIBS}) +target_link_libraries(ncvalidator netcdf ${ALL_TLL_LIBS}) +target_link_libraries(ncpathcvt netcdf ${ALL_TLL_LIBS}) +target_link_libraries(ncfilteravail netcdf ${ALL_TLL_LIBS}) -IF(USE_HDF5) - TARGET_LINK_LIBRARIES(nc4print netcdf ${ALL_TLL_LIBS}) - TARGET_LINK_LIBRARIES(printfqn netcdf ${ALL_TLL_LIBS}) - TARGET_LINK_LIBRARIES(nchdf5version netcdf ${ALL_TLL_LIBS}) -ENDIF(USE_HDF5) +if(USE_HDF5) + target_link_libraries(nc4print netcdf ${ALL_TLL_LIBS}) + target_link_libraries(printfqn netcdf ${ALL_TLL_LIBS}) + target_link_libraries(nchdf5version netcdf ${ALL_TLL_LIBS}) +endif(USE_HDF5) -IF(ENABLE_DAP) - TARGET_LINK_LIBRARIES(ocprint netcdf ${ALL_TLL_LIBS}) -ENDIF(ENABLE_DAP) +if(ENABLE_DAP) + target_link_libraries(ocprint netcdf ${ALL_TLL_LIBS}) +endif(ENABLE_DAP) #### # We have to do a little tweaking @@ -76,14 +76,14 @@ ENDIF(ENABLE_DAP) # test scripts to work. #### -IF(MSVC) +if(MSVC) macro(setbinprops name) - SET_TARGET_PROPERTIES(${name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY - ${CMAKE_CURRENT_BINARY_DIR}) - SET_TARGET_PROPERTIES(${name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG - ${CMAKE_CURRENT_BINARY_DIR}) - SET_TARGET_PROPERTIES(${name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE - ${CMAKE_CURRENT_BINARY_DIR}) + set_target_properties(${name} + PRORERTIES + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_BINARY_DIR} + RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_BINARY_DIR} + ) endmacro() setbinprops(ncdump) @@ -92,99 +92,101 @@ IF(MSVC) setbinprops(ncpathcvt) setbinprops(ncfilteravail) - IF(USE_HDF5) + if(USE_HDF5) setbinprops(printfqn) setbinprops(nchdf5version) - ENDIF(USE_HDF5) + endif(USE_HDF5) - IF(ENABLE_DAP) + if(ENABLE_DAP) setbinprops(ocprint) - ENDIF(ENABLE_DAP) + endif(ENABLE_DAP) -ENDIF() - -IF(ENABLE_TESTS) - - ADD_EXECUTABLE(rewrite-scalar rewrite-scalar.c) - ADD_EXECUTABLE(bom bom.c) - ADD_EXECUTABLE(tst_dimsizes tst_dimsizes.c) - ADD_EXECUTABLE(nctrunc nctrunc.c) -if(RCMERGE) - ADD_EXECUTABLE(tst_rcmerge tst_rcmerge.c) - ADD_EXECUTABLE(tst_rcmerge tst_rcapi.c) endif() - TARGET_LINK_LIBRARIES(rewrite-scalar netcdf) - TARGET_LINK_LIBRARIES(bom netcdf) - TARGET_LINK_LIBRARIES(tst_dimsizes netcdf) - TARGET_LINK_LIBRARIES(nctrunc netcdf) + +if(ENABLE_TESTS) + + add_executable(rewrite-scalar rewrite-scalar.c) + add_executable(bom bom.c) + add_executable(tst_dimsizes tst_dimsizes.c) + add_executable(nctrunc nctrunc.c) if(RCMERGE) - TARGET_LINK_LIBRARIES(tst_rcmerge netcdf) - TARGET_LINK_LIBRARIES(tst_rcapi netcdf) + add_executable(tst_rcmerge tst_rcmerge.c) + add_executable(tst_rcmerge tst_rcapi.c) +endif() + target_link_libraries(rewrite-scalar netcdf) + target_link_libraries(bom netcdf) + target_link_libraries(tst_dimsizes netcdf) + target_link_libraries(nctrunc netcdf) +if(RCMERGE) + target_link_libraries(tst_rcmerge netcdf) + target_link_libraries(tst_rcapi netcdf) endif() IF(USE_HDF5) - ADD_EXECUTABLE(tst_fileinfo tst_fileinfo.c) - TARGET_LINK_LIBRARIES(tst_fileinfo netcdf) + add_executable(tst_fileinfo tst_fileinfo.c) + target_link_libraries(tst_fileinfo netcdf) ENDIF() IF(MSVC) - SET_TARGET_PROPERTIES(rewrite-scalar PROPERTIES RUNTIME_OUTPUT_DIRECTORY - ${CMAKE_CURRENT_BINARY_DIR}) - SET_TARGET_PROPERTIES(rewrite-scalar PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG - ${CMAKE_CURRENT_BINARY_DIR}) - SET_TARGET_PROPERTIES(rewrite-scalar PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE - ${CMAKE_CURRENT_BINARY_DIR}) + set_target_properties(rewrite-scalar + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_BINARY_DIR} + RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_BINARY_DIR} + ) - SET_TARGET_PROPERTIES(bom PROPERTIES RUNTIME_OUTPUT_DIRECTORY - ${CMAKE_CURRENT_BINARY_DIR}) - SET_TARGET_PROPERTIES(bom PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG - ${CMAKE_CURRENT_BINARY_DIR}) - SET_TARGET_PROPERTIES(bom PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE - ${CMAKE_CURRENT_BINARY_DIR}) + set_target_properties(bom + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_BINARY_DIR} + RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_BINARY_DIR} + ) - SET_TARGET_PROPERTIES(tst_dimsizes PROPERTIES RUNTIME_OUTPUT_DIRECTORY - ${CMAKE_CURRENT_BINARY_DIR}) - SET_TARGET_PROPERTIES(tst_dimsizes PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG - ${CMAKE_CURRENT_BINARY_DIR}) - SET_TARGET_PROPERTIES(tst_dimsizes PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE - ${CMAKE_CURRENT_BINARY_DIR}) + set_target_properties(tst_dimsizes + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_BINARY_DIR} + RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_BINARY_DIR} + ) - SET_TARGET_PROPERTIES(nctrunc PROPERTIES RUNTIME_OUTPUT_DIRECTORY - ${CMAKE_CURRENT_BINARY_DIR}) - SET_TARGET_PROPERTIES(nctrunc PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG - ${CMAKE_CURRENT_BINARY_DIR}) - SET_TARGET_PROPERTIES(nctrunc PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE - ${CMAKE_CURRENT_BINARY_DIR}) + set_target_properties(nctrunc + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_BINARY_DIR} + RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_BINARY_DIR} + ) - IF(RCMERGE) - SET_TARGET_PROPERTIES(tst_rcmerge PROPERTIES RUNTIME_OUTPUT_DIRECTORY - ${CMAKE_CURRENT_BINARY_DIR}) - SET_TARGET_PROPERTIES(tst_rcmerge PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG - ${CMAKE_CURRENT_BINARY_DIR}) - SET_TARGET_PROPERTIES(tst_rcmerge PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_BINARY_DIR}) - SET_TARGET_PROPERTIES(tst_rcapi PROPERTIES RUNTIME_OUTPUT_DIRECTORY - ${CMAKE_CURRENT_BINARY_DIR}) - SET_TARGET_PROPERTIES(tst_rcapi PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG - ${CMAKE_CURRENT_BINARY_DIR}) - SET_TARGET_PROPERTIES(tst_rcapi PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_BINARY_DIR}) + if(RCMERGE) + set_target_properties(tst_rcmerge + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_BINARY_DIR} + RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_BINARY_DIR} + ) + + set_target_properties(tst_rcapi + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_BINARY_DIR} + RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_BINARY_DIR} + ) endif() - IF(USE_HDF5) - SET_TARGET_PROPERTIES(tst_fileinfo PROPERTIES RUNTIME_OUTPUT_DIRECTORY - ${CMAKE_CURRENT_BINARY_DIR}) - SET_TARGET_PROPERTIES(tst_fileinfo PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG - ${CMAKE_CURRENT_BINARY_DIR}) - SET_TARGET_PROPERTIES(tst_fileinfo PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE - ${CMAKE_CURRENT_BINARY_DIR}) - - ENDIF(USE_HDF5) - ENDIF(MSVC) + if(USE_HDF5) + set_target_properties(tst_fileinfo + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_BINARY_DIR} + RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_BINARY_DIR} + ) + endif(USE_HDF5) + endif(MSVC) # Build support programs build_bin_test_no_prefix(tst_utf8) build_bin_test_no_prefix(tst_fillbug) - IF(USE_HDF5) + if(USE_HDF5) build_bin_test_no_prefix(tst_h_rdc0) build_bin_test_no_prefix(tst_unicode) build_bin_test_no_prefix(tst_vlen_data) @@ -203,14 +205,14 @@ endif() # Add this test by hand, as it is also called from a script. # Editing the script would break autotools compatibility. build_bin_test_no_prefix(tst_special_atts) - ENDIF(USE_HDF5) + endif(USE_HDF5) # Base tests # The tests are set up as a combination of shell scripts and executables that # must be run in a particular order. It is painful but will use macros to help # keep it from being too bad. - IF(HAVE_BASH) + if(HAVE_BASH) ## Start adding tests in the appropriate order add_bin_test_no_prefix(ref_ctest) @@ -235,11 +237,11 @@ endif() add_sh_test(ncdump tst_ctests) add_sh_test(ncdump tst_null_byte_padding) - IF(USE_STRICT_NULL_BYTE_HEADER_PADDING) + if(USE_STRICT_NULL_BYTE_HEADER_PADDING) SET_TESTS_PROPERTIES(ncdump_tst_null_byte_padding PROPERTIES WILL_FAIL TRUE) - ENDIF(USE_STRICT_NULL_BYTE_HEADER_PADDING) + endif(USE_STRICT_NULL_BYTE_HEADER_PADDING) - IF(NOT MSVC AND NOT MINGW) + if(NOT MSVC AND NOT MINGW) add_sh_test(ncdump tst_output) add_sh_test(ncdump tst_nccopy3) # Known failure on MSVC; the number of 0's padding @@ -248,12 +250,12 @@ endif() add_sh_test(ncdump tst_netcdf4) endif() - SET_TESTS_PROPERTIES(ncdump_tst_nccopy3 PROPERTIES DEPENDS + set_tests_properties(ncdump_tst_nccopy3 PROPERTIES DEPENDS "ncdump_tst_calendars;ncdump_run_utf8_tests;ncdump_tst_output;ncdump_tst_64bit;ncdump_run_tests;ncdump_tst_lengths") - ENDIF() + endif() - IF(USE_HDF5) + if(USE_HDF5) add_sh_test(ncdump tst_formatx4) add_sh_test(ncdump_sh tst_fillbug) add_sh_test(ncdump_shell tst_h_scalar) @@ -272,31 +274,31 @@ endif() add_sh_test(ncdump tst_nccopy4) add_sh_test(ncdump tst_calendars_nc4) - SET_TESTS_PROPERTIES(ncdump_tst_nccopy4 PROPERTIES DEPENDS "ncdump_run_ncgen_tests;ncdump_tst_output;ncdump_tst_ncgen4;ncdump_sh_tst_fillbug;ncdump_tst_netcdf4_4;ncdump_tst_h_scalar;tst_comp;tst_comp2;tst_nans;tst_opaque_data;tst_create_files;tst_special_atts") - SET_TESTS_PROPERTIES(ncdump_tst_nccopy5 PROPERTIES DEPENDS "ncdump_tst_nccopy4") + set_tests_properties(ncdump_tst_nccopy4 PROPERTIES DEPENDS "ncdump_run_ncgen_tests;ncdump_tst_output;ncdump_tst_ncgen4;ncdump_sh_tst_fillbug;ncdump_tst_netcdf4_4;ncdump_tst_h_scalar;tst_comp;tst_comp2;tst_nans;tst_opaque_data;tst_create_files;tst_special_atts") + set_tests_properties(ncdump_tst_nccopy5 PROPERTIES DEPENDS "ncdump_tst_nccopy4") - ENDIF(USE_HDF5) + endif(USE_HDF5) # The following test script invokes # gcc directly. - IF(CMAKE_COMPILER_IS_GNUCC OR APPLE) - IF(ENABLE_LARGE_FILE_TESTS) + if(CMAKE_COMPILER_IS_GNUCC OR APPLE) + if(ENABLE_LARGE_FILE_TESTS) add_sh_test(ncdump tst_iter) - ENDIF(ENABLE_LARGE_FILE_TESTS) - ENDIF(CMAKE_COMPILER_IS_GNUCC OR APPLE) + endif(ENABLE_LARGE_FILE_TESTS) + endif(CMAKE_COMPILER_IS_GNUCC OR APPLE) ### # This test fails on Visual Studio builds with bash. # It passes, but technically fails because the scientific # formatting omits a 0. ### - IF(EXTRA_TESTS) - IF(USE_HDF5) - IF(NOT MSVC AND NOT MINGW) + if(EXTRA_TESTS) + if(USE_HDF5) + if(NOT MSVC AND NOT MINGW) add_sh_test(ncdump run_back_comp_tests) - ENDIF() - ENDIF() - ENDIF(EXTRA_TESTS) + endif() + endif() + endif(EXTRA_TESTS) # The unicode tests if(NOT ISMINGW) @@ -304,11 +306,11 @@ endif() add_sh_test(ncdump test_unicode_path) ENDIF() - IF(USE_CDF5) + if(USE_CDF5) add_sh_test(ncdump test_keywords) ENDIF() - IF(USE_HDF5) + if(USE_HDF5) add_sh_test(ncdump test_scope) ENDIF() @@ -316,43 +318,43 @@ endif() add_sh_test(ncdump test_rcmerge) endif() -ENDIF(HAVE_BASH) +endif(HAVE_BASH) -ENDIF(ENABLE_TESTS) +endif(ENABLE_TESTS) #IF(MSVC) -# SET_TARGET_PROPERTIES(ncdump +# set_target_properties(ncdump # PROPERTIES LINK_FLAGS_DEBUG " /NODEFAULTLIB:MSVCRT" # ) -# SET_TARGET_PROPERTIES(nccopy +# set_target_properties(nccopy # PROPERTIES LINK_FLAGS_DEBUG " /NODEFAULTLIB:MSVCRT" # ) -# SET_TARGET_PROPERTIES(ncvalidator +# set_target_properties(ncvalidator # PROPERTIES LINK_FLAGS_DEBUG " /NODEFAULTLIB:MSVCRT" # ) # IF(ENABLE_DAP) -# SET_TARGET_PROPERTIES(ocprint +# set_target_properties(ocprint # PROPERTIES LINK_FLAGS_DEBUG " /NODEFAULTLIB:MSVCRT" # ) # ENDIF(ENABLE_DAP) #ENDIF() -INSTALL(TARGETS ncdump RUNTIME DESTINATION bin COMPONENT utilities) -INSTALL(TARGETS nccopy RUNTIME DESTINATION bin COMPONENT utilities) +install(TARGETS ncdump RUNTIME DESTINATION bin COMPONENT utilities) +install(TARGETS nccopy RUNTIME DESTINATION bin COMPONENT utilities) -SET(MAN_FILES nccopy.1 ncdump.1) +set(MAN_FILES nccopy.1 ncdump.1) # Note, the L512.bin file is file containing exactly 512 bytes each of value 0. # It is used for creating hdf5 files with varying offsets for testing. -FILE(GLOB COPY_FILES ${CMAKE_BINARY_DIR}/ncgen/*.nc ${CMAKE_BINARY_DIR}/nc_test4/*.nc ${CMAKE_CURRENT_SOURCE_DIR}/*.ncml ${CMAKE_CURRENT_SOURCE_DIR}/*.nc ${CMAKE_CURRENT_SOURCE_DIR}/*.cdl ${CMAKE_CURRENT_SOURCE_DIR}/*.sh ${CMAKE_CURRENT_SOURCE_DIR}/*.1 ${CMAKE_CURRENT_SOURCE_DIR}/L512.bin ${CMAKE_CURRENT_SOURCE_DIR}/ref_ctest*.c ) -FILE(COPY ${COPY_FILES} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/ FILE_PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE) +file(GLOB COPY_FILES ${CMAKE_BINARY_DIR}/ncgen/*.nc ${CMAKE_BINARY_DIR}/nc_test4/*.nc ${CMAKE_CURRENT_SOURCE_DIR}/*.ncml ${CMAKE_CURRENT_SOURCE_DIR}/*.nc ${CMAKE_CURRENT_SOURCE_DIR}/*.cdl ${CMAKE_CURRENT_SOURCE_DIR}/*.sh ${CMAKE_CURRENT_SOURCE_DIR}/*.1 ${CMAKE_CURRENT_SOURCE_DIR}/L512.bin ${CMAKE_CURRENT_SOURCE_DIR}/ref_ctest*.c ) +file(COPY ${COPY_FILES} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/ FILE_PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE) -ADD_SUBDIRECTORY(cdl) -ADD_SUBDIRECTORY(expected) +add_subdirectory(cdl) +add_subdirectory(expected) -SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${CLEANFILES}") +set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${CLEANFILES}") -IF(NOT MSVC) - INSTALL(FILES ${MAN_FILES} DESTINATION "share/man/man1" COMPONENT documentation) -ENDIF() +if(NOT MSVC) + install(FILES ${MAN_FILES} DESTINATION "share/man/man1" COMPONENT documentation) +endif() From f849b169fe84a9973340710881bea50b6dd8b166 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Fri, 9 Feb 2024 16:52:39 -0600 Subject: [PATCH 18/74] verbose build --- .github/workflows/run_tests_osx.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/run_tests_osx.yml b/.github/workflows/run_tests_osx.yml index 8f2d9d62a..dd0917e36 100644 --- a/.github/workflows/run_tests_osx.yml +++ b/.github/workflows/run_tests_osx.yml @@ -389,7 +389,7 @@ jobs: shell: bash -l {0} run: | cd build - LD_LIBRARY_PATH=${LD_LIBRARY_PATH} make -j 12 + LD_LIBRARY_PATH=${LD_LIBRARY_PATH} make VERBOSE=1 if: ${{ success() }} - name: Run Tests From 469ddf3825617ca5de89253bf0347a0be05ffe9d Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Fri, 9 Feb 2024 16:58:39 -0600 Subject: [PATCH 19/74] trying to get hdf5 files to be found --- libhdf5/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libhdf5/CMakeLists.txt b/libhdf5/CMakeLists.txt index ea6149a33..6888c0eb7 100644 --- a/libhdf5/CMakeLists.txt +++ b/libhdf5/CMakeLists.txt @@ -28,7 +28,7 @@ if(STATUS_PARALLEL) target_link_libraries(netcdfhdf5 PUBLIC MPI::MPI_C) endif(STATUS_PARALLEL) -target_include_directories(netcdfhdf5 PRIVATE ${HDF5_INCLUDE_DIR}) +target_include_directories(netcdfhdf5 INTERFACE ${HDF5_INCLUDE_DIR}) # Remember to package this file for CMake builds. add_extra_dist(${libnchdf5_SOURCES} CMakeLists.txt) From 2f04d2030b826bd657e3f870470926394107c702 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Tue, 13 Feb 2024 15:57:45 -0600 Subject: [PATCH 20/74] verbose build output --- .github/workflows/run_tests_ubuntu.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/run_tests_ubuntu.yml b/.github/workflows/run_tests_ubuntu.yml index 64b91bb99..854c8bf74 100644 --- a/.github/workflows/run_tests_ubuntu.yml +++ b/.github/workflows/run_tests_ubuntu.yml @@ -356,7 +356,7 @@ jobs: shell: bash -l {0} run: | cd build - LD_LIBRARY_PATH=${LD_LIBRARY_PATH} make -j 12 + LD_LIBRARY_PATH=${LD_LIBRARY_PATH} make VERBOSE=1 if: ${{ success() }} - name: Run Tests From 2b27beab040c214ae03699d9ea51c5dc01bb566e Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Tue, 13 Feb 2024 16:07:21 -0600 Subject: [PATCH 21/74] printing include path --- libhdf5/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/libhdf5/CMakeLists.txt b/libhdf5/CMakeLists.txt index 6888c0eb7..167025684 100644 --- a/libhdf5/CMakeLists.txt +++ b/libhdf5/CMakeLists.txt @@ -28,6 +28,7 @@ if(STATUS_PARALLEL) target_link_libraries(netcdfhdf5 PUBLIC MPI::MPI_C) endif(STATUS_PARALLEL) +message(STATUS "HDF5 INCLUDE FOR KYLE: ${HDF5_INCLUDE_DIR}") target_include_directories(netcdfhdf5 INTERFACE ${HDF5_INCLUDE_DIR}) # Remember to package this file for CMake builds. From e8cfe37cbf40089747ee7fab61c206da2e499a24 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Tue, 13 Feb 2024 16:17:26 -0600 Subject: [PATCH 22/74] maybe it needs to be private? --- libhdf5/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libhdf5/CMakeLists.txt b/libhdf5/CMakeLists.txt index 167025684..40b122126 100644 --- a/libhdf5/CMakeLists.txt +++ b/libhdf5/CMakeLists.txt @@ -29,7 +29,7 @@ if(STATUS_PARALLEL) endif(STATUS_PARALLEL) message(STATUS "HDF5 INCLUDE FOR KYLE: ${HDF5_INCLUDE_DIR}") -target_include_directories(netcdfhdf5 INTERFACE ${HDF5_INCLUDE_DIR}) +target_include_directories(netcdfhdf5 PRIVATE ${HDF5_INCLUDE_DIR}) # Remember to package this file for CMake builds. add_extra_dist(${libnchdf5_SOURCES} CMakeLists.txt) From db805e5388a7925d01197e7a9afac68478b1d166 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Tue, 13 Feb 2024 16:28:49 -0600 Subject: [PATCH 23/74] pic? --- CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index b6a85a490..3821699e2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,6 +41,9 @@ endif () add_library(netcdf) add_library(netCDF::netcdf ALIAS netcdf) +set_target_properties(netcdf PROPERTIES + POSITION_INDEPENDENT_CODE ON +) ##### # Version Info: From d7e26cad6b111b0b6d56475d73897bd98ca414f2 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Tue, 13 Feb 2024 16:33:20 -0600 Subject: [PATCH 24/74] there has to be a better way to debug this --- libhdf5/CMakeLists.txt | 1 - ncdump/CMakeLists.txt | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/libhdf5/CMakeLists.txt b/libhdf5/CMakeLists.txt index 40b122126..ea6149a33 100644 --- a/libhdf5/CMakeLists.txt +++ b/libhdf5/CMakeLists.txt @@ -28,7 +28,6 @@ if(STATUS_PARALLEL) target_link_libraries(netcdfhdf5 PUBLIC MPI::MPI_C) endif(STATUS_PARALLEL) -message(STATUS "HDF5 INCLUDE FOR KYLE: ${HDF5_INCLUDE_DIR}") target_include_directories(netcdfhdf5 PRIVATE ${HDF5_INCLUDE_DIR}) # Remember to package this file for CMake builds. diff --git a/ncdump/CMakeLists.txt b/ncdump/CMakeLists.txt index c723d29e4..0c4817e4d 100644 --- a/ncdump/CMakeLists.txt +++ b/ncdump/CMakeLists.txt @@ -53,6 +53,7 @@ if(ENABLE_DAP) add_executable(ocprint ${ocprint_FILES}) endif(ENABLE_DAP) +message(STATUS "ALL_TLL_LIBS INCLUDE FOR KYLE: ${ALL_TLL_LIBS}") target_link_libraries(ncdump netcdf ${ALL_TLL_LIBS}) target_link_libraries(nccopy netcdf ${ALL_TLL_LIBS}) target_link_libraries(ncvalidator netcdf ${ALL_TLL_LIBS}) From e818f93a48dedc20d80be0dd123602354b169d73 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Tue, 13 Feb 2024 16:50:19 -0600 Subject: [PATCH 25/74] maybe public will work? --- libhdf5/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libhdf5/CMakeLists.txt b/libhdf5/CMakeLists.txt index ea6149a33..d018f4abf 100644 --- a/libhdf5/CMakeLists.txt +++ b/libhdf5/CMakeLists.txt @@ -28,7 +28,7 @@ if(STATUS_PARALLEL) target_link_libraries(netcdfhdf5 PUBLIC MPI::MPI_C) endif(STATUS_PARALLEL) -target_include_directories(netcdfhdf5 PRIVATE ${HDF5_INCLUDE_DIR}) +target_include_directories(netcdfhdf5 PUBLIC ${HDF5_INCLUDE_DIR}) # Remember to package this file for CMake builds. add_extra_dist(${libnchdf5_SOURCES} CMakeLists.txt) From 5eaa72cf3582d92636736346c0ab0d44ac33a047 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Wed, 14 Feb 2024 10:14:30 -0600 Subject: [PATCH 26/74] trying to link to hdf5 --- ncdump/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/ncdump/CMakeLists.txt b/ncdump/CMakeLists.txt index 0c4817e4d..86e637f37 100644 --- a/ncdump/CMakeLists.txt +++ b/ncdump/CMakeLists.txt @@ -64,6 +64,7 @@ if(USE_HDF5) target_link_libraries(nc4print netcdf ${ALL_TLL_LIBS}) target_link_libraries(printfqn netcdf ${ALL_TLL_LIBS}) target_link_libraries(nchdf5version netcdf ${ALL_TLL_LIBS}) + target_include_directories(ncdump PRIVATE ${HDF5_INCLUDE_DIR}) endif(USE_HDF5) if(ENABLE_DAP) From 5cc35dee1c31ac03999e14384083dccc547fbc8d Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Wed, 14 Feb 2024 10:24:25 -0600 Subject: [PATCH 27/74] maybe it's this one? --- ncdump/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ncdump/CMakeLists.txt b/ncdump/CMakeLists.txt index 86e637f37..8c37875ef 100644 --- a/ncdump/CMakeLists.txt +++ b/ncdump/CMakeLists.txt @@ -47,6 +47,7 @@ if(USE_HDF5) add_executable(nc4print nc4print.c nc4printer.c) add_executable(printfqn ${printfqn_FILES}) add_executable(nchdf5version ${nchdf5version_FILES}) + target_include_directories(nchdf5version PRIVATE ${HDF5_INCLUDE_DIR}) endif(USE_HDF5) if(ENABLE_DAP) @@ -64,7 +65,6 @@ if(USE_HDF5) target_link_libraries(nc4print netcdf ${ALL_TLL_LIBS}) target_link_libraries(printfqn netcdf ${ALL_TLL_LIBS}) target_link_libraries(nchdf5version netcdf ${ALL_TLL_LIBS}) - target_include_directories(ncdump PRIVATE ${HDF5_INCLUDE_DIR}) endif(USE_HDF5) if(ENABLE_DAP) From 0a01ea62dd0c0bd0be032199f3f43e19630edc4b Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Wed, 14 Feb 2024 10:28:31 -0600 Subject: [PATCH 28/74] por que no los dos --- ncdump/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/ncdump/CMakeLists.txt b/ncdump/CMakeLists.txt index 8c37875ef..b4a3e6c58 100644 --- a/ncdump/CMakeLists.txt +++ b/ncdump/CMakeLists.txt @@ -65,6 +65,7 @@ if(USE_HDF5) target_link_libraries(nc4print netcdf ${ALL_TLL_LIBS}) target_link_libraries(printfqn netcdf ${ALL_TLL_LIBS}) target_link_libraries(nchdf5version netcdf ${ALL_TLL_LIBS}) + target_include_directories(ncdump PRIVATE ${HDF5_INCLUDE_DIR}) endif(USE_HDF5) if(ENABLE_DAP) From 12120235b22bc364cdff83594ec1b3bb4fabc138 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Wed, 14 Feb 2024 10:40:53 -0600 Subject: [PATCH 29/74] making netcdf link publicly to hdf5 includd directoriess --- liblib/CMakeLists.txt | 1 + ncdump/CMakeLists.txt | 2 -- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/liblib/CMakeLists.txt b/liblib/CMakeLists.txt index 2adbb4f9b..e56e788ce 100644 --- a/liblib/CMakeLists.txt +++ b/liblib/CMakeLists.txt @@ -26,6 +26,7 @@ if(USE_HDF5) PRIVATE $ ) + target_include_directories(netcdf PUBLIC ${HDF5_INCLUDE_DIR}) endif() if(USE_PNETCDF) diff --git a/ncdump/CMakeLists.txt b/ncdump/CMakeLists.txt index b4a3e6c58..0c4817e4d 100644 --- a/ncdump/CMakeLists.txt +++ b/ncdump/CMakeLists.txt @@ -47,7 +47,6 @@ if(USE_HDF5) add_executable(nc4print nc4print.c nc4printer.c) add_executable(printfqn ${printfqn_FILES}) add_executable(nchdf5version ${nchdf5version_FILES}) - target_include_directories(nchdf5version PRIVATE ${HDF5_INCLUDE_DIR}) endif(USE_HDF5) if(ENABLE_DAP) @@ -65,7 +64,6 @@ if(USE_HDF5) target_link_libraries(nc4print netcdf ${ALL_TLL_LIBS}) target_link_libraries(printfqn netcdf ${ALL_TLL_LIBS}) target_link_libraries(nchdf5version netcdf ${ALL_TLL_LIBS}) - target_include_directories(ncdump PRIVATE ${HDF5_INCLUDE_DIR}) endif(USE_HDF5) if(ENABLE_DAP) From f3ef19330f9a27003d1f8f04286ac6366459f895 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Wed, 14 Feb 2024 10:44:09 -0600 Subject: [PATCH 30/74] setting build interface include --- liblib/CMakeLists.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/liblib/CMakeLists.txt b/liblib/CMakeLists.txt index e56e788ce..355b563c5 100644 --- a/liblib/CMakeLists.txt +++ b/liblib/CMakeLists.txt @@ -26,7 +26,10 @@ if(USE_HDF5) PRIVATE $ ) - target_include_directories(netcdf PUBLIC ${HDF5_INCLUDE_DIR}) + target_include_directories(netcdf + PUBLIC + $ + ) endif() if(USE_PNETCDF) From a0931fe06aeae0f2ceb3c4c4f0ef30ab7200b8fa Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Thu, 15 Feb 2024 16:33:16 -0600 Subject: [PATCH 31/74] trying a different thing --- cmake/dependencies.cmake | 2 +- liblib/CMakeLists.txt | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake index fb7adb6f5..02daca93e 100644 --- a/cmake/dependencies.cmake +++ b/cmake/dependencies.cmake @@ -124,7 +124,7 @@ if(USE_HDF5) set(HDF5_C_LIBRARY_hdf5 ${HDF5_C_LIBRARY} ) set(HDF5_HL_LIBRARIES ${HDF5_HL_LIBRARY} ) target_include_directories(netcdf - PRIVATE + PUBLIC ${HDF5_INCLUDE_DIR} ) message(STATUS "Using HDF5 C Library: ${HDF5_C_LIBRARY}") diff --git a/liblib/CMakeLists.txt b/liblib/CMakeLists.txt index 355b563c5..2adbb4f9b 100644 --- a/liblib/CMakeLists.txt +++ b/liblib/CMakeLists.txt @@ -26,10 +26,6 @@ if(USE_HDF5) PRIVATE $ ) - target_include_directories(netcdf - PUBLIC - $ - ) endif() if(USE_PNETCDF) From e9cc0794a963b2cfb4b700460b6e44383cdb918b Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Thu, 15 Feb 2024 16:40:41 -0600 Subject: [PATCH 32/74] or perhaps it's this one --- cmake/dependencies.cmake | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake index 02daca93e..1bdbc0178 100644 --- a/cmake/dependencies.cmake +++ b/cmake/dependencies.cmake @@ -243,7 +243,7 @@ if(USE_HDF5) endif() message(STATUS "Using HDF5 include dir: ${HDF5_INCLUDE_DIR}") target_include_directories(netcdf - PRIVATE + PUBLIC ${HDF5_INCLUDE_DIR} ) @@ -415,14 +415,14 @@ if(USE_HDF5) message(FATAL_ERROR "Compiling a test with hdf5 failed. Either hdf5.h cannot be found, or the log messages should be checked for another reason.") else(NOT HAVE_HDF5_H) target_include_directories(netcdf - PRIVATE + PUBLIC ${HAVE_HDF5_H} ) endif(NOT HAVE_HDF5_H) #option to include HDF5 High Level header file (hdf5_hl.h) in case we are not doing a make install target_include_directories(netcdf - PRIVATE + PUBLIC ${HDF5_HL_INCLUDE_DIR} ) From 53887b22952042816d001567b2c85ab800ac99bb Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Thu, 15 Feb 2024 16:51:38 -0600 Subject: [PATCH 33/74] and now this --- cmake/dependencies.cmake | 8 ++++---- ncdump/CMakeLists.txt | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake index 1bdbc0178..fb7adb6f5 100644 --- a/cmake/dependencies.cmake +++ b/cmake/dependencies.cmake @@ -124,7 +124,7 @@ if(USE_HDF5) set(HDF5_C_LIBRARY_hdf5 ${HDF5_C_LIBRARY} ) set(HDF5_HL_LIBRARIES ${HDF5_HL_LIBRARY} ) target_include_directories(netcdf - PUBLIC + PRIVATE ${HDF5_INCLUDE_DIR} ) message(STATUS "Using HDF5 C Library: ${HDF5_C_LIBRARY}") @@ -243,7 +243,7 @@ if(USE_HDF5) endif() message(STATUS "Using HDF5 include dir: ${HDF5_INCLUDE_DIR}") target_include_directories(netcdf - PUBLIC + PRIVATE ${HDF5_INCLUDE_DIR} ) @@ -415,14 +415,14 @@ if(USE_HDF5) message(FATAL_ERROR "Compiling a test with hdf5 failed. Either hdf5.h cannot be found, or the log messages should be checked for another reason.") else(NOT HAVE_HDF5_H) target_include_directories(netcdf - PUBLIC + PRIVATE ${HAVE_HDF5_H} ) endif(NOT HAVE_HDF5_H) #option to include HDF5 High Level header file (hdf5_hl.h) in case we are not doing a make install target_include_directories(netcdf - PUBLIC + PRIVATE ${HDF5_HL_INCLUDE_DIR} ) diff --git a/ncdump/CMakeLists.txt b/ncdump/CMakeLists.txt index 0c4817e4d..86e637f37 100644 --- a/ncdump/CMakeLists.txt +++ b/ncdump/CMakeLists.txt @@ -64,6 +64,7 @@ if(USE_HDF5) target_link_libraries(nc4print netcdf ${ALL_TLL_LIBS}) target_link_libraries(printfqn netcdf ${ALL_TLL_LIBS}) target_link_libraries(nchdf5version netcdf ${ALL_TLL_LIBS}) + target_include_directories(ncdump PRIVATE ${HDF5_INCLUDE_DIR}) endif(USE_HDF5) if(ENABLE_DAP) From 257b27afd172c44738bd183ee997a74de8da3505 Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Thu, 18 Jan 2024 14:12:55 +0000 Subject: [PATCH 34/74] CMake: Remove unused `add_definitions` --- cmake/dependencies.cmake | 2 -- 1 file changed, 2 deletions(-) diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake index fb7adb6f5..98eadef47 100644 --- a/cmake/dependencies.cmake +++ b/cmake/dependencies.cmake @@ -166,11 +166,9 @@ if(USE_HDF5) if(NC_FIND_SHARED_LIBS) set(NC_HDF5_LINK_TYPE "shared") set(NC_HDF5_LINK_TYPE_UPPER "SHARED") - ADD_DEFINITIONS(-DH5_BUILT_AS_DYNAMIC_LIB) else(NC_FIND_SHARED_LIBS) set(NC_HDF5_LINK_TYPE "static") set(NC_HDF5_LINK_TYPE_UPPER "STATIC") - ADD_DEFINITIONS(-DH5_BUILT_AS_STATIC_LIB ) endif(NC_FIND_SHARED_LIBS) ##### From ef001e3cfd928a3946932f201f7efcf10a04b5a6 Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Thu, 18 Jan 2024 14:34:30 +0000 Subject: [PATCH 35/74] CMake: Use built-in `FindHDF5` module to find HDF5 Set the required version so that the module deals with working out the version for us --- cmake/dependencies.cmake | 65 ++-------------------------------------- 1 file changed, 3 insertions(+), 62 deletions(-) diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake index 98eadef47..5fbd1cf91 100644 --- a/cmake/dependencies.cmake +++ b/cmake/dependencies.cmake @@ -164,74 +164,15 @@ if(USE_HDF5) # by explicitly modifying NC_FIND_SHARED_LIBS. ## if(NC_FIND_SHARED_LIBS) - set(NC_HDF5_LINK_TYPE "shared") - set(NC_HDF5_LINK_TYPE_UPPER "SHARED") + set(HDF5_USE_STATIC_LIBRARIES OFF) else(NC_FIND_SHARED_LIBS) - set(NC_HDF5_LINK_TYPE "static") - set(NC_HDF5_LINK_TYPE_UPPER "STATIC") + set(HDF5_USE_STATIC_LIBRARIES ON) endif(NC_FIND_SHARED_LIBS) ##### # First, find the C and HL libraries. - # - # This has been updated to reflect what is in the hdf5 - # examples, even though the previous version of what we - # had worked. ##### - if(MSVC) - set(SEARCH_PACKAGE_NAME ${HDF5_PACKAGE_NAME}) - find_package(HDF5 NAMES ${SEARCH_PACKAGE_NAME} COMPONENTS C HL CONFIG REQUIRED ${NC_HDF5_LINK_TYPE}) - else(MSVC) - find_package(HDF5 COMPONENTS C HL REQUIRED) - endif(MSVC) - - ## - # Next, check the HDF5 version. This will inform which - # HDF5 variables we need to munge. - ## - - # Some versions of HDF5 set HDF5_VERSION_STRING instead of HDF5_VERSION - if(HDF5_VERSION_STRING AND NOT HDF5_VERSION) - set(HDF5_VERSION ${HDF5_VERSION_STRING}) - endif() - - - ### - # If HDF5_VERSION is undefined, attempt to determine it programatically. - ### - if("${HDF5_VERSION}" STREQUAL "") - message(STATUS "HDF5_VERSION not detected. Attempting to determine programatically.") - IF (EXISTS "${HDF5_INCLUDE_DIR}/H5pubconf.h") - file(READ "${HDF5_INCLUDE_DIR}/H5pubconf.h" _hdf5_version_lines - REGEX "#define[ \t]+H5_VERSION") - string(REGEX REPLACE ".*H5_VERSION .*\"\(.*\)\".*" "\\1" _hdf5_version "${_hdf5_version_lines}") - set(HDF5_VERSION "${_hdf5_version}" CACHE STRING "") - unset(_hdf5_version) - unset(_hdf5_version_lines) - message(STATUS "Found HDF5 libraries version ${HDF5_VERSION}") - endif() - else() - set(HDF5_VERSION ${HDF5_VERSION} CACHE STRING "") - endif() - - ### - # If HDF5_VERSION is still empty, we have a problem. - # Error out. - ### - if("${HDF5_VERSION}" STREQUAL "") - message(FATAL_ERR "Unable to determine HDF5 version. NetCDF requires at least version ${HDF5_VERSION_REQUIRED}. Please ensure that libhdf5 is installed and accessible.") - endif() - - ### - # Now that we know HDF5_VERSION isn't empty, we can check for minimum required version, - # and toggle various options. - ### - - if(${HDF5_VERSION} VERSION_LESS ${HDF5_VERSION_REQUIRED}) - message(FATAL_ERROR "netCDF requires at least HDF5 ${HDF5_VERSION_REQUIRED}. Found ${HDF5_VERSION}.") - endif() - - + find_package(HDF5 ${HDF5_VERSION_REQUIRED} COMPONENTS C HL REQUIRED) ## # Include the HDF5 include directory. From 9e993a06cdd13aa0748056a115ca21879d9726d7 Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Thu, 18 Jan 2024 14:35:19 +0000 Subject: [PATCH 36/74] CMake: Remove duplicated checks for HDF5 header This *must* have been found by call to `find_package` earlier --- cmake/dependencies.cmake | 24 +++++------------------- 1 file changed, 5 insertions(+), 19 deletions(-) diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake index 5fbd1cf91..5e9566e17 100644 --- a/cmake/dependencies.cmake +++ b/cmake/dependencies.cmake @@ -248,16 +248,6 @@ if(USE_HDF5) set(HDF5_C_LIBRARY_hdf5 "${HDF5_C_LIBRARY}" ) endif() - find_path(HAVE_HDF5_H hdf5.h PATHS ${HDF5_INCLUDE_DIR} NO_DEFAULT_PATH) - if(NOT HAVE_HDF5_H) - message(FATAL_ERROR "Compiling a test with hdf5 failed. Either hdf5.h cannot be found, or the log messages should be checked for another reason.") - else(NOT HAVE_HDF5_H) - target_include_directories(netcdf - PRIVATE - ${HAVE_HDF5_H} - ) - endif(NOT HAVE_HDF5_H) - include(cmake/check_hdf5.cmake) # Check to ensure that HDF5 was built with zlib. @@ -349,15 +339,11 @@ if(USE_HDF5) set(HAS_PAR_FILTERS no CACHE STRING "" ) endif() - find_path(HAVE_HDF5_H hdf5.h PATHS ${HDF5_INCLUDE_DIR} NO_DEFAULT_PATH) - if(NOT HAVE_HDF5_H) - message(FATAL_ERROR "Compiling a test with hdf5 failed. Either hdf5.h cannot be found, or the log messages should be checked for another reason.") - else(NOT HAVE_HDF5_H) - target_include_directories(netcdf - PRIVATE - ${HAVE_HDF5_H} - ) - endif(NOT HAVE_HDF5_H) + set(HAVE_HDF5_H ${HDF5_C_INCLUDE_DIR}) + target_include_directories(netcdf + PRIVATE + ${HAVE_HDF5_H} + ) #option to include HDF5 High Level header file (hdf5_hl.h) in case we are not doing a make install target_include_directories(netcdf From 37b5c619f92412f782d5ff3b0f077df4188c5171 Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Thu, 18 Jan 2024 14:36:07 +0000 Subject: [PATCH 37/74] CMake: Don't repeat check for HDF5 parallel feature from `FindHDF5` --- cmake/dependencies.cmake | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake index 5e9566e17..759353509 100644 --- a/cmake/dependencies.cmake +++ b/cmake/dependencies.cmake @@ -290,20 +290,7 @@ if(USE_HDF5) message("-- HDF5_UTF8_PATHS (HDF5 version 1.10.6+): ${HDF5_UTF8_PATHS}") # Find out if HDF5 was built with parallel support. - # Do that by checking for the targets H5Pget_fapl_mpiposx and - # H5Pget_fapl_mpio in ${HDF5_LIB}. - - # H5Pset_fapl_mpiposix and H5Pget_fapl_mpiposix have been removed since HDF5 1.8.12. - # Use H5Pset_fapl_mpio and H5Pget_fapl_mpio, instead. - # CHECK_LIBRARY_EXISTS(${HDF5_C_LIBRARY_hdf5} H5Pget_fapl_mpiposix "" HDF5_IS_PARALLEL_MPIPOSIX) - - CHECK_LIBRARY_EXISTS(${HDF5_C_LIBRARY_hdf5} H5Pget_fapl_mpio "" HDF5_IS_PARALLEL_MPIO) - if(HDF5_IS_PARALLEL_MPIO) - set(HDF5_PARALLEL ON) - else() - set(HDF5_PARALLEL OFF) - endif() - set(HDF5_PARALLEL ${HDF5_PARALLEL} ) + set(HDF5_PARALLEL ${HDF5_IS_PARALLEL}) #Check to see if HDF5 library has collective metadata APIs, (HDF5 >= 1.10.0) CHECK_LIBRARY_EXISTS(${HDF5_C_LIBRARY_hdf5} H5Pset_all_coll_metadata_ops "" HDF5_HAS_COLL_METADATA_OPS) From eee6380dd38571b8b643b2b94b183e1820479e3c Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Thu, 18 Jan 2024 14:36:35 +0000 Subject: [PATCH 38/74] CMake: Remove unused variable --- cmake/dependencies.cmake | 6 ------ 1 file changed, 6 deletions(-) diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake index 759353509..44193c24c 100644 --- a/cmake/dependencies.cmake +++ b/cmake/dependencies.cmake @@ -295,12 +295,6 @@ if(USE_HDF5) #Check to see if HDF5 library has collective metadata APIs, (HDF5 >= 1.10.0) CHECK_LIBRARY_EXISTS(${HDF5_C_LIBRARY_hdf5} H5Pset_all_coll_metadata_ops "" HDF5_HAS_COLL_METADATA_OPS) - if(HDF5_PARALLEL) - set(HDF5_CC h5pcc ) - else() - set(HDF5_CC h5cc ) - endif() - # Check to see if H5Dread_chunk is available CHECK_LIBRARY_EXISTS(${HDF5_C_LIBRARY_hdf5} H5Dread_chunk "" HAS_READCHUNKS) From 638cdb3a662dd930c3ee677414c4095ec1d061d4 Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Fri, 16 Feb 2024 09:25:13 +0000 Subject: [PATCH 39/74] CMake: Lowercase some functions --- cmake/dependencies.cmake | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake index 44193c24c..bf523cf68 100644 --- a/cmake/dependencies.cmake +++ b/cmake/dependencies.cmake @@ -293,13 +293,13 @@ if(USE_HDF5) set(HDF5_PARALLEL ${HDF5_IS_PARALLEL}) #Check to see if HDF5 library has collective metadata APIs, (HDF5 >= 1.10.0) - CHECK_LIBRARY_EXISTS(${HDF5_C_LIBRARY_hdf5} H5Pset_all_coll_metadata_ops "" HDF5_HAS_COLL_METADATA_OPS) + check_library_exists(${HDF5_C_LIBRARY_hdf5} H5Pset_all_coll_metadata_ops "" HDF5_HAS_COLL_METADATA_OPS) # Check to see if H5Dread_chunk is available - CHECK_LIBRARY_EXISTS(${HDF5_C_LIBRARY_hdf5} H5Dread_chunk "" HAS_READCHUNKS) + check_library_exists(${HDF5_C_LIBRARY_hdf5} H5Dread_chunk "" HAS_READCHUNKS) # Check to see if H5Pset_fapl_ros3 is available - CHECK_LIBRARY_EXISTS(${HDF5_C_LIBRARY_hdf5} H5Pset_fapl_ros3 "" HAS_HDF5_ROS3) + check_library_exists(${HDF5_C_LIBRARY_hdf5} H5Pset_fapl_ros3 "" HAS_HDF5_ROS3) # Check to see if this is hdf5-1.10.3 or later. if(HAS_READCHUNKS) From 9bbdd4cd7bf8691606aeb85f2b98db85f2bef4a8 Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Fri, 16 Feb 2024 09:57:45 +0000 Subject: [PATCH 40/74] Replace use of `HAVE_HDF5_H` feature macro with `USE_HDF5` --- cmake/dependencies.cmake | 9 +-------- config.h.cmake.in | 6 ------ nc_test4/test_filter_vlen.c | 2 +- nc_test4/tst_filter_vlen.c | 2 +- nczarr_test/ncdumpchunks.c | 2 +- nczarr_test/test_chunkcases.c | 5 ----- nczarr_test/test_unlim_io.c | 5 ----- nczarr_test/test_utils.c | 2 +- nczarr_test/testfilter.c | 5 ----- nczarr_test/testfilter_misc.c | 2 +- nczarr_test/testfilter_multi.c | 2 +- 11 files changed, 7 insertions(+), 35 deletions(-) diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake index bf523cf68..6f879dfb1 100644 --- a/cmake/dependencies.cmake +++ b/cmake/dependencies.cmake @@ -320,16 +320,9 @@ if(USE_HDF5) set(HAS_PAR_FILTERS no CACHE STRING "" ) endif() - set(HAVE_HDF5_H ${HDF5_C_INCLUDE_DIR}) target_include_directories(netcdf PRIVATE - ${HAVE_HDF5_H} - ) - - #option to include HDF5 High Level header file (hdf5_hl.h) in case we are not doing a make install - target_include_directories(netcdf - PRIVATE - ${HDF5_HL_INCLUDE_DIR} + ${HDF5_INCLUDE_DIRS} ) endif(USE_HDF5) diff --git a/config.h.cmake.in b/config.h.cmake.in index f10a3a91a..d218a1533 100644 --- a/config.h.cmake.in +++ b/config.h.cmake.in @@ -283,12 +283,6 @@ are set when opening a binary file on Windows. */ /* Define to 1 if you have libsz */ #cmakedefine HAVE_SZ 1 -/* Define to 1 if you have the header file. */ -#cmakedefine HAVE_HDF5_H 1 - -/* Define to 1 if you have the header file. */ -#cmakedefine HAVE_HDF5_HL_H 1 - /* Define to 1 if the system has the type `int64'. */ #cmakedefine HAVE_INT64 1 diff --git a/nc_test4/test_filter_vlen.c b/nc_test4/test_filter_vlen.c index 827087bb5..b5639bc37 100644 --- a/nc_test4/test_filter_vlen.c +++ b/nc_test4/test_filter_vlen.c @@ -8,7 +8,7 @@ #include #include -#ifdef HAVE_HDF5_H +#ifdef USE_HDF5 #include #endif #include "netcdf.h" diff --git a/nc_test4/tst_filter_vlen.c b/nc_test4/tst_filter_vlen.c index 677541b1c..3756b3a2e 100644 --- a/nc_test4/tst_filter_vlen.c +++ b/nc_test4/tst_filter_vlen.c @@ -8,7 +8,7 @@ #include #include -#ifdef HAVE_HDF5_H +#ifdef USE_HDF5 #include #endif #include "netcdf.h" diff --git a/nczarr_test/ncdumpchunks.c b/nczarr_test/ncdumpchunks.c index 17bcc76c2..e4da59f1d 100644 --- a/nczarr_test/ncdumpchunks.c +++ b/nczarr_test/ncdumpchunks.c @@ -23,7 +23,7 @@ #include "ncpathmgr.h" #include "nclog.h" -#ifdef HAVE_HDF5_H +#ifdef USE_HDF5 #include #include #endif diff --git a/nczarr_test/test_chunkcases.c b/nczarr_test/test_chunkcases.c index 91774c939..7241a8cf3 100644 --- a/nczarr_test/test_chunkcases.c +++ b/nczarr_test/test_chunkcases.c @@ -8,11 +8,6 @@ #include "ncpathmgr.h" #include "nclist.h" -#ifdef HAVE_HDF5_H -#include -#include -#endif - #ifdef ENABLE_NCZARR #include "zincludes.h" #endif diff --git a/nczarr_test/test_unlim_io.c b/nczarr_test/test_unlim_io.c index 15f10723a..ed78c6a48 100644 --- a/nczarr_test/test_unlim_io.c +++ b/nczarr_test/test_unlim_io.c @@ -9,11 +9,6 @@ #include "ncpathmgr.h" #include "nclist.h" -#ifdef HAVE_HDF5_H -#include -#include -#endif - #ifdef ENABLE_NCZARR #include "zincludes.h" #endif diff --git a/nczarr_test/test_utils.c b/nczarr_test/test_utils.c index d13b88018..224d0e788 100644 --- a/nczarr_test/test_utils.c +++ b/nczarr_test/test_utils.c @@ -18,7 +18,7 @@ #include "XGetopt.h" #endif -#ifdef HAVE_HDF5_H +#ifdef USE_HDF5 #include #include #endif diff --git a/nczarr_test/testfilter.c b/nczarr_test/testfilter.c index ee599a054..cc5fb07ab 100644 --- a/nczarr_test/testfilter.c +++ b/nczarr_test/testfilter.c @@ -38,15 +38,10 @@ data: \endcode */ -#include "config.h" #include #include #include -#ifdef HAVE_HDF5_H -#include -#endif - #include "netcdf.h" /* The HDF assigned id for bzip compression */ diff --git a/nczarr_test/testfilter_misc.c b/nczarr_test/testfilter_misc.c index b54c9864f..6de3682a6 100644 --- a/nczarr_test/testfilter_misc.c +++ b/nczarr_test/testfilter_misc.c @@ -8,7 +8,7 @@ #include #include -#ifdef HAVE_HDF5_H +#ifdef USE_HDF5 #include #endif diff --git a/nczarr_test/testfilter_multi.c b/nczarr_test/testfilter_multi.c index 3f1e8d726..bf756c553 100644 --- a/nczarr_test/testfilter_multi.c +++ b/nczarr_test/testfilter_multi.c @@ -12,7 +12,7 @@ Test support for multiple filters per variable #include #include -#ifdef HAVE_HDF5_H +#ifdef USE_HDF5 #include #endif From 18bd56d94bd90294e9e0f678c1413807bde5303f Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Fri, 16 Feb 2024 10:27:30 +0000 Subject: [PATCH 41/74] CMake: Rely on CMake-bundled `FindHDF5` --- cmake/dependencies.cmake | 168 +++++++-------------------------------- 1 file changed, 29 insertions(+), 139 deletions(-) diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake index 6f879dfb1..9a860bb78 100644 --- a/cmake/dependencies.cmake +++ b/cmake/dependencies.cmake @@ -109,152 +109,39 @@ if(USE_HDF5) ## set(HDF5_VERSION_REQUIRED 1.8.10) - + ### + # For now we assume that if we are building netcdf + # as a shared library, we will use hdf5 as a shared + # library. If we are building netcdf statically, + # we will use a static library. This can be toggled + # by explicitly modifying NC_FIND_SHARED_LIBS. ## - # Accommodate developers who have hdf5 libraries and - # headers on their system, but do not have a the hdf - # .cmake files. If this is the case, they should - # specify HDF5_HL_LIBRARY, HDF5_LIBRARY, HDF5_INCLUDE_DIR manually. - # - # This script will attempt to determine the version of the HDF5 library programatically. - ## - if(HDF5_C_LIBRARY AND HDF5_HL_LIBRARY AND HDF5_INCLUDE_DIR) - set(HDF5_LIBRARIES ${HDF5_C_LIBRARY} ${HDF5_HL_LIBRARY} ) - set(HDF5_C_LIBRARIES ${HDF5_C_LIBRARY} ) - set(HDF5_C_LIBRARY_hdf5 ${HDF5_C_LIBRARY} ) - set(HDF5_HL_LIBRARIES ${HDF5_HL_LIBRARY} ) - target_include_directories(netcdf - PRIVATE - ${HDF5_INCLUDE_DIR} - ) - message(STATUS "Using HDF5 C Library: ${HDF5_C_LIBRARY}") - message(STATUS "Using HDF5 HL LIbrary: ${HDF5_HL_LIBRARY}") - if (EXISTS "${HDF5_INCLUDE_DIR}/H5pubconf.h") - file(READ "${HDF5_INCLUDE_DIR}/H5pubconf.h" _hdf5_version_lines - REGEX "#define[ \t]+H5_VERSION") - string(REGEX REPLACE ".*H5_VERSION .*\"\(.*\)\".*" "\\1" _hdf5_version "${_hdf5_version_lines}") - set(HDF5_VERSION "${_hdf5_version}" CACHE STRING "") - set(HDF5_VERSION ${HDF5_VERSION} PARENT_SCOPE) - unset(_hdf5_version) - unset(_hdf5_version_lines) - endif () - message(STATUS "Found HDF5 libraries version ${HDF5_VERSION}") - ### - # If HDF5_VERSION is still empty, we have a problem. - # Error out. - ### - if("${HDF5_VERSION}" STREQUAL "") - message(FATAL_ERR "Unable to determine HDF5 version. NetCDF requires at least version ${HDF5_VERSION_REQUIRED}. Please ensure that libhdf5 is installed and accessible.") - endif() + if(NC_FIND_SHARED_LIBS) + set(HDF5_USE_STATIC_LIBRARIES OFF) + else(NC_FIND_SHARED_LIBS) + set(HDF5_USE_STATIC_LIBRARIES ON) + endif(NC_FIND_SHARED_LIBS) - ### - # Now that we know HDF5_VERSION isn't empty, we can check for minimum required version, - # and toggle various options. - ### - if(${HDF5_VERSION} VERSION_LESS ${HDF5_VERSION_REQUIRED}) - message(FATAL_ERROR "netCDF requires at least HDF5 ${HDF5_VERSION_REQUIRED}. Found ${HDF5_VERSION}.") - endif() + ##### + # First, find the C and HL libraries. + ##### + find_package(HDF5 ${HDF5_VERSION_REQUIRED} COMPONENTS C HL REQUIRED) - else(HDF5_C_LIBRARY AND HDF5_HL_LIBRARY AND HDF5_INCLUDE_DIR) # We are seeking out HDF5 with Find Package. - ### - # For now we assume that if we are building netcdf - # as a shared library, we will use hdf5 as a shared - # library. If we are building netcdf statically, - # we will use a static library. This can be toggled - # by explicitly modifying NC_FIND_SHARED_LIBS. - ## - if(NC_FIND_SHARED_LIBS) - set(HDF5_USE_STATIC_LIBRARIES OFF) - else(NC_FIND_SHARED_LIBS) - set(HDF5_USE_STATIC_LIBRARIES ON) - endif(NC_FIND_SHARED_LIBS) - - ##### - # First, find the C and HL libraries. - ##### - find_package(HDF5 ${HDF5_VERSION_REQUIRED} COMPONENTS C HL REQUIRED) - - ## - # Include the HDF5 include directory. - ## - if(HDF5_INCLUDE_DIRS AND NOT HDF5_INCLUDE_DIR) - set(HDF5_INCLUDE_DIR ${HDF5_INCLUDE_DIRS} ) - endif() - message(STATUS "Using HDF5 include dir: ${HDF5_INCLUDE_DIR}") - target_include_directories(netcdf - PRIVATE - ${HDF5_INCLUDE_DIR} - ) - - ### - # This is the block where we figure out what the appropriate - # variables are, and we ensure that we end up with - # HDF5_C_LIBRARY, HDF5_HL_LIBRARY and HDF5_LIBRARIES. - ### - if(MSVC) - #### - # Environmental variables in Windows when using MSVC - # are a hot mess between versions. - #### - - ## - # HDF5 1.8.15 defined HDF5_LIBRARIES. - ## - if(${HDF5_VERSION} VERSION_LESS "1.8.16") - set(HDF5_C_LIBRARY hdf5 ) - set(HDF5_C_LIBRARY_hdf5 hdf5 ) - endif(${HDF5_VERSION} VERSION_LESS "1.8.16") - - if(${HDF5_VERSION} VERSION_GREATER "1.8.15") - if(NOT HDF5_LIBRARIES AND HDF5_C_${NC_HDF5_LINK_TYPE_UPPER}_LIBRARY AND HDF5_HL_${NC_HDF5_LINK_TYPE_UPPER}_LIBRARY) - set(HDF5_C_LIBRARY ${HDF5_C_${NC_HDF5_LINK_TYPE_UPPER}_LIBRARY} ) - set(HDF5_C_LIBRARY_hdf5 ${HDF5_C_${NC_HDF5_LINK_TYPE_UPPER}_LIBRARY} ) - set(HDF5_HL_LIBRARY ${HDF5_HL_${NC_HDF5_LINK_TYPE_UPPER}_LIBRARY} ) - - set(HDF5_LIBRARIES ${HDF5_C_${NC_HDF5_LINK_TYPE_UPPER}_LIBRARY} ${HDF5_HL_${NC_HDF5_LINK_TYPE_UPPER}_LIBRARY} ) - endif() - endif(${HDF5_VERSION} VERSION_GREATER "1.8.15") - - else(MSVC) - - # Depending on the install, either HDF5_hdf_library or - # HDF5_C_LIBRARIES may be defined. We must check for either. - if(HDF5_C_LIBRARIES AND NOT HDF5_hdf5_LIBRARY) - set(HDF5_hdf5_LIBRARY ${HDF5_C_LIBRARIES} ) - endif() - - # Some versions of find_package set HDF5_C_LIBRARIES, but not HDF5_C_LIBRARY - # We use HDF5_C_LIBRARY below, so need to make sure it is set. - if(HDF5_C_LIBRARIES AND NOT HDF5_C_LIBRARY) - set(HDF5_C_LIBRARY ${HDF5_C_LIBRARIES} ) - endif() - - # Same issue as above... - if(HDF5_HL_LIBRARIES AND NOT HDF5_HL_LIBRARY) - set(HDF5_HL_LIBRARY ${HDF5_HL_LIBRARIES} ) - endif() - - endif(MSVC) - if(NOT HDF5_C_LIBRARY) - set(HDF5_C_LIBRARY hdf5 ) - endif() - - endif(HDF5_C_LIBRARY AND HDF5_HL_LIBRARY AND HDF5_INCLUDE_DIR) + message(STATUS "Using HDF5 include dir: ${HDF5_INCLUDE_DIRS}") + target_include_directories(netcdf + PRIVATE + ${HDF5_INCLUDE_DIRS} + ) find_package(Threads) - # There is a missing case in the above code so default it - if(NOT HDF5_C_LIBRARY_hdf5 OR "${HDF5_C_LIBRARY_hdf5}" STREQUAL "" ) - set(HDF5_C_LIBRARY_hdf5 "${HDF5_C_LIBRARY}" ) - endif() - - include(cmake/check_hdf5.cmake) + set (CMAKE_REQUIRED_INCLUDES ${HDF5_INCLUDE_DIRS}) # Check to ensure that HDF5 was built with zlib. # This needs to be near the beginning since we # need to know whether to add "-lz" to the symbol # tests below. - + include(check_hdf5) check_hdf5_feature(HAVE_HDF5_ZLIB H5_HAVE_ZLIB_H) if(NOT HAVE_HDF5_ZLIB) message(FATAL_ERROR "HDF5 was built without zlib. Rebuild HDF5 with zlib.") @@ -287,19 +174,22 @@ if(USE_HDF5) set(HDF5_UTF8_PATHS OFF ) endif() - message("-- HDF5_UTF8_PATHS (HDF5 version 1.10.6+): ${HDF5_UTF8_PATHS}") + message(STATUS "-- HDF5_UTF8_PATHS (HDF5 version 1.10.6+): ${HDF5_UTF8_PATHS}") # Find out if HDF5 was built with parallel support. set(HDF5_PARALLEL ${HDF5_IS_PARALLEL}) + set(CMAKE_REQUIRED_LIBRARIES HDF5::HDF5) + include(CheckSymbolExists) + #Check to see if HDF5 library has collective metadata APIs, (HDF5 >= 1.10.0) - check_library_exists(${HDF5_C_LIBRARY_hdf5} H5Pset_all_coll_metadata_ops "" HDF5_HAS_COLL_METADATA_OPS) + check_symbol_exists(H5Pset_all_coll_metadata_ops "hdf5.h" HDF5_HAS_COLL_METADATA_OPS) # Check to see if H5Dread_chunk is available - check_library_exists(${HDF5_C_LIBRARY_hdf5} H5Dread_chunk "" HAS_READCHUNKS) + check_symbol_exists(H5Dread_chunk "hdf5.h" HAS_READCHUNKS) # Check to see if H5Pset_fapl_ros3 is available - check_library_exists(${HDF5_C_LIBRARY_hdf5} H5Pset_fapl_ros3 "" HAS_HDF5_ROS3) + check_symbol_exists(H5Pset_fapl_ros3 "hdf5.h" HAS_HDF5_ROS3) # Check to see if this is hdf5-1.10.3 or later. if(HAS_READCHUNKS) From 2dd7b50d2eb96104969809997c320af90864aaae Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Fri, 16 Feb 2024 10:48:34 +0000 Subject: [PATCH 42/74] Docs: Update examples of specifying custom library paths to CMake --- docs/FAQ.md | 24 +++++------------------- 1 file changed, 5 insertions(+), 19 deletions(-) diff --git a/docs/FAQ.md b/docs/FAQ.md index 2dcd67af1..913591a11 100644 --- a/docs/FAQ.md +++ b/docs/FAQ.md @@ -1944,23 +1944,12 @@ Not at this time; it is required to instead build first one version, and then th How can I specify linking against a particular library? {#partlib} ------------------------------------------------------- -It depends on the library. To specify a custom `ZLib`, for example, you would do the following: - - $ cmake [Source Directory] -DZLIB_LIBRARY=/path/to/my/zlib.lib - - -`HDF5` is more complex, since it requires both the `hdf5` and `hdf5_hl` libraries. You would specify custom `HDF5` libraries as follows: - - $ cmake [Source Directory] -DHDF5_C_LIBRARY=/path/to/hdf5.lib \ - -DHDF5_HL_LIBRARY=/path/to/hdf5_hl.lib \ - -DHDF5_INCLUDE_DIR=/path/to/hdf5/include - - -Alternatively, you may specify: +For most libraries, you can specify `_ROOT`. To specify +custom `ZLib` and `HDF5`, for example, you would do the following: $ cmake [Source Directory] \ - -DHDF5_LIBRARIES="/path/to/hdf5.lib;/path/to/hdf5_hl.lib" \ - -DHDF5_INCLUDE_DIRS=/path/to/hdf5/include/ + -DZLIB_ROOT=/path/to/zlib/install \ + -DHDF5_ROOT=/path/to/hdf5/install What if I want to link against multiple libraries in a non-standard location {#nonstdloc} @@ -1982,11 +1971,8 @@ How can I specify a Parallel Build using HDF5 {#parallelhdf} If cmake is having problems finding the parallel `HDF5` install, you can specify the location manually: - $ cmake [Source Directory] -DENABLE_PARALLEL=ON \ - -DHDF5_C_LIBRARY=/usr/lib64/openmpi/lib/libhdf5.so \ - -DHDF5_HL_LIBRARY=/usr/lib64/openmpi/lib/libhdf5.hl.so \ - -DHDF5_INCLUDE_DIR=/usr/include/openmpi-x86_64 \ + -DHDF5_ROOT=/usr/lib64/openmpi/lib/ You will, of course, need to use the location of the libraries specific to your development environment. From 907e5cc43f4640e6f1077e05b80cf3a7818bc4e9 Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Fri, 16 Feb 2024 10:51:20 +0000 Subject: [PATCH 43/74] CMake: Use `target_link_libraries` with `HDF5::HDF5` target --- cmake/dependencies.cmake | 10 ++-------- h5_test/CMakeLists.txt | 3 +-- libdispatch/CMakeLists.txt | 2 +- libhdf5/CMakeLists.txt | 2 +- liblib/CMakeLists.txt | 20 ++------------------ libnczarr/CMakeLists.txt | 2 +- libsrc4/CMakeLists.txt | 2 +- ncdump/CMakeLists.txt | 14 ++++++-------- plugins/CMakeLists.txt | 2 +- 9 files changed, 16 insertions(+), 41 deletions(-) diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake index 9a860bb78..9c818f987 100644 --- a/cmake/dependencies.cmake +++ b/cmake/dependencies.cmake @@ -128,9 +128,9 @@ if(USE_HDF5) find_package(HDF5 ${HDF5_VERSION_REQUIRED} COMPONENTS C HL REQUIRED) message(STATUS "Using HDF5 include dir: ${HDF5_INCLUDE_DIRS}") - target_include_directories(netcdf + target_link_libraries(netcdf PRIVATE - ${HDF5_INCLUDE_DIRS} + HDF5::HDF5 ) find_package(Threads) @@ -209,12 +209,6 @@ if(USE_HDF5) set(HDF5_HAS_PAR_FILTERS FALSE CACHE BOOL "" ) set(HAS_PAR_FILTERS no CACHE STRING "" ) endif() - - target_include_directories(netcdf - PRIVATE - ${HDF5_INCLUDE_DIRS} - ) - endif(USE_HDF5) ################################ diff --git a/h5_test/CMakeLists.txt b/h5_test/CMakeLists.txt index 3f040c9cb..96d551cdf 100644 --- a/h5_test/CMakeLists.txt +++ b/h5_test/CMakeLists.txt @@ -14,8 +14,7 @@ FOREACH(CTEST ${H5TESTS}) ADD_EXECUTABLE(${CTEST} ${CTEST}.c) TARGET_LINK_LIBRARIES(${CTEST} netcdf - ${HDF5_HL_LIBRARIES} - ${HDF5_C_LIBRARIES} + HDF5::HDF5 hdf5::hdf5_hl ) ADD_TEST(${CTEST} ${EXECUTABLE_OUTPUT_PATH}/${CTEST}) ENDFOREACH() diff --git a/libdispatch/CMakeLists.txt b/libdispatch/CMakeLists.txt index c1af58d11..2ad44f5d5 100644 --- a/libdispatch/CMakeLists.txt +++ b/libdispatch/CMakeLists.txt @@ -69,7 +69,7 @@ endif(REGEDIT) if (USE_HDF5) - target_include_directories(dispatch PRIVATE ${HDF5_INCLUDE_DIR}) + target_link_libraries(dispatch PRIVATE HDF5::HDF5) endif(USE_HDF5) if(STATUS_PARALLEL) diff --git a/libhdf5/CMakeLists.txt b/libhdf5/CMakeLists.txt index d018f4abf..a5d14a139 100644 --- a/libhdf5/CMakeLists.txt +++ b/libhdf5/CMakeLists.txt @@ -28,7 +28,7 @@ if(STATUS_PARALLEL) target_link_libraries(netcdfhdf5 PUBLIC MPI::MPI_C) endif(STATUS_PARALLEL) -target_include_directories(netcdfhdf5 PUBLIC ${HDF5_INCLUDE_DIR}) +target_link_libraries(netcdfhdf5 PUBLIC HDF5::HDF5) # Remember to package this file for CMake builds. add_extra_dist(${libnchdf5_SOURCES} CMakeLists.txt) diff --git a/liblib/CMakeLists.txt b/liblib/CMakeLists.txt index 2adbb4f9b..2f8759730 100644 --- a/liblib/CMakeLists.txt +++ b/liblib/CMakeLists.txt @@ -140,23 +140,7 @@ if(ENABLE_NCZARR_ZIP) endif() if(USE_HDF5) - if(NOT MSVC) - # Some version of cmake define HDF5_hdf5_LIBRARY instead of - # HDF5_LIBRARY. Same with HDF5_HL_LIBRARIES - if(HDF5_hdf5_LIBRARY AND NOT HDF5_C_LIBRARIES) - set(HDF5_C_LIBRARIES ${HDF5_hdf5_LIBRARY}) - endif() - if(HDF5_hdf5_hl_LIBRARY AND NOT HDF5_HL_LIBRARIES) - set(HDF5_HL_LIBRARIES ${HDF5_hdf5_hl_LIBRARY}) - endif() - # The order of the libraries is important here for static - # builds: - # Make sure that HDF5_C_LIBRARY appears *after* - # HDF5_HL_LIBRARY. - set(TLL_LIBS ${HDF5_HL_LIBRARIES} ${HDF5_C_LIBRARIES} ${HDF5_LIBRARIES} ${TLL_LIBS} ${Szip_LIBRARY}) - else() # Windows CMake defines HDF5_LIBRARIES. - set(TLL_LIBS ${HDF5_LIBRARIES} ${TLL_LIBS} ${Szip_LIBRARY}) - endif() + set(TLL_LIBS HDF5::HDF5 hdf5::hdf5_hl ${TLL_LIBS} ${Szip_LIBRARY}) endif() if(FOUND_CURL) @@ -234,4 +218,4 @@ set(NC_LIBS ${NC_LIBS} PARENT_SCOPE) file(GLOB CUR_EXTRA_DIST RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/*.h ${CMAKE_CURRENT_SOURCE_DIR}/*.c) set(CUR_EXTRA_DIST ${CUR_EXTRA_DIST} CMakeLists.txt Makefile.am) -ADD_EXTRA_DIST("${CUR_EXTRA_DIST}") \ No newline at end of file +ADD_EXTRA_DIST("${CUR_EXTRA_DIST}") diff --git a/libnczarr/CMakeLists.txt b/libnczarr/CMakeLists.txt index 7e42de778..87b98acad 100644 --- a/libnczarr/CMakeLists.txt +++ b/libnczarr/CMakeLists.txt @@ -62,7 +62,7 @@ add_library(nczarr OBJECT ${libnczarr_SOURCES}) target_include_directories(nczarr PUBLIC ../libncpoco) if (USE_HDF5) - target_include_directories(nczarr PRIVATE ${HDF5_INCLUDE_DIR}) + target_link_libraries(nczarr PRIVATE HDF5::HDF5) endif(USE_HDF5) if(STATUS_PARALLEL) diff --git a/libsrc4/CMakeLists.txt b/libsrc4/CMakeLists.txt index b9e0f857a..9ba0d4398 100644 --- a/libsrc4/CMakeLists.txt +++ b/libsrc4/CMakeLists.txt @@ -36,7 +36,7 @@ set(ARGS_MANPAGE -DAPI=C) if (USE_HDF5) set(ARGS_MANPAGE ${ARGS_MANPAGE} -DNETCDF4=TRUE) - target_include_directories(netcdf4 PRIVATE ${HDF5_INCLUDE_DIR}) + target_link_libraries(netcdf4 PRIVATE HDF5::HDF5) endif(USE_HDF5) if (BUILD_DAP) diff --git a/ncdump/CMakeLists.txt b/ncdump/CMakeLists.txt index 86e637f37..a4e3a9440 100644 --- a/ncdump/CMakeLists.txt +++ b/ncdump/CMakeLists.txt @@ -45,8 +45,13 @@ add_executable(ncfilteravail ${ncfilteravail_FILES}) if(USE_HDF5) add_executable(nc4print nc4print.c nc4printer.c) + target_link_libraries(nc4print netcdf ${ALL_TLL_LIBS}) + add_executable(printfqn ${printfqn_FILES}) + target_link_libraries(printfqn netcdf ${ALL_TLL_LIBS}) + add_executable(nchdf5version ${nchdf5version_FILES}) + target_link_libraries(nchdf5version netcdf ${ALL_TLL_LIBS}) endif(USE_HDF5) if(ENABLE_DAP) @@ -60,13 +65,6 @@ target_link_libraries(ncvalidator netcdf ${ALL_TLL_LIBS}) target_link_libraries(ncpathcvt netcdf ${ALL_TLL_LIBS}) target_link_libraries(ncfilteravail netcdf ${ALL_TLL_LIBS}) -if(USE_HDF5) - target_link_libraries(nc4print netcdf ${ALL_TLL_LIBS}) - target_link_libraries(printfqn netcdf ${ALL_TLL_LIBS}) - target_link_libraries(nchdf5version netcdf ${ALL_TLL_LIBS}) - target_include_directories(ncdump PRIVATE ${HDF5_INCLUDE_DIR}) -endif(USE_HDF5) - if(ENABLE_DAP) target_link_libraries(ocprint netcdf ${ALL_TLL_LIBS}) endif(ENABLE_DAP) @@ -127,7 +125,7 @@ endif() IF(USE_HDF5) add_executable(tst_fileinfo tst_fileinfo.c) - target_link_libraries(tst_fileinfo netcdf) + target_link_libraries(tst_fileinfo netcdf ${ALL_TLL_LIBS}) ENDIF() IF(MSVC) diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index 8f5ac6a22..332024552 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -72,7 +72,7 @@ macro(buildplugin TARGET TARGETLIB) endif(STATUS_PARALLEL) if (USE_HDF5) - target_include_directories(${TARGET} PRIVATE ${HDF5_INCLUDE_DIR}) + target_link_libraries(${TARGET} PRIVATE HDF5::HDF5) endif(USE_HDF5) endmacro() From 11d484cbe2fa783462a7e826c0198ce5b53b1653 Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Fri, 16 Feb 2024 11:18:19 +0000 Subject: [PATCH 44/74] CI: Bump version of HDF5 1.14 --- .github/workflows/run_tests_cdash.yml | 6 +++--- .github/workflows/run_tests_osx.yml | 10 +++++----- .github/workflows/run_tests_s3.yml | 4 ++-- .github/workflows/run_tests_ubuntu.yml | 16 ++++++++-------- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/.github/workflows/run_tests_cdash.yml b/.github/workflows/run_tests_cdash.yml index b8d10ef11..5dd5c85cb 100644 --- a/.github/workflows/run_tests_cdash.yml +++ b/.github/workflows/run_tests_cdash.yml @@ -18,7 +18,7 @@ jobs: strategy: matrix: - hdf5: [ 1.10.8, 1.12.2, 1.14.0 ] + hdf5: [ 1.10.8, 1.12.2, 1.14.3 ] steps: - uses: actions/checkout@v3 @@ -66,7 +66,7 @@ jobs: strategy: matrix: - hdf5: [ 1.14.0 ] + hdf5: [ 1.14.3 ] steps: @@ -126,7 +126,7 @@ jobs: strategy: matrix: - hdf5: [ 1.10.8, 1.12.2, 1.14.0 ] + hdf5: [ 1.10.8, 1.12.2, 1.14.3 ] steps: - uses: actions/checkout@v3 diff --git a/.github/workflows/run_tests_osx.yml b/.github/workflows/run_tests_osx.yml index dd0917e36..21198ae84 100644 --- a/.github/workflows/run_tests_osx.yml +++ b/.github/workflows/run_tests_osx.yml @@ -20,7 +20,7 @@ jobs: strategy: matrix: - hdf5: [ 1.12.2, 1.14.0 ] + hdf5: [ 1.12.2, 1.14.3 ] steps: @@ -57,7 +57,7 @@ jobs: strategy: matrix: - hdf5: [ 1.12.2, 1.14.0 ] + hdf5: [ 1.12.2, 1.14.3 ] use_nc4: [ nc3, nc4 ] use_dap: [ dap_off, dap_on ] use_nczarr: [ nczarr_off, nczarr_on ] @@ -163,7 +163,7 @@ jobs: strategy: matrix: - hdf5: [ 1.12.2, 1.14.0 ] + hdf5: [ 1.12.2, 1.14.3 ] use_nc4: [ nc3, nc4 ] use_dap: [ dap_off, dap_on ] use_nczarr: [ nczarr_off, nczarr_on ] @@ -259,7 +259,7 @@ jobs: strategy: matrix: - hdf5: [ 1.12.2, 1.14.0 ] + hdf5: [ 1.12.2, 1.14.3 ] steps: - uses: actions/checkout@v3 @@ -340,7 +340,7 @@ jobs: strategy: matrix: - hdf5: [ 1.12.2, 1.14.0 ] + hdf5: [ 1.12.2, 1.14.3 ] steps: diff --git a/.github/workflows/run_tests_s3.yml b/.github/workflows/run_tests_s3.yml index ddbb353c8..61af997dc 100644 --- a/.github/workflows/run_tests_s3.yml +++ b/.github/workflows/run_tests_s3.yml @@ -23,7 +23,7 @@ jobs: strategy: matrix: - hdf5: [ 1.10.8, 1.12.2, 1.14.0 ] + hdf5: [ 1.10.8, 1.12.2, 1.14.3 ] steps: - uses: actions/checkout@v3 @@ -70,7 +70,7 @@ jobs: strategy: matrix: - hdf5: [ 1.14.0 ] + hdf5: [ 1.14.3 ] steps: - uses: actions/checkout@v3 diff --git a/.github/workflows/run_tests_ubuntu.yml b/.github/workflows/run_tests_ubuntu.yml index 854c8bf74..d7a522b05 100644 --- a/.github/workflows/run_tests_ubuntu.yml +++ b/.github/workflows/run_tests_ubuntu.yml @@ -18,7 +18,7 @@ jobs: strategy: matrix: - hdf5: [ 1.10.8, 1.12.2, 1.14.0 ] + hdf5: [ 1.10.8, 1.12.2, 1.14.3 ] steps: - uses: actions/checkout@v3 @@ -66,7 +66,7 @@ jobs: strategy: matrix: - hdf5: [ 1.14.0 ] + hdf5: [ 1.14.3 ] steps: @@ -128,7 +128,7 @@ jobs: strategy: matrix: - hdf5: [ 1.14.0 ] + hdf5: [ 1.14.3 ] steps: - uses: actions/checkout@v3 @@ -223,7 +223,7 @@ jobs: strategy: matrix: - hdf5: [ 1.14.0 ] + hdf5: [ 1.14.3 ] steps: - uses: actions/checkout@v3 @@ -303,7 +303,7 @@ jobs: strategy: matrix: - hdf5: [ 1.14.0 ] + hdf5: [ 1.14.3 ] steps: @@ -383,7 +383,7 @@ jobs: strategy: matrix: - hdf5: [ 1.14.0 ] + hdf5: [ 1.14.3 ] steps: @@ -460,7 +460,7 @@ jobs: strategy: matrix: - hdf5: [1.10.8, 1.12.2, 1.14.0 ] + hdf5: [1.10.8, 1.12.2, 1.14.3 ] use_nc4: [ nc3, nc4 ] use_dap: [ dap_off, dap_on ] use_nczarr: [ nczarr_off, nczarr_on ] @@ -624,7 +624,7 @@ jobs: strategy: matrix: - hdf5: [ 1.10.8, 1.12.2, 1.14.0 ] + hdf5: [ 1.10.8, 1.12.2, 1.14.3 ] use_nc4: [ nc3, nc4 ] use_dap: [ dap_off, dap_on ] use_nczarr: [ nczarr_off, nczarr_on ] From d29a0ef7e9a9225df61ad9e4b75350412d1bdc44 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Tue, 20 Feb 2024 12:14:08 -0600 Subject: [PATCH 45/74] forcing shared to see if tests pass --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3821699e2..49395b5f5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -38,7 +38,7 @@ endif () # The target ################################ -add_library(netcdf) +add_library(netcdf SHARED) add_library(netCDF::netcdf ALIAS netcdf) set_target_properties(netcdf PROPERTIES From 09ab86122d291d2b256355f7d4dc5937eee12a6d Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Wed, 21 Feb 2024 16:27:28 -0600 Subject: [PATCH 46/74] undoing change to github actions, removing PIC --- .github/workflows/run_tests_ubuntu.yml | 2 +- CMakeLists.txt | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/run_tests_ubuntu.yml b/.github/workflows/run_tests_ubuntu.yml index d7a522b05..b3a34ab99 100644 --- a/.github/workflows/run_tests_ubuntu.yml +++ b/.github/workflows/run_tests_ubuntu.yml @@ -356,7 +356,7 @@ jobs: shell: bash -l {0} run: | cd build - LD_LIBRARY_PATH=${LD_LIBRARY_PATH} make VERBOSE=1 + LD_LIBRARY_PATH=${LD_LIBRARY_PATH} make -j 12 if: ${{ success() }} - name: Run Tests diff --git a/CMakeLists.txt b/CMakeLists.txt index 49395b5f5..6ce21845a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,10 +41,6 @@ endif () add_library(netcdf SHARED) add_library(netCDF::netcdf ALIAS netcdf) -set_target_properties(netcdf PROPERTIES - POSITION_INDEPENDENT_CODE ON -) - ##### # Version Info: # From 3341fbddf4c40b92d7bce1a3c408d9cbb8413827 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Wed, 21 Feb 2024 16:42:44 -0600 Subject: [PATCH 47/74] another compile definition set on the cmake target --- CMakeLists.txt | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6ce21845a..2f86c0b4e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -287,12 +287,12 @@ endif() # Suppress CRT Warnings. # Only necessary for Windows if(MSVC) - target_compile_definitions(netcdf PRIVATE -D_CRT_SECURE_NO_WARNINGS) + target_compile_definitions(netcdf PRIVATE _CRT_SECURE_NO_WARNINGS) endif() # Support ANSI format specifiers for *printf on MINGW: if(MINGW) - target_compile_definitions(netcdf PRIVATE -D__USE_MINGW_ANSI_STDIO=1) + target_compile_definitions(netcdf PRIVATE __USE_MINGW_ANSI_STDIO=1) endif() ##### @@ -468,8 +468,7 @@ if(WIN32) option(ENABLE_DLL "Build a Windows DLL." ${BUILD_SHARED_LIBS}) if(ENABLE_DLL) set(BUILD_DLL ON CACHE BOOL "") - add_compile_definitions(-DDLL_NETCDF) - add_compile_definitions(-DDLL_EXPORT) + target_compile_definitions(netcdf PRIVATE DLL_NETCDF DLL_EXPORT) endif() endif() # Did the user specify a default minimum blocksize for posixio? @@ -492,8 +491,7 @@ if(NOT ENABLE_NETCDF_4) set(ENABLE_LOGGING OFF) endif() if(ENABLE_LOGGING) - target_compile_definitions(netcdf PRIVATE -DLOGGING) - target_compile_definitions(netcdf PRIVATE -DENABLE_SET_LOG_LEVEL) + target_compile_definitions(netcdf PRIVATE LOGGING ENABLE_SET_LOG_LEVEL) set(LOGGING ON) set(ENABLE_SET_LOG_LEVEL ON) endif() @@ -992,7 +990,7 @@ endif() if(ENABLE_ZERO_LENGTH_COORD_BOUND) message(STATUS "Enabling a more relaxed check for NC_EINVALCOORDS") - target_compile_definitions(netcdf PRIVATE -DRELAX_COORD_BOUND) + target_compile_definitions(netcdf PRIVATE RELAX_COORD_BOUND) endif() # Enable Parallel Tests. From 046846ecb4ee68a2829ef9d8f149464b87a0613f Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Thu, 22 Feb 2024 13:43:44 +0000 Subject: [PATCH 48/74] CMake: Set `BUILD_SHARED_LIBS` before `add_library(netcdf)` --- CMakeLists.txt | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2f86c0b4e..4238767cd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -38,7 +38,17 @@ endif () # The target ################################ -add_library(netcdf SHARED) +## +# Default building shared libraries. +# BUILD_SHARED_LIBS is provided by/used by +# CMake directly. +## +option(BUILD_SHARED_LIBS "Configure netCDF as a shared library." ON) +if(BUILD_SHARED_LIBS) + set(CMAKE_POSITION_INDEPENDENT_CODE ON) +endif() + +add_library(netcdf) add_library(netCDF::netcdf ALIAS netcdf) ##### @@ -213,16 +223,6 @@ include(GenerateExportHeader) # Compiler and Linker Configuration ################################ -## -# Default building shared libraries. -# BUILD_SHARED_LIBS is provided by/used by -# CMake directly. -## -option(BUILD_SHARED_LIBS "Configure netCDF as a shared library." ON) -if(BUILD_SHARED_LIBS) - set(CMAKE_POSITION_INDEPENDENT_CODE ON) -endif() - option(NC_FIND_SHARED_LIBS "Find dynamically-built versions of dependent libraries" ${BUILD_SHARED_LIBS}) ## From 77ff561b1342d626e0e5d2b214169c6e2f9ee18a Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Thu, 22 Feb 2024 14:22:09 +0000 Subject: [PATCH 49/74] CMake: Turn off plugins if building statically --- CMakeLists.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4238767cd..ec8d407a8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -627,8 +627,11 @@ endif() # Try to enable NCZarr zip support option(ENABLE_NCZARR_ZIP "Enable NCZarr ZIP support." OFF) +include(CMakeDependentOption) + # libdl is always available; built-in in Windows and OSX -option(ENABLE_PLUGINS "Enable dynamically loaded plugins (default on)." ON) +cmake_dependent_option(ENABLE_PLUGINS "Enable dynamically loaded plugins (default on)." + ON "BUILD_SHARED_LIBS" OFF) if(MINGW) set(ENABLE_PLUGINS OFF CACHE BOOL "Disable plugins" FORCE) else() From 7a9cafb161c3ad428f86015c042cb0f14b130b01 Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Thu, 22 Feb 2024 14:24:28 +0000 Subject: [PATCH 50/74] CMake: Always prefer shared HDF5 libs on linux --- cmake/dependencies.cmake | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake index 9c818f987..3e977887e 100644 --- a/cmake/dependencies.cmake +++ b/cmake/dependencies.cmake @@ -116,11 +116,13 @@ if(USE_HDF5) # we will use a static library. This can be toggled # by explicitly modifying NC_FIND_SHARED_LIBS. ## - if(NC_FIND_SHARED_LIBS) - set(HDF5_USE_STATIC_LIBRARIES OFF) - else(NC_FIND_SHARED_LIBS) - set(HDF5_USE_STATIC_LIBRARIES ON) - endif(NC_FIND_SHARED_LIBS) + if (MSVC) + if(NC_FIND_SHARED_LIBS) + set(HDF5_USE_STATIC_LIBRARIES OFF) + else() + set(HDF5_USE_STATIC_LIBRARIES ON) + endif() + endif() ##### # First, find the C and HL libraries. From 7489c3d8292dcc4fd85704272e66b91063d996da Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Thu, 22 Feb 2024 14:33:25 +0000 Subject: [PATCH 51/74] CI: Don't force `-fPIC` in static build --- .github/workflows/run_tests_ubuntu.yml | 81 ++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/.github/workflows/run_tests_ubuntu.yml b/.github/workflows/run_tests_ubuntu.yml index b3a34ab99..1fe42448b 100644 --- a/.github/workflows/run_tests_ubuntu.yml +++ b/.github/workflows/run_tests_ubuntu.yml @@ -373,6 +373,87 @@ jobs: LD_LIBRARY_PATH=${LD_LIBRARY_PATH} ctest -j 12 --rerun-failed --output-on-failure -VV if: ${{ failure() }} + ## + # Serial, Shared + ## + nc-cmake-tests-oneoff-serial-static: + + needs: build-deps-serial + runs-on: ubuntu-latest + + strategy: + matrix: + hdf5: [ 1.14.3 ] + + steps: + + - uses: actions/checkout@v3 + + - name: Install System dependencies + shell: bash -l {0} + run: sudo apt update && sudo apt install -y libaec-dev zlib1g-dev automake autoconf libcurl4-openssl-dev libjpeg-dev wget curl bzip2 m4 flex bison cmake libzip-dev doxygen + + ### + # Set Environmental Variables + ### + + - run: echo "CMAKE_PREFIX_PATH=${HOME}/environments/${{ matrix.hdf5 }}/" >> $GITHUB_ENV + - run: echo "LD_LIBRARY_PATH=${HOME}/environments/${{ matrix.hdf5 }}/lib" >> $GITHUB_ENV + + ### + # Fetch Cache + ### + + - name: Fetch HDF Cache + id: cache-hdf5 + uses: actions/cache@v3 + with: + path: ~/environments/${{ matrix.hdf5 }} + key: hdf5-${{ runner.os }}-${{ matrix.hdf5 }} + + - name: Check Cache + shell: bash -l {0} + run: ls ${HOME}/environments && ls ${HOME}/environments/${{ matrix.hdf5 }} && ls ${HOME}/environments/${{ matrix.hdf5}}/lib + + ### + # Configure and build + ### + + - name: Perform out-of-directory build + shell: bash -l {0} + run: | + mkdir build + cd build + LD_LIBRARY_PATH=${LD_LIBRARY_PATH} cmake .. -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH} -DENABLE_DAP=TRUE -DENABLE_HDF5=TRUE -DENABLE_NCZARR=TRUE -DENABLE_DAP_LONG_TESTS=TRUE -DENABLE_XML2=FALSE -DBUILD_SHARED_LIBS=FALSE + + - name: Print Summary + shell: bash -l {0} + run: | + cd build + cat libnetcdf.settings + + - name: Build All + shell: bash -l {0} + run: | + cd build + LD_LIBRARY_PATH=${LD_LIBRARY_PATH} make -j 12 + if: ${{ success() }} + + - name: Run Tests + shell: bash -l {0} + run: | + cd build + LD_LIBRARY_PATH=${LD_LIBRARY_PATH} ctest --output-on-failure -j 12 . + if: ${{ success() }} + + - name: Verbose Output if CTest Failure + shell: bash -l {0} + run: | + cd build + LD_LIBRARY_PATH=${LD_LIBRARY_PATH} ctest -j 12 --rerun-failed --output-on-failure -VV + if: ${{ failure() }} + + ## # Parallel ## From ab56e9a10b38de862969e96cb44a28c9f997afd6 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Thu, 22 Feb 2024 10:26:38 -0600 Subject: [PATCH 52/74] bumping macos version to see if the test passes --- .github/workflows/run_tests_osx.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/run_tests_osx.yml b/.github/workflows/run_tests_osx.yml index 06c96147d..cd6d2a36a 100644 --- a/.github/workflows/run_tests_osx.yml +++ b/.github/workflows/run_tests_osx.yml @@ -334,7 +334,7 @@ jobs: nc-cmake-tests-oneoff-osx-shared: needs: build-deps-osx - runs-on: macos-11 + runs-on: macos-12 strategy: matrix: From 4edb8f84249fcb6913b9b0b7f381f71fb749c594 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Thu, 22 Feb 2024 11:04:20 -0600 Subject: [PATCH 53/74] changing all macos versions --- .github/workflows/run_tests_osx.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/run_tests_osx.yml b/.github/workflows/run_tests_osx.yml index cd6d2a36a..6bab5e03a 100644 --- a/.github/workflows/run_tests_osx.yml +++ b/.github/workflows/run_tests_osx.yml @@ -16,7 +16,7 @@ jobs: build-deps-osx: - runs-on: macos-11 + runs-on: macos-12 strategy: matrix: @@ -52,7 +52,7 @@ jobs: nc-autotools-osx: needs: [ nc-cmake-tests-oneoff-osx-shared, nc-cmake-tests-oneoff-osx-static, nc-ac-tests-oneoff-osx ] - runs-on: macos-11 + runs-on: macos-12 strategy: matrix: @@ -158,7 +158,7 @@ jobs: nc-cmake-osx: needs: [ nc-cmake-tests-oneoff-osx-shared, nc-cmake-tests-oneoff-osx-static, nc-ac-tests-oneoff-osx ] - runs-on: macos-11 + runs-on: macos-12 strategy: matrix: @@ -253,7 +253,7 @@ jobs: nc-ac-tests-oneoff-osx: needs: build-deps-osx - runs-on: macos-11 + runs-on: macos-12 strategy: matrix: @@ -408,7 +408,7 @@ jobs: nc-cmake-tests-oneoff-osx-static: needs: build-deps-osx - runs-on: macos-11 + runs-on: macos-12 strategy: matrix: From 9dbf67e88c95a201fd50f39b0ee33f212f8be92a Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Thu, 22 Feb 2024 11:16:11 -0600 Subject: [PATCH 54/74] updating hdf version --- .github/workflows/run_tests_osx.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/run_tests_osx.yml b/.github/workflows/run_tests_osx.yml index 6bab5e03a..24729490f 100644 --- a/.github/workflows/run_tests_osx.yml +++ b/.github/workflows/run_tests_osx.yml @@ -412,7 +412,7 @@ jobs: strategy: matrix: - hdf5: [ 1.12.2, 1.14.0 ] + hdf5: [ 1.12.2, 1.14.3 ] steps: From a73f4960e3ea5679e23e3eb0c4d5d2ca662ddeb0 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Thu, 22 Feb 2024 16:00:48 -0600 Subject: [PATCH 55/74] fixing a typo --- ncdump/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ncdump/CMakeLists.txt b/ncdump/CMakeLists.txt index a4e3a9440..065fbcbf1 100644 --- a/ncdump/CMakeLists.txt +++ b/ncdump/CMakeLists.txt @@ -79,7 +79,7 @@ endif(ENABLE_DAP) if(MSVC) macro(setbinprops name) set_target_properties(${name} - PRORERTIES + PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_BINARY_DIR} RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_BINARY_DIR} From 3526faa98dec4683ce799ed202cb5d60d594bd1b Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Fri, 23 Feb 2024 09:01:28 -0600 Subject: [PATCH 56/74] removing debug information --- ncdump/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/ncdump/CMakeLists.txt b/ncdump/CMakeLists.txt index 065fbcbf1..6d43f1b37 100644 --- a/ncdump/CMakeLists.txt +++ b/ncdump/CMakeLists.txt @@ -58,7 +58,6 @@ if(ENABLE_DAP) add_executable(ocprint ${ocprint_FILES}) endif(ENABLE_DAP) -message(STATUS "ALL_TLL_LIBS INCLUDE FOR KYLE: ${ALL_TLL_LIBS}") target_link_libraries(ncdump netcdf ${ALL_TLL_LIBS}) target_link_libraries(nccopy netcdf ${ALL_TLL_LIBS}) target_link_libraries(ncvalidator netcdf ${ALL_TLL_LIBS}) From c24a0d0968c09ab5def6d5da36f0f9c838946749 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Fri, 23 Feb 2024 09:02:15 -0600 Subject: [PATCH 57/74] bumping cmake version --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ec8d407a8..80cf1855c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,7 +6,7 @@ # Set Project Properties ################################## -cmake_minimum_required(VERSION 3.13.0) +cmake_minimum_required(VERSION 3.20.0) #Project Name project(netCDF From 3b0d5201898e6611e64eeef1e5633e78b744986d Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Fri, 23 Feb 2024 09:04:07 -0600 Subject: [PATCH 58/74] updating release notes --- RELEASE_NOTES.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index ba00a1612..69621f4c5 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -36,6 +36,8 @@ This file contains a high-level description of this package's evolution. Release * Remove obsolete code. See [Github #2680](https://github.com/Unidata/netcdf-c/pull/2680). * [Bug Fix] Add a crude test to see if an NCZarr path looks like a valid NCZarr/Zarr file. See [Github #2658](https://github.com/Unidata/netcdf-c/pull/2658). * Fix 'make distcheck' error in run_interop.sh. See [Github #2631](https://github.com/Unidata/netcdf-c/pull/2631). +* Bump cmake minimum version to 3.20.0 to support finding HDF5 with cmake's find_package +* Refactor the cmake files to remove global include directories and compile definitions ## 4.9.2 - March 14, 2023 From 8551a2907e01b7fa4252c492f25a5d3747fb4e01 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Fri, 23 Feb 2024 09:11:04 -0600 Subject: [PATCH 59/74] removing possibly redundant cmake for shared library --- liblib/CMakeLists.txt | 6 ------ 1 file changed, 6 deletions(-) diff --git a/liblib/CMakeLists.txt b/liblib/CMakeLists.txt index 2f8759730..bc9a46813 100644 --- a/liblib/CMakeLists.txt +++ b/liblib/CMakeLists.txt @@ -192,12 +192,6 @@ if(MSVC) ) endif() -if(NOT MSVC) - if(BUILD_SHARED_LIBS) - set_target_properties(netcdf PROPERTIES LINK_FLAGS -shared) - endif() -endif() - if(ENABLE_SHARED_LIBRARY_VERSION) set_target_properties(netcdf PROPERTIES VERSION ${netCDF_LIB_VERSION} From 5ee4424c5bb3d2f4e8d511a0ffac6561e37e6519 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Fri, 23 Feb 2024 09:25:47 -0600 Subject: [PATCH 60/74] updating tests to use correct cmake variable --- .github/workflows/run_tests_osx.yml | 4 ++-- .github/workflows/run_tests_ubuntu.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/run_tests_osx.yml b/.github/workflows/run_tests_osx.yml index 24729490f..2b7b546d3 100644 --- a/.github/workflows/run_tests_osx.yml +++ b/.github/workflows/run_tests_osx.yml @@ -375,7 +375,7 @@ jobs: run: | mkdir build cd build - LD_LIBRARY_PATH=${LD_LIBRARY_PATH} cmake .. -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH} -DENABLE_DAP=TRUE -DENABLE_HDF5=TRUE -DENABLE_NCZARR=TRUE -D ENABLE_DAP_LONG_TESTS=TRUE -DENABLE_XML2=FALSE + LD_LIBRARY_PATH=${LD_LIBRARY_PATH} cmake .. -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH} -DENABLE_DAP=TRUE -DENABLE_HDF5=TRUE -DENABLE_NCZARR=TRUE -D ENABLE_DAP_LONG_TESTS=TRUE -DENABLE_LIBXML2=FALSE - name: Print Summary shell: bash -l {0} @@ -450,7 +450,7 @@ jobs: run: | mkdir build cd build - LD_LIBRARY_PATH=${LD_LIBRARY_PATH} cmake .. -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH} -DENABLE_DAP=TRUE -DENABLE_HDF5=TRUE -DENABLE_NCZARR=TRUE -D ENABLE_DAP_LONG_TESTS=TRUE -DENABLE_XML2=FALSE -DBUILD_SHARED_LIBS=OFF -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} + LD_LIBRARY_PATH=${LD_LIBRARY_PATH} cmake .. -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH} -DENABLE_DAP=TRUE -DENABLE_HDF5=TRUE -DENABLE_NCZARR=TRUE -D ENABLE_DAP_LONG_TESTS=TRUE -DENABLE_LIBXML2=FALSE -DBUILD_SHARED_LIBS=OFF -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} - name: Print Summary shell: bash -l {0} diff --git a/.github/workflows/run_tests_ubuntu.yml b/.github/workflows/run_tests_ubuntu.yml index 51704feed..e0412bc17 100644 --- a/.github/workflows/run_tests_ubuntu.yml +++ b/.github/workflows/run_tests_ubuntu.yml @@ -440,7 +440,7 @@ jobs: run: | mkdir build cd build - LD_LIBRARY_PATH=${LD_LIBRARY_PATH} cmake .. -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH} -DENABLE_DAP=TRUE -DENABLE_HDF5=TRUE -DENABLE_NCZARR=TRUE -DENABLE_DAP_LONG_TESTS=TRUE -DENABLE_XML2=FALSE + LD_LIBRARY_PATH=${LD_LIBRARY_PATH} cmake .. -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH} -DENABLE_DAP=TRUE -DENABLE_HDF5=TRUE -DENABLE_NCZARR=TRUE -DENABLE_DAP_LONG_TESTS=TRUE -DENABLE_LIBXML2=FALSE - name: Print Summary shell: bash -l {0} @@ -521,7 +521,7 @@ jobs: run: | mkdir build cd build - LD_LIBRARY_PATH=${LD_LIBRARY_PATH} cmake .. -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH} -DENABLE_DAP=TRUE -DENABLE_HDF5=TRUE -DENABLE_NCZARR=TRUE -DENABLE_DAP_LONG_TESTS=TRUE -DENABLE_XML2=FALSE -DBUILD_SHARED_LIBS=FALSE -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} + LD_LIBRARY_PATH=${LD_LIBRARY_PATH} cmake .. -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH} -DENABLE_DAP=TRUE -DENABLE_HDF5=TRUE -DENABLE_NCZARR=TRUE -DENABLE_DAP_LONG_TESTS=TRUE -DENABLE_LIBXML2=FALSE -DBUILD_SHARED_LIBS=FALSE -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} - name: Print Summary shell: bash -l {0} From 1e31577a2c519d6a9f5579695044c2f0ae013692 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Fri, 23 Feb 2024 09:36:57 -0600 Subject: [PATCH 61/74] removing unused cmake --- .github/workflows/run_tests_osx.yml | 2 +- CMakeLists.txt | 6 ------ 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/.github/workflows/run_tests_osx.yml b/.github/workflows/run_tests_osx.yml index 2b7b546d3..042f2f180 100644 --- a/.github/workflows/run_tests_osx.yml +++ b/.github/workflows/run_tests_osx.yml @@ -387,7 +387,7 @@ jobs: shell: bash -l {0} run: | cd build - LD_LIBRARY_PATH=${LD_LIBRARY_PATH} make VERBOSE=1 + LD_LIBRARY_PATH=${LD_LIBRARY_PATH} make -j 12 if: ${{ success() }} - name: Run Tests diff --git a/CMakeLists.txt b/CMakeLists.txt index 80cf1855c..3d8617206 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1478,12 +1478,6 @@ if(ENABLE_PLUGINS) add_subdirectory(plugins) endif() -# For tests and utilities, we are no longer -# exporting symbols but rather importing them. -if(BUILD_DLL) - remove_definitions(-DDLL_EXPORT) -endif() - # Enable Utilities. if(BUILD_UTILITIES) include_directories(ncdump) From 44cb18169ec9e3a994cce0df465bbc6c3407d623 Mon Sep 17 00:00:00 2001 From: Ward Fisher Date: Fri, 23 Feb 2024 14:06:17 -0700 Subject: [PATCH 62/74] Correct(?) syntax with target_compile_options() in top level CMakeLists.txt. Correct the logic flow in libncxml/CMakeLists.txt to not try to include non-existant directory when libxml2 is not found. --- CMakeLists.txt | 2 +- libncxml/CMakeLists.txt | 19 ++++++++++++------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3d8617206..8bbf95add 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -132,7 +132,7 @@ include(GNUInstallDirs) if(MSVC) set(GLOBAL PROPERTY USE_FOLDERS ON) - target_compile_options(netcdf "/utf-8") + target_compile_options(netcdf PUBLIC "/utf-8") endif() # auto-configure style checks, other CMake modules. diff --git a/libncxml/CMakeLists.txt b/libncxml/CMakeLists.txt index 4f3adb93d..1954c3934 100644 --- a/libncxml/CMakeLists.txt +++ b/libncxml/CMakeLists.txt @@ -5,14 +5,19 @@ ELSE() ENDIF() add_library(ncxml OBJECT ${libncxml_SOURCES}) -target_include_directories(ncxml - PUBLIC - ./include - PRIVATE - ${LIBXML2_INCLUDE_DIRS} +IF(HAVE_LIBXML2) + target_include_directories(ncxml + PUBLIC + ./include + PRIVATE + ${LIBXML2_INCLUDE_DIRS} ) - - +ELSE() + target_include_directories(ncxml + PUBLIC + ./include +) +ENDIF(HAVE_LIBXML2) #IF(NOT MSVC) #target_compile_features(ncxml PUBLIC cxx_std_11) From 182d4622038218bf42435ffbc14b8000bc3df232 Mon Sep 17 00:00:00 2001 From: Ward Fisher Date: Mon, 26 Feb 2024 17:34:00 -0700 Subject: [PATCH 63/74] Corrected a dependencies issue linking against libcurl and finding curl/curl.h using Visual Studio. There's another issue to correct, but this is getting us a lot closer. --- cmake/dependencies.cmake | 3 +++ include/ncrc.h | 1 + libdap2/CMakeLists.txt | 8 ++++++++ libdap4/CMakeLists.txt | 6 ++++++ oc2/CMakeLists.txt | 7 ++++++- 5 files changed, 24 insertions(+), 1 deletion(-) diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake index 3e977887e..64f7dc2b1 100644 --- a/cmake/dependencies.cmake +++ b/cmake/dependencies.cmake @@ -227,6 +227,9 @@ target_include_directories(netcdf ${CURL_INCLUDE_DIRS} ) + + +MESSAGE(STATUS "Found CURL_INCLUDE_DIRS: ${CURL_INCLUDE_DIRS}") # Define a test flag for have curl library if(CURL_LIBRARIES OR CURL_LIBRARY) set(FOUND_CURL TRUE) diff --git a/include/ncrc.h b/include/ncrc.h index ae858532e..3586a4ceb 100644 --- a/include/ncrc.h +++ b/include/ncrc.h @@ -15,6 +15,7 @@ and accessing rc files (e.g. .daprc). #include "ncuri.h" #include "nclist.h" #include "ncbytes.h" +#include /* getenv() keys */ #define NCRCENVIGNORE "NCRCENV_IGNORE" diff --git a/libdap2/CMakeLists.txt b/libdap2/CMakeLists.txt index 141c03025..55c52fbdb 100644 --- a/libdap2/CMakeLists.txt +++ b/libdap2/CMakeLists.txt @@ -26,6 +26,14 @@ set_property(SOURCE ncd2dispatch.c add_library(dap2 OBJECT ${dap2_SOURCES}) + +target_link_libraries(dap2 PUBLIC ${CURL_LIBRARIES}) +target_include_directories(dap2 PUBLIC ${CURL_INCLUDE_DIRS}) +target_compile_options(dap2 + PRIVATE + -DCURL_STATICLIB=1 +) + IF(STATUS_PARALLEL) target_link_libraries(dap2 PUBLIC MPI::MPI_C) ENDIF(STATUS_PARALLEL) diff --git a/libdap4/CMakeLists.txt b/libdap4/CMakeLists.txt index 4e0a726ea..bcb49028a 100644 --- a/libdap4/CMakeLists.txt +++ b/libdap4/CMakeLists.txt @@ -20,6 +20,12 @@ set_property(SOURCE d4meta.c SKIP_UNITY_BUILD_INCLUSION ON) add_library(dap4 OBJECT ${dap4_SOURCES}) +target_link_libraries(dap4 PUBLIC ${CURL_LIBRARIES}) +target_include_directories(dap4 PUBLIC ${CURL_INCLUDE_DIRS}) +target_compile_options(dap4 + PRIVATE + -DCURL_STATICLIB=1 +) IF(STATUS_PARALLEL) target_link_libraries(dap4 PUBLIC MPI::MPI_C) diff --git a/oc2/CMakeLists.txt b/oc2/CMakeLists.txt index c938ea145..c67098095 100644 --- a/oc2/CMakeLists.txt +++ b/oc2/CMakeLists.txt @@ -6,12 +6,17 @@ # See netcdf-c/COPYRIGHT file for more info. SET(oc_SOURCES oc.c daplex.c dapparse.c dapy.c occompile.c occurlfunctions.c ocdata.c ocdebug.c ocdump.c ocinternal.c ocnode.c ochttp.c ocread.c ocutil.c xxdr.c) - add_library(oc2 OBJECT ${oc_SOURCES}) IF(STATUS_PARALLEL) target_link_libraries(oc2 PUBLIC MPI::MPI_C) ENDIF(STATUS_PARALLEL) +target_link_libraries(oc2 PUBLIC ${CURL_LIBRARIES}) +target_include_directories(oc2 PUBLIC ${CURL_INCLUDE_DIRS}) +target_compile_options(oc2 + PRIVATE + -DCURL_STATICLIB=1 +) # Apparently fails under cmake #set(ocprint_FILES ocprint.c ) From 1508c678beac813688bf670697689cf9d87d34ce Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Tue, 27 Feb 2024 11:50:24 -0600 Subject: [PATCH 64/74] removing c++ header file from c header --- include/ncrc.h | 1 - 1 file changed, 1 deletion(-) diff --git a/include/ncrc.h b/include/ncrc.h index 3586a4ceb..ae858532e 100644 --- a/include/ncrc.h +++ b/include/ncrc.h @@ -15,7 +15,6 @@ and accessing rc files (e.g. .daprc). #include "ncuri.h" #include "nclist.h" #include "ncbytes.h" -#include /* getenv() keys */ #define NCRCENVIGNORE "NCRCENV_IGNORE" From 6738723b721faf30927cd51a5622eef1a85ce4a1 Mon Sep 17 00:00:00 2001 From: Ward Fisher Date: Wed, 28 Feb 2024 16:29:23 -0700 Subject: [PATCH 65/74] Addressing a handful of issues encountered in Visual Studio re: linking, setting compiler flags for VC, etc. --- CMakeLists.txt | 4 ++-- liblib/CMakeLists.txt | 12 ++++++------ libsrc/CMakeLists.txt | 8 ++++++++ 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8bbf95add..57aab7582 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -468,7 +468,7 @@ if(WIN32) option(ENABLE_DLL "Build a Windows DLL." ${BUILD_SHARED_LIBS}) if(ENABLE_DLL) set(BUILD_DLL ON CACHE BOOL "") - target_compile_definitions(netcdf PRIVATE DLL_NETCDF DLL_EXPORT) + add_definitions(-DDLL_NETCDF -DDLL_EXPORT) endif() endif() # Did the user specify a default minimum blocksize for posixio? @@ -1406,7 +1406,7 @@ endif(ENABLE_BASH_SCRIPT_TESTING) configure_file("${netCDF_SOURCE_DIR}/config.h.cmake.in" "${netCDF_BINARY_DIR}/config.h") -add_compile_definitions(-DHAVE_CONFIG_H) +add_definitions(-DHAVE_CONFIG_H) include_directories(${netCDF_BINARY_DIR}) # End autotools-style checks for config.h diff --git a/liblib/CMakeLists.txt b/liblib/CMakeLists.txt index bc9a46813..3e87d920e 100644 --- a/liblib/CMakeLists.txt +++ b/liblib/CMakeLists.txt @@ -96,12 +96,12 @@ if(MOD_NETCDF_NAME) endif() # Make sure that netcdf.dll path does not include the build configuration -if(MSVC) - set_target_properties(netcdf PROPERTIES - RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_BINARY_DIR} - RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_BINARY_DIR}) -endif() +#if(MSVC) +# set_target_properties(netcdf PROPERTIES +# RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} +# RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_BINARY_DIR} +# RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_BINARY_DIR}) +#endif() ##### # Add dependencies required for linking. diff --git a/libsrc/CMakeLists.txt b/libsrc/CMakeLists.txt index debf9a9fc..5bac6b05b 100644 --- a/libsrc/CMakeLists.txt +++ b/libsrc/CMakeLists.txt @@ -49,6 +49,14 @@ endif(ENABLE_BYTERANGE) add_library(netcdf3 OBJECT ${libsrc_SOURCES}) +if (ENABLE_BYTERANGE) + target_include_directories(netcdf3 PUBLIC ${CURL_INCLUDE_DIRS}) + target_compile_options(netcdf3 + PRIVATE + -DCURL_STATICLIB=1 + ) +endif (ENABLE_BYTERANGE) + if(STATUS_PARALLEL) target_link_libraries(netcdf3 PUBLIC MPI::MPI_C) endif(STATUS_PARALLEL) From f9b1b67d3871c91d29cd1455f5cd8abf9c3402e2 Mon Sep 17 00:00:00 2001 From: Ward Fisher Date: Wed, 28 Feb 2024 16:45:48 -0700 Subject: [PATCH 66/74] Correct lingering compilation issue under Visual Studio. Hopefully I haven't broken the Linux build --- CMakeLists.txt | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 57aab7582..0382efc4c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1474,10 +1474,22 @@ endif() add_subdirectory(liblib) +# For tests and utilities, we are no longer +# exporting symbols but rather importing them. +if(BUILD_DLL) + REMOVE_DEFINITIONS(-DDLL_EXPORT) +endif() + if(ENABLE_PLUGINS) add_subdirectory(plugins) endif() +# For tests and utilities, we are no longer +# exporting symbols but rather importing them. +if(BUILD_DLL) + REMOVE_DEFINITIONS(-DDLL_EXPORT) +endif() + # Enable Utilities. if(BUILD_UTILITIES) include_directories(ncdump) From c29db073eb28835e1b027a44e97828047c904515 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Thu, 29 Feb 2024 11:36:47 -0600 Subject: [PATCH 67/74] setting dll export on each target --- CMakeLists.txt | 2 +- cmake/netcdf_functions_macros.cmake | 48 +++++++++++++---------------- libdap2/CMakeLists.txt | 4 +++ libdap4/CMakeLists.txt | 30 ++++++++++-------- libdispatch/CMakeLists.txt | 4 +++ libhdf4/CMakeLists.txt | 14 +++++++-- libhdf5/CMakeLists.txt | 4 +++ libncpoco/CMakeLists.txt | 21 ++++++++----- libncxml/CMakeLists.txt | 24 +++++++-------- libnczarr/CMakeLists.txt | 4 +++ libsrc/CMakeLists.txt | 4 +++ libsrc4/CMakeLists.txt | 4 +++ libsrcp/CMakeLists.txt | 10 ++++-- oc2/CMakeLists.txt | 18 ++++++----- 14 files changed, 120 insertions(+), 71 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0382efc4c..f2ded1f1c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -468,7 +468,7 @@ if(WIN32) option(ENABLE_DLL "Build a Windows DLL." ${BUILD_SHARED_LIBS}) if(ENABLE_DLL) set(BUILD_DLL ON CACHE BOOL "") - add_definitions(-DDLL_NETCDF -DDLL_EXPORT) + target_compile_definitions(netcdf PRIVATE DLL_NETCDF DLL_EXPORT) endif() endif() # Did the user specify a default minimum blocksize for posixio? diff --git a/cmake/netcdf_functions_macros.cmake b/cmake/netcdf_functions_macros.cmake index 27b6b0d49..3d47c7fa6 100644 --- a/cmake/netcdf_functions_macros.cmake +++ b/cmake/netcdf_functions_macros.cmake @@ -150,14 +150,12 @@ macro(build_bin_test F) target_link_libraries(${F} netcdf ${ALL_TLL_LIBS}) if(MSVC) set_target_properties(${F} - PROPERTIES LINK_FLAGS_DEBUG " /NODEFAULTLIB:MSVCRT" - ) - set_target_properties(${F} PROPERTIES RUNTIME_OUTPUT_DIRECTORY - ${CMAKE_CURRENT_BINARY_DIR}) - set_target_properties(${F} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG - ${CMAKE_CURRENT_BINARY_DIR}) - set_target_properties(${F} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE - ${CMAKE_CURRENT_BINARY_DIR}) + PROPERTIES + LINK_FLAGS_DEBUG " /NODEFAULTLIB:MSVCRT" + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_BINARY_DIR} + RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_BINARY_DIR} + ) endif() endmacro() @@ -167,12 +165,11 @@ macro(add_bin_test_no_prefix F) add_test(${F} ${EXECUTABLE_OUTPUT_PATH}/${F}) if(MSVC) set_property(TEST ${F} PROPERTY FOLDER "tests/") - set_target_properties(${F} PROPERTIES RUNTIME_OUTPUT_DIRECTORY - ${CMAKE_CURRENT_BINARY_DIR}) - set_target_properties(${F} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG - ${CMAKE_CURRENT_BINARY_DIR}) - set_target_properties(${F} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE - ${CMAKE_CURRENT_BINARY_DIR}) + set_target_properties(${F} PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_BINARY_DIR} + RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_BINARY_DIR} + ) endif() endmacro() @@ -181,12 +178,11 @@ macro(build_bin_test_no_prefix F) build_bin_test(${F}) if(MSVC) #SET_PROPERTY(TEST ${F} PROPERTY FOLDER "tests/") - set_target_properties(${F} PROPERTIES RUNTIME_OUTPUT_DIRECTORY - ${CMAKE_CURRENT_BINARY_DIR}) - set_target_properties(${F} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG - ${CMAKE_CURRENT_BINARY_DIR}) - set_target_properties(${F} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE - ${CMAKE_CURRENT_BINARY_DIR}) + set_target_properties(${F} PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_BINARY_DIR} + RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_BINARY_DIR} + ) endif() endmacro() @@ -207,12 +203,12 @@ macro(add_bin_test prefix F) ) if(MSVC) set_property(TEST ${prefix}_${F} PROPERTY FOLDER "tests/") - set_target_properties(${prefix}_${F} PROPERTIES RUNTIME_OUTPUT_DIRECTORY - ${CMAKE_CURRENT_BINARY_DIR}) - set_target_properties(${prefix}_${F} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG - ${CMAKE_CURRENT_BINARY_DIR}) - set_target_properties(${prefix}_${F} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE - ${CMAKE_CURRENT_BINARY_DIR}) + set_target_properties(${prefix}_${F} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_BINARY_DIR} + RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_BINARY_DIR} + ) endif() endmacro() diff --git a/libdap2/CMakeLists.txt b/libdap2/CMakeLists.txt index 55c52fbdb..45161a6e2 100644 --- a/libdap2/CMakeLists.txt +++ b/libdap2/CMakeLists.txt @@ -34,6 +34,10 @@ target_compile_options(dap2 -DCURL_STATICLIB=1 ) +if (ENABLE_DLL) + target_compile_definitions(dap2 PRIVATE DLL_NETCDF DLL_EXPORT) +endif() + IF(STATUS_PARALLEL) target_link_libraries(dap2 PUBLIC MPI::MPI_C) ENDIF(STATUS_PARALLEL) diff --git a/libdap4/CMakeLists.txt b/libdap4/CMakeLists.txt index bcb49028a..11aa67a59 100644 --- a/libdap4/CMakeLists.txt +++ b/libdap4/CMakeLists.txt @@ -4,7 +4,7 @@ # University Corporation for Atmospheric Research/Unidata. # See netcdf-c/COPYRIGHT file for more info. -SET(dap4_SOURCES d4curlfunctions.c d4fix.c d4data.c d4file.c d4parser.c d4meta.c d4varx.c d4dump.c d4swap.c d4chunk.c d4printer.c d4read.c d4http.c d4util.c d4odom.c d4cvt.c d4debug.c ncd4dispatch.c) +set(dap4_SOURCES d4curlfunctions.c d4fix.c d4data.c d4file.c d4parser.c d4meta.c d4varx.c d4dump.c d4swap.c d4chunk.c d4printer.c d4read.c d4http.c d4util.c d4odom.c d4cvt.c d4debug.c ncd4dispatch.c) ## # Turn off inclusion of particular files when using the cmake-native @@ -27,9 +27,13 @@ target_compile_options(dap4 -DCURL_STATICLIB=1 ) -IF(STATUS_PARALLEL) +if (ENABLE_DLL) + target_compile_definitions(dap4 PRIVATE DLL_NETCDF DLL_EXPORT) +endif() + +if(STATUS_PARALLEL) target_link_libraries(dap4 PUBLIC MPI::MPI_C) -ENDIF(STATUS_PARALLEL) +endif(STATUS_PARALLEL) ### # Options related to the man page generation. @@ -43,18 +47,18 @@ set(man_MANS netcdf.3) set(ARGS_MANPAGE -DAPI=C) -IF (USE_HDF5) - SET(ARGS_MANPAGE ${ARGS_MANPAGE} -DNETCDF4=TRUE) -ENDIF(USE_HDF5) +if (USE_HDF5) + set(ARGS_MANPAGE ${ARGS_MANPAGE} -DNETCDF4=TRUE) +endif(USE_HDF5) -IF (BUILD_DAP) - SET(ARGS_MANPAGE ${ARGS_MANPAGE} -DDAP=TRUE) -ENDIF(BUILD_DAP) +if (BUILD_DAP) + set(ARGS_MANPAGE ${ARGS_MANPAGE} -DDAP=TRUE) +endif(BUILD_DAP) -IF (BUILD_PARALLEL) - SET(ARGS_MANPAGE ${ARGS_MANPAGE} -DPARALLEL_IO=TRUE) -ENDIF(BUILD_PARALLEL) +if (BUILD_PARALLEL) + set(ARGS_MANPAGE ${ARGS_MANPAGE} -DPARALLEL_IO=TRUE) +endif(BUILD_PARALLEL) FILE(GLOB CUR_EXTRA_DIST RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/*.c ${CMAKE_CURRENT_SOURCE_DIR}/*.h) -SET(CUR_EXTRA_DIST ${CUR_EXTRA_DIST} dce.y CMakeLists.txt Makefile.am) +set(CUR_EXTRA_DIST ${CUR_EXTRA_DIST} dce.y CMakeLists.txt Makefile.am) ADD_EXTRA_DIST("${CUR_EXTRA_DIST}") diff --git a/libdispatch/CMakeLists.txt b/libdispatch/CMakeLists.txt index 2ad44f5d5..7c3abf237 100644 --- a/libdispatch/CMakeLists.txt +++ b/libdispatch/CMakeLists.txt @@ -13,6 +13,10 @@ target_sources(dispatch dcrc32.c dcrc32.h dcrc64.c ncexhash.c ncxcache.c ncjson.c ds3util.c dparallel.c dmissing.c ) +if (ENABLE_DLL) + target_compile_definitions(dispatch PRIVATE DLL_NETCDF DLL_EXPORT) +endif() + ## # Turn off inclusion of particular files when using the cmake-native # option to turn on Unity Builds. diff --git a/libhdf4/CMakeLists.txt b/libhdf4/CMakeLists.txt index 533982e56..05b3b9a07 100644 --- a/libhdf4/CMakeLists.txt +++ b/libhdf4/CMakeLists.txt @@ -5,12 +5,22 @@ # # Ed Hartnett -# The source files for the HDF4 dispatch layer. -SET(libhdf4_SOURCES hdf4dispatch.c hdf4file.c hdf4func.c hdf4var.c) # Build the HDF4 dispatch layer as a library that will be included in # the netCDF library. add_library(netcdfhdf4 OBJECT ${libhdf4_SOURCES}) +target_sources(netcdfhdf4 + PRIVATE + hdf4dispatch.c + hdf4file.c + hdf4func.c + hdf4var.c +) + +if (ENABLE_DLL) + target_compile_definitions(netcdfhdf4 PRIVATE DLL_NETCDF DLL_EXPORT) +endif() + # Remember to package this file for CMake builds. ADD_EXTRA_DIST(${libhdf4_SOURCES} CMakeLists.txt) diff --git a/libhdf5/CMakeLists.txt b/libhdf5/CMakeLists.txt index a5d14a139..12904b131 100644 --- a/libhdf5/CMakeLists.txt +++ b/libhdf5/CMakeLists.txt @@ -17,6 +17,10 @@ target_sources(netcdfhdf5 PRIVATE hdf5set_format_compatibility.c hdf5debug.c ) +if (ENABLE_DLL) + target_compile_definitions(netcdfhdf5 PRIVATE DLL_NETCDF DLL_EXPORT) +endif() + if(ENABLE_BYTERANGE) target_sources(netcdfhdf5 PRIVATE H5FDhttp.c diff --git a/libncpoco/CMakeLists.txt b/libncpoco/CMakeLists.txt index a15ab5cff..aaf77b586 100644 --- a/libncpoco/CMakeLists.txt +++ b/libncpoco/CMakeLists.txt @@ -1,8 +1,15 @@ -SET(libncpoco_SOURCES ncpoco.c ncpoco.h) -IF(MSVC) - SET(libncpoco_SOURCES ${libncpoco_SOURCES} cp_win32.c) -ELSE() - SET(libncpoco_SOURCES ${libncpoco_SOURCES} cp_unix.c) -ENDIF() +set(libncpoco_SOURCES ncpoco.c ncpoco.h) + +if(MSVC) + set(libncpoco_SOURCES ${libncpoco_SOURCES} cp_win32.c) +else() + set(libncpoco_SOURCES ${libncpoco_SOURCES} cp_unix.c) +endif() + add_library(ncpoco OBJECT ${libncpoco_SOURCES}) -ADD_EXTRA_DIST(${libncpoco_SOURCES} CMakeLists.txt) + +if (ENABLE_DLL) + target_compile_definitions(ncpoco PRIVATE DLL_NETCDF DLL_EXPORT) +endif() + +add_extra_dist(${libncpoco_SOURCES} CMakeLists.txt) diff --git a/libncxml/CMakeLists.txt b/libncxml/CMakeLists.txt index 1954c3934..6d0c0d750 100644 --- a/libncxml/CMakeLists.txt +++ b/libncxml/CMakeLists.txt @@ -1,26 +1,26 @@ -IF(HAVE_LIBXML2) - SET(libncxml_SOURCES ncxml_xml2.c) -ELSE() - SET(libncxml_SOURCES ncxml_tinyxml2.cpp tinyxml2.cpp tinyxml2.h) -ENDIF() +if(HAVE_LIBXML2) + set(libncxml_SOURCES ncxml_xml2.c) +else() + set(libncxml_SOURCES ncxml_tinyxml2.cpp tinyxml2.cpp tinyxml2.h) +endif() add_library(ncxml OBJECT ${libncxml_SOURCES}) -IF(HAVE_LIBXML2) +if(HAVE_LIBXML2) target_include_directories(ncxml PUBLIC ./include PRIVATE ${LIBXML2_INCLUDE_DIRS} ) -ELSE() +else() target_include_directories(ncxml PUBLIC ./include ) -ENDIF(HAVE_LIBXML2) +endif(HAVE_LIBXML2) -#IF(NOT MSVC) -#target_compile_features(ncxml PUBLIC cxx_std_11) -#ENDIF() +if (ENABLE_DLL) + target_compile_definitions(ncxml PRIVATE DLL_NETCDF DLL_EXPORT) +endif() -ADD_EXTRA_DIST(CMakeLists.txt license.txt) +add_extra_dist(CMakeLists.txt license.txt) diff --git a/libnczarr/CMakeLists.txt b/libnczarr/CMakeLists.txt index 87b98acad..5d70e6bab 100644 --- a/libnczarr/CMakeLists.txt +++ b/libnczarr/CMakeLists.txt @@ -69,5 +69,9 @@ if(STATUS_PARALLEL) target_link_libraries(nczarr PUBLIC MPI::MPI_C) endif(STATUS_PARALLEL) +if (ENABLE_DLL) + target_compile_definitions(nczarr PRIVATE DLL_NETCDF DLL_EXPORT) +endif() + # Remember to package this file for CMake builds. ADD_EXTRA_DIST(${libnczarr_SOURCES} CMakeLists.txt) diff --git a/libsrc/CMakeLists.txt b/libsrc/CMakeLists.txt index 5bac6b05b..04c9ad9b0 100644 --- a/libsrc/CMakeLists.txt +++ b/libsrc/CMakeLists.txt @@ -49,6 +49,10 @@ endif(ENABLE_BYTERANGE) add_library(netcdf3 OBJECT ${libsrc_SOURCES}) +if (ENABLE_DLL) + target_compile_definitions(netcdf3 PRIVATE DLL_NETCDF DLL_EXPORT) +endif() + if (ENABLE_BYTERANGE) target_include_directories(netcdf3 PUBLIC ${CURL_INCLUDE_DIRS}) target_compile_options(netcdf3 diff --git a/libsrc4/CMakeLists.txt b/libsrc4/CMakeLists.txt index 9ba0d4398..5674d3779 100644 --- a/libsrc4/CMakeLists.txt +++ b/libsrc4/CMakeLists.txt @@ -11,6 +11,10 @@ nc4internal.c nc4type.c nc4var.c ncfunc.c ncindex.c nc4cache.c) add_library(netcdf4 OBJECT ${libsrc4_SOURCES}) +if (ENABLE_DLL) + target_compile_definitions(netcdf4 PRIVATE DLL_NETCDF DLL_EXPORT) +endif() + if(STATUS_PARALLEL) target_link_libraries(netcdf4 PUBLIC MPI::MPI_C) endif(STATUS_PARALLEL) diff --git a/libsrcp/CMakeLists.txt b/libsrcp/CMakeLists.txt index adf1d3413..5e6c14da8 100644 --- a/libsrcp/CMakeLists.txt +++ b/libsrcp/CMakeLists.txt @@ -5,8 +5,12 @@ # See netcdf-c/COPYRIGHT file for more info. -SET(libsrcp_SOURCES ncpdispatch.c) - add_library(netcdfp OBJECT ${libsrcp_SOURCES}) -ADD_EXTRA_DIST(${libsrcp_SOURCES} CMakeLists.txt) +target_sources(netcdfp PRIVATE ncpdispatch.c) + +if (ENABLE_DLL) + target_compile_definitions(netcdfp PRIVATE DLL_NETCDF DLL_EXPORT) +endif() + +add_extra_dist(${libsrcp_SOURCES} CMakeLists.txt) diff --git a/oc2/CMakeLists.txt b/oc2/CMakeLists.txt index c67098095..c97457a05 100644 --- a/oc2/CMakeLists.txt +++ b/oc2/CMakeLists.txt @@ -4,13 +4,17 @@ # University Corporation for Atmospheric Research/Unidata. # See netcdf-c/COPYRIGHT file for more info. -SET(oc_SOURCES oc.c daplex.c dapparse.c dapy.c occompile.c occurlfunctions.c ocdata.c ocdebug.c ocdump.c ocinternal.c ocnode.c ochttp.c ocread.c ocutil.c xxdr.c) +set(oc_SOURCES oc.c daplex.c dapparse.c dapy.c occompile.c occurlfunctions.c ocdata.c ocdebug.c ocdump.c ocinternal.c ocnode.c ochttp.c ocread.c ocutil.c xxdr.c) add_library(oc2 OBJECT ${oc_SOURCES}) -IF(STATUS_PARALLEL) +if (ENABLE_DLL) + target_compile_definitions(oc2 PRIVATE DLL_NETCDF DLL_EXPORT) +endif() + +if(STATUS_PARALLEL) target_link_libraries(oc2 PUBLIC MPI::MPI_C) -ENDIF(STATUS_PARALLEL) +endif(STATUS_PARALLEL) target_link_libraries(oc2 PUBLIC ${CURL_LIBRARIES}) target_include_directories(oc2 PUBLIC ${CURL_INCLUDE_DIRS}) target_compile_options(oc2 @@ -24,8 +28,8 @@ target_compile_options(oc2 #TARGET_LINK_LIBRARIES(ocprint oc2 ${ALL_TLL_LIBS}) ## Specify files to be distributed by 'make dist' -FILE(GLOB CUR_EXTRA_DIST RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/*.c ${CMAKE_CURRENT_SOURCE_DIR}/*.h ${CMAKE_CURRENT_SOURCE_DIR}/*.sh) -SET(CUR_EXTRA_DIST ${CUR_EXTRA_DIST} CMakeLists.txt Makefile.am) -SET(CUR_EXTRA_DIST ${CUR_EXTRA_DIST} dap.y) -SET(CUR_EXTRA_DIST ${CUR_EXTRA_DIST} ocauth.html) +file(GLOB CUR_EXTRA_DIST RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/*.c ${CMAKE_CURRENT_SOURCE_DIR}/*.h ${CMAKE_CURRENT_SOURCE_DIR}/*.sh) +set(CUR_EXTRA_DIST ${CUR_EXTRA_DIST} CMakeLists.txt Makefile.am) +set(CUR_EXTRA_DIST ${CUR_EXTRA_DIST} dap.y) +set(CUR_EXTRA_DIST ${CUR_EXTRA_DIST} ocauth.html) ADD_EXTRA_DIST("${CUR_EXTRA_DIST}") From 2ffbcc660bfa1bad7f27ae7ba116776b0a605fc7 Mon Sep 17 00:00:00 2001 From: Ward Fisher Date: Thu, 29 Feb 2024 11:53:13 -0700 Subject: [PATCH 68/74] Modify messages to be more clear. --- CMakeLists.txt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0382efc4c..9cc4864c0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -632,7 +632,9 @@ include(CMakeDependentOption) # libdl is always available; built-in in Windows and OSX cmake_dependent_option(ENABLE_PLUGINS "Enable dynamically loaded plugins (default on)." ON "BUILD_SHARED_LIBS" OFF) +MESSAGE(STATUS "ENABLE_PLUGINS: ${ENABLE_PLUGINS}") if(MINGW) + message(STATUS "MINGW Detected, disabling plugins.") set(ENABLE_PLUGINS OFF CACHE BOOL "Disable plugins" FORCE) else() if(NOT WIN32) @@ -641,6 +643,7 @@ else() endif() endif() endif() + if(ENABLE_PLUGINS) set(USEPLUGINS yes) endif() @@ -1028,8 +1031,8 @@ option(ENABLE_NCZARR_FILTERS "Enable NCZarr filters" ON) option(ENABLE_NCZARR_FILTERS_TESTING "Enable NCZarr filter testing." ON) # Constraints -IF (NOT ENABLE_PLUGINS) - message(WARNING "ENABLE_FILTER_TESTING requires shared libraries. Disabling.") +if (NOT ENABLE_PLUGINS AND ENABLE_NCZARR_FILTERS) + message(WARNING "ENABLE_NCZARR_FILTERS requires ENABLE_PLUGINS. Disabling.") set(ENABLE_NCZARR_FILTERS OFF CACHE BOOL "Enable NCZarr Filters." FORCE) endif() From 5ee9038a9f3af6b86778e21b9b9e8e062738695a Mon Sep 17 00:00:00 2001 From: Ward Fisher Date: Thu, 29 Feb 2024 12:01:52 -0700 Subject: [PATCH 69/74] Update cmake-based plugins and test logic. --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9cc4864c0..1ba2312e5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1013,7 +1013,7 @@ IF (ENABLE_PARALLEL_TESTS AND NOT USE_PARALLEL) endif() # Enable special filter test; experimental when using cmake. -option(ENABLE_FILTER_TESTING "Enable filter testing. Ignored if shared libraries or netCDF4 are not enabled" ON) +option(ENABLE_FILTER_TESTING "Enable filter testing. Ignored if shared libraries or netCDF4 are not enabled" ${ENABLE_PLUGINS}) if(ENABLE_FILTER_TESTING) if(NOT ENABLE_HDF5 AND NOT ENABLE_NCZARR) @@ -1027,8 +1027,8 @@ if(NOT BUILD_SHARED_LIBS) set(ENABLE_FILTER_TESTING OFF) endif() -option(ENABLE_NCZARR_FILTERS "Enable NCZarr filters" ON) -option(ENABLE_NCZARR_FILTERS_TESTING "Enable NCZarr filter testing." ON) +option(ENABLE_NCZARR_FILTERS "Enable NCZarr filters" ${ENABLE_PLUGINS}) +option(ENABLE_NCZARR_FILTERS_TESTING "Enable NCZarr filter testing." ${ENABLE_NCZARR_FILTERS}) # Constraints if (NOT ENABLE_PLUGINS AND ENABLE_NCZARR_FILTERS) From 8633448eea81e2196c1d4aa8fe2c45aacafa1fc3 Mon Sep 17 00:00:00 2001 From: Ward Fisher Date: Thu, 29 Feb 2024 12:15:30 -0700 Subject: [PATCH 70/74] Re-adding global add-definition for the time being. Its lack introduces an unnecessary roadblock (at the moment). Re-formulated logic for determining what tests to run when. Need to figure out why plugins are turned off when MINGW is true, but that's a different issue. As of this push, all tests succeed on local windows system. --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 023842901..9604ae72f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -468,6 +468,7 @@ if(WIN32) option(ENABLE_DLL "Build a Windows DLL." ${BUILD_SHARED_LIBS}) if(ENABLE_DLL) set(BUILD_DLL ON CACHE BOOL "") + ADD_DEFINITIONS(-DDLL_NETCDF -DDLL_EXPORT) target_compile_definitions(netcdf PRIVATE DLL_NETCDF DLL_EXPORT) endif() endif() From 64cb40424cf3ad8a45b566a70958135c2eaa7826 Mon Sep 17 00:00:00 2001 From: Ward Fisher Date: Tue, 5 Mar 2024 09:39:35 -0700 Subject: [PATCH 71/74] Removed assumption that we are linking against static HDF5 when building a static library. While it's reasonable to provide a mechanism to specify this, it is not necessarily true. We should also perhaps rename the NC_FIND_SHARED option, since LIBS implies it will look for static or shared libraries for all dependencies, but this logic only looks for HDF5. In any case, commenting this out for now until we can rework it. --- cmake/dependencies.cmake | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake index 64f7dc2b1..a7edeced5 100644 --- a/cmake/dependencies.cmake +++ b/cmake/dependencies.cmake @@ -116,13 +116,13 @@ if(USE_HDF5) # we will use a static library. This can be toggled # by explicitly modifying NC_FIND_SHARED_LIBS. ## - if (MSVC) - if(NC_FIND_SHARED_LIBS) - set(HDF5_USE_STATIC_LIBRARIES OFF) - else() - set(HDF5_USE_STATIC_LIBRARIES ON) - endif() - endif() + #if (MSVC) + # if(NC_FIND_SHARED_LIBS) + # set(HDF5_USE_STATIC_LIBRARIES OFF) + # else() + # set(HDF5_USE_STATIC_LIBRARIES ON) + # endif() + #endif() ##### # First, find the C and HL libraries. From 76f5a08f23d3aedbf64e1d9864aae231131e9594 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Thu, 7 Mar 2024 10:57:25 -0600 Subject: [PATCH 72/74] removing need for global compile definition --- CMakeLists.txt | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9604ae72f..f9e590a1c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -468,8 +468,8 @@ if(WIN32) option(ENABLE_DLL "Build a Windows DLL." ${BUILD_SHARED_LIBS}) if(ENABLE_DLL) set(BUILD_DLL ON CACHE BOOL "") - ADD_DEFINITIONS(-DDLL_NETCDF -DDLL_EXPORT) - target_compile_definitions(netcdf PRIVATE DLL_NETCDF DLL_EXPORT) + target_compile_definitions(netcdf PRIVATE DLL_EXPORT) + target_compile_definitions(netcdf PUBLIC DLL_NETCDF) endif() endif() # Did the user specify a default minimum blocksize for posixio? @@ -1478,22 +1478,10 @@ endif() add_subdirectory(liblib) -# For tests and utilities, we are no longer -# exporting symbols but rather importing them. -if(BUILD_DLL) - REMOVE_DEFINITIONS(-DDLL_EXPORT) -endif() - if(ENABLE_PLUGINS) add_subdirectory(plugins) endif() -# For tests and utilities, we are no longer -# exporting symbols but rather importing them. -if(BUILD_DLL) - REMOVE_DEFINITIONS(-DDLL_EXPORT) -endif() - # Enable Utilities. if(BUILD_UTILITIES) include_directories(ncdump) From bca37ebe0e6fc910052e2eac8844b2ef553d24e0 Mon Sep 17 00:00:00 2001 From: Ward Fisher Date: Thu, 7 Mar 2024 17:02:26 -0700 Subject: [PATCH 73/74] Make a change in support of https://github.com/Unidata/netcdf-c/pull/2879 --- liblib/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/liblib/CMakeLists.txt b/liblib/CMakeLists.txt index 3e87d920e..4116595f3 100644 --- a/liblib/CMakeLists.txt +++ b/liblib/CMakeLists.txt @@ -148,7 +148,7 @@ if(FOUND_CURL) endif() if(USE_HDF4) - set(TLL_LIBS ${HDF4_MFHDF_LIB} ${HDF4_DF_LIB} ${TLL_LIBS}) + set(TLL_LIBS ${HDF4_LIBRARIES} ${TLL_LIBS}) endif() if(ENABLE_PNETCDF AND PNETCDF) From 79cb6c554bd5b4b0a227cd6fb9cad85f66e74a3c Mon Sep 17 00:00:00 2001 From: Ward Fisher Date: Fri, 8 Mar 2024 16:38:27 -0700 Subject: [PATCH 74/74] Bump Visual Studio appveyor, for the brief period before we swap out to GitHub actions. --- appveyor.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index acbb9d50a..970be33af 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,4 +1,4 @@ -image: Visual Studio 2017 +image: Visual Studio 2019 environment: matrix: @@ -6,7 +6,7 @@ environment: CONDA_INSTALL_LOCN: C:\\Miniconda-x64 MSYS2_INSTALL_LOCN: C:\msys64 MSYS2_BIN_LOCN: C:\msys64\usr\bin - CMAKE_GENERATOR: "Visual Studio 15 Win64" + CMAKE_GENERATOR: "Visual Studio 16" platform: - x64