mirror of
https://github.com/Unidata/netcdf-c.git
synced 2025-01-12 15:45:21 +08:00
3ffe7be446
re: Discussion https://github.com/Unidata/netcdf-c/discussions/2214 The primary change is to support so-called "standard filters". A standard filter is one that is defined by the following netcdf-c API: ```` int nc_def_var_XXX(int ncid, int varid, size_t nparams, unsigned* params); int nc_inq_var_XXXX(int ncid, int varid, int* usefilterp, unsigned* params); ```` So for example, zstandard would be a standard filter by defining the functions *nc_def_var_zstandard* and *nc_inq_var_zstandard*. In order to define these functions, we need a new dispatch function: ```` int nc_inq_filter_avail(int ncid, unsigned filterid); ```` This function, combined with the existing filter API can be used to implement arbitrary standard filters using a simple code pattern. Note that I would have preferred that this function return a list of all available filters, but HDF5 does not support that functionality. So this PR implements the dispatch function and implements the following standard functions: + bzip2 + zstandard + blosc Specific test cases are also provided for HDF5 and NCZarr. Over time, other specific standard filters will be defined. ## Primary Changes * Add nc_inq_filter_avail() to netcdf-c API. * Add standard filter implementations to test use of *nc_inq_filter_avail*. * Bump the dispatch table version number and add to all the relevant dispatch tables (libsrc, libsrcp, etc). * Create a program to invoke nc_inq_filter_avail so that it is accessible to shell scripts. * Cleanup szip support to properly support szip when HDF5 is disabled. This involves detecting libsz separately from testing if HDF5 supports szip. * Integrate shuffle and fletcher32 into the existing filter API. This means that, for example, nc_def_var_fletcher32 is now a wrapper around nc_def_var_filter. * Extend the Codec defaulting to allow multiple default shared libraries. ## Misc. Changes * Modify configure.ac/CMakeLists.txt to look for the relevant libraries implementing standard filters. * Modify libnetcdf.settings to list available standard filters (including deflate and szip). * Add CMake test modules to locate libbz2 and libzstd. * Cleanup the HDF5 memory manager function use in the plugins. * remove unused file include//ncfilter.h * remove tests for the HDF5 memory operations e.g. H5allocate_memory. * Add flag to ncdump to force use of _Filter instead of _Deflate or _Shuffle or _Fletcher32. Used for testing.
53 lines
2.0 KiB
CMake
53 lines
2.0 KiB
CMake
# Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
|
# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014,
|
|
# 2015, 2016, 2017, 2018
|
|
# University Corporation for Atmospheric Research/Unidata.
|
|
|
|
# See netcdf-c/COPYRIGHT file for more info.
|
|
SET(libdispatch_SOURCES dparallel.c 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
|
|
dcrc32.c dcrc32.h dcrc64.c ncexhash.c ncxcache.c ncjson.c ds3util.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)
|
|
|
|
IF(BUILD_V2)
|
|
SET(libdispatch_SOURCES ${libdispatch_SOURCES} dv2i.c)
|
|
ENDIF(BUILD_V2)
|
|
|
|
IF(ENABLE_BYTERANGE)
|
|
SET(libdispatch_SOURCES ${libdispatch_SOURCES} dhttp.c)
|
|
ENDIF(ENABLE_BYTERANGE)
|
|
|
|
IF(ENABLE_S3_SDK)
|
|
SET(libdispatch_SOURCES ${libdispatch_SOURCES} ncs3sdk.cpp awsincludes.h)
|
|
ENDIF()
|
|
|
|
IF(REGEDIT)
|
|
SET(libdispatch_SOURCES ${libdispatch_SOURCES} dreg.c)
|
|
ENDIF(REGEDIT)
|
|
|
|
add_library(dispatch OBJECT ${libdispatch_SOURCES})
|
|
IF(MPI_C_INCLUDE_PATH)
|
|
target_include_directories(dispatch PUBLIC ${MPI_C_INCLUDE_PATH})
|
|
ENDIF(MPI_C_INCLUDE_PATH)
|
|
|
|
IF(MPI_C_LIBRARIES)
|
|
target_link_libraries(dispatch PUBLIC ${MPI_C_LIBRARIES})
|
|
ENDIF(MPI_C_LIBRARIES)
|
|
|
|
IF(ENABLE_NCZARR)
|
|
target_include_directories(dispatch PUBLIC ../libnczarr)
|
|
ENDIF(ENABLE_NCZARR)
|
|
|
|
IF(ENABLE_S3_SDK)
|
|
target_include_directories(dispatch PUBLIC ${AWSSDK_INCLUDE_DIRS})
|
|
IF(NOT MSVC)
|
|
target_compile_features(dispatch PUBLIC cxx_std_11)
|
|
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)
|
|
ADD_EXTRA_DIST("${CUR_EXTRA_DIST}")
|