Skip to content

Commit 8eb7129

Browse files
authored
Merge pull request #2101 from DennisHeimbigner/zarrfilters.dmh
Add filter support to NCZarr
2 parents 09e0e04 + 05167d1 commit 8eb7129

176 files changed

Lines changed: 17408 additions & 6533 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/run_tests.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -199,9 +199,9 @@ jobs:
199199
if: matrix.use_dap == 'dap_off'
200200
- run: echo "ENABLE_DAP=ON" >> $GITHUB_ENV
201201
if: matrix.use_dap == 'dap_on'
202-
- run: echo "ENABLE_NCZARR=--disable-nczarr" >> $GITHUB_ENV
202+
- run: echo "ENABLE_NCZARR=OFF" >> $GITHUB_ENV
203203
if: matrix.use_nczarr == 'nczarr_off'
204-
- run: echo "ENABLE_NCZARR=--enable-nczarr" >> $GITHUB_ENV
204+
- run: echo "ENABLE_NCZARR=ON" >> $GITHUB_ENV
205205
if: matrix.use_nczarr == 'nczarr_on'
206206
- run: echo "CTEST_OUTPUT_ON_FAILURE=1" >> $GITHUB_ENV
207207

CMakeLists.txt

Lines changed: 91 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ set(PACKAGE "netCDF" CACHE STRING "")
2626

2727
SET(NC_VERSION_MAJOR 4)
2828
SET(NC_VERSION_MINOR 8)
29-
SET(NC_VERSION_PATCH 2)
29+
SET(NC_VERSION_PATCH 1)
3030
SET(NC_VERSION_NOTE "-development")
3131
SET(netCDF_VERSION ${NC_VERSION_MAJOR}.${NC_VERSION_MINOR}.${NC_VERSION_PATCH}${NC_VERSION_NOTE})
3232
SET(VERSION ${netCDF_VERSION})
@@ -118,6 +118,11 @@ MACRO(CHECK_C_LINKER_FLAG M_FLAG M_RESULT)
118118
SET(CMAKE_REQUIRED_FLAGS "${T_REQ_FLAG}")
119119
ENDMACRO()
120120

