diff --git a/.github/workflows/run_tests.yml b/.github/workflows/run_tests.yml index 0669fbe6c..d36177322 100644 --- a/.github/workflows/run_tests.yml +++ b/.github/workflows/run_tests.yml @@ -14,7 +14,7 @@ jobs: strategy: matrix: - hdf5: [ 1.8.21, 1.10.7 ] + hdf5: [ 1.8.21, 1.10.1, 1.10.7 ] steps: @@ -62,7 +62,7 @@ jobs: strategy: matrix: - hdf5: [ 1.8.21, 1.10.7 ] + hdf5: [ 1.8.21, 1.10.1, 1.10.7 ] use_nc4: [ nc3, nc4 ] use_dap: [ dap_off, dap_on ] use_nczarr: [ nczarr_off, nczarr_on ] @@ -160,7 +160,7 @@ jobs: strategy: matrix: - hdf5: [ 1.8.21, 1.10.7 ] + hdf5: [ 1.8.21, 1.10.1, 1.10.7 ] use_nc4: [ nc3, nc4 ] use_dap: [ dap_off, dap_on ] use_nczarr: [ nczarr_off, nczarr_on ] diff --git a/CMakeLists.txt b/CMakeLists.txt index 804be33f0..32037f1e6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,18 +26,18 @@ set(PACKAGE "netCDF" CACHE STRING "") SET(NC_VERSION_MAJOR 4) SET(NC_VERSION_MINOR 8) -SET(NC_VERSION_PATCH 0) +SET(NC_VERSION_PATCH 1) SET(NC_VERSION_NOTE "-development") SET(netCDF_VERSION ${NC_VERSION_MAJOR}.${NC_VERSION_MINOR}.${NC_VERSION_PATCH}${NC_VERSION_NOTE}) SET(VERSION ${netCDF_VERSION}) SET(NC_VERSION ${netCDF_VERSION}) -SET(netCDF_LIB_VERSION 18) -SET(netCDF_SO_VERSION 18) +SET(netCDF_LIB_VERSION 19) +SET(netCDF_SO_VERSION 19) SET(PACKAGE_VERSION ${VERSION}) # Version of the dispatch table. This must match the value in # configure.ac. -SET(NC_DISPATCH_VERSION 2) +SET(NC_DISPATCH_VERSION 3) # Get system configuration, Use it to determine osname, os release, cpu. These # will be used when committing to CDash. @@ -163,8 +163,6 @@ SET(EXTRA_DEPS "") # Set CTest Properties ################################ - - ENABLE_TESTING() INCLUDE(CTest) @@ -262,6 +260,7 @@ ENDIF() ##### # System inspection checks ##### +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/include) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/oc2) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/libsrc) @@ -748,7 +747,7 @@ IF(USE_HDF5) SET(CMAKE_REQUIRED_LIBRARIES ${SZIP_LIBRARY} ${CMAKE_REQUIRED_LIBRARIES}) MESSAGE(STATUS "HDF5 has szip.") ENDIF() - + # 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}. @@ -766,11 +765,39 @@ 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) - CHECK_LIBRARY_EXISTS(${HDF5_C_LIBRARY_hdf5} H5Pset_libver_bounds "" HAVE_H5PSET_LIBVER_BOUNDS) CHECK_LIBRARY_EXISTS(${HDF5_C_LIBRARY_hdf5} H5free_memory "" HAVE_H5FREE_MEMORY) CHECK_LIBRARY_EXISTS(${HDF5_C_LIBRARY_hdf5} H5allocate_memory "" HAVE_H5ALLOCATE_MEMORY) CHECK_LIBRARY_EXISTS(${HDF5_C_LIBRARY_hdf5} H5resize_memory "" HAVE_H5RESIZE_MEMORY) + ## + # Starting with libhdf5 1.12.0, we need to specify the option + # `--with-default-api-version=v18` when configuring libhdf5. Otherwise, + # the symbol H5Literate is not found. Check for this and return an error if it's not found. + # + # We first check for the symbol in the library, for versions 1.8.x and 1.10.x. If this fails, + # we must then check for its usage as a macro (version 1.12.x). + ## + + CHECK_LIBRARY_EXISTS(${HDF5_C_LIBRARY_hdf5} H5Literate "" HAVE_H5Literate) + + IF(NOT HAVE_H5Literate) + CHECK_C_SOURCE_COMPILES("#include + #if !(H5Literate_vers == 1) + #error + #endif + int main() {int x = 1;}" HAVE_H5Literate_Macro) + ELSE() + SET(HAVE_H5Literate_Macro 1) + ENDIF(NOT HAVE_H5Literate) + + IF(NOT HAVE_H5Literate_Macro) + MESSAGE(FATAL_ERROR "${HDF5_C_LIBRARY_hdf5} does not contain symbol '_H5Literate'. Please recompile your libhdf5 install using '--with-default-api-version=v18'.") + ENDIF(NOT HAVE_H5Literate_Macro) + + ## + # End H5Literate checks + ## + IF(HDF5_PARALLEL) SET(HDF5_CC h5pcc) ELSE() @@ -804,11 +831,20 @@ IF(USE_HDF5) # Check to see if HDF5 library is 1.10.6 or greater. # Used to control path name conversion - IF(${HDF5_VERSION} VERSION_LESS "1.10.6") - SET(HDF5_UTF8_PATHS FALSE) - ELSE() - SET(HDF5_UTF8_PATHS TRUE) - ENDIF() + # Check HDF5 version + SET(HDF5_UTF8_PATHS OFF) + CHECK_C_SOURCE_COMPILES(" + #include + int main() { +#if (H5_VERS_MAJOR*10000 + H5_VERS_MINOR*100 + H5_VERS_RELEASE < 11006) + choke me; +#endif + }" HDF5_VERSION_1106) + + IF(HDF5_VERSION_1106) + SET(HDF5_UTF8_PATHS ON) + ENDIF(HDF5_VERSION_1106) + MESSAGE("-- Checking for HDF5 version 1.10.6 or later: ${HDF5_UTF8_PATHS}") SET(H5_USE_16_API 1) @@ -842,18 +878,6 @@ IF(USE_HDF5) #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}) - # Check HDF5 version - CHECK_C_SOURCE_COMPILES(" - #include - int main() { -#if (H5_VERS_MAJOR*10000 + H5_VERS_MINOR*100 + H5_VERS_RELEASE < 11006) - choke me; -#endif - }" HDF5_VERSION_1106) - - IF(HDF5_VERSION_1106) - SET(HDF5_UTF8_PATHS ON) - ENDIF() ENDIF(USE_HDF5) @@ -2207,6 +2231,19 @@ configure_file( ${netCDF_BINARY_DIR}/include/netcdf_meta.h @ONLY) ##### +# Create 'netcdf_dispatch.h' include file. +##### +configure_file( + ${netCDF_SOURCE_DIR}/include/netcdf_dispatch.h.in + ${netCDF_BINARY_DIR}/include/netcdf_dispatch.h @ONLY NEWLINE_STYLE LF) + +# Used in the `configure_file` calls below +SET(ISCMAKE "1") +IF(MSVC) +SET(ISMSVC "1") +ENDIF() + +#### # Build test_common.sh ##### SET(EXTRA_DIST ${EXTRA_DIST} ${CMAKE_CURRENT_SOURCE_DIR}/test_common.in) @@ -2215,15 +2252,9 @@ SET(TOPBUILDDIR "${CMAKE_CURRENT_BINARY_DIR}") SET(ISMSVC "${MSVC}") configure_file(${CMAKE_CURRENT_SOURCE_DIR}/test_common.in ${CMAKE_CURRENT_BINARY_DIR}/test_common.sh @ONLY NEWLINE_STYLE LF) - ##### # Build nc_test4/findplugin.sh ##### -SET(ISCMAKE "1") -IF(MSVC) -SET(ISMSVC "1") -ENDIF() - configure_file(${CMAKE_CURRENT_SOURCE_DIR}/nc_test4/findplugin.in ${CMAKE_CURRENT_BINARY_DIR}/nc_test4/findplugin.sh @ONLY NEWLINE_STYLE LF) IF(ENABLE_EXAMPLES) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 5a4a6221c..92f1fcfeb 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -4,9 +4,13 @@ Release Notes {#RELEASE_NOTES} \brief Release notes file for the netcdf-c package. This file contains a high-level description of this package's evolution. Releases are in reverse chronological order (most recent first). Note that, as of netcdf 4.2, the `netcdf-c++` and `netcdf-fortran` libraries have been separated into their own libraries. +## 4.8.1 - TBD -## 4.8.0 - TBD +* [Bug Fix] Corrected HDF5 version detection logic as described in [Github #1962](https://github.com/Unidata/netcdf-c/issues/1962). +## 4.8.0 - March 30, 2021 + +* [Enhancement] Bump the NC_DISPATCH_VERSION from 2 to 3, and as a side effect, unify the definition of NC_DISPATCH_VERSION so it only needs to be defined in CMakeLists.txt and configure.ac. See [Github #1945](https://github.com/Unidata/netcdf-c/pull/1945) for more information. * [Enhancement] Provide better cross platform path name management. This converts paths for various platforms (e.g. Windows, MSYS, etc.) so that they are in the proper format for the executing platform. See [Github #1958](https://github.com/Unidata/netcdf-c/pull/1958) for more information. * [Bug Fixes] The nccopy program was treating -d0 as turning deflation on rather than interpreting it as "turn off deflation". See [Github #1944](https://github.com/Unidata/netcdf-c/pull/1944) for more information. * [Enhancement] Add support for storing NCZarr data in zip files. See [Github #1942](https://github.com/Unidata/netcdf-c/pull/1942) for more information. diff --git a/config.h.cmake.in b/config.h.cmake.in index 7ed01bf64..b7a4c0bfe 100644 --- a/config.h.cmake.in +++ b/config.h.cmake.in @@ -256,9 +256,6 @@ are set when opening a binary file on Windows. */ /* Define to 1 if you have the `gettimeofday' function. */ #cmakedefine HAVE_STRUCT_TIMESPEC 1 -/* if true, netcdf4 file properties will be set using H5Pset_libver_bounds */ -#cmakedefine HAVE_H5PSET_LIBVER_BOUNDS 1 - /* Define to 1 if you have the `H5Z_SZIP' function. */ #cmakedefine HAVE_H5Z_SZIP 1 @@ -463,6 +460,9 @@ with zip */ /* Add extra properties to _NCProperties attribute */ #cmakedefine NCPROPERTIES_EXTRA ${NCPROPERTIES_EXTRA} +/* Idspatch table version */ +#cmakedefine NC_DISPATCH_VERSION ${NC_DISPATCH_VERSION} + /* no IEEE float on this platform */ #cmakedefine NO_IEEE_FLOAT 1 diff --git a/configure.ac b/configure.ac index 1ff05a88c..b6bc4fea8 100644 --- a/configure.ac +++ b/configure.ac @@ -10,7 +10,7 @@ AC_PREREQ([2.59]) # Initialize with name, version, and support email address. -AC_INIT([netCDF], [4.8.0-development], [support-netcdf@unidata.ucar.edu], [netcdf-c]) +AC_INIT([netCDF], [4.8.1-development], [support-netcdf@unidata.ucar.edu], [netcdf-c]) ## # Prefer an empty CFLAGS variable instead of the default -g -O2. @@ -21,7 +21,7 @@ AC_INIT([netCDF], [4.8.0-development], [support-netcdf@unidata.ucar.edu], [netcd AC_SUBST([NC_VERSION_MAJOR]) NC_VERSION_MAJOR=4 AC_SUBST([NC_VERSION_MINOR]) NC_VERSION_MINOR=8 -AC_SUBST([NC_VERSION_PATCH]) NC_VERSION_PATCH=0 +AC_SUBST([NC_VERSION_PATCH]) NC_VERSION_PATCH=1 AC_SUBST([NC_VERSION_NOTE]) NC_VERSION_NOTE="-development" ##### @@ -1216,7 +1216,20 @@ if test "x$enable_hdf5" = xyes; then # H5Pset_fapl_mpiposix and H5Pget_fapl_mpiposix have been removed since HDF5 1.8.12. # Use H5Pset_fapl_mpio and H5Pget_fapl_mpio, instead. - AC_CHECK_FUNCS([H5Pget_fapl_mpio H5Pset_deflate H5Z_SZIP H5free_memory H5resize_memory H5allocate_memory H5Pset_libver_bounds H5Pset_all_coll_metadata_ops]) + + AC_CHECK_FUNCS([H5Pget_fapl_mpio H5Pset_deflate H5Z_SZIP H5free_memory H5resize_memory H5allocate_memory H5Pset_all_coll_metadata_ops H5Literate]) + + # Check to see if HDF5 library has H5Literate (HDF5 1.8.x, 1.10.x) + if test "x$ac_cv_func_H5Literate" = xno; then + AC_MSG_CHECKING([for H5Literate macro]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include "H5public.h"], + [[#if !(H5Literate_vers == 1) + # error + #endif] + ])], [], [AC_MSG_RESULT(no); AC_MSG_ERROR([HDF5 was not built with API compatibility version v18. Please recompile your libhdf5 install using '--with-default-api-version=v18'.])]) + AC_MSG_RESULT(yes) + fi + # Check to see if HDF5 library has collective metadata APIs, (HDF5 >= 1.10.0) if test "x$ac_cv_func_H5Pset_all_coll_metadata_ops" = xyes; then @@ -1689,7 +1702,9 @@ AX_SET_META([NC_HAS_MULTIFILTERS],[$has_multifilters],[yes]) # applications like PIO can determine whether they have an appropriate # dispatch table to submit. If this is changed, make sure the value in # CMakeLists.txt also changes to match. -AC_SUBST([NC_DISPATCH_VERSION], [2]) + +AC_SUBST([NC_DISPATCH_VERSION], [3]) +AC_DEFINE_UNQUOTED([NC_DISPATCH_VERSION], [${NC_DISPATCH_VERSION}], [Dispatch table version.]) ##### # End netcdf_meta.h definitions. @@ -1723,6 +1738,7 @@ AC_CONFIG_FILES([Makefile libnetcdf.settings postinstall.sh include/netcdf_meta.h + include/netcdf_dispatch.h include/Makefile h5_test/Makefile hdf4_test/Makefile diff --git a/docs/Doxyfile.developer b/docs/Doxyfile.developer index 903df5aa9..5cc154762 100644 --- a/docs/Doxyfile.developer +++ b/docs/Doxyfile.developer @@ -38,7 +38,7 @@ PROJECT_NAME = netCDF-C # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 4.8.0-development +PROJECT_NUMBER = 4.8.1-development # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a @@ -2083,7 +2083,7 @@ HAVE_DOT = YES # Minimum value: 0, maximum value: 32, default value: 0. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_NUM_THREADS = 4 +DOT_NUM_THREADS = 0 # When you want a differently looking font n the dot files that doxygen # generates you can specify the font name using DOT_FONTNAME. You need to make diff --git a/docs/Doxyfile.in b/docs/Doxyfile.in index 522d4dc9f..05063d414 100644 --- a/docs/Doxyfile.in +++ b/docs/Doxyfile.in @@ -786,7 +786,6 @@ INPUT = \ @abs_top_srcdir@/libdispatch/derror.c \ @abs_top_srcdir@/libdispatch/dv2i.c \ @abs_top_srcdir@/libdispatch/dcopy.c \ - @abs_top_srcdir@/libhdf5/hdf5file.c \ @abs_top_srcdir@/libsrc4/nc4var.c \ @abs_top_srcdir@/libhdf5/nc4hdf.c \ @abs_top_srcdir@/libsrc4/nc4internal.c \ @@ -796,8 +795,8 @@ INPUT = \ @abs_top_srcdir@/libsrc4/nc4dim.c \ @abs_top_srcdir@/libsrc4/nc4attr.c \ @abs_top_srcdir@/libhdf5/nc4info.c \ - @abs_top_srcdir@/libhdf5/hdf5cache.c \ @abs_top_srcdir@/libsrc4/nc4dispatch.c \ + @abs_top_srcdir@/libnczarr/zarr.c \ @abs_top_srcdir@/examples/C/simple_xy_wr.c \ @abs_top_srcdir@/examples/C/simple_xy_rd.c \ @abs_top_srcdir@/examples/C/sfc_pres_temp_wr.c \ diff --git a/h5_test/tst_h_atts3.c b/h5_test/tst_h_atts3.c index 924967ef7..48693768d 100644 --- a/h5_test/tst_h_atts3.c +++ b/h5_test/tst_h_atts3.c @@ -209,11 +209,7 @@ main() hid_t file_typeid1[NUM_OBJ_1], native_typeid1[NUM_OBJ_1]; hid_t file_typeid2, native_typeid2; hsize_t num_obj; -#if H5_VERSION_GE(1,12,0) - H5O_info2_t obj_info; -#else H5O_info_t obj_info; -#endif char obj_name[STR_LEN + 1]; hsize_t dims[1] = {ATT_LEN}; /* netcdf attributes always 1-D. */ diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt index aa4d502ce..2ffcf5562 100644 --- a/include/CMakeLists.txt +++ b/include/CMakeLists.txt @@ -28,7 +28,7 @@ INSTALL(FILES ${netCDF_SOURCE_DIR}/include/netcdf_filter.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT headers) -INSTALL(FILES ${netCDF_SOURCE_DIR}/include/netcdf_dispatch.h +INSTALL(FILES ${netCDF_BINARY_DIR}/include/netcdf_dispatch.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT headers) diff --git a/include/Makefile.am b/include/Makefile.am index cf7723b67..77b97a0bb 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -29,4 +29,4 @@ if ENABLE_BYTERANGE noinst_HEADERS += nchttp.h endif -EXTRA_DIST = CMakeLists.txt XGetopt.h netcdf_meta.h.in +EXTRA_DIST = CMakeLists.txt XGetopt.h netcdf_meta.h.in netcdf_dispatch.h.in diff --git a/include/ncdispatch.h b/include/ncdispatch.h index 1219027e7..262603673 100644 --- a/include/ncdispatch.h +++ b/include/ncdispatch.h @@ -80,9 +80,6 @@ #define ATOMICTYPEMAX3 NC_DOUBLE #define ATOMICTYPEMAX5 NC_UINT64 -/* Define an alias for int to indicate an error return */ -typedef int NCerror; - #if !defined HDF5_PARALLEL && !defined USE_PNETCDF typedef int MPI_Comm; typedef int MPI_Info; diff --git a/include/nchttp.h b/include/nchttp.h index e239ae4b9..f5dd96314 100644 --- a/include/nchttp.h +++ b/include/nchttp.h @@ -23,7 +23,7 @@ typedef struct NC_HTTP_STATE { char errbuf[1024]; /* assert(CURL_ERROR_SIZE <= 1024) */ } NC_HTTP_STATE; -extern int nc_http_open(const char* objecturl, NC_HTTP_STATE** state, size64_t* lenp); +extern int nc_http_open(const char* objecturl, NC_HTTP_STATE** state, long long* lenp); extern int nc_http_size(NC_HTTP_STATE* state, const char* url, size64_t* sizep); extern int nc_http_read(NC_HTTP_STATE* state, const char* url, size64_t start, size64_t count, NCbytes* buf); extern int nc_http_close(NC_HTTP_STATE* state); diff --git a/include/ncpathmgr.h b/include/ncpathmgr.h index 8a92f647d..44a8b8b49 100644 --- a/include/ncpathmgr.h +++ b/include/ncpathmgr.h @@ -94,6 +94,8 @@ This means it is ok to call it repeatedly with no harm. */ EXTERNL char* NCpathcvt(const char* path); +EXTERNL int NChasdriveletter(const char* path); + /* Canonicalize and make absolute by prefixing the current working directory */ EXTERNL char* NCpathabsolute(const char* name); @@ -154,7 +156,7 @@ EXTERNL int NCclosedir(DIR* ent); #define NCPD_UNKNOWN 0 #define NCPD_NIX 1 #define NCPD_MSYS 2 -#define NCPD_CYGWIN 3 +#define NCPD_CYGWIN 3 #define NCPD_WIN 4 #define NCPD_REL 5 /* actual kind is unknown */ diff --git a/include/netcdf_dispatch.h b/include/netcdf_dispatch.h.in similarity index 99% rename from include/netcdf_dispatch.h rename to include/netcdf_dispatch.h.in index a91b251ec..9b90cc342 100644 --- a/include/netcdf_dispatch.h +++ b/include/netcdf_dispatch.h.in @@ -25,7 +25,9 @@ /* This is the version of the dispatch table. It should be changed * when new functions are added to the dispatch table. */ -#define NC_DISPATCH_VERSION 3 +#ifndef NC_DISPATCH_VERSION +#define NC_DISPATCH_VERSION @NC_DISPATCH_VERSION@ +#endif /*NC_DISPATCH_VERSION*/ /* This is the dispatch table, with a pointer to each netCDF * function. */ diff --git a/libdap2/dapincludes.h b/libdap2/dapincludes.h index 6275b662b..fd96d79d7 100644 --- a/libdap2/dapincludes.h +++ b/libdap2/dapincludes.h @@ -32,6 +32,7 @@ #include "oc.h" #include "ncdap.h" +#include "nccommon.h" #include "dapdebug.h" #include "daputil.h" @@ -47,7 +48,6 @@ struct NCsegment; /**************************************************/ -#include "nccommon.h" #include "getvara.h" #include "constraints.h" diff --git a/libdap2/daputil.c b/libdap2/daputil.c index e61461db0..bdf533d45 100644 --- a/libdap2/daputil.c +++ b/libdap2/daputil.c @@ -435,7 +435,7 @@ simplepathstring(NClist* names, char* separator) /* Define a number of location tests */ /* Is node contained (transitively) in a sequence ? */ -BOOL +int dapinsequence(CDFnode* node) { if(node == NULL || node->container == NULL) return TRUE; @@ -446,7 +446,7 @@ dapinsequence(CDFnode* node) } /* Is node contained (transitively) in a structure array */ -BOOL +int dapinstructarray(CDFnode* node) { if(node == NULL) return TRUE; @@ -459,7 +459,7 @@ dapinstructarray(CDFnode* node) } /* Is node a map field of a grid? */ -BOOL +int dapgridmap(CDFnode* node) { if(node != NULL && node->container != NULL @@ -471,7 +471,7 @@ dapgridmap(CDFnode* node) } /* Is node an array field of a grid? */ -BOOL +int dapgridarray(CDFnode* node) { if(node != NULL && node->container != NULL @@ -482,7 +482,7 @@ dapgridarray(CDFnode* node) return FALSE; } -BOOL +int dapgridelement(CDFnode* node) { return dapgridarray(node) @@ -490,7 +490,7 @@ dapgridelement(CDFnode* node) } /* Is node a top-level grid node? */ -BOOL +int daptopgrid(CDFnode* grid) { if(grid == NULL || grid->nctype != NC_Grid) return FALSE; @@ -498,7 +498,7 @@ daptopgrid(CDFnode* grid) } /* Is node a top-level sequence node? */ -BOOL +int daptopseq(CDFnode* seq) { if(seq == NULL || seq->nctype != NC_Sequence) return FALSE; @@ -506,7 +506,7 @@ daptopseq(CDFnode* seq) } /* Is node a top-level node? */ -BOOL +int daptoplevel(CDFnode* node) { if(node->container == NULL diff --git a/libdap2/nccommon.h b/libdap2/nccommon.h index 4b9b734fe..cdcb37ae3 100644 --- a/libdap2/nccommon.h +++ b/libdap2/nccommon.h @@ -9,14 +9,14 @@ #include "dapincludes.h" /* Mnemonics */ -#ifndef BOOL -#define BOOL int -#endif #ifndef TRUE #define TRUE 1 #define FALSE 0 #endif +/* Define an alias for int to indicate an error return */ +typedef int NCerror; + #ifndef nullfree #define nullfree(m) {if((m)!=NULL) {free(m);} else {}} #endif @@ -206,7 +206,7 @@ typedef struct NCD2alignment { } NCD2alignment; typedef struct NCtypesize { - BOOL aligned; /* have instance and field been defined? */ + int aligned; /* have instance and field been defined? */ NCD2alignment instance; /* Alignment, etc for instance data */ NCD2alignment field; /* Alignment, etc WRT to parent */ } NCtypesize; @@ -232,13 +232,13 @@ typedef struct CDFnode { int ncid; /* relevant NC id for this object*/ unsigned long maxstringlength; unsigned long sequencelimit; /* 0=>unlimited */ - BOOL usesequence; /* If this sequence is usable */ - BOOL elided; /* 1 => node does not partipate in naming*/ + int usesequence; /* If this sequence is usable */ + int elided; /* 1 => node does not partipate in naming*/ struct CDFnode* basenode; /* derived tree map to pattern tree */ - BOOL invisible; /* 1 => do not show to user */ - BOOL zerodim; /* 1 => node has a zero dimension */ + int invisible; /* 1 => do not show to user */ + int zerodim; /* 1 => node has a zero dimension */ /* These two flags track the effects on grids of constraints */ - BOOL nc_virtual; /* node added by regrid */ + int nc_virtual; /* node added by regrid */ struct CDFnode* attachment; /* DDS<->DATADDS cross link*/ struct CDFnode* pattern; /* temporary field for regridding */ /* Fields for use by libncdap4 */ @@ -249,8 +249,8 @@ typedef struct CDFnode { char* vlenname; /* for sequence types */ int singleton; /* for singleton sequences */ unsigned long estimatedsize; /* > 0 Only for var nodes */ - BOOL whole; /* projected as whole node */ - BOOL prefetchable; /* eligible to be prefetched (if whole) */ + int whole; /* projected as whole node */ + int prefetchable; /* eligible to be prefetched (if whole) */ } CDFnode; /**************************************************/ diff --git a/libdap4/ncd4.h b/libdap4/ncd4.h index 8ab23b17f..6f60a7d85 100644 --- a/libdap4/ncd4.h +++ b/libdap4/ncd4.h @@ -71,18 +71,6 @@ extern int dsp_close(ND4dsp* dsp); /* DSP API */ extern int dsp_open(const char* path, ND4dsp** dspp); -/* -extern NCerror dapbuildvaraprojection(CDFnode*, - const size_t* startp, const size_t* countp, const ptrdiff_t* stridep, - struct DCEprojection** projectionlist); - -extern NCerror NCD4_getvarx(int ncid, int varid, - const size_t *startp, - const size_t *countp, - const ptrdiff_t *stridep, - void *data, - nc_type dsttype0); -*/ #endif /**************************************************/ diff --git a/libdispatch/dhttp.c b/libdispatch/dhttp.c index 815e1c895..e21cadaa6 100644 --- a/libdispatch/dhttp.c +++ b/libdispatch/dhttp.c @@ -71,7 +71,7 @@ Trace(const char* fcn) */ int -nc_http_open(const char* objecturl, NC_HTTP_STATE** statep, size64_t* filelenp) +nc_http_open(const char* objecturl, NC_HTTP_STATE** statep, long long* filelenp) { int stat = NC_NOERR; int i; diff --git a/libdispatch/dinfermodel.c b/libdispatch/dinfermodel.c index 2b7ff2185..c4eec924f 100644 --- a/libdispatch/dinfermodel.c +++ b/libdispatch/dinfermodel.c @@ -44,7 +44,7 @@ struct MagicFile { struct NCURI* uri; int omode; NCmodel* model; - fileoffset_t filelen; + long long filelen; int use_parallel; void* parameters; /* !NULL if inmemory && !diskless */ FILE* fp; @@ -937,7 +937,7 @@ check_file_type(const char *path, int omode, int use_parallel, if((status = openmagic(&magicinfo))) goto done; /* Verify we have a large enough file */ - if(magicinfo.filelen < MAGIC_NUMBER_LEN) + if(magicinfo.filelen < (long long)MAGIC_NUMBER_LEN) {status = NC_ENOTNC; goto done;} if((status = readmagic(&magicinfo,0L,magic)) != NC_NOERR) { status = NC_ENOTNC; diff --git a/libhdf5/hdf5create.c b/libhdf5/hdf5create.c index f04319361..2e73756b8 100644 --- a/libhdf5/hdf5create.c +++ b/libhdf5/hdf5create.c @@ -163,15 +163,19 @@ nc4_create_file(const char *path, int cmode, size_t initialsz, nc4_chunk_cache_preemption)); } -#ifdef HAVE_H5PSET_LIBVER_BOUNDS #if H5_VERSION_GE(1,10,2) - if (H5Pset_libver_bounds(fapl_id, H5F_LIBVER_EARLIEST, H5F_LIBVER_V18) < 0) + /* lib versions 1.10.2 and higher */ + if (H5Pset_libver_bounds(fapl_id, H5F_LIBVER_V18, H5F_LIBVER_LATEST) < 0) #else - if (H5Pset_libver_bounds(fapl_id, H5F_LIBVER_EARLIEST, - H5F_LIBVER_LATEST) < 0) +#if H5_VERSION_GE(1,10,0) + /* lib versions 1.10.0, 1.10.1 */ + if (H5Pset_libver_bounds(fapl_id, H5F_LIBVER_EARLIEST, H5F_LIBVER_LATEST) < 0) +#else + /* all HDF5 1.8 lib versions */ + if (H5Pset_libver_bounds(fapl_id, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST) < 0) #endif - BAIL(NC_EHDFERR); #endif + BAIL(NC_EHDFERR); /* Create the property list. */ if ((fcpl_id = H5Pcreate(H5P_FILE_CREATE)) < 0) diff --git a/liblib/Makefile.am b/liblib/Makefile.am index a1577b68c..8415756a6 100644 --- a/liblib/Makefile.am +++ b/liblib/Makefile.am @@ -18,7 +18,7 @@ lib_LTLIBRARIES = libnetcdf.la # for information regarding incrementing `-version-info`. ## -libnetcdf_la_LDFLAGS = -version-info 18:0:0 +libnetcdf_la_LDFLAGS = -version-info 19:0:0 libnetcdf_la_CPPFLAGS = ${AM_CPPFLAGS} libnetcdf_la_LIBADD = diff --git a/libnczarr/zwalk.c b/libnczarr/zwalk.c index 3e16f7b2d..3374b2509 100644 --- a/libnczarr/zwalk.c +++ b/libnczarr/zwalk.c @@ -206,8 +206,9 @@ NCZ_transfer(struct Common* common, NCZSlice* slices) common, &chunkodom))) goto done; - if(wdebug >= 4) + if(wdebug >= 4) { fprintf(stderr,"allprojections:\n%s",nczprint_allsliceprojections(common->rank,common->allprojections)); fflush(stderr); + } wholechunk = iswholechunk(common,slices); diff --git a/nc_test4/tst_filter.sh b/nc_test4/tst_filter.sh index 814380cb8..53d347994 100755 --- a/nc_test4/tst_filter.sh +++ b/nc_test4/tst_filter.sh @@ -3,6 +3,8 @@ if test "x$srcdir" = x ; then srcdir=`pwd`; fi . ../test_common.sh +set -e + # Which test cases to exercise API=1 NG=1 @@ -209,13 +211,13 @@ if ! test -f unfiltered.nc ; then fi ${NCCOPY} "-F/g/var,307,4|40000" unfiltered.nc nccopyF.nc ${NCDUMP} -hs nccopyF.nc > ./nccopyF.cdl -sclean nccopyF.cdl nccopyFs.cdl +sclean nccopyF.cdl nccopyFs.cdl diff -b -w ${srcdir}/ref_nccopyF.cdl ./nccopyFs.cdl echo "*** ncgen with multiple filters" ${NCGEN} -4 -lb -o ncgenF.nc ${srcdir}/ref_nccopyF.cdl # Need to fix name using -n ${NCDUMP} -hs -n nccopyF ncgenF.nc > ./ncgenF.cdl -sclean ncgenF.cdl ncgenFs.cdl +sclean ncgenF.cdl ncgenFs.cdl diff -b -w ${srcdir}/ref_nccopyF.cdl ./ncgenFs.cdl echo "*** Pass: multiple filters" fi @@ -256,7 +258,6 @@ rm -f test_bzip2.c rm -f multifilter.nc multi.cdl smulti.cdl rm -f nccopyF.nc nccopyF.cdl ncgenF.nc ncgenF.cdl rm -f ncgenFs.cdl nccopyFs.cdl -#rm -f crfilterorder.txt rdfilterorder.txt +rm -f crfilterorder.txt rdfilterorder.txt exit 0 - diff --git a/ncdump/tst_nccopy4.sh b/ncdump/tst_nccopy4.sh index ac81cd0f2..525982b30 100755 --- a/ncdump/tst_nccopy4.sh +++ b/ncdump/tst_nccopy4.sh @@ -109,9 +109,11 @@ test "x$STORAGE" = 'xtas:_Storage="chunked";' CHUNKSIZES=`cat tmppds.cdl | sed -e '/tas:_ChunkSizes/p' -ed | tr -d '\t \r'` test "x$CHUNKSIZES" = 'xtas:_ChunkSizes=10,15,20;' +set -x + echo "*** Test that nccopy -F var1,none works as intended " ${NCGEN} -4 -b -o tst_nofilters.nc $srcdir/ref_tst_nofilters.cdl -${NCCOPY} -M0 -4 -F var1,none -c / tst_nofilters.nc tmp_nofilters.nc +${NCCOPY} -M0 -4 -F var1,none -c // tst_nofilters.nc tmp_nofilters.nc ${NCDUMP} -hs tmp_nofilters.nc > tmp_nofilters.cdl STORAGE=`cat tmp_nofilters.cdl | sed -e '/var1:_Storage/p' -ed | tr -d '\t \r'` test "x$STORAGE" = 'xvar1:_Storage="contiguous";' @@ -120,4 +122,3 @@ test "x$FILTERS" = 'x' echo "*** All nccopy tests passed!" exit 0 - diff --git a/ncdump/tst_netcdf4.sh b/ncdump/tst_netcdf4.sh index fecf1db15..6214d27cb 100755 --- a/ncdump/tst_netcdf4.sh +++ b/ncdump/tst_netcdf4.sh @@ -14,7 +14,7 @@ cleanncprops() { rm -f $dst cat $src \ | sed -e '/:_Endianness/d' \ - | sed -e 's/_SuperblockVersion = 1/_SuperblockVersion = 0/' \ + | sed -e 's/_SuperblockVersion = [12]/_SuperblockVersion = 0/' \ | sed -e 's/\(netcdflibversion\|netcdf\)=.*|/\1=NNNN|/' \ | sed -e 's/\(hdf5libversion\|hdf5\)=.*"/\1=HHHH"/' \ | grep -v '_NCProperties' \ diff --git a/ncdump/tst_netcdf4_4.sh b/ncdump/tst_netcdf4_4.sh index 52d7f6c96..e0b8f296c 100755 --- a/ncdump/tst_netcdf4_4.sh +++ b/ncdump/tst_netcdf4_4.sh @@ -14,7 +14,7 @@ cleanncprops() { rm -f $dst cat $src \ | sed -e '/:_Endianness/d' \ - | sed -e 's/_SuperblockVersion = 1/_SuperblockVersion = 0/' \ + | sed -e 's/_SuperblockVersion = [12]/_SuperblockVersion = 0/' \ | sed -e 's/\(netcdflibversion\|netcdf\)=.*|/\1=NNNN|/' \ | sed -e 's/\(hdf5libversion\|hdf5\)=.*"/\1=HHHH"/' \ | grep -v '_NCProperties' \ diff --git a/nczarr_test/run_nccopyz.sh b/nczarr_test/run_nccopyz.sh index 69d00ec63..3bef9cc8f 100755 --- a/nczarr_test/run_nccopyz.sh +++ b/nczarr_test/run_nccopyz.sh @@ -39,7 +39,7 @@ ${NCCOPY} -M0 -c dim0/,dim1/1,dim2/,dim3/1,dim4/,dim5/1,dim6/ tmp_chunks3.nc "$f ${NCDUMP} -sh -n tmp "$fileurl" > tmp_chunked.cdl verifychunking tmp_chunked.cdl "ivar:_ChunkSizes=7,1,2,1,5,1,9;" "fvar:_ChunkSizes=9,1,5,1,2,1,7;" chunkclean tmp.cdl tmpx.cdl -chunkclean tmp_chunked.cdl tmp_chunkedx.cdl +chunkclean tmp_chunked.cdl tmp_chunkedx.cdl diff tmpx.cdl tmp_chunkedx.cdl # Note that unchunked means that there is only one chunk @@ -48,15 +48,15 @@ fileargs tmp_unchunked ${NCCOPY} -M0 -c dim0/,dim1/,dim2/,dim3/,dim4/,dim5/,dim6/ "$SRC" "$fileurl" ${NCDUMP} -sh -n tmp "$fileurl" > tmp_unchunked.cdl verifychunking tmp_unchunked.cdl "ivar:_ChunkSizes=7,4,2,3,5,6,9;" "fvar:_ChunkSizes=9,6,5,3,2,4,7;" -chunkclean tmp_unchunked.cdl tmp_unchunkedx.cdl +chunkclean tmp_unchunked.cdl tmp_unchunkedx.cdl diff tmpx.cdl tmp_unchunkedx.cdl # Test -c / fileargs tmp_unchunked2 -${NCCOPY} -M0 -c "/" "$SRC" "$fileurl" +${NCCOPY} -M0 -c "//" "$SRC" "$fileurl" ${NCDUMP} -sh -n tmp "$fileurl" > tmp_unchunked2.cdl verifychunking tmp_unchunked.cdl "ivar:_ChunkSizes=7,4,2,3,5,6,9;" "fvar:_ChunkSizes=9,6,5,3,2,4,7;" -chunkclean tmp_unchunked.cdl tmp_unchunkedx.cdl +chunkclean tmp_unchunked.cdl tmp_unchunkedx.cdl diff tmpx.cdl tmp_unchunkedx.cdl echo "*** Test that nccopy -c dim/n is used " @@ -80,4 +80,3 @@ if test "x$FEATURE_S3TESTS" = xyes ; then testcase s3; fi echo "*** All nccopy nczarr tests passed!" exit 0 -