Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve filter installation process to avoid use of an extra shell script #2348

Merged
merged 23 commits into from
May 31, 2022

Conversation

DennisHeimbigner
Copy link
Collaborator

re: #2338
re: #2294

In issue #2338, Ed Hartnett suggested a better way to install filters to a user defined location -- for Automake, anyway.

This PR implements that suggestion. It turns out to be more
complicated than it appears, so there are fair number of changes;
mostly to shell scripts. Most of the change is in plugins/Makefile.am.

NOTE: this PR still does NOT address the use of HDF5_PLUGIN_PATH
as the default; this turns out to be complex when dealing with NCZarr.
So this will be addressed in a subsequent post 4.9.0 PR.

Misc. Changes

  1. Record the occurrences of incomplete codecs in libnczarr so that
    they can be included in _Codecs attribute correctly. This allows
    users to see what missing filters are referenced in the Zarr file.
    Primarily affects libnczarr/zfilter.[ch]. Also required creating a
    new no-effect filter: H5Zunknown.c.
  2. Move the unknown filter test to a separate test file.
  3. Incorporates PR Fix distcheck problems #2343

…ript

re: Unidata#2338
re: Unidata#2294

In issue Unidata#2338,
Ed Hartnett suggested a better way to install filters to a user
defined location -- for Automake, anyway.

This PR implements that suggestion. It turns out to be more
complicated than it appears, so there are fair number of changes;
mostly to shell scripts. Most of the change is in plugins/Makefile.am.

NOTE: this PR still does NOT address the use of HDF5_PLUGIN_PATH
as the default; this turns out to be complex when dealing with NCZarr.
So this will be addressed in a subsequent post 4.9.0 PR.

## Misc. Changes
1. Record the occurrences of incomplete codecs in libnczarr so that
   they can be included in _Codecs attribute correctly. This allows
   users to see what missing filters are referenced in the Zarr file.
   Primarily affects libnczarr/zfilter.[ch]. Also required creating a
   new no-effect filter: H5Zunknown.c.
2. Move the unknown filter test to a separate test file.
3. Incorporates PR Unidata#2343
@edwardhartnett
Copy link
Contributor

Does this instead the plugins so zstandard compression works?

If not, then that needs to be fixed before release. It's quite simple and there is no reason to release with non functional compression.

@edwardhartnett
Copy link
Contributor

When I build and test this branch works OK, but when I do make install:

make[1]: Entering directory '/home/ed/nd/plugins'
make  install-am
make[2]: Entering directory '/home/ed/nd/plugins'
make[3]: Entering directory '/home/ed/nd/plugins'
make  install-exec-hook
make[4]: Entering directory '/home/ed/nd/plugins'
sh ./stdinstall.sh
sh: 0: Can't open ./stdinstall.sh
make[4]: *** [Makefile:1106: install-exec-hook] Error 127
make[4]: Leaving directory '/home/ed/nd/plugins'
make[3]: *** [Makefile:1008: install-exec-am] Error 2
make[3]: Leaving directory '/home/ed/nd/plugins'
make[2]: *** [Makefile:910: install-am] Error 2
make[2]: Leaving directory '/home/ed/nd/plugins'
make[1]: *** [Makefile:904: install] Error 2
make[1]: Leaving directory '/home/ed/nd/plugins'
make: *** [Makefile:754: install-recursive] Error 1
(base) ed@koko:~/nd$ 

@DennisHeimbigner
Copy link
Collaborator Author

I am confused; I thought I removed stdinstall.sh and I cannot find a reference to it
in any Makefile.am in this PR.

@edwardhartnett
Copy link
Contributor

edwardhartnett commented May 16, 2022

Whoops! I was not trying the correct branch. Let me try again and I will report back...

@edwardhartnett
Copy link
Contributor

edwardhartnett commented May 16, 2022

OK, sorry about the confusion. When I use the correct branch, make install and make distcheck work fine. ;-)

In order to install the plugins where HDF5 will find them, only one line needs to be added to configure.ac:

with_plugin_dir=${HDF5_PLUGIN_PATH-'/usr/local/hdf5/lib/plugin'}
This needs to be added just before:

AC_MSG_CHECKING([whether and where we should install plugins])

This tells configure to install the plugins in the default plugin path, unless the user specifies a different location with the --with-plugin-dir option, or by having environment variable HDF5_PLUGIN_PATH set.

Once this PR is merged, I can do a PR adding this one line to configure.ac, and adding a test for the nc_def_var_zstandard()/nc_inq_var_zstandard() functions, which are currently untested.

For the CMake build, the Windows default plugin path is C:\ProgramData\hdf5\lib\plugin.

If this is not fixed before release, there will be a lot of confused users and support questions, because the zstandard functions will not work.

@DennisHeimbigner
Copy link
Collaborator Author

I perceive this as more complex than your fix allows for.

If the user sets HDF5_PLUGIN_PATH as an env variable, then the fix needs to parse that path to extract the first directory in that path to use.

If you default to /usr/local/hdf5/lib/plugin, and subsequently, the user runs with a different HDF5_PLUGIN_PATH, then I do not know if HDF5 searches the PATH and also /usr/local/hdf5/lib/plugin. I know that NCZarr does not do so at the moment. I am going to check on what HDF5 does.

You should not conflate the builder/installer with the user. You need to tell me what each is expected to know about filters. If they are the same, then presumably the user understands the role of HDF5_PLUGIN_PATH and can set --with-plugin-dir appropriately. If the user is different from the builder, then presumably the user was given some set of instructions *by the builder) about using HDF5_PLUGIN_PATH (or not using it).

My interpretation of your solution is the builder and user are required to use the same HDF5_PLUGIN_PATH or the default install location is used and the user never sets HDF5_PLUGIN_PATH. Is my intepretation correct? What is the norm at NOAA? Have you talked to any users about their knowledge of HDF5_PLUGIN_PATH?

@DennisHeimbigner
Copy link
Collaborator Author

I checked the HDF5 1.12.0 code. If HDF5_PLUGIN_PATH environment variable
is set, then it uses that exclusively. If it is not set, then it used /usr/local/lib/plugin
exclusively. So, both user and builder must set same HDF5_PLUGIN_PATH -- as a single directory --
or neither must set HDF5_PLUGIN_PATH.

@edwardhartnett
Copy link
Contributor

I expect installers and builders to know nothing about filters. That's why it's important for the default to work.

If the builder knows enough about filters to be setting HDF5_PLUGIN_PATH, then they must also set it for the users. Once they start setting their own plugin path, obviously they are responsible for seeing that it works for the users of their system.

It's important to allow installers to override the default, but I suspect that very few will ever do so. That's why it's important that netcdf works out of the box without anyone explicitly setting any plugin path.

If we install to the default plugin directory the user can just use zstandard compression without knowing anything about filters.

@DennisHeimbigner
Copy link
Collaborator Author

Good points. This seems a little strong to me.

I expect installers and builders to know nothing about filters. That's why it's important for the default to work.

Anyone else care to way in on this.

@edwardhartnett
Copy link
Contributor

To answer your question about NOAA, we have installed CCR on many NOAA HPCs, always using the default directory. It works well.

It's necessary for HDF5_PLUGIN_PATH to supercede the default as we use this in tests. (So we can test filter code before it is installed.) But, in general, I would be very surprised if any netcdf user or installer knows much about HDF5 plugins. Why would they?

It makes sense that, by default, we should use the HDF5 default. Otherwise there will be much confusion and support requests.

@DennisHeimbigner
Copy link
Collaborator Author

Via support questions, it is clear that e.g. IDL and R both tell uses
about filters and about how to set HDF5_PLUGIN_PATH.
Another issue is that of current workflows that do their own filter installation
(essentially everyone who uses filters now). Presumably they would not be happy
about having to modify those workflows to add something like "--disable-plugin-dir".
But that would be the case if plugin installation is automatic. This is why I prefer
an explicit --with-plug-dir or equivalent.

@edwardhartnett
Copy link
Contributor

I do not understand the objection to using the default plugin directory by default and allowing users to override it if they need to.

@DennisHeimbigner
Copy link
Collaborator Author

Now I am confused. Tell me again precisely what options and values the user can or must put
on the ./configure command

@DennisHeimbigner
Copy link
Collaborator Author

What I have at the moment is this:

  1. The builder specifies "./configure ... --with-plugin-dir=<directory>" or "./configure ... --with-plugin-dir" (i.e. with no argument).
  2. In the no argument case, the default is the last directory in the list of directories specified by HDF5_PLUGIN_PATH.
  3. If HDF5_PLUGIN_PATH is not defined, then it effectively defaults to /usr/local/hdf5/lib/plugin.
  4. If --with-plugin-dir is not used, then filters are not installed.

The rationale is that this gives most of what Ed is suggesting, but still does not break existing workflows because of point 4.

@edwardhartnett
Copy link
Contributor

I don't understand how any existing workflows can be broken by using the default plugin directory.

@DennisHeimbigner
Copy link
Collaborator Author

Suppose that you are a user who understands filters and HDF5_PLUGIN_PATH.
So you have already installed a set of filters for your use.
But if auto-install is in place, then suddenly, some of the filters you had already
set up get overwritten by our versions via auto-install.

For example, suppose they had installed a Blosc filter that supported more sub-filters than does
our Blosc filter. Suddenly, their workflows stop working.

This is because two filters having the same name does not mean they have exactly the same
semantics.

@edwardhartnett
Copy link
Contributor

edwardhartnett commented May 17, 2022

The problem of installing on top of existing libraries is a known problem with all installs. In the exact same way, if someone installs a newer version of libnetcdf.so on top of an old version, and the newer version was built with --disable-dap, then all existing netCDF applications that use dap will break. This is just part of the landscape of installing software, and is no different for plugins than for any other binary object. Users and sysadmins have to keep this in mind whenever installing new versions of any software. So this is not a reason not to install plugins in the default directory.

Furthermore, no proposed solution can solve this problem. Making the user specify the directory does not change the result in any way - if the user installs new versions of the plugins in their custom plugin directory, they have the exact same problems as if they were using the default plugin directory.

Let's consider the installation workflows of interest, from most common to least common.