121+
# Enable 'dist and distcheck'.
122+
# File adapted from http://ensc.de/cmake/FindMakeDist.cmake
123+
FIND_PACKAGE(MakeDist)
124+
# End 'enable dist and distcheck'
125+
121126
# Set the build type.
122127
IF(NOT CMAKE_BUILD_TYPE)
123128
SET(CMAKE_BUILD_TYPE DEBUG CACHE STRING "Choose the type of build, options are: None, Debug, Release."
@@ -194,15 +199,6 @@ ENDIF()
194199

195200
OPTION(NC_FIND_SHARED_LIBS "Find dynamically-built versions of dependent libraries" ${BUILD_SHARED_LIBS})
196201

197-
##
198-
# Check to see if C compiler supports -fno-strict-aliasing, in support of
199-
# https://github.com/Unidata/netcdf-c/issues/1983
200-
##
201-
CHECK_C_COMPILER_FLAG(-fno-strict-aliasing CC_SUPPORTS_NO_STRICT_ALIASING)
202-
IF(CC_SUPPORTS_NO_STRICT_ALIASING)
203-
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-strict-aliasing")
204-
ENDIF(CC_SUPPORTS_NO_STRICT_ALIASING)
205-
206202
##
207203
# We've had a request to allow for non-versioned shared libraries.
208204
# This seems reasonable enough to accommodate. See
@@ -773,10 +769,6 @@ IF(USE_HDF5)
773769
# are a hot mess between versions.
774770
####
775771

776-
IF(HDF5_hdf5_LIBRARY AND NOT HDF5_C_LIBRARY)
777-
SET(HDF5_C_LIBRARY ${HDF5_hdf5_LIBRARY})
778-
ENDIF()
779-
780772
# Depending on the install, either HDF5_hdf_library or
781773
# HDF5_C_LIBRARIES may be defined. We must check for either.
782774
IF(HDF5_C_LIBRARIES AND NOT HDF5_hdf5_LIBRARY)
@@ -933,7 +925,7 @@ int main() {
933925
}" HAVE_LIBCURL_766)
934926

935927
IF (HAVE_LIBCURL_766)
936-
# If libcurl version is >= 7.66, then can skip tests
928+
# If libcurl version is >= 7.66, then can skip tests
937929
# for these symbols which were added in an earlier version
938930
set(HAVE_CURLOPT_USERNAME TRUE)
939931
set(HAVE_CURLOPT_PASSWORD TRUE)
@@ -1016,17 +1008,63 @@ OPTION(ENABLE_DAP_LONG_TESTS "Enable DAP long tests." OFF)
10161008
OPTION(ENABLE_DAP_REMOTE_TESTS "Enable DAP remote tests." ON)
10171009
SET(REMOTETESTSERVERS "remotetest.unidata.ucar.edu" CACHE STRING "test servers to use for remote test")
10181010

1011+
# See if we have zlib
1012+
FIND_PACKAGE(ZLIB)
1013+
1014+
# Define a test flag for have zlib library
1015+
IF(ZLIB_FOUND)
1016+
INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIRS})
1017+
SET(ENABLE_ZLIB TRUE)
1018+
ELSE()
1019+
SET(ENABLE_ZLIB FALSE)
1020+
ENDIF()
1021+
1022+
# See if we have libblosc
1023+
IF(!MSVC)
1024+
FIND_PACKAGE(Blosc)
1025+
ENDIF()
1026+
# Define a test flag for have blosc library
1027+
IF(Blosc_FOUND)
1028+
INCLUDE_DIRECTORIES(${Blosc_INCLUDE_DIRS})
1029+
SET(ENABLE_BLOSC TRUE)
1030+
ELSE()
1031+
SET(ENABLE_BLOSC FALSE)
1032+
ENDIF()
1033+
1034+
# See if we have libszip
1035+
IF(!MSVC)
1036+
#FIND_PACKAGE(SZIP)
1037+
#FIND_LIBRARY(SZIP PATH NAMES szip sz)
1038+
SET(SZIP_LIBRARY ${SZIP})
1039+
ENDIF()
1040+
message("xxx: ${SZIP_FOUND} ; ${SZIP}")
1041+
# Define a test flag for have szip library
1042+
IF(SZIP_FOUND)
1043+
INCLUDE_DIRECTORIES(${SZIP_INCLUDE_DIRS})
1044+
SET(ENABLE_SZIP TRUE)
1045+
ELSE()
1046+
SET(ENABLE_SZIP FALSE)
1047+
ENDIF()
1048+
10191049
# See if we have libzip
10201050
FIND_PACKAGE(Zip)
10211051

1022-
# Define a test flag for have curl library
1052+
# Define a test flag for have zip library
10231053
IF(Zip_FOUND)
10241054
INCLUDE_DIRECTORIES(${Zip_INCLUDE_DIRS})
10251055
SET(ENABLE_NCZARR_ZIP TRUE)
10261056
ELSE()
10271057
SET(ENABLE_NCZARR_ZIP FALSE)
10281058
ENDIF()
10291059

1060+
# libdl is always available; built-in in Windows and OSX
1061+
SET(ENABLE_PLUGINS TRUE)
1062+
IF(NOT WIN32)
1063+
IF(HAVE_DLFCN_H)
1064+
INCLUDE_DIRECTORIES("dlfcn.h")
1065+
ENDIF()
1066+
ENDIF()
1067+
10301068
# Enable some developer-only tests
10311069
OPTION(ENABLE_EXTRA_TESTS "Enable Extra tests. Some may not work because of known issues. Developers only." OFF)
10321070
IF(ENABLE_EXTRA_TESTS)
@@ -1049,9 +1087,9 @@ IF(MSVC)
10491087
FILE(COPY ${netCDF_SOURCE_DIR}/libsrc/XGetopt.c
10501088
DESTINATION ${netCDF_BINARY_DIR}/ncdump/)
10511089
FILE(COPY ${netCDF_SOURCE_DIR}/libsrc/XGetopt.c
1052-
DESTINATION ${netCDF_BINARY_DIR}/nczarr_test/)
1090+
DESTINATION ${netCDF_BINARY_DIR}/nczarr_test/)
10531091
FILE(COPY ${netCDF_SOURCE_DIR}/libsrc/XGetopt.c
1054-
DESTINATION ${netCDF_BINARY_DIR}/ncdap_test/)
1092+
DESTINATION ${netCDF_BINARY_DIR}/ncdap_test/)
10551093
ENDIF()
10561094
ENDIF()
10571095

@@ -1386,20 +1424,21 @@ IF (ENABLE_PARALLEL_TESTS AND NOT USE_PARALLEL)
13861424
ENDIF()
13871425

13881426
# Enable special filter test; experimental when using cmake.
1389-
OPTION(ENABLE_FILTER_TESTING "Enable filter testing. Ignored if shared libraries or netCDF4 are not enabled" ${ENABLE_HDF5})
1390-
IF(ENABLE_FILTER_TESTING AND NOT ENABLE_HDF5)
1391-
MESSAGE(WARNING "ENABLE_FILTER_TESTING requires HDF5. Disabling.")
1392-
SET(ENABLE_FILTER_TESTING OFF)
1427+
OPTION(ENABLE_FILTER_TESTING "Enable filter testing. Ignored if shared libraries or netCDF4 are not enabled" yes)
1428+
1429+
IF(ENABLE_FILTER_TESTING)
1430+
if(NOT ENABLE_HDF5 AND NOT ENABLE_NCZARR)
1431+
MESSAGE(WARNING "ENABLE_FILTER_TESTING requires HDF5 and/or NCZarr. Disabling.")
1432+
SET(ENABLE_FILTER_TESTING OFF CACHE BOOL "Enable Filter Testing" FORCE)
1433+
ENDIF()
13931434
ENDIF()
1435+
13941436
IF(NOT BUILD_SHARED_LIBS)
13951437
MESSAGE(WARNING "ENABLE_FILTER_TESTING requires shared libraries. Disabling.")
13961438
SET(ENABLE_FILTER_TESTING OFF)
13971439
ENDIF()
1398-
OPTION(ENABLE_CLIENTSIDE_FILTERS "Enable client-side filter registration." OFF)
1399-
IF(NOT ENABLE_FILTER_TESTING)
1400-
SET(ENABLE_CLIENTSIDE_FILTERS OFF)
1401-
ENDIF()
14021440

1441+
SET(ENABLE_CLIENTSIDE_FILTERS OFF)
14031442

14041443
# Determine whether or not to generate documentation.
14051444
OPTION(ENABLE_DOXYGEN "Enable generation of doxygen-based documentation." OFF)
@@ -1533,6 +1572,7 @@ CHECK_INCLUDE_FILE("libgen.h" HAVE_LIBGEN_H)
15331572
CHECK_INCLUDE_FILE("execinfo.h" HAVE_EXECINFO_H)
15341573
CHECK_INCLUDE_FILE("dirent.h" HAVE_DIRENT_H)
15351574
CHECK_INCLUDE_FILE("time.h" HAVE_TIME_H)
1575+
CHECK_INCLUDE_FILE("dlfcn.h" HAVE_DLFCN_H)
15361576

15371577
# Symbol Exists
15381578
CHECK_SYMBOL_EXISTS(isfinite "math.h" HAVE_DECL_ISFINITE)
@@ -1931,7 +1971,7 @@ ENDIF(ENABLE_BASH_SCRIPT_TESTING)
19311971