1 - Most common - used by NOAA everywhere, NCAR everywhere I've seen, and almost all new users:

./configure --prefix=/some/install/point && make && sudo make install

This is the most important and common workflow, and we should ensure it continues to work. But it will not work for zstandard with this PR. Instead, filters will be turned off(?) That's not standard or the usual way I would expect software to work. Filters are a key feature that should be turned on by default. (Incidentally, if filters are off, does that mean zlib will also no longer work? That is certainly unacceptable.)

2 - Much less common - used by those who are knowledgeable about filters:

export HDF5_PLUGIN_PATH=/plugin/install/point
./configure --prefix=/some/install/point && make && sudo make install

This allows the users and sysadmins to set system-wide HDF5_PLUGIN_PATH for all users. In this case, our install should respect the HDF5_PLUGIN_PATH environment variable and install the plugins there. (I actually don't think parsing HDF5_PLUGIN_PATH is good. If it contains more than one directory, then how do we know which one to install plugins at? Users who want that level of complexity must resort to workflow 3 below, and take full responsibility for their non-default plugin choices.)

3 - Least common, used by those who know about filters, and have some special filter configurations they want to support - perhaps different HDF5_PLUGIN_PATH settings for different applications or versions:

./configure --prefix=/some/install/point --with-plugin-dir=/plugin/install/point && make && sudo make install

This workflow gives the builder 100% control - plugins can be installed anywhere, and it is up to the installer and the user to understand what setting is needed for HDF5_PLUGIN_PATH. It seems like this would support all current users of filters with netcdf-c.

The number of users now using plugins, and installing them in non-default places, is tiny. The number of users using workflow 1 is massive - almost every user in fact. With your proposed solution, zstandard will not work for most users and they will have to either contact support, or figure out what to do and rebuild netcdf-c with the --with-plugin-dir option. This will lead to a lot of confusion. NOAA sysadmins will be able to handle this (because I will tell them about it), but users of NOAA's zstandard-compressed data will find files that they can't open until they reinstall netcdf-c, and put the fitters where they can be found by HDF5.

So I suggest we use the default plugin install location for workflow 1, and give all these poor users a working zstandard compression, right out of the box, without making them contact support to find out how to get it. ;-)

Workflows 2 will work for users/builders with HDF5_PLUGIN_PATH set, and that's good.

Finally, workflow 3 will work for any user/builder who needs complete control of plugin location. It's fair that users with these needs will have to read the documentation and figure out what to do.

All of this has been worked out and well-tested with CCR for the past several years.

@DennisHeimbigner
Copy link
Collaborator Author

I just realized last night the real danger. You can have two HDF5 filters that use exactly the same compression library, but assume a different order for the parameters. Since the parameters are stored in the file, you can write the data using one wrapper and try to read the data later using a different assumed parameter order. This will fail and the user will have no idea why.

@edwardhartnett
Copy link
Contributor

Ok but can we get the zeroth order case to work?

@DennisHeimbigner
Copy link
Collaborator Author

There is a difference between overwriting our own libraries (in /usr/local/lib, for example) with no warning and overwriting other peoples code with no warning. I think that there needs to be some kind of specific option that must be used so the builder has a chance to avoid the problem. Silent overwriting of other peoples code seems problematic.

@edwardhartnett
Copy link
Contributor

Releasing a version that is broken for almost all users seems problematic to me.

@DennisHeimbigner
Copy link
Collaborator Author

"Broken" is a pretty strong word.

@jswhit
Copy link

jswhit commented May 17, 2022

Could netcdf-c install the plugins in a different default directory (say /usr/local/netcdf/lib/plugin) and then tell HDF5 to look in a different directory by default if HDF5_PLUGIN_PATH is not set?

@DennisHeimbigner
Copy link
Collaborator Author

In HDF5 version 1.13.x, it is possible to programmatically set the plugin path, so it could
be done with that version. In earlier versions, I do not think this is possible.

@WardF
Copy link
Member

WardF commented May 27, 2022

@DennisHeimbigner As is so often the case, the compilation symptom has disappeared today. I'm still seeing an issue with make check, instead of make. See the attached test-suite.log, which reflects a 'filter not available' error when libbz2-dev is not installed. This issue goes away when I install the libbz2-dev package.

It feels like the easiest thing to do as is outlined above, as long as @edwardhartnett is correct and there's no subtle reason not to fencepost these tests around libbz2 being found.

Anyways, I've double-checked that the attached file actually reflects the error I'm observing in nczarr_test/
test-suite.log.zip

@DennisHeimbigner
Copy link
Collaborator Author

Well, until I can solve the problem, it is certainly ok to conditionalize the relevant test.
As near as I can tell, they are as follows:

nc_test4

  • tst_filter.sh tst_filter.sh tst_specific_filters.sh

nczarr_test

  • run_specific_filters.sh
  • run_filter.sh

@DennisHeimbigner
Copy link
Collaborator Author

I looked at the test-suite log and was surprised to see those
seg faults. This is ubuntu correct?

@WardF
Copy link
Member

WardF commented May 27, 2022

@DennisHeimbigner correct, where the package libbz2-dev seems to be the deciding factor, when using autotools-based builds. CMake-based builds work regardless of whether or not libbz2-dev is installed.

@DennisHeimbigner
Copy link
Collaborator Author

I believe I have fixed the problem. Turns out just changing the value of have_bz2
isn't enough to test the local bzip2 case. One needs to actually uninstall libbz2-dev.
Will add a commit to this PR after the tests complete.

@DennisHeimbigner
Copy link
Collaborator Author

Looks like the github actions queue is screwed up. Needs restarting.

This was referenced May 28, 2022
@WardF
Copy link
Member

WardF commented May 31, 2022

Re-started the job queue.

@WardF
Copy link
Member

WardF commented May 31, 2022

make distcheck is failling now because it doesn't have access to the default plugin directory in /usr/lib. I anticipate issues around that from users who regularly run make distcheck. Taking a look at workaround.

@edwardhartnett
Copy link
Contributor

@WardF set environment variable DISTCHECK_CONFIGURE_FLAGS to '--with-plugin-dir-/what/you/want' before running make distcheck.

@WardF
Copy link
Member

WardF commented May 31, 2022

@edwardhartnett yeah, I've found that fix, thanks :), I'm just thinking about the "default user experience" and how to minimize "Hey, make distcheck is failing" esupport questions. Thanks!

@DennisHeimbigner
Copy link
Collaborator Author

It should be the case that all checks will run even if no default plugin dir is specified.
So looks like I screwed that up.

@WardF
Copy link
Member

WardF commented May 31, 2022

@DennisHeimbigner I'm seeing the following at the end of make distcheck

make[3]: Entering directory '/home/wfisher/Desktop/gitprojects/netcdf-c/netcdf-c-4.8.2-development/_build/sub/plugins'
make[4]: Entering directory '/home/wfisher/Desktop/gitprojects/netcdf-c/netcdf-c-4.8.2-development/_build/sub/plugins'
make[4]: Nothing to be done for 'install-exec-am'.
 /usr/bin/mkdir -p '/usr/local/hdf5/lib/plugin'
/usr/bin/mkdir: cannot create directory ‘/usr/local/hdf5’: Permission denied
make[4]: *** [Makefile:768: install-pluginLTLIBRARIES] Error 1
make[4]: Leaving directory '/home/wfisher/Desktop/gitprojects/netcdf-c/netcdf-c-4.8.2-development/_build/sub/plugins'
make[3]: *** [Makefile:1049: install-am] Error 2

@edwardhartnett
Copy link
Contributor

I believe the DISTCHECK_CONFIGURE_FLAGS must be set for make distcheck to work in this case.

However, I doubt many users will be running make distcheck. Most will be running make install, so that is the one to make work by default.

@DennisHeimbigner
Copy link
Collaborator Author

OK, I see. We would need to do the distcheck under sudo for it to work.
I think it is easier to specifiy the DISTCHECK_FLAG "--without-plugin-dir"

@WardF
Copy link
Member

WardF commented May 31, 2022

@DennisHeimbigner As long as we can set that as part of the default make distcheck without the user needing to, that should be fine. I'll take a look.

@edwardhartnett
Copy link
Contributor

Make check will not encounter this problem, it will only happen with the make install that distcheck does.

When the user does make install, he or she must be sudo to install in default location, but that is typically the case so not a problem.

If the user has no sudo powers he must set --prefix and --with-plugin-dir to directories he has write permissions.

@WardF
Copy link
Member

WardF commented May 31, 2022

Added AM_DISTCHECK_CONFIGURE_FLAGS = --without-plugin-dir to the top-level Makefile.am file in a forked copy of this branch. Everything else looks good, so I will merge this PR as part of an additional PR. Thanks @DennisHeimbigner and @edwardhartnett !

WardF added a commit to WardF/netcdf-c that referenced this pull request May 31, 2022
… && /bin/bash '/home/wfisher/Desktop/gitprojects/netcdf-c/missing' aclocal-1.16 -I m4 in support of Unidata#2348 (comment)
@WardF WardF mentioned this pull request May 31, 2022
WardF added a commit that referenced this pull request May 31, 2022
@WardF WardF merged commit 4ef91fd into Unidata:main May 31, 2022
@DennisHeimbigner DennisHeimbigner deleted the install.dmh branch June 15, 2022 18:49
clrpackages pushed a commit to clearlinux-pkgs/netcdf that referenced this pull request Feb 9, 2023
Aaron Kaplan (1):
      Fix incorrect PR link

Alexander Barth (2):
      Include getopt.h if HAVE_GETOPT_H is defined
      use isnan instead of _fpclass on non-MSVC compilers

Ben Boeckel (4):
      size_t: use for type consistency where necessary
      ncx: match loop variable types with checks
      libdispatch: avoid warnings about string size computations
      cmake: extract the HDF5 version when finding HDF5 manually