19321972
MACRO(add_sh_test prefix F)
19331973
IF(HAVE_BASH)
1934-
ADD_TEST(${prefix}_${F} bash "-c" "export srcdir=${CMAKE_CURRENT_SOURCE_DIR};export TOPSRCDIR=${CMAKE_SOURCE_DIR};${CMAKE_CURRENT_BINARY_DIR}/${F}.sh ${ARGN}")
1974+
ADD_TEST(${prefix}_${F} bash "-c" "export srcdir=${CMAKE_CURRENT_SOURCE_DIR};export TOPSRCDIR=${CMAKE_SOURCE_DIR};${CMAKE_CURRENT_BINARY_DIR}/${F}.sh ${F}.sh ${ARGN}")
19351975
ENDIF()
19361976
ENDMACRO()
19371977

@@ -2018,17 +2058,31 @@ IF(ENABLE_DAP4)
20182058
ADD_SUBDIRECTORY(libdap4)
20192059
ENDIF()
20202060

2061+
IF(ENABLE_PLUGINS)
2062+
ADD_SUBDIRECTORY(libncpoco)
2063+
ENDIF()
2064+
20212065
IF(ENABLE_NCZARR)
20222066
ADD_SUBDIRECTORY(libnczarr)
20232067
FILE(COPY ${netCDF_SOURCE_DIR}/unit_test/timer_utils.h
20242068
DESTINATION ${netCDF_BINARY_DIR}/nczarr_test/)
20252069
FILE(COPY ${netCDF_SOURCE_DIR}/unit_test/timer_utils.c
20262070
DESTINATION ${netCDF_BINARY_DIR}/nczarr_test/)
2071+
FILE(COPY ${netCDF_SOURCE_DIR}/nc_test4/test_filter.c
2072+
DESTINATION ${netCDF_BINARY_DIR}/nczarr_test/)
2073+
FILE(COPY ${netCDF_SOURCE_DIR}/nc_test4/test_filter_misc.c
2074+
DESTINATION ${netCDF_BINARY_DIR}/nczarr_test/)
2075+
FILE(COPY ${netCDF_SOURCE_DIR}/nc_test4/test_filter_repeat.c
2076+
DESTINATION ${netCDF_BINARY_DIR}/nczarr_test/)
2077+
FILE(COPY ${netCDF_SOURCE_DIR}/nc_test4/test_filter_order.c
2078+
DESTINATION ${netCDF_BINARY_DIR}/nczarr_test/)
2079+
FILE(COPY ${netCDF_SOURCE_DIR}/nc_test4/tst_multifilter.c
2080+
DESTINATION ${netCDF_BINARY_DIR}/nczarr_test/)
20272081
ENDIF()
20282082

20292083
add_subdirectory(liblib)
20302084

2031-
IF(ENABLE_FILTER_TESTING)
2085+
IF(ENABLE_PLUGINS)
20322086
add_subdirectory(plugins)
20332087
ENDIF()
20342088

@@ -2194,6 +2248,9 @@ INSTALL(PROGRAMS ${netCDF_BINARY_DIR}/nc-config
21942248
##
21952249
print_conf_summary()
21962250

2251+
# Enable Makedist files.
2252+
ADD_MAKEDIST()
2253+
ENABLE_MAKEDIST(README.md COPYRIGHT RELEASE_NOTES.md INSTALL INSTALL.cmake test_prog.c lib_flags.am cmake CMakeLists.txt COMPILE.cmake.txt config.h.cmake.in cmake_uninstall.cmake.in netcdf-config-version.cmake.in netcdf-config.cmake.in FixBundle.cmake.in nc-config.cmake.in configure configure.ac install-sh config.h.in config.sub CTestConfig.cmake.in)
21972254

21982255
#####
21992256
# Configure and print the libnetcdf.settings file.
@@ -2245,6 +2302,8 @@ is_enabled(ENABLE_NCZARR_S3_TESTS DO_NCZARR_S3_TESTS)
22452302
is_enabled(ENABLE_MULTIFILTERS HAS_MULTIFILTERS)
22462303
is_enabled(ENABLE_NCZARR_ZIP DO_NCZARR_ZIP_TESTS)
22472304
is_enabled(ENABLE_LOGGING HAS_LOGGING)
2305+
is_enabled(ENABLE_FILTER_TESTING DO_FILTER_TESTS)
2306+
is_enabled(ENABLE_BLOSC HAS_BLOSC)
22482307

22492308
# Generate file from template.
22502309
CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/libnetcdf.settings.in"
@@ -2302,6 +2361,10 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/test_common.in ${CMAKE_CURRENT_BINARY
23022361
#####
23032362
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/nc_test4/findplugin.in ${CMAKE_CURRENT_BINARY_DIR}/nc_test4/findplugin.sh @ONLY NEWLINE_STYLE LF)
23042363

2364+
IF(ENABLE_NCZARR)
2365+
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/nc_test4/findplugin.in ${CMAKE_CURRENT_BINARY_DIR}/nczarr_test/findplugin.sh @ONLY NEWLINE_STYLE LF)
2366+
ENDIF()
2367+
23052368
IF(ENABLE_EXAMPLES)
23062369
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/nc_test4/findplugin.in ${CMAKE_CURRENT_BINARY_DIR}/examples/C/findplugin.sh @ONLY NEWLINE_STYLE LF)
23072370
ENDIF()

Makefile.am

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,13 +81,18 @@ HDF4_TEST_DIR = hdf4_test
8181
LIBHDF4 = libhdf4
8282
endif
8383

84+
# Build Plugin support
85+
if ENABLE_PLUGINS
86+
NCPOCO = libncpoco
87+
endif
88+
8489
# Build Cloud Storage if desired.
8590
if ENABLE_NCZARR
8691
ZARR_TEST_DIR = nczarr_test
87-
ZARR = libnczarr
92+
ZARR = libnczarr
8893
endif
8994

90-
# Optionally build plugins
95+
# Optionally build test plugins
9196
if ENABLE_FILTER_TESTING
9297
PLUGIN_DIR = plugins
9398
endif
@@ -108,7 +113,7 @@ endif
108113
# and run. ncgen must come before ncdump, because their tests
109114
# depend on it.
110115
SUBDIRS = include $(H5_TEST_DIR) libdispatch libsrc $(LIBSRC4_DIR) \
111-
$(LIBSRCP) $(LIBHDF4) $(LIBHDF5) $(OCLIB) $(DAP2) ${DAP4} ${ZARR} liblib \
116+
$(LIBSRCP) $(LIBHDF4) $(LIBHDF5) $(OCLIB) $(DAP2) ${DAP4} ${NCPOCO} ${ZARR} liblib \
112117
$(NCGEN3) $(NCGEN) $(NCDUMP) ${PLUGIN_DIR} $(TESTDIRS) docs \
113118
$(EXAMPLES)
114119

RELEASE_NOTES.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ This file contains a high-level description of this package's evolution. Release
77

88
## 4.8.2 - TBD
99