Charlie Zender (12):
      First draft of Granular BitGroom feature for netcdf-c
      Eliminate GBG-specific initialization, pad syntax with whitespace, try to fix syntax bugs
      add missing variables
      Change NC_QUANTIZE_ATT_NAME to NC_QUANTIZE_BITGROOM_ATT_NAME
      Change test to verify that using quantize mode one greater than NC_GRANULARBG (instead of NC_QUANTIZE_BITGROOM) fails.
      First draft of BitRound implementation
      Fix bone-headed stuff. tst_quantize and tst_filter remain borken.
      Set bit_xpl_nbr_sgn_dbl=52 not 53. No longer add additional bit to prc_bnr_xpl_rqr for BitGroom NC_DOUBLE. Bugfix maintains original BG behavior, fixes corner case.
      Change name to _QuantizeGranularBitRoundNumberOfSignificantDigits. Change identifier from QUANTIZEBR to QUANTIZEGBR to make room for new BitRound token = BR.
      Add BitRound to ncgen
      Add missing BitRound block to zsync.c
      Fix mis-copied comparator

Dave Allured (9):
      tst_misc.sh: Fix hang in make check
      Format compatibility when re-opening files
      Add compatibility function prototype
      Improve comments about format compatibility
      Minor comment fix for return codes
      CI: Update HDF5 testing 1.8.21 --> 1.8.22
      hdf5set_format_compatibility.c: Function docs.
      Release notes: fix link and spelling
      Release notes for #2176, format compatibility

Dennis Heimbigner (179):
      Adding missing file ncdap_test/manyurls.h
      Make Issue Unidata/netcdf-c#2077 work when build is repeated.
      Make Issue Unidata/netcdf-c#2077 work when build is repeated.
      Update release notes
      Make the fortran cache API always be defined.
      Remove no-longer-needed debug directory
      Update RELEASENOTES.md
      ENOTNC4 -> ENOTBUILT
      Add filter support to NCZarr
      Update Release Notes
      Fix handling of enum constants nested in compound types.
      Significantly Improve Amazon S3 Cloud Storage Support
      Update release notes
      Fix FreeBSD fileno problem in the ncgen parsers
      remove actions debug
      Fix new lgtm alerts
      One additional lgtm fix
      (1) improve INI parser (2) Fix make discheck
      Patch errors
      Update release notes
      Fix memory leak
      Fix bug in the default HDF5 byte-range reader
      Update Release Notes
      ckp
      Fix additional S3 support issues
      Update release notes
      Allow optional use of libxml2
      Update release notes
      Typo in previous PR
      Fix a number of OS specific bugs
      Update release notes
      Fix use of S3 with a non-aws appliances
      Update release notes
      Get signature of NC_s3sdk*ize correct
      Verify failure
      not verified
      The remotetest server is down for a while
      The remotetest server is down for a while
      Restore default on for enable-dap-remote-testsc
      Cleanup the CMake inter-test dependencies
      Update RELEASE Notes
      Replace ezxml with tinyxml2
      Update RELEASENOTES.md
      Remove debug
      remove ezxml code as no longer required
      Support MSYS2/Mingw platform
      Update RELEASENOTES.md
      Fix new LGTM alerts
      Fix various problem around VLEN's
      update release notes
      Update actions
      1. Fix an additional flaw in fill_value handling where non-atomic default values were not properly being handled.
      1. Fix an additional flaw in fill_value handling where non-atomic default values were not properly being handled.
      Make sure mode flags are properly defined in netcdf.h
      Update release notes
      Add complete bitgroom support to NCZarr
      Update release notes
      Rename GranularBitGroom to GranularBitRound
      Add support for setting HDF5 alignment property when creating a file
      Update release notes
      Remove conflicts; does not work with OSX
      Improve UTF8 Support On Windows
      Update Release Notes
      Update Release Notes (2)
      Explicitly disallow variable length type compression
      Update Release Notes
      Update get/set alignment documentation
      Incorporate Dave Allured's documentation
      Enhance/Fix filter support
      Update release notes
      Fix new LGTM errors
      remove use of strlcat
      more strlcat remove
      retry
      typo
      1. Fix conflicts with current master.
      Update selected documentation
      Update release notes
      Clean up some ncdap tests.
      Turn on the xarray convention for NCZarr format
      Update release notes
      Fix float precision issue in ncdap_tests
      precision fix
      OSX only
      Add Release Notes warning
      Change so explicit xarray => pure zarr
      Remove debugging
      minor fix
      Fix typo "Nan" -> "NaN"
      restrict the json convention to dictionaries only
      update file permission
      ckp
      testing
      final
      Allow the read/write of JSON-valued Zarr attributes.
      ckp
      missing file'
      update file permission
      cmake
      ckp
      installtest
      switch
      ckp
      ckp
      ckp
      restore
      switch
      ckp
      stdf
      endif
      missing
      update file permission
      test sz
      debug
      debug2
      debug3
      debug4
      debug5
      debug7
      nobzip2
      debug8
      debug10
      examp1
      debug20
      debug21
      setx
      debug30
      exam5
      debug1
      debug2
      debug5
      libdir
      final?
      testing
      dap1
      testenv
      ckp
      Two fixes for the price of one!
      Forgot to fix CMake
      restore
      final
      push
      Support installation of filters into user-specified location
      Remove debug
      Update release notes
      bug2
      update docs
      bug3
      bug4
      bug5
      bug6
      bug10
      bug8
      debug1
      debug2
      debug10
      debug12
      szip1
      Fix szip handling
      recap
      Turn off debug
      final
      final
      ckp
      cleanup
      Fix distcheck problems
      Update release notes
      update
      final1
      Improve filter installation process to avoid use of an extra shell script
      Update release notes
      swith
      I made a major update to this PR with the following changes:
      typo
      Update documentation
      Update docs again
      rebuild
      Update to default --with-plugin-dir to yes
      Fix internal bz2 problems

Edward Hartnett (126):
      added 1.12.1 to hdf5 versions built by GitHub actions
      added commas
      added info about logging to build summary, fixed info about byterange in build summary
      added info about logging to build summary, fixed info about byterange in build summary
      added info about logging to build summary, fixed info about byterange in build summary
      getting ready for next try at quantization code
      further preparation for try 2 at quantizing
      further preparation for try 2 at quantizing
      adding quantize functions to all the dispatch tables
      now qunatizing with inq function in dispatch table
      fixed version numbers
      merged configure.ac and CMakeLists.txt with changes from master branch
      merged nc4hdf.c with changes from master branch
      fixed comment
      further development
      now reading quantize attribute to get settings
      moving function
      perparing to apply bitgroom algorithm
      more testing of qunatize setting
      more quantize testing
      more quantize testing
      more quantize testing
      more quantize testing
      more tests for quantization
      more quantize testing
      more quantize testing
      changed name of attribute to _quantize_bitgroom_number_of_significant_digits
      improved doxygen documenation
      improved doxygen documenation
      change name of att to _QuantizeBitgroomNumberOfSignificantDigits
      bitgroom working for floats
      more quantize testing
      cleanup quantize code
      whitespace cleanup
      moving quantize to its own function
      attempting to fix ncdap test on appvayor
      quantize now working for NC_DOUBLE
      testing of quantize with scalars
      added more documentation, also started on test code for type conversion
      type conversion with quantize between float and double
      undid suggested change to ncdap_test/CMakeLists.txt
      more testing with type conversion
      testing with fill values
      testing with fill values
      testing with fill values
      more tests
      turned off failing quantize test
      code clean up
      refactored quantize code
      more tests for quantize
      added parallel I/O quantize test
      added parallel I/O quantize test
      improving benchmark program
      changed makefile to allow tst_gfs_data_1 to pick up libz from LD_LIBRARY_PATH first
      changed makefile to make benchmark bm_file work properly with zlib-ng
      changed name of tst_gfs_data_1.c to tst_compress_par.c
      tinker with data algorithm for tst_compress_par.c
      now nsd of 0 is NC_EINVAL for nc_def_var_quantize()
      fixed benchmark program run
      adding quantize test
      better comments
      now setting deflate_level to zero does not turn on deflate
      added sequential benchmark program for compression
      more test development
      more test development
      starting to make logging output files for each process for parallel IO builds
      removing unneeded file error4.c
      better handling of logging for parallel I/O builds
      turned off logging in test
      turned off logging in test
      turned logging back on in one test
      turning on parallel I/O tests in CI
      changed Makefile.am flags in examples/C
      turning off parallel tests?
      turning on parallel tests
      fixed makefile
      adding pnetcdf
      untabified
      turning off tests that depend on ncpathcvt when --disable-utilities is used
      fixing some issuses of pnetcdf tests in nc_test
      fixing some issuses of pnetcdf tests in nc_test
      now running MPI-enabled tests with mpiexec for parallel I/O builds
      fixed problems running mpi-enabled tests with --enable-pnetcdf in nc_test
      fixing some nc_test builds when --enable-pnetcdf is not used
      fixing some nc_test builds when --enable-pnetcdf is not used
      fixing some nc_test builds when --enable-pnetcdf is not used
      fixed missing NC_HAS_QUANTIZE
      added ZSTD to netcdf_meta.h and libnetcdf.settings
      adding test to demonstrate parallel I/O numrecs problem
      attempts to get working
      working on parallel numrec problem
      ensuring that MPI_File_close() is only called on open MPI file handle
      fixed parallel functions for netcdf-fortran build
      fixed parallel functions for netcdf-fortran build
      fixed warnings
      added BENCHMARKS to the summary
      fixing parallel I/O bug with dim length for unlimited dimensions
      fixing parallel I/O bug with dim length for unlimited dimensions
      fixing parallel I/O bug with dim length for unlimited dimensions
      fixing parallel I/O bug with dim length for unlimited dimensions
      declared a variable outside for loop
      change to trigger CI
      added  sequential test for enddef issue
      added some entries to nc-config
      no longer run tst_parallel_zlib with 1 processor in testing
      undoing unintended change
      undoing unintended change
      added tst_parallel6 to CMake parallel build
      added nc4cache.c to list of doxygen input files
      fixing doxygen warnings
      more doxygen warning fixes
      doxygen for filter functions
      fixed missing szip constants in netcdf.h
      removed all-error-codes.md
      added netcdf_filter.h to doxygen build
      adding quantize documentation
      fixed some doxygen warnings
      fixed some doxygen warnings
      fixed some doxygen warnings
      fixed more doxygen warnings
      fixing issues with dimlens of unlitmited dims in complex situations
      more detail on which algorithm to choose
      fixed documentation warnings in filters.md
      change to trigger CI
      turn on set -x for failing test script
      turned set -x off again

Egbert Eich (5):
      swap[4|8]b: Satisfy strict aliasing rules
      Fix type punning in val_NC_check_voff() by using memcpy instead of assignment
      Fix type punning in xxdrntohdouble() by using memcpy instead of assignment
      NCD4_dumpbytes: use correct swapline for object size
      d4util.h: make swapinlineXX more robust against type punning

Ethan Davis (1):
      NUG appendix files and CDL doc file moved to netcdf/NUG. Remove here.

Even Rouault (1):
      Fix a stack-read-overflow in ncindexlookup()

Greg Sjaardema (26):
      WIP: attribute creation order on/off
      Address code review issues
      Fix indentation...
      Finish argument name refactoring...
      Detect attribute creation order tracking setting
      Make sure HDF5_C_LIBRARY and HDF5_HL_LIBRARY set
      Refactor Z library detection
      Put threads find_package back where it was.
      fix last commit.
      Remove duplicate line
      Remove another duplicate find_path
      Better detection of libz library
      Use consistent form for find_package
      Clean up some whitespace junk
      Avoid infinite loop for finding large prime values
      Remove duplicate line
      Make dimscale attachement to variables optional
      Better implementation of the no dimscale attach option
      Eliminate tabs added in last commit
      Revert all whitespace changes
      One more try at new implementation with no whitespace changes
      Initialize variable
      Initialize potentially uninitialized variable
      Fix syntax error
      fix typo
      Specify correct plugin suffix

Jennifer Oxelson (7):
      intellij
      Docs migration
      docs migration, part 2
      docs cleanup
      docs link updates
      Update release_header.html
      Update CMakeInstallation.cmake

Mark Harfouche (2):
      Fix a few memory leaks and erroneous logic in nczarr_test/testfilter_misc
      Fixup nc_test4/test_filter_misc.c too

Michael Hirsch (1):
      CMake: CMP0075 requires CMake >= 3.12.

Milton Woods (27):
      Support ANSI *printf specifiers on mingw-w64
      valgrind not supported by mingw
      Avoid setting RPATH in mingw
      hostname lacks arguments on mingw
      Use relative pathnames in __FILE__ macros on mingw
      Use canonical path to derive name of dataset
      Avoid redefinition of strcasecmp in mingw-w64
      Define strcasecmp for Windows in ncconfigure.h
      Avoid duplicate definition of strcasecmp in config.h
      Use strcasecmp definitions from config.h
      Remove config.h from ncjson.c and nclist.c
      Use Windows paths in tests of mingw executables
      Replace pwd by $PWDCMD in test_common.in
      Replace pwd by $PWDCMD in d4test_common.sh
      Replace pwd by $PWDCMD in test_nczarr.sh
      Disable bash path conversions in testpathcvt.sh on mingw
      Replace pwd by $PWDCMD after test_common.sh is sourced
      Revert "Use Windows paths in tests of mingw executables"
      Revert "Replace pwd by $PWDCMD in test_common.in"
      Revert "Replace pwd by $PWDCMD in d4test_common.sh"
      Revert "Replace pwd by $PWDCMD in test_nczarr.sh"
      Revert "Replace pwd by $PWDCMD after test_common.sh is sourced"
      Use Windows format for pwd in test_common on mingw
      Fix NCJTHROW definition after merge from main
      Open datasets in binary mode on mingw
      Use binary mode for tst_inmemory in mingw
      Fix dll exports for ncxml

Paul Harris (1):
      Fix libraries for CURL and HDF5

Philippe Antoine (1):
      fix memory leak in genc_netcdf

Rostislav Kouznetsov (2):
      Add doc on errors introduced by lossy compression
      Fix typo

Sean McBride (1):
      Fixed Clang -Wstrict-prototypes warnings

Sergey Kosukhin (1):
      fix configure check for the -fno-strict-aliasing flag

Tobias Kölling (3):
      added test for opening a trunceded file using in-memory open
      allow missing udata when closing file with abort=1
      hand over udata to h5->mem a little earlier

Ward Fisher (130):
      Replace source for Unidata logo.
      Update windows binary download link url.
      Update footer.html and Doxyfile to use local Unidata image.
      Remove obsolete doxygen tags.
      Added uniLogo.png to make dist.
      Added a one-off stanza for autoconf-based tests on Github Actions.
      Propagate github actions tests into cmake-based stanza.
      Correct spacing issue in GA yaml file.
      Modify GA workflow a bit.
      Reverse GA workflow. Run the one-off tests first and then run the full test matrix. This should shorten the test/failure cycle.
      Thanks to newer ctest functionality, if ctest tests fail, re-run just the failed ones with more verbose output.
      Attempt at test orchestration to avoid a race condition when running tests in parallel.
      A bit more twiddling of the github actions workflow.
      Syntax debugging.
      Test dependency on one-offs updated.
      Correct a typo in the github actions yaml file.
      Correct a typo.
      Revamping the HDF5_VERSION logic.
      Plugged a hole where HDF5_VERSION wouldn't be checked against minimum HDF5 required version.
      Added logic for checking the version when the HDF5 libraries and include directories are set explicitly.
      Caching HDF5_VERSION string for diagnostic purposes.
      Correct an issue with appveyor builds, specific to systems where a bash shell is not available.
      Correct logic error.
      Begin wiring in option to toggle automatic search for libxml2 in support of https://github.com/Unidata/netcdf-c/pulls/2135
      Updated release notes.
      Updated .gitignore to ignore .vscode directory.
      Adding control block, --enable and disable option for libxml2 to configure.ac
      Added missing include for read() function.
      Addressed an issue in ncbytes where long unsigned ~= size_t
      Preprocessing for generated ezxml files.
      Fencepost unistd.h inclusion.
      Renamed the workflow file for running ubuntu-based tests.
      Adding github actions.
      Renamed some of the job steps.
      Collapse some redundant definitions in the Ubuntu-based workflow.
      Syntax
      Syntax
      It was worth a shot.
      Renaming jobs to differentiate between Ubuntu and Linux jobs.
      Temporarily disable ubuntu tests on PR.
      Temporarily disable ubuntu tests on PR.
      More testing.
      Sorting out the reported syntax error.
      Remove ubuntu-specific thing.
      Syntax error discovered (I hope)
      Removed call to autoreconf
      Remove more calls to apt.
      Installing autoconf tools
      More scripting.
      Move autoconf installation stanza
      Cache automake install.
      Additional expansion of naming.
      More work on the OSX github actions.
      Remove HDF4
      Add a missing space.
      Refactor triggers on GA runs.
      Removed OSX tests from run-on-push, modify so that they run on pull request.
      Avoid name collision in macOS tests.
      Collapse and update the HDF5 versions being tested on Github Actions.
      Add skeleton mingw/msys2 Github CI tests.
      Added cmake to the mingw-based test.
      Remove stale travis-ci configuration file.
      Working on MinGW/MSYS2 support. Attempting workflow with system-installed libhdf5
      Remove stray text.
      Further developments unfolding.
      Temporarily disable cache
      Clean up some Unix-related cruft.
      Really simplify things.
      Additional compilation work.
      Next iteration of compilation test.
      Remove stray text.
      Missing symbol in MSYS2/MinGW compilation.
      Dangling undefined references to nulldup. These should be unified in a header, but that is a separate issue to open/resolve. For now, resolving these as part of getting mingw/msys2-based github actions working.
      Cleaned up another undefined reference.
      More cleanup.
      Collapse build and run test steps into a single step, no need to build all the tests before seeing if any fail.
      More tweaks.
      Remove stray character.
      Moving on to cmake-based github actions.
      Adding hdf5 info for cmake-based tests.
      Force CMake to use gcc
      Oh right, Unix Makefiles
      HDF5 configuration diagnostic output
      Syntax error.
      Syntax error.
      Missing pipe character.
      Removing cmake-based tests for now.
      Correct trigger event for mingw tests to pull_request from push'
      Missed a merge conflict marker, fixed that.
      Modify cmakelists.txt to generate oc2 auth html file whenever a doxygen-enabled build is run.
      Correct a memory leak as reported in Unidata/netcdf-c#2203
      Correct the accidental removal of NOUNDEFINED, as reported in Unidata/netcdf-c#2196
      Cleaning up make dist, it's generating tarballs that don't work with cmake.
      Adding a missing file to make dist.
      Adding a missing reference file.
      Remove stale badges, add badge for Repology in support of https://github.com/Unidata/netcdf-c//pull/1350
      Change order in which auth.html is generated and copied.
      Tweak to software.html static page.
      Removed empty, useless script.
      Added new credits file.
      Reconfiguring the Ubuntu Github Actions test.
      Added first pass at a parallel github actions one-off
      Correct dependency chain for Github Actions.
      Correct compiler issue with parallel one-off test.
      Remove on-push trigger for OSX-based workflows.
      Made the parallel build action label mention pnetcdf.
      Update URL for windows downloads.
      Added error message.
      correct links for gliderscope and netcdfninja in software.html
      Removed precision fiddling with OSX to correct issues that resulted in remote testing. Also integrated the one-line change from Unidata/netcdf-c#2347, which is proving problematic (for some reason).
      Add missing file to EXTRA_DIST
      Turned off plugin directory during CDPATH="${ZSH_VERSION+.}:" && cd . && /bin/bash '/home/wfisher/Desktop/gitprojects/netcdf-c/missing' aclocal-1.16 -I m4 in support of Unidata/netcdf-c#2348 (comment)
      Revised netCDF version and SO version
      Bumped dev version in CMakeLists.txt.  SO Version remains unchanged.
      Updated doxygen version, added target release date to RELEASE_NOTES
      Updated release date to reflect actual release.
      Updated release numbers for 4.9.0
      Update configure.ac to incorporate maintainer mode
      Testing manual workflow_dispatch for github actions.
      Updated .gitignore for generated files we need as part of the release process.
      Added autoconf-generated files for a stand-alone release.
      Added generated files for the stand-alone release.
      Correct error in make dist
      Updated generated makefile.
      Make dist is generating a distribution with missing files, that only cmake seems to complain about.
      Corrected Makefile.am error.
      Updated generated Makefile.in
      Incorporated GitHub-generated release notes into the manually managed release notes, and updated the list of included dependencies for Windows installer downloads.
      Make plugin dir off by default for this release.
      Regenerated configure script.