10+
* [Enhancement] Support filters for NCZarr. See [Github #2101](https://github.com/Unidata/netcdf-c/pull/2101).
1011
* [Bug Fix] Make PR 2075 long file name be idempotent. See [Github #2094](https://github.com/Unidata/netcdf-c/pull/2094).
1112

1213
## 4.8.1 - August 18, 2021

cmake/modules/FindBlosc.cmake

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
# Searches for an installation of the blosc library. On success, it sets the following variables:
2+
#
3+
# Blosc_FOUND Set to true to indicate the blosc library was found
4+
# Blosc_INCLUDE_DIRS The directory containing the header file blosc/blosc.h
5+
# Blosc_LIBRARIES The libraries needed to use the blosc library
6+
#
7+
# To specify an additional directory to search, set Blosc_ROOT.
8+
#
9+
# Author: Siddhartha Chaudhuri, 2009
10+
#
11+
12+
# Look for the header, first in the user-specified location and then in the system locations
13+
SET(Blosc_INCLUDE_DOC "The directory containing the header file blosc.h")
14+
FIND_PATH(Blosc_INCLUDE_DIRS NAMES blosc.h blosc/blosc.h PATHS ${Blosc_ROOT} ${Blosc_ROOT}/include DOC ${Blosc_INCLUDE_DOC} NO_DEFAULT_PATH)
15+
IF(NOT Blosc_INCLUDE_DIRS) # now look in system locations
16+
FIND_PATH(Blosc_INCLUDE_DIRS NAMES blosc.h blosc/blosc.h DOC ${Blosc_INCLUDE_DOC})
17+
ENDIF(NOT Blosc_INCLUDE_DIRS)
18+
19+
SET(Blosc_FOUND FALSE)
20+
21+
IF(Blosc_INCLUDE_DIRS)
22+
SET(Blosc_LIBRARY_DIRS ${Blosc_INCLUDE_DIRS})
23+
24+
IF("${Blosc_LIBRARY_DIRS}" MATCHES "/include$")
25+
# Strip off the trailing "/include" in the path.
26+
GET_FILENAME_COMPONENT(Blosc_LIBRARY_DIRS ${Blosc_LIBRARY_DIRS} PATH)
27+
ENDIF("${Blosc_LIBRARY_DIRS}" MATCHES "/include$")
28+
29+
IF(EXISTS "${Blosc_LIBRARY_DIRS}/lib")
30+
SET(Blosc_LIBRARY_DIRS ${Blosc_LIBRARY_DIRS}/lib)
31+
ENDIF(EXISTS "${Blosc_LIBRARY_DIRS}/lib")
32+
33+
# Find Blosc libraries
34+
FIND_LIBRARY(Blosc_DEBUG_LIBRARY NAMES bloscd blosc_d libbloscd libblosc_d libblosc
35+
PATH_SUFFIXES Debug ${CMAKE_LIBRARY_ARCHITECTURE} ${CMAKE_LIBRARY_ARCHITECTURE}/Debug
36+
PATHS ${Blosc_LIBRARY_DIRS} NO_DEFAULT_PATH)
37+
FIND_LIBRARY(Blosc_RELEASE_LIBRARY NAMES blosc libblosc
38+
PATH_SUFFIXES Release ${CMAKE_LIBRARY_ARCHITECTURE} ${CMAKE_LIBRARY_ARCHITECTURE}/Release
39+
PATHS ${Blosc_LIBRARY_DIRS} NO_DEFAULT_PATH)
40+
41+
SET(Blosc_LIBRARIES )
42+
IF(Blosc_DEBUG_LIBRARY AND Blosc_RELEASE_LIBRARY)
43+
SET(Blosc_LIBRARIES debug ${Blosc_DEBUG_LIBRARY} optimized ${Blosc_RELEASE_LIBRARY})
44+
ELSEIF(Blosc_DEBUG_LIBRARY)
45+
SET(Blosc_LIBRARIES ${Blosc_DEBUG_LIBRARY})
46+
ELSEIF(Blosc_RELEASE_LIBRARY)
47+
SET(Blosc_LIBRARIES ${Blosc_RELEASE_LIBRARY})
48+
ENDIF(Blosc_DEBUG_LIBRARY AND Blosc_RELEASE_LIBRARY)
49+
50+
IF(Blosc_LIBRARIES)
51+
SET(Blosc_FOUND TRUE)
52+
ENDIF(Blosc_LIBRARIES)
53+
ENDIF(Blosc_INCLUDE_DIRS)
54+
55+
IF(Blosc_FOUND)
56+
# IF(NOT Blosc_FIND_QUIETLY)
57+
MESSAGE(STATUS "Found Blosc: headers at ${Blosc_INCLUDE_DIRS}, libraries at ${Blosc_LIBRARY_DIRS}")
58+
MESSAGE(STATUS " library is ${Blosc_LIBRARIES}")
59+
# ENDIF(NOT Blosc_FIND_QUIETLY)
60+
ELSE(Blosc_FOUND)
61+
IF(Blosc_FIND_REQUIRED)
62+
MESSAGE(FATAL_ERROR "Blosc library not found")
63+
ENDIF(Blosc_FIND_REQUIRED)
64+
ENDIF(Blosc_FOUND)

0 commit comments

Comments
 (0)