wkliao (7):
      use NC_EDIMSCALE for errors related to dimscale
      fix a compile error
      use AC_MSG_WARN/AC_MSG_NOTICE instead of echo
      vpath build: use top_srcdir
      avoid type define MPI_Comm and MPI_Info
      Compile dparallel.c only when parallel I/O is enabled
      allow to test tst_cdf5format when PnetCDF is enabled

xantares (1):
      cmake: list zip libs before szip
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request Jun 3, 2023
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.9.3 - TBD

## 4.9.2 - March 14, 2023

This is the maintenance release which adds support for HDF5 version
1.14.0, in addition to a handful of other changes and bugfixes.

* Fix 'make distcheck' error in run_interop.sh. See [Github
  #????](https://github.com/Unidata/netcdf-c/pull/????).
* Update `nc-config` to remove inclusion from automatically-detected
  `nf-config` and `ncxx-config` files, as the wrong files could be
  included in the output.  This is in support of [GitHub
  #2274](Unidata/netcdf-c#2274).

* Update H5FDhttp.[ch] to work with HDF5 version 1.13.2 and later. See
  [Github #2635](Unidata/netcdf-c#2635).

* [Bug Fix] Update DAP code to enable CURLOPT_ACCEPT_ENCODING by
  default. See [Github
  #2630](Unidata/netcdf-c#2630).

* [Bug Fix] Fix byterange failures for certain URLs. See [Github
  #2649](Unidata/netcdf-c#2649).

* [Bug Fix] Fix 'make distcheck' error in run_interop.sh. See [Github
  #2631](Unidata/netcdf-c#2631).

* [Enhancement] Update `nc-config` to remove inclusion from
  automatically-detected `nf-config` and `ncxx-config` files, as the
  wrong files could be included in the output.  This is in support of
  [GitHub #2274](Unidata/netcdf-c#2274).

* [Enhancement] Update H5FDhttp.[ch] to work with HDF5 version
  1.14.0. See [Github
  #2615](Unidata/netcdf-c#2615).

## 4.9.1 - February 2, 2023

## Known Issues

* A test in the `main` branch of `netcdf-cxx4` is broken by this rc; this will
  bear further investigation, but not being treated as a roadblock for the
  release candidate.

* The new document, `netcdf-c/docs/filter_quickstart.md` is in
  rough-draft form.

* Race conditions exist in some of the tests when run concurrently with large
  numbers of processors

## What's Changed from v4.9.0 (automatically generated)

* Fix nc_def_var_fletcher32 operation by \@DennisHeimbigner in
  Unidata/netcdf-c#2403

* Merge relevant info updates back into `main` by \@WardF in
  Unidata/netcdf-c#2387

* Add manual GitHub actions triggers for the tests. by \@WardF in
  Unidata/netcdf-c#2404

* Use env variable USERPROFILE instead of HOME for windows and mingw. by
  \@DennisHeimbigner in Unidata/netcdf-c#2405

* Make public a limited API for programmatic access to internal .rc tables by
  \@DennisHeimbigner in Unidata/netcdf-c#2408

* Fix typo in CMakeLists.txt by \@georgthegreat in
  Unidata/netcdf-c#2412

* Fix choice of HOME dir by \@DennisHeimbigner in
  Unidata/netcdf-c#2416

* Check for libxml2 development files by \@WardF in
  Unidata/netcdf-c#2417

* Updating Doxyfile.in with doxygen-1.8.17, turned on WARN_AS_ERROR, added
  doxygen build to CI run by \@edwardhartnett in
  Unidata/netcdf-c#2377

* updated release notes by \@edwardhartnett in
  Unidata/netcdf-c#2392

* increase read block size from 1 KB to 4 MB by \@wkliao in
  Unidata/netcdf-c#2319

* fixed RELEASE_NOTES.md by \@edwardhartnett in
  Unidata/netcdf-c#2423

* Fix pnetcdf tests in cmake by \@WardF in
  Unidata/netcdf-c#2437

* Updated CMakeLists to avoid corner case cmake error by \@WardF in
  Unidata/netcdf-c#2438

* Add `--disable-quantize` to configure by \@WardF in
  Unidata/netcdf-c#2439

* Fix the way CMake handles -DPLUGIN_INSTALL_DIR by \@DennisHeimbigner in
  Unidata/netcdf-c#2430

* fix and test quantize mode for NC_CLASSIC_MODEL by \@edwardhartnett in
  Unidata/netcdf-c#2445

* Guard _declspec(dllexport) in support of #2446 by \@WardF in
  Unidata/netcdf-c#2460

* Ensure that netcdf_json.h does not interfere with ncjson. by
  \@DennisHeimbigner in Unidata/netcdf-c#2448

* Prevent cmake writing to source dir by \@magnusuMET in
  Unidata/netcdf-c#2463

* more quantize testing and adding pre-processor constant NC_MAX_FILENAME to
  nc_tests.h by \@edwardhartnett in
  Unidata/netcdf-c#2457

* Provide a default enum const when fill value does not match any enum
  constant by \@DennisHeimbigner in
  Unidata/netcdf-c#2462

* Fix support for reading arrays of HDF5 fixed size strings by
  \@DennisHeimbigner in Unidata/netcdf-c#2466

* fix musl build by \@magnusuMET in
  Unidata/netcdf-c#1701

* Fix AWS SDK linking errors by \@dzenanz in
  Unidata/netcdf-c#2470

* Address jump-misses-init issue. by \@WardF in
  Unidata/netcdf-c#2488

* Remove stray merge conflict markers by \@WardF in
  Unidata/netcdf-c#2493

* Add support for Zarr string type to NCZarr by \@DennisHeimbigner in
  Unidata/netcdf-c#2492

* Fix some problems with PR 2492 by \@DennisHeimbigner in
  Unidata/netcdf-c#2497

* Fix some bugs in the blosc filter wrapper by \@DennisHeimbigner in
  Unidata/netcdf-c#2461

* Add option to control accessing external servers by \@DennisHeimbigner in
  Unidata/netcdf-c#2491

* Changed attribute case in documentation by \@WardF in
  Unidata/netcdf-c#2482

* Adding all-error-codes.md back in to distribution documentation. by \@WardF in
  Unidata/netcdf-c#2501

* Update hdf5 version in github actions. by \@WardF in
  Unidata/netcdf-c#2504

* Minor update to doxygen function documentation by \@gsjaardema in
  Unidata/netcdf-c#2451

* Fix some addtional errors in NCZarr by \@DennisHeimbigner in
  Unidata/netcdf-c#2503

* Cleanup szip handling some more by \@DennisHeimbigner in
  Unidata/netcdf-c#2421

* Check for zstd development headers in autotools by \@WardF in
  Unidata/netcdf-c#2507

* Add new options to nc-config by \@WardF in
  Unidata/netcdf-c#2509

* Cleanup built test sources in nczarr_test by \@DennisHeimbigner in
  Unidata/netcdf-c#2508

* Fix inconsistency in netcdf_meta.h by \@WardF in
  Unidata/netcdf-c#2512

* Small fix in nc-config.in by \@WardF in
  Unidata/netcdf-c#2513

* For loop initial declarations are only allowed in C99 mode by \@gsjaardema in
  Unidata/netcdf-c#2517

* Fix some dependencies in tst_nccopy3 by \@WardF in
  Unidata/netcdf-c#2518

* Update plugins/Makefile.am by \@WardF in
  Unidata/netcdf-c#2519

* Fix prereqs in ncdump/tst_nccopy4 in order to avoid race conditions. by
  \@WardF in Unidata/netcdf-c#2520

* Move construction of VERSION file to end of the build by \@DennisHeimbigner in
  Unidata/netcdf-c#2527

* Add draft filter quickstart guide by \@WardF in
  Unidata/netcdf-c#2531

* Turn off extraneous debug output by \@DennisHeimbigner in
  Unidata/netcdf-c#2537

* typo fix by \@wkliao in Unidata/netcdf-c#2538

* replace 4194304 with READ_BLOCK_SIZE by \@wkliao in
  Unidata/netcdf-c#2539

* Rename variable to avoid function name conflict by \@ibaned in
  Unidata/netcdf-c#2550

* Add Cygwin CI and stop installing unwanted plugins by \@DWesl in
  Unidata/netcdf-c#2529

* Merge subset of v4.9.1 files back into main development branch by \@WardF in
  Unidata/netcdf-c#2530

* Add a Filter quickstart guide document by \@WardF in
  Unidata/netcdf-c#2524

* Fix race condition in ncdump (and other) tests. by \@DennisHeimbigner in
  Unidata/netcdf-c#2552

* Make dap4 reference dap instead of hard-wired to be disabled. by \@WardF in
  Unidata/netcdf-c#2553

* Suppress nczarr_test/tst_unknown filter test by \@DennisHeimbigner in
  Unidata/netcdf-c#2557

* Add fenceposting for HAVE_DECL_ISINF and HAVE_DECL_ISNAN by \@WardF in
  Unidata/netcdf-c#2559

* Add an old static file. by \@WardF in
  Unidata/netcdf-c#2575

* Fix infinite loop in file inferencing by \@DennisHeimbigner in
  Unidata/netcdf-c#2574

* Merge Wellspring back into development branch by \@WardF in
  Unidata/netcdf-c#2560

* Allow ncdump -t to handle variable length string attributes by \@srherbener in
  Unidata/netcdf-c#2584

* Fix an issue I introduced with make distcheck by \@WardF in
  Unidata/netcdf-c#2590

* make UDF0 not require NC_NETCDF4 by \@jedwards4b in
  Unidata/netcdf-c#2586

* Expose user-facing documentation related to byterange DAP functionality.  by
  \@WardF in Unidata/netcdf-c#2596

* Fix Memory Leak by \@DennisHeimbigner in
  Unidata/netcdf-c#2598

* CI: Change autotools CI build to out-of-tree build. by \@DWesl in
  Unidata/netcdf-c#2577

* Update github action configuration scripts. by \@WardF in
  Unidata/netcdf-c#2600

* Update the filter quickstart guide.  by \@WardF in
  Unidata/netcdf-c#2602

* Fix symbol export on Windows by \@WardF in
  Unidata/netcdf-c#2604

## New Contributors
* \@georgthegreat made their first contribution in Unidata/netcdf-c#2412
* \@dzenanz made their first contribution in Unidata/netcdf-c#2470
* \@DWesl made their first contribution in Unidata/netcdf-c#2529
* \@srherbener made their first contribution in Unidata/netcdf-c#2584
* \@jedwards4b made their first contribution in Unidata/netcdf-c#2586

**Full Changelog**: Unidata/netcdf-c@v4.9.0...v4.9.1

### 4.9.1 - Release Candidate 2 - November 21, 2022

#### Known Issues

* A test in the `main` branch of `netcdf-cxx4` is broken by this rc;
  this will bear further investigation, but not being treated as a
  roadblock for the release candidate.

* The new document, `netcdf-c/docs/filter_quickstart.md` is in rough-draft form.

#### Changes

* [Bug Fix] Fix a race condition when testing missing filters. See
  [Github #2557](Unidata/netcdf-c#2557).

* [Bug Fix] Fix some race conditions due to use of a common file in multiple
  shell scripts . See [Github
  #2552](Unidata/netcdf-c#2552).


### 4.9.1 - Release Candidate 1 - October 24, 2022

* [Enhancement][Documentation] Add Plugins Quick Start Guide.  See
  [GitHub #2524](Unidata/netcdf-c#2524) for
  more information.

* [Enhancement] Add new entries in `netcdf_meta.h`, `NC_HAS_BLOSC` and
  `NC_HAS_BZ2`. See [Github
  #2511](Unidata/netcdf-c#2511) and [Github
  #2512](Unidata/netcdf-c#2512) for more
  information.

* [Enhancement] Add new options to `nc-config`: `--has-multifilters`,
  `--has-stdfilters`, `--has-quantize`, `--plugindir`.  See [Github
  #2509](Unidata/netcdf-c#2509) for more
  information.

* [Bug Fix] Fix some errors detected in PR 2497. [PR
  #2497](Unidata/netcdf-c#2497) . See [Github
  #2503](Unidata/netcdf-c#2503).

* [Bug Fix] Split the remote tests into two parts: one for the
  remotetest server and one for all other external servers. Also add a
  configure option to enable the latter set. See [Github
  #2491](Unidata/netcdf-c#2491).

* [Bug Fix] Fix blosc plugin errors. See [Github
  #2461](Unidata/netcdf-c#2461).

* [Bug Fix] Fix support for reading arrays of HDF5 fixed size
  strings. See [Github
  #2466](Unidata/netcdf-c#2466).

* [Bug Fix] Fix some errors detected in [PR
  #2492](Unidata/netcdf-c#2492) . See [Github
  #2497](Unidata/netcdf-c#2497).

* [Enhancement] Add support for Zarr (fixed length) string type in
  nczarr. See [Github
  #2492](Unidata/netcdf-c#2492).

* [Bug Fix] Split the remote tests into two parts: one for the
  remotetest server and one for all other external servers. Also add a
  configure option to enable the latter set. See [Github
  #2491](Unidata/netcdf-c#2491).

* [Bug Fix] Fix support for reading arrays of HDF5 fixed size
  strings. See [Github
  #2462](Unidata/netcdf-c#2466).

* [Bug Fix] Provide a default enum const when fill value does not
  match any enum constant for the value zero. See [Github
  #2462](Unidata/netcdf-c#2462).

* [Bug Fix] Fix the json submodule symbol conflicts between libnetcdf
  and the plugin specific netcdf_json.h. See [Github
  #2448](Unidata/netcdf-c#2448).

* [Bug Fix] Fix quantize with CLASSIC_MODEL files. See [Github
  #2405](Unidata/netcdf-c#2445).

* [Enhancement] Add `--disable-quantize` option to `configure`.

* [Bug Fix] Fix CMakeLists.txt to handle all acceptable boolean values
  for -DPLUGIN_INSTALL_DIR. See [Github
  #2430](Unidata/netcdf-c#2430).

* [Bug Fix] Fix tst_vars3.c to use the proper szip flag. See [Github
  #2421](Unidata/netcdf-c#2421).

* [Enhancement] Provide a simple API to allow user access to the
  internal .rc file table: supports get/set/overwrite of entries of
  the form "key=value". See [Github
  #2408](Unidata/netcdf-c#2408).

* [Bug Fix] Use env variable USERPROFILE instead of HOME for windows
  and mingw. See [Github
  #2405](Unidata/netcdf-c#2405).

* [Bug Fix] Fix the nc_def_var_fletcher32 code in hdf5 to properly
  test value of the fletcher32 argument. See [Github
  #2403](Unidata/netcdf-c#2403).

## 4.9.0 - June 10, 2022

* [Enhancement] Add quantize functions nc_def_var_quantize() and
  nc_inq_var_quantize() to enable lossy compression. See [Github
  #1548](Unidata/netcdf-c#1548).

* [Enhancement] Add zstandard compression functions nc_def_var_zstandard() and
  nc_inq_var_zstandard(). See [Github
  #2173](Unidata/netcdf-c#2173).

* [Enhancement] Have netCDF-4 logging output one file per processor when used
  with parallel I/O. See [Github
  #1762](Unidata/netcdf-c#1762).

* [Enhancement] Improve filter installation process to avoid use of an extra
  shell script. See [Github
  #2348](Unidata/netcdf-c#2348).

* [Bug Fix] Get "make distcheck" to work See [Github
  #2343](Unidata/netcdf-c#2343).

* [Enhancement] Allow the read/write of JSON-valued Zarr attributes to allow for
  domain specific info such as used by GDAL/Zarr. See [Github
  #2278](Unidata/netcdf-c#2278).

* [Enhancement] Turn on the XArray convention for NCZarr files by
  default. WARNING, this means that the mode should explicitly specify "nczarr"
  or "zarr" even if "xarray" or "noxarray" is specified. See [Github
  #2257](Unidata/netcdf-c#2257).

* [Enhancement] Update the documentation to match the current filter
  capabilities See [Github
  #2249](Unidata/netcdf-c#2249).

* [Enhancement] Update the documentation to match the current filter
  capabilities. See [Github
  #2249](Unidata/netcdf-c#2249).

* [Enhancement] Support installation of pre-built standard filters into
  user-specified location. See [Github
  #2318](Unidata/netcdf-c#2318).

* [Enhancement] Improve filter support. More specifically (1) add
  nc_inq_filter_avail to check if a filter is available, (2) add the notion of
  standard filters, (3) cleanup szip support to fix interaction with NCZarr. See
  [Github #2245](Unidata/netcdf-c#2245).

* [Enhancement] Switch to tinyxml2 as the default xml parser implementation. See
  [Github #2170](Unidata/netcdf-c#2170).

* [Bug Fix] Require that the type of the variable in nc_def_var_filter is not
  variable length. See [Github
  #/2231](Unidata/netcdf-c#2231).

* [File Change] Apply HDF5 v1.8 format compatibility when writing to previous
  files, as well as when creating new files.  The superblock version remains at
  2 for newly created files.  Full backward read/write compatibility for
  netCDF-4 is maintained in all cases.  See [Github
  #2176](Unidata/netcdf-c#2176).

* [Enhancement] Add ability to set dataset alignment for netcdf-4/HDF5
  files. See [Github #2206](Unidata/netcdf-c#2206).

* [Bug Fix] Improve UTF8 support on windows so that it can use utf8
  natively. See [Github #2222](Unidata/netcdf-c#2222).

* [Enhancement] Add complete bitgroom support to NCZarr. See [Github
  #2197](Unidata/netcdf-c#2197).

* [Bug Fix] Clean up the handling of deeply nested VLEN types. Marks
  nc_free_vlen() and nc_free_string as deprecated in favor of
  ncaux_reclaim_data(). See [Github
  #2179](Unidata/netcdf-c#2179).

* [Bug Fix] Make sure that netcdf.h accurately defines the flags in the
  open/create mode flags. See [Github
  #2183](Unidata/netcdf-c#2183).

* [Enhancement] Improve support for msys2+mingw platform. See [Github
  #2171](Unidata/netcdf-c#2171).

* [Bug Fix] Clean up the various inter-test dependencies in ncdump for
  CMake. See [Github #2168](Unidata/netcdf-c#2168).

* [Bug Fix] Fix use of non-aws appliances. See [Github
  #2152](Unidata/netcdf-c#2152).

* [Enhancement] Added options to suppress the new behavior from [Github
  #2135](Unidata/netcdf-c#2135).  The options for
  `cmake` and `configure` are, respectively `-DENABLE_LIBXML2` and
  `--(enable/disable)-libxml2`. Both of these options defaul to 'on/enabled'.
  When disabled, the bundled `ezxml` XML interpreter is used regardless of
  whether `libxml2` is present on the system.

* [Enhancement] Support optional use of libxml2, otherwise default to ezxml. See
  [Github #2135](Unidata/netcdf-c#2135) -- H/T to
  [Egbert Eich](https://github.com/e4t).

* [Bug Fix] Fix several os related errors. See [Github
  #2138](Unidata/netcdf-c#2138).

* [Enhancement] Support byte-range reading of netcdf-3 files stored in private
  buckets in S3. See [Github
  #2134](Unidata/netcdf-c#2134)

* [Enhancement] Support Amazon S3 access for NCZarr. Also support use of the
  existing Amazon SDK credentials system. See [Github
  #2114](Unidata/netcdf-c#2114)

* [Bug Fix] Fix string allocation error in H5FDhttp.c. See [Github
  #2127](Unidata/netcdf-c#2127).

* [Bug Fix] Apply patches for ezxml and for selected oss-fuzz detected
  errors. See [Github #2125](Unidata/netcdf-c#2125).

* [Bug Fix] Ensure that internal Fortran APIs are always defined. See [Github
  #2098](Unidata/netcdf-c#2098).

* [Enhancement] Support filters for NCZarr. See [Github
  #2101](Unidata/netcdf-c#2101)

* [Bug Fix] Make PR 2075 long file name be idempotent. See [Github
  #2094](Unidata/netcdf-c#2094).


## 4.8.1 - August 18, 2021

* [Bug Fix] Fix multiple bugs in libnczarr. See [Github
  #2066](Unidata/netcdf-c#2066).

* [Enhancement] Support windows network paths (e.g. \\svc\...). See [Github
  #2065](Unidata/netcdf-c#2065).

* [Enhancement] Convert to a new representation of the NCZarr meta-data
  extensions: version 2. Read-only backward compatibility is provided. See
  [Github #2032](Unidata/netcdf-c#2032).

* [Bug Fix] Fix dimension_separator bug in libnczarr. See [Github
  #2035](Unidata/netcdf-c#2035).

* [Bug Fix] Fix bugs in libdap4. See [Github
  #2005](Unidata/netcdf-c#2005).

* [Bug Fix] Store NCZarr fillvalue as a singleton instead of a 1-element
  array. See [Github #2017](Unidata/netcdf-c#2017).

* [Bug Fixes] The netcdf-c library was incorrectly determining the scope of
  dimension; similar to the type scope problem. See [Github
  #2012](Unidata/netcdf-c#2012) for more information.

* [Bug Fix] Re-enable DAP2 authorization testing. See [Github
  #2011](Unidata/netcdf-c#2011).

* [Bug Fix] Fix bug with windows version of mkstemp that causes failure to
  create more than 26 temp files. See [Github
  #1998](Unidata/netcdf-c#1998).

* [Bug Fix] Fix ncdump bug when printing VLENs with basetype char. See [Github
  #1986](Unidata/netcdf-c#1986).

* [Bug Fixes] The netcdf-c library was incorrectly determining the scope of
  types referred to by nc_inq_type_equal. See [Github
  #1959](Unidata/netcdf-c#1959) for more information.

* [Bug Fix] Fix bug in use of XGetopt when building under Mingw. See [Github
  #2009](Unidata/netcdf-c#2009).

* [Enhancement] Improve the error reporting when attempting to use a filter for
  which no implementation can be found in HDF5_PLUGIN_PATH. See [Github
  #2000](Unidata/netcdf-c#2000) for more information.

* [Bug Fix] Fix `make distcheck` issue in `nczarr_test/` directory. See [Github
  #2007](Unidata/netcdf-c#2007).

* [Bug Fix] Fix bug in NCclosedir in dpathmgr.c. See [Github
  #2003](Unidata/netcdf-c#2003).

* [Bug Fix] Fix bug in ncdump that assumes that there is a relationship between
  the total number of dimensions and the max dimension id. See [Github
  #2004](Unidata/netcdf-c#2004).

* [Bug Fix] Fix bug in JSON processing of strings with embedded quotes. See
  [Github #1993](Unidata/netcdf-c#1993).

* [Enhancement] Add support for the new "dimension_separator" enhancement to
  Zarr v2. See [Github #1990](Unidata/netcdf-c#1990) for
  more information.

* [Bug Fix] Fix hack for handling failure of shell programs to properly handle
  escape characters. See [Github
  #1989](Unidata/netcdf-c#1989).

* [Bug Fix] Allow some primitive type names to be used as identifiers depending
  on the file format. See [Github
  #1984](Unidata/netcdf-c#1984).

* [Enhancement] Add support for reading/writing pure Zarr storage format that
  supports the XArray _ARRAY_DIMENSIONS attribute. See [Github
  #1952](Unidata/netcdf-c#1952) for more information.

* [Update] Updated version of bzip2 used in filter testing/functionality, in
  support of [Github #1969](Unidata/netcdf-c#1969).

* [Bug Fix] Corrected HDF5 version detection logic as described in [Github
  #1962](Unidata/netcdf-c#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](Unidata/netcdf-c#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](Unidata/netcdf-c#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](Unidata/netcdf-c#1944) for more information.

* [Enhancement] Add support for storing NCZarr data in zip files. See [Github
  #1942](Unidata/netcdf-c#1942) for more information.

* [Bug Fixes] Make fillmismatch the default for DAP2 and DAP4; too many servers
  ignore this requirement.

* [Bug Fixes] Fix some memory leaks in NCZarr, fix a bug with long strides in
  NCZarr. See [Github #1913](Unidata/netcdf-c#1913) for
  more information.

* [Enhancement] Add some optimizations to NCZarr, dosome cleanup of code cruft,
  add some NCZarr test cases, add a performance test to NCZarr. See [Github
  #1908](Unidata/netcdf-c#1908) for more information.

* [Bug Fix] Implement a better chunk cache system for NCZarr. The cache now uses
  extendible hashing plus a linked list for provide a combination of
  expandibility, fast access, and LRU behavior. See [Github
  #1887](Unidata/netcdf-c#1887) for more information.

* [Enhancement] Provide .rc fields for S3 authentication: HTTP.S3.ACCESSID and
  HTTP.S3.SECRETKEY.

* [Enhancement] Give the client control over what parts of a DAP2 URL are URL
  encoded (i.e. %xx). This is to support the different decoding rules that
  servers apply to incoming URLS. See [Github
  #1884](Unidata/netcdf-c#1884) for more information.

* [Bug Fix] Fix incorrect time offsets from `ncdump -t`, in some cases when the
  time `units` attribute contains both a **non-zero** time-of-day, and a time
  zone suffix containing the letter "T", such as "UTC".  See [Github
  #1866](Unidata/netcdf-c#1866) for more information.

* [Bug Fix] Cleanup the NCZarr S3 build options. See [Github
  #1869](Unidata/netcdf-c#1869) for more information.

* [Bug Fix] Support aligned access for selected ARM processors.  See [Github
  #1871](Unidata/netcdf-c#1871) for more information.

* [Documentation] Migrated the documents in the NUG/ directory to the dedicated
  NUG repository found at https://github.com/Unidata/netcdf

* [Bug Fix] Revert the internal filter code to simplify it. From the user's
  point of view, the only visible change should be that (1) the functions that
  convert text to filter specs have had their signature reverted and renamed and
  have been moved to netcdf_aux.h, and (2) Some filter API functions now return
  NC_ENOFILTER when inquiry is made about some filter. Internally, the dispatch
  table has been modified to get rid of the complex structures.

* [Bug Fix] If the HDF5 byte-range Virtual File Driver is available )HDf5 1.10.6
  or later) then use it because it has better performance than the one currently
  built into the netcdf library.

* [Bug Fix] Fixed byte-range support with cURL > 7.69. See
  [Unidata/netcdf-c#1798].

* [Enhancement] Added new test for using compression with parallel I/O:
  nc_test4/tst_h_par_compress.c. See
  [Unidata/netcdf-c#1784].

* [Bug Fix] Don't return error for extra calls to nc_redef() for netCDF/HDF5
  files, unless classic model is in use. See
  [Unidata/netcdf-c#1779].

* [Enhancement] Added new parallel I/O benchmark program to mimic NOAA UFS data
  writes, built when --enable-benchmarks is in configure. See
  [Unidata/netcdf-c#1777].

* [Bug Fix] Now allow szip to be used on variables with unlimited dimension
  [Unidata/netcdf-c#1774].

* [Enhancement] Add support for cloud storage using a variant of the Zarr
  storage format. Warning: this feature is highly experimental and is subject to
  rapid evolution
  [https://www.unidata.ucar.edu/blogs/developer/en/entry/overview-of-zarr-support-in].

* [Bug Fix] Fix nccopy to properly set default chunking parameters when not
  otherwise specified. This can significantly improve performance in selected
  cases. Note that if seeing slow performance with nccopy, then, as a
  work-around, specifically set the chunking
  parameters. [Unidata/netcdf-c#1763].

* [Bug Fix] Fix some protocol bugs/differences between the netcdf-c library and
  the OPeNDAP Hyrax server. Also cleanup checksum handling
  [https://github.com/Unidata/netcdf-c/issues/1712].* [Bug Fix] IMPORTANT: Ncgen
  was not properly handling large data sections. The problem manifests as
  incorrect ordering of data in the created file. Aside from examining the file
  with ncdump, the error can be detected by running ncgen with the -lc flag (to
  produce a C file). Examine the file to see if any variable is written in pieces
  as opposed to a single call to nc_put_vara. If multiple calls to nc_put_vara are
  used to write a variable, then it is probable that the data order is
  incorrect. Such multiple writes can occur for large variables and especially
  when one of the dimensions is unlimited.

* [Bug Fix] Add necessary __declspec declarations to allow compilation of netcdf
  library without causing errors or (_declspec related) warnings
  [Unidata/netcdf-c#1725].

* [Enhancement] When a filter is applied twice with different
parameters, then the second set is used for writing the dataset
[Unidata/netcdf-c#1713].

* [Bug Fix] Now larger cache settings are used for sequential HDF5 file creates/opens on parallel I/O capable builds; see [Github #1716](Unidata/netcdf-c#1716) for more information.

* [Bug Fix] Add functions to libdispatch/dnotnc4.c to support
   dispatch table operations that should work for any dispatch
   table, even if they do not do anything; functions such as
   nc_inq_var_filter [Unidata/netcdf-c#1693].

* [Bug Fix] Fixed a scalar annotation error when scalar == 0; see [Github
  #1707](Unidata/netcdf-c#1707) for more information.

* [Bug Fix] Use proper CURLOPT values for VERIFYHOST and VERIFYPEER; the
  semantics for VERIFYHOST in particular changed. Documented in NUG/DAP2.md. See
  [Unidata/netcdf-c#1684].

* [Bug Fix][cmake] Correct an issue with parallel filter test logic in
  CMake-based builds.

* [Bug Fix] Now allow nc_inq_var_deflate()/nc_inq_var_szip() to be called for
  all formats, not just HDF5. Non-HDF5 files return NC_NOERR and report no
  compression in use. This reverts behavior that was changed in the 4.7.4
  release. See [Unidata/netcdf-c#1691].

* [Bug Fix] Compiling on a big-endian machine exposes some missing forward
  delcarations in dfilter.c.

* [File Change] Change from HDF5 v1.6 format compatibility, back to v1.8
  compatibility, for newly created files.  The superblock changes from version 0
  back to version 2.  An exception is when using libhdf5 deprecated versions
  1.10.0 and 1.10.1, which can only create v1.6 compatible format.  Full
  backward read/write compatibility for netCDF-4 is maintained in all cases.
  See [Github #951](Unidata/netcdf-c#951).

## 4.7.4 - March 27, 2020

* [Windows] Bumped packaged HDF5 to 1.10.6, HDF4 to 4.2.14, and libcurl to
  7.60.0.

* [Enhancement] Support has been added for HDF5-1.12.0.  See
  [Unidata/netcdf-c#1528].

* [Bug Fix] Correct behavior for the command line utilities when directly
  accessing a directory using utf8 characters. See
  [Github #1669] (Unidata/netcdf-c#1669),
  [Github #1668] (Unidata/netcdf-c#1668) and
  [Github #1666] (Unidata/netcdf-c#1666) for more information.

* [Bug Fix] Attempts to set filters or chunked storage on scalar vars will now
  return NC_EINVAL. Scalar vars cannot be chunked, and only chunked vars can
  have filters. Previously the library ignored these attempts, and always
  storing scalars as contiguous storage. See
  [Unidata/netcdf-c#1644].

* [Enhancement] Support has been added for multiple filters per variable.  See
  [Unidata/netcdf-c#1584].

* [Enhancement] Now nc_inq_var_szip retuns 0 for parameter values if szip is not
  in use for var. See [Unidata/netcdf-c#1618].

* [Enhancement] Now allow parallel I/O with filters, for HDF5-1.10.3 and
  later. See [Unidata/netcdf-c#1473].

* [Enhancement] Increased default size of cache buffer to 16 MB, from 4
  MB. Increased number of slots to 4133. See
  [Unidata/netcdf-c#1541].

* [Enhancement] Allow zlib compression to be used with parallel I/O writes, if
  HDF5 version is 1.10.3 or greater. See
  [Unidata/netcdf-c#1580].

* [Enhancement] Restore use of szip compression when writing data (including
  writing in parallel if HDF5 version is 1.10.3 or greater). See
  [Unidata/netcdf-c#1546].

* [Enhancement] Enable use of compact storage option for small vars in
  netCDF/HDF5 files. See [Unidata/netcdf-c#1570].

* [Enhancement] Updated benchmarking program bm_file.c to better handle very
  large files. See [Unidata/netcdf-c#1555].

* [Enhancement] Added version number to dispatch table, and now check version
  with nc_def_user_format(). See
  [Unidata/netcdf-c#1599].

* [Bug Fix] Fixed user setting of MPI launcher for parallel I/O HDF5 test in
  h5_test. See [Unidata/netcdf-c#1626].

* [Bug Fix] Fixed problem of growing memory when netCDF-4 files were opened and
  closed. See [Unidata/netcdf-c#1575 and
  Unidata/netcdf-c#1571].

* [Enhancement] Increased size of maximum allowed name in HDF4 files to
  NC_MAX_NAME. See [Unidata/netcdf-c#1631].

## 4.7.3 - November 20, 2019

* [Bug Fix]Fixed an issue where installs from tarballs will not properly compile
  in parallel environments.

* [Bug Fix] Library was modified so that rewriting the same attribute happens
  without deleting the attribute, to avoid a limit on how many times this may be
  done in HDF5. This fix was thought to be in 4.6.2 but was not. See
  [Unidata/netcdf-c#350].

* [Enhancement] Add a dispatch version number to netcdf_meta.h and
  libnetcdf.settings, in case we decide to change dispatch table in future. See
  [Unidata/netcdf-c#1469].

* [Bug Fix] Now testing that endianness can only be set on atomic ints and
  floats. See [Unidata/netcdf-c#1479].

* [Bug Fix] Fix for subtle error involving var and unlimited dim of the same
  name, but unrelated, in netCDF-4. See
  [Unidata/netcdf-c#1496].

* [Enhancement] Update for attribute documentation. See
  [Unidata/netcdf-c#1512].

* [Bug Fix][Enhancement] Corrected assignment of anonymous (a.k.a. phony)
  dimensions in an HDF5 file. Now when a dataset uses multiple dimensions of the
  same size, netcdf assumes they are different dimensions. See [GitHub
  #1484](Unidata/netcdf-c#1484) for more information.

## 4.7.2 - October 22, 2019

* [Bug Fix][Enhancement] Various bug fixes and enhancements.

* [Bug Fix][Enhancement] Corrected an issue where protected memory was being
  written to with some pointer slight-of-hand.  This has been in the code for a
  while, but appears to be caught by the compiler on OSX, under circumstances
  yet to be completely nailed down.  See
  [GitHub #1486] (Unidata/netcdf-c#1486) for more information.

* [Enhancement] [Parallel IO] Added support for parallel functions in MSVC. See
  [Github #1492](Unidata/netcdf-c#1492) for more
  information.

* [Enhancement] Added a function for changing the ncid of an open file.  This
  function should only be used if you know what you are doing, and is meant to
  be used primarily with PIO integration. See
  [GitHub #1483] (Unidata/netcdf-c#1483) and
  [GitHub #1487] (Unidata/netcdf-c#1487) for more information.

## 4.7.1 - August 27, 2019

* [Enhancement] Added unit_test directory, which contains unit tests for the
  libdispatch and libsrc4 code (and any other directories that want to put unit
  tests there). Use --disable-unit-tests to run without unit tests (ex. for code
  coverage analysis). See
  [GitHub #1458] (Unidata/netcdf-c#1458).

* [Bug Fix] Remove obsolete _CRAYMPP and LOCKNUMREC macros from code. Also
  brought documentation up to date in man page. These macros were used in
  ancient times, before modern parallel I/O systems were developed. Programmers
  interested in parallel I/O should see nc_open_par() and nc_create_par(). See
  [GitHub #1459](Unidata/netcdf-c#1459).

* [Enhancement] Remove obsolete and deprecated functions nc_set_base_pe() and
  nc_inq_base_pe() from the dispatch table. (Both functions are still supported
  in the library, this is an internal change only.) See [GitHub
  #1468](Unidata/netcdf-c#1468).

* [Bug Fix] Reverted nccopy behavior so that if no -c parameters are given, then
  any default chunking is left to the netcdf-c library to decide. See [GitHub
  #1436](Unidata/netcdf-c#1436).

## 4.7.0 - April 29, 2019

* [Enhancement] Updated behavior of `pkgconfig` and `nc-config` to allow the use
  of the `--static` flags, e.g. `nc-config --libs --static`, which will show
  information for linking against `libnetcdf` statically. See
  [Github #1360] (Unidata/netcdf-c#1360) and
  [Github #1257] (Unidata/netcdf-c#1257) for more information.

* [Enhancement] Provide byte-range reading of remote datasets. This allows
  read-only access to, for example, Amazon S3 objects and also Thredds Server
  datasets via the HTTPService access method.  See
  [GitHub #1251] (Unidata/netcdf-c#1251).

* Update the license from the home-brewed NetCDF license to the standard
  3-Clause BSD License.  This change does not result in any new restrictions; it
  is merely the adoption of a standard, well-known and well-understood license
  in place of the historic NetCDF license written at Unidata.  This is part of a
  broader push by Unidata to adopt modern, standardized licensing.

## 4.6.3 - February 28, 2019

* [Bug Fix] Correctly generated `netcdf.pc` generated either by `configure` or
  `cmake`.  If linking against a static netcdf, you would need to pass the
  `--static` argument to `pkg-config` in order to list all of the downstream
  dependencies.  See
  [Github #1324](Unidata/netcdf-c#1324) for more information.

* Now always write hidden coordinates attribute, which allows faster file opens
  when present. See
  [Github #1262](Unidata/netcdf-c#1262) for more information.

* Some fixes for rename, including fix for renumbering of varids after a rename
  (#1307), renaming var to dim without coordinate var. See
  [Github #1297] (Unidata/netcdf-c#1297).

* Fix of NULL parameter causing segfaults in put_vars functions. See
   [Github #1265] (Unidata/netcdf-c#1265) for more information.

* Fix of --enable-benchmark benchmark tests
   [Github #1211] (Unidata/netcdf-c#1211)

* Update the license from the home-brewed NetCDF license to the standard
  3-Clause BSD License.  This change does not result in any new restrictions; it
  is merely the adoption of a standard, well-known and well-understood license
  in place of the historic NetCDF license written at Unidata.  This is part of a
  broader push by Unidata to adopt modern, standardized licensing.

* [BugFix] Corrected DAP-related issues on big-endian machines. See
  [Github #1321] (Unidata/netcdf-c#1321),
  [Github #1302] (Unidata/netcdf-c#1302) for more information.

* [BugFix][Enhancement] Various and sundry bugfixes and performance
  enhancements, thanks to \@edhartnett, \@gsjarrdema, \@t-b, \@wkliao, and all
  of our other contributors.

* [Enhancement] Extended `nccopy -F` syntax to support multiple variables with a
  single invocation. See
  [Github #1311](Unidata/netcdf-c#1311) for more information.

* [BugFix] Corrected an issue where DAP2 was incorrectly converting signed
  bytes, resulting in an erroneous error message under some circumstances. See
  [GitHub #1317] (Unidata/netcdf-c#1317) for more
  information.  See
  [Github #1319] (Unidata/netcdf-c#1319) for related information.

* [BugFix][Enhancement] Modified `nccopy` so that `_NCProperties` is not copied
  over verbatim but is instead generated based on the version of `libnetcdf`
  used when copying the file.  Additionally, `_NCProperties` are displayed
  if/when associated with a netcdf3 file, now. See
  [GitHub#803] (Unidata/netcdf-c#803) for more information.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants