From ad50867d48e797638be30c0bff2b3513a9c997d0 Mon Sep 17 00:00:00 2001
From: Larry Knox <lrknox@hdfgroup.org>
Date: Fri, 7 Jun 2024 19:24:48 -0500
Subject: [PATCH] Sync develop changes May 20 - June 6 to hdf5_1_14 (#4553)

* Fix daily-build CI and correct use of *_FOUND settings for filters (#4504)

* Correct examples tests to just run under dynamic analysis (#4505)

* Remove trailing extra whitespace in hyperlink (#4509)

* Set H5 specific vars immediately if legacy find (#4512)

* Set H5 specific vars immediately if legacy find

* Correct find process vars (vs in-line build)

* Correct SZIP find

* Everything is libaec 1.0.6 or newer

* Correct option help text

* Don't update 'pos' and 'op' fields when using pread/pwrite (#4492)

Instead of reading the absolute minimal possible, use the likely value of
a v2+ superblock w/8-byte addresses & lengths.

* Fix spelling (#4522)

* Fix typo in DAPL callback documentation (#4523)

* Move/rename libhdf5.settings input files (#4525)

Move without other changes:

src/libhdf5.settings.in -> src/libhdf5.settings.autotools.in
config/cmake/libhdf5.settings.cmake.in -> src/libhdf5.settings.cmake.in

* Disable UNITY_BUILD for now - globally (#4515)

* Fix function name in USAGE for H5Pencode2() (#4519)

* Allow HDF5_LIB_INFIX to work with DLL (#4500)

* Allow HDF5_LIB_INFIX to work with DLL

* Separate individual library name into parts and add suffix option

* Java cannot use alternative names and removed extra setting

* Incorporate the underscore into the CORE name

* Fix typos in property callback documentation (#4532)

* Fix wrong int type as some systems have int as 64-bit wide (#4534)

* H5FDquery return value (#4530)

* Switch H5FDquery() return values to use library's FAIL / SUCCEED macros

* Update return value also

* Refactor to reduce code duplication (#4531)

* Update error output w/new routine name

* Fix a few function names in USAGE comments that don't match the actual (#4533)

* Fix a few function names in USAGE comments that don't match the actual
function names.

* Remove typo '['

* Switch to working url for api-compatibility-macros.html.

* Remove julia CI actions (#4540)

These have been failing for a week or two for unclear reasons, both
in the Autotools and CMake. No obvious library changes triggered
this.

See GitHub issue #4539 for more info/discussion

The Julia tests will be disabled until the root cause is found.

* Bump the github-actions group with 3 updates (#4538)

Bumps the github-actions group with 3 updates: [softprops/action-gh-release](https://github.com/softprops/action-gh-release), [ossf/scorecard-action](https://github.com/ossf/scorecard-action) and [github/codeql-action](https://github.com/github/codeql-action).


Updates `softprops/action-gh-release` from 2.0.4 to 2.0.5
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](https://github.com/softprops/action-gh-release/compare/9d7c94cfd0a1f3ed45544c887983e9fa900f0564...69320dbe05506a9a39fc8ae11030b214ec2d1f87)

Updates `ossf/scorecard-action` from 2.3.1 to 2.3.3
- [Release notes](https://github.com/ossf/scorecard-action/releases)
- [Changelog](https://github.com/ossf/scorecard-action/blob/main/RELEASE.md)
- [Commits](https://github.com/ossf/scorecard-action/compare/0864cf19026789058feabb7e87baa5f140aac736...dc50aa9510b46c811795eb24b2f1ba02a914e534)

Updates `github/codeql-action` from 3.25.3 to 3.25.7
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/d39d31e687223d841ef683f52467bd88e9b21c14...f079b8493333aace61c81488f8bd40919487bd9f)

---
updated-dependencies:
- dependency-name: softprops/action-gh-release
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: ossf/scorecard-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Fix various mistakes in doxygen docs (#4541)

* Fix a dead link and example file names

* Add the missing content of a section

* Export HDF5 parallel status for CMake FetchContent'ed VOL connectors (#4542)

* Remove an unnecessary check for parallel and thread-safety from examples (#4543)

* Add option to use zlib-ng as zlib library (#4487)

* Export HDF5 version for CMake FetchContent'ed VOL connectors (#4548)

* Adjust h5repack userblock option to allow reserve size (#4544)

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Allen Byrne <50328838+byrnHDF@users.noreply.github.com>
Co-authored-by: H. Joe Lee <hyoklee@hdfgroup.org>
Co-authored-by: Quincey Koziol <quincey@koziol.cc>
Co-authored-by: jhendersonHDF <jhenderson@hdfgroup.org>
Co-authored-by: mattjala <124107509+mattjala@users.noreply.github.com>
Co-authored-by: Dana Robinson <43805+derobins@users.noreply.github.com>
Co-authored-by: Peter Chang <peter.chang@diamond.ac.uk>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: bmribler <39579120+bmribler@users.noreply.github.com>
Co-authored-by: Scot Breitenfeld <brtnfld@hdfgroup.org>
---
 .github/workflows/autotools.yml               |    6 -
 .github/workflows/cmake.yml                   |    6 -
 .github/workflows/julia-auto.yml              |   79 -
 .github/workflows/julia-cmake.yml             |   82 --
 .github/workflows/main-cmake-spc.yml          |   63 +-
 .github/workflows/release-files.yml           |    5 +-
 .github/workflows/scorecard.yml               |    4 +-
 CMakeFilters.cmake                            |   37 +-
 CMakeInstallation.cmake                       |    2 +-
 CMakeLists.txt                                |   92 +-
 CMakePresets.json                             |    8 +-
 CMakeVOL.cmake                                |    2 +
 HDF5Examples/CMakeLists.txt                   |   10 +-
 c++/src/CMakeLists.txt                        |    8 +-
 config/cmake/HDFLibMacros.cmake               |    6 +-
 config/cmake/HDFMacros.cmake                  |    2 +
 config/cmake/LIBAEC/CMakeLists.txt            |  178 +--
 config/cmake/LIBAEC/config.h.in               |   32 +-
 .../LIBAEC/libaec-config-version.cmake.in     |   51 +-
 config/cmake/LIBAEC/libaec-config.cmake.in    |  144 +-
 config/cmake/ZLIB/CMakeLists.txt              |  494 ++-----
 config/cmake/ZLIB/zconf.h.in                  |   27 +-
 config/cmake/ZLIB/zlib-config.cmake.in        |    1 -
 config/cmake/ZLIBNG/CMakeLists.txt            | 1271 +++++++++++++++++
 config/cmake/ZLIBNG/CPack.Info.plist.in       |   26 +
 config/cmake/ZLIBNG/zconf.h.in                |  206 +++
 .../cmake/ZLIBNG/zlib-config-version.cmake.in |   42 +
 config/cmake/ZLIBNG/zlib-config.cmake.in      |   57 +
 config/cmake/cacheinit.cmake                  |   12 +-
 config/cmake/mccacheinit.cmake                |   16 +-
 configure.ac                                  |    2 +-
 doxygen/dox/IntroParHDF5.dox                  |   15 +-
 doxygen/dox/LearnBasics3.dox                  |   13 +
 doxygen/img/tutr-lodset.png                   |  Bin 0 -> 15071 bytes
 fortran/src/CMakeLists.txt                    |    8 +-
 hl/c++/src/CMakeLists.txt                     |    8 +-
 hl/fortran/src/CMakeLists.txt                 |    8 +-
 hl/src/CMakeLists.txt                         |    8 +-
 java/src/jni/h5Imp.c                          |    2 +-
 release_docs/INSTALL_CMake.txt                |   31 +-
 release_docs/RELEASE.txt                      |   21 +-
 src/CMakeLists.txt                            |    4 +-
 src/H5A.c                                     |    2 +-
 src/H5D.c                                     |    8 +-
 src/H5Dint.c                                  |   10 +-
 src/H5FD.c                                    |   19 +-
 src/H5FDdevelop.h                             |    2 +-
 src/H5FDlog.c                                 |   32 +-
 src/H5FDsec2.c                                |   36 +-
 src/H5FO.c                                    |    9 +-
 src/H5P.c                                     |    2 +-
 src/H5Pdapl.c                                 |    2 +-
 src/H5Pfapl.c                                 |   12 +-
 src/H5Pfcpl.c                                 |   16 +-
 src/H5Pgcpl.c                                 |    4 +-
 src/H5Plapl.c                                 |    2 +-
 src/H5Pocpypl.c                               |   18 +-
 src/H5Sselect.c                               |   12 +-
 src/H5VLcallback.c                            |  141 +-
 src/H5VLprivate.h                             |   10 +-
 ...tings.in => libhdf5.settings.autotools.in} |    0
 .../cmake => src}/libhdf5.settings.cmake.in   |    0
 test/testfiles/error_test_1                   |    2 +-
 tools/src/h5repack/h5repack.c                 |    8 +-
 tools/src/h5repack/h5repack_copy.c            |    2 +-
 tools/test/h5repack/CMakeTests.cmake          |   50 +-
 .../deflate_limit.h5repack_layout.h5.ddl      |   14 +-
 tools/test/h5repack/h5repack.sh.in            |    6 +-
 68 files changed, 2348 insertions(+), 1160 deletions(-)
 delete mode 100644 .github/workflows/julia-auto.yml
 delete mode 100644 .github/workflows/julia-cmake.yml
 create mode 100644 config/cmake/ZLIBNG/CMakeLists.txt
 create mode 100644 config/cmake/ZLIBNG/CPack.Info.plist.in
 create mode 100644 config/cmake/ZLIBNG/zconf.h.in
 create mode 100644 config/cmake/ZLIBNG/zlib-config-version.cmake.in
 create mode 100644 config/cmake/ZLIBNG/zlib-config.cmake.in
 create mode 100755 doxygen/img/tutr-lodset.png
 rename src/{libhdf5.settings.in => libhdf5.settings.autotools.in} (100%)
 rename {config/cmake => src}/libhdf5.settings.cmake.in (100%)

diff --git a/.github/workflows/autotools.yml b/.github/workflows/autotools.yml
index f66b7922b0e..3f4193255ae 100644
--- a/.github/workflows/autotools.yml
+++ b/.github/workflows/autotools.yml
@@ -99,12 +99,6 @@ jobs:
       with:
             build_mode: "production"
 
-    call-release-auto-julia:
-        name: "Autotools Julia Workflows"
-        uses: ./.github/workflows/julia-auto.yml
-        with:
-            build_mode: "production"
-            
     call-release-auto-xpr:
         name: "Autotools TestExpress Workflows"
         uses: ./.github/workflows/testxpr-auto.yml
diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml
index b9e4c9d1b33..eceaaba3d8e 100644
--- a/.github/workflows/cmake.yml
+++ b/.github/workflows/cmake.yml
@@ -102,12 +102,6 @@ jobs:
         with:
             build_mode: "Release"
 
-    call-release-cmake-julia:
-        name: "CMake Julia Workflows"
-        uses: ./.github/workflows/julia-cmake.yml
-        with:
-            build_mode: "Release"
-    
     call-release-cmake-xpr:
         name: "CMake TestExpress Workflows"
         uses: ./.github/workflows/testxpr-cmake.yml
diff --git a/.github/workflows/julia-auto.yml b/.github/workflows/julia-auto.yml
deleted file mode 100644
index 9c13990edf6..00000000000
--- a/.github/workflows/julia-auto.yml
+++ /dev/null
@@ -1,79 +0,0 @@
-name: hdf5 1.14 autotools julia
-
-on:
-  workflow_call:
-    inputs:
-      build_mode:
-        description: "release vs. debug build"
-        required: true
-        type: string
-
-permissions:
-  contents: read
-
-jobs:
-  julia_build_and_test:
-    name: "julia ${{ inputs.build_mode }}"
-    runs-on: ubuntu-latest
-    steps:
-      - name: Get Sources
-        uses: actions/checkout@v4.1.1
-
-      - name: Install Dependencies
-        shell: bash
-        run: |
-          sudo apt-get update
-          sudo apt-get install autoconf automake libtool libtool-bin libaec-dev
-          sudo apt-get install doxygen graphviz
-          sudo apt install -y zlib1g-dev libcurl4-openssl-dev libjpeg-dev wget curl bzip2
-          sudo apt install -y m4 flex bison cmake libzip-dev openssl build-essential
-
-      - name: Autotools Configure
-        shell: bash
-        run: |
-          sh ./autogen.sh
-          mkdir "${{ runner.workspace }}/build"
-          cd "${{ runner.workspace }}/build"
-          $GITHUB_WORKSPACE/configure \
-            --enable-build-mode=${{ inputs.build_mode }} \
-            --disable-fortran \
-            --enable-shared \
-            --disable-parallel \
-            --prefix=/tmp
-
-      - name: Autotools Build
-        shell: bash
-        run: |
-          make -j3
-        working-directory: ${{ runner.workspace }}/build
-
-      - name: Install HDF5
-        shell: bash
-        run: |
-          make install
-        working-directory: ${{ runner.workspace }}/build
-
-      - name: Install julia
-        uses: julia-actions/setup-julia@latest
-        with:
-          version: '1.6'
-          arch: 'x64'
-
-      - name: Get julia hdf5 source
-        uses: actions/checkout@v4.1.1
-        with:
-          repository: JuliaIO/HDF5.jl
-          path: .
-
-      - name: Generate LocalPreferences
-        run: |
-          echo '[HDF5]' >> LocalPreferences.toml
-          echo 'libhdf5 = "/tmp/lib/libhdf5.so"' >> LocalPreferences.toml
-          echo 'libhdf5_hl = "/tmp/lib/libhdf5_hl.so"' >> LocalPreferences.toml
-
-      - uses: julia-actions/julia-buildpkg@latest
-
-      - name: Julia Run Tests
-        uses: julia-actions/julia-runtest@latest
-        env:
-          JULIA_DEBUG: Main
diff --git a/.github/workflows/julia-cmake.yml b/.github/workflows/julia-cmake.yml
deleted file mode 100644
index 1972deefd8f..00000000000
--- a/.github/workflows/julia-cmake.yml
+++ /dev/null
@@ -1,82 +0,0 @@
-name: hdf5 1.14 CMake julia
-
-on:
-  workflow_call:
-    inputs:
-      build_mode:
-        description: "release vs. debug build"
-        required: true
-        type: string
-
-permissions:
-  contents: read
-
-jobs:
-  julia_build_and_test:
-    name: "julia ${{ inputs.build_mode }}"
-    runs-on: ubuntu-latest
-    steps:
-      - name: Get Sources
-        uses: actions/checkout@v4.1.1
-
-      - name: Install Dependencies
-        shell: bash
-        run: |
-          sudo apt-get update
-          sudo apt-get install ninja-build doxygen graphviz
-          sudo apt install libssl3 libssl-dev libcurl4 libcurl4-openssl-dev
-          sudo apt install -y libaec-dev zlib1g-dev wget curl bzip2 flex bison cmake libzip-dev openssl build-essential
-
-      - name: CMake Configure
-        shell: bash
-        run: |
-          mkdir "${{ runner.workspace }}/build"
-          cd "${{ runner.workspace }}/build"
-          cmake -C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake -G Ninja \
-          -DCMAKE_BUILD_TYPE=${{ inputs.build_mode }} \
-          -DHDF5_ENABLE_SZIP_SUPPORT:BOOL=OFF \
-          -DHDF5_ENABLE_PARALLEL:BOOL=OFF \
-          -DHDF5_BUILD_CPP_LIB:BOOL=OFF \
-          -DLIBAEC_USE_LOCALCONTENT=OFF \
-          -DZLIB_USE_LOCALCONTENT=OFF \
-          -DHDF5_BUILD_FORTRAN:BOOL=OFF \
-          -DHDF5_BUILD_JAVA:BOOL=OFF \
-          -DCMAKE_INSTALL_PREFIX=/tmp \
-          $GITHUB_WORKSPACE
-
-      - name: CMake Build
-        shell: bash
-        run: |
-          cmake --build . --parallel 3 --config ${{ inputs.build_mode }}
-        working-directory: ${{ runner.workspace }}/build
-
-      - name: Install HDF5
-        shell: bash
-        run: |
-          cmake --install .
-        working-directory: ${{ runner.workspace }}/build
-
-      - name: Install julia
-        uses: julia-actions/setup-julia@latest
-        with:
-          version: '1.6'
-          arch: 'x64'
-
-      - name: Get julia hdf5 source
-        uses: actions/checkout@v4.1.1
-        with:
-          repository: JuliaIO/HDF5.jl
-          path: .
-
-      - name: Generate LocalPreferences
-        run: |
-          echo '[HDF5]' >> LocalPreferences.toml
-          echo 'libhdf5 = "/tmp/lib/libhdf5.so"' >> LocalPreferences.toml
-          echo 'libhdf5_hl = "/tmp/lib/libhdf5_hl.so"' >> LocalPreferences.toml
-
-      - uses: julia-actions/julia-buildpkg@latest
-
-      - name: Julia Run Tests
-        uses: julia-actions/julia-runtest@latest
-        env:
-          JULIA_DEBUG: Main
diff --git a/.github/workflows/main-cmake-spc.yml b/.github/workflows/main-cmake-spc.yml
index b8f87cf26be..b4b229f5d3b 100644
--- a/.github/workflows/main-cmake-spc.yml
+++ b/.github/workflows/main-cmake-spc.yml
@@ -80,7 +80,7 @@ jobs:
 #        working-directory: ${{ runner.workspace }}/build
 
   build_v1_10:
-    name: "gcc DBG v1.10 default API (build only)"
+    name: "gcc DBG v1.10 default API"
     runs-on: ubuntu-latest
     steps:
       # SETUP
@@ -140,7 +140,7 @@ jobs:
         working-directory: ${{ runner.workspace }}/build
 
   build_v1_12:
-    name: "gcc DBG v1.12 default API (build only)"
+    name: "gcc DBG v1.12 default API"
     runs-on: ubuntu-latest
     steps:
       # SETUP
@@ -198,3 +198,62 @@ jobs:
       - name: CMake Run Tests
         run: ctest . --parallel 2 -C Debug -V
         working-directory: ${{ runner.workspace }}/build
+
+  build_zlibng:
+    name: "gcc use zlib-ng filter"
+    runs-on: ubuntu-latest
+    steps:
+      # SETUP
+      - name: Install Linux Dependencies
+        run: |
+          sudo apt-get update
+          sudo apt-get install ninja-build doxygen graphviz
+          sudo apt install libssl3 libssl-dev libcurl4 libcurl4-openssl-dev
+          sudo apt install gcc-12 g++-12 gfortran-12
+          echo "CC=gcc-12" >> $GITHUB_ENV
+          echo "CXX=g++-12" >> $GITHUB_ENV
+          echo "FC=gfortran-12" >> $GITHUB_ENV
+
+      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
+      - name: Get Sources
+        uses: actions/checkout@v4.1.1
+
+      #
+      # CMAKE CONFIGURE
+      #
+      - name: CMake Configure
+        run: |
+          mkdir "${{ runner.workspace }}/build"
+          cd "${{ runner.workspace }}/build"
+          cmake -C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake \
+            -G Ninja \
+            -DCMAKE_BUILD_TYPE=Release \
+            -DBUILD_SHARED_LIBS=ON \
+            -DHDF5_ENABLE_ALL_WARNINGS=ON \
+            -DHDF5_ENABLE_PARALLEL:BOOL=OFF \
+            -DHDF5_BUILD_CPP_LIB:BOOL=ON \
+            -DHDF5_BUILD_FORTRAN=ON \
+            -DHDF5_BUILD_JAVA=ON \
+            -DHDF5_BUILD_DOC=OFF \
+            -DLIBAEC_USE_LOCALCONTENT=ON \
+            -DZLIB_USE_LOCALCONTENT=ON \
+            -DHDF5_ENABLE_MIRROR_VFD:BOOL=ON \
+            -DHDF5_ENABLE_DIRECT_VFD:BOOL=ON \
+            -DHDF5_ENABLE_ROS3_VFD:BOOL=ON \
+            -DHDF5_USE_ZLIBNG:BOOL=ON \
+            $GITHUB_WORKSPACE
+        shell: bash
+
+      #
+      # BUILD
+      #
+      - name: CMake Build
+        run: cmake --build . --parallel 3 --config Release
+        working-directory: ${{ runner.workspace }}/build
+
+      #
+      # RUN TESTS
+      #
+      - name: CMake Run Tests
+        run: ctest . --parallel 2 -C Release -V
+        working-directory: ${{ runner.workspace }}/build
diff --git a/.github/workflows/release-files.yml b/.github/workflows/release-files.yml
index 6b881b40f68..7b92b8b98eb 100644
--- a/.github/workflows/release-files.yml
+++ b/.github/workflows/release-files.yml
@@ -178,6 +178,7 @@ jobs:
           sha256sum ${{ steps.get-file-base.outputs.FILE_BASE }}.html.abi.reports.tar.gz >> ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt
 
       - name: Create sha256 sums for files  for nonversioned files
+        if: ${{ (inputs.use_environ == 'release') }}
         run: |
           sha256sum hdf5.zip >> ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt
           sha256sum hdf5.tar.gz >> ${{ steps.get-file-base.outputs.FILE_BASE }}.sha256sums.txt
@@ -199,7 +200,7 @@ jobs:
       - name: PreRelease tag
         id: create_prerelease
         if: ${{ (inputs.use_environ == 'snapshots') }}
-        uses: softprops/action-gh-release@9d7c94cfd0a1f3ed45544c887983e9fa900f0564 # v2.0.4
+        uses: softprops/action-gh-release@69320dbe05506a9a39fc8ae11030b214ec2d1f87 # v2.0.5
         with:
           tag_name: "${{ inputs.use_tag }}"
           prerelease: true
@@ -224,7 +225,7 @@ jobs:
       - name: Release tag
         id: create_release
         if: ${{ (inputs.use_environ == 'release') }}
-        uses: softprops/action-gh-release@9d7c94cfd0a1f3ed45544c887983e9fa900f0564 # v2.0.4
+        uses: softprops/action-gh-release@69320dbe05506a9a39fc8ae11030b214ec2d1f87 # v2.0.5
         with:
           tag_name: "${{ inputs.use_tag }}"
           prerelease: false
diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml
index 10e50caef1d..0e57abd7e13 100644
--- a/.github/workflows/scorecard.yml
+++ b/.github/workflows/scorecard.yml
@@ -37,7 +37,7 @@ jobs:
           persist-credentials: false
 
       - name: "Run analysis"
-        uses: ossf/scorecard-action@0864cf19026789058feabb7e87baa5f140aac736 # v2.3.1
+        uses: ossf/scorecard-action@dc50aa9510b46c811795eb24b2f1ba02a914e534 # v2.3.3
         with:
           results_file: results.sarif
           results_format: sarif
@@ -67,6 +67,6 @@ jobs:
 
       # Upload the results to GitHub's code scanning dashboard.
       - name: "Upload to code-scanning"
-        uses: github/codeql-action/upload-sarif@d39d31e687223d841ef683f52467bd88e9b21c14 # v3.25.3
+        uses: github/codeql-action/upload-sarif@f079b8493333aace61c81488f8bd40919487bd9f # v3.25.7
         with:
           sarif_file: results.sarif
diff --git a/CMakeFilters.cmake b/CMakeFilters.cmake
index 5346abdb5cf..55dbd7ccc7b 100644
--- a/CMakeFilters.cmake
+++ b/CMakeFilters.cmake
@@ -9,14 +9,23 @@
 # If you do not have access to either file, you may request a copy from
 # help@hdfgroup.org.
 #
-option (USE_LIBAEC_STATIC "Use static AEC library" OFF)
-option (ZLIB_USE_EXTERNAL "Use External Library Building for ZLIB else search" OFF)
-option (SZIP_USE_EXTERNAL "Use External Library Building for SZIP else search" OFF)
+option (HDF5_USE_ZLIB_NG "Use zlib-ng library as zlib library" OFF)
+option (HDF5_USE_LIBAEC_STATIC "Use static AEC library" OFF)
+option (ZLIB_USE_EXTERNAL "Use External Library Building for ZLIB" OFF)
+option (SZIP_USE_EXTERNAL "Use External Library Building for SZIP" OFF)
 
 if (NOT ZLIB_USE_LOCALCONTENT)
-  set (ZLIB_URL ${ZLIB_TGZ_ORIGPATH}/${ZLIB_TGZ_NAME})
+  if (HDF5_USE_ZLIB_NG)
+    set (ZLIB_URL ${ZLIBNG_TGZ_ORIGPATH}/${ZLIBNG_TGZ_NAME})
+  else ()
+    set (ZLIB_URL ${ZLIB_TGZ_ORIGPATH}/${ZLIB_TGZ_NAME})
+  endif ()
 else ()
-  set (ZLIB_URL ${TGZPATH}/${ZLIB_TGZ_NAME})
+  if (HDF5_USE_ZLIB_NG)
+    set (ZLIB_URL ${TGZPATH}/${ZLIBNG_TGZ_NAME})
+  else ()
+    set (ZLIB_URL ${TGZPATH}/${ZLIB_TGZ_NAME})
+  endif ()
 endif ()
 message (VERBOSE "Filter ZLIB file is ${ZLIB_URL}")
 
@@ -71,8 +80,13 @@ option (HDF5_ENABLE_Z_LIB_SUPPORT "Enable Zlib Filters" ON)
 if (HDF5_ENABLE_Z_LIB_SUPPORT)
   if (NOT H5_ZLIB_HEADER)
     if (NOT ZLIB_USE_EXTERNAL)
+      if (HDF5_USE_ZLIB_NG)
+        set (PACKAGE_NAME ${ZLIBNG_PACKAGE_NAME}${HDF_PACKAGE_EXT})
+      else ()
+        set (PACKAGE_NAME ${ZLIB_PACKAGE_NAME}${HDF_PACKAGE_EXT})
+      endif ()
       set(ZLIB_FOUND FALSE)
-      find_package (ZLIB NAMES ${ZLIB_PACKAGE_NAME}${HDF_PACKAGE_EXT} COMPONENTS static shared)
+      find_package (ZLIB NAMES ${PACKAGE_NAME} COMPONENTS static shared)
       if (NOT ZLIB_FOUND)
         find_package (ZLIB) # Legacy find
       endif ()
@@ -119,9 +133,14 @@ if (HDF5_ENABLE_SZIP_SUPPORT)
   if (NOT SZIP_USE_EXTERNAL)
     set(libaec_USE_STATIC_LIBS ${HDF5_USE_LIBAEC_STATIC})
     set(SZIP_FOUND FALSE)
-    find_package (SZIP NAMES ${LIBAEC_PACKAGE_NAME}${HDF_PACKAGE_EXT} COMPONENTS static shared)
-    if (NOT SZIP_FOUND)
-      find_package (SZIP) # Legacy find
+    find_package (libaec 1.0.5 CONFIG)
+    if (SZIP_FOUND)
+      set (LINK_COMP_LIBS ${LINK_COMP_LIBS} ${H5_SZIP_LIBRARIES})
+    else ()
+      find_package (SZIP NAMES ${LIBAEC_PACKAGE_NAME}${HDF_PACKAGE_EXT} COMPONENTS static shared)
+      if (NOT SZIP_FOUND)
+        find_package (SZIP) # Legacy find
+      endif ()
     endif ()
     set(H5_SZIP_FOUND ${SZIP_FOUND})
     if (H5_SZIP_FOUND)
diff --git a/CMakeInstallation.cmake b/CMakeInstallation.cmake
index 10e4036ca34..2188e36316c 100644
--- a/CMakeInstallation.cmake
+++ b/CMakeInstallation.cmake
@@ -120,7 +120,7 @@ else ()
   set (BYTESEX little-endian)
 endif ()
 configure_file (
-    ${HDF_RESOURCES_DIR}/libhdf5.settings.cmake.in
+    ${HDF5_SOURCE_DIR}/src/libhdf5.settings.cmake.in
     ${HDF5_SRC_BINARY_DIR}/libhdf5.settings ESCAPE_QUOTES @ONLY
 )
 install (
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4527d8024e1..a27b7e899b3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -76,6 +76,13 @@ mark_as_advanced (HDF5_LIB_INFIX)
 #   e.g. the infix '_openmpi' results in the library name 'libhdf5_openmpi.so'
 #   This name is used in packages on debian based systems.
 #   (see https://packages.debian.org/jessie/amd64/libhdf5-openmpi-8/filelist)
+#option (HDF5_EXTERNAL_LIB_SUFFIX "Use prefix for custom library naming." "")
+set (HDF5_EXTERNAL_LIB_SUFFIX "" CACHE STRING "Use suffix for custom library naming.")
+mark_as_advanced (HDF5_EXTERNAL_LIB_SUFFIX)
+# HDF5_EXTERNAL_LIB_SUFFIX :
+#   If the parent project needs to install hdf libraries, but avoid
+#   name conflicts with system versions, then a suffix may be added
+#   to ensure that the correct versions configured are used.
 #
 # HDF5_INSTALL_BIN_DIR, HDF5_INSTALL_LIB_DIR, HDF5_INSTALL_INCLUDE_DIR, HDF5_INSTALL_DATA_DIR :
 #   Customize the 'bin', 'lib', 'include', and 'share' installation directories.
@@ -133,44 +140,65 @@ option (ALLOW_UNSUPPORTED "Allow unsupported combinations of configure options"
 mark_as_advanced (ALLOW_UNSUPPORTED)
 
 #-----------------------------------------------------------------------------
-# Set the core names of all the libraries
-#-----------------------------------------------------------------------------
-set (HDF5_LIB_CORENAME              "hdf5${HDF5_LIB_INFIX}")
-set (HDF5_TEST_LIB_CORENAME         "hdf5${HDF5_LIB_INFIX}_test")
-set (HDF5_CPP_LIB_CORENAME          "hdf5${HDF5_LIB_INFIX}_cpp")
-set (HDF5_HL_LIB_CORENAME           "hdf5${HDF5_LIB_INFIX}_hl")
-set (HDF5_HL_CPP_LIB_CORENAME       "hdf5${HDF5_LIB_INFIX}_hl_cpp")
-set (HDF5_TOOLS_LIB_CORENAME        "hdf5${HDF5_LIB_INFIX}_tools")
-set (HDF5_UTILS_LIB_CORENAME        "hdf5${HDF5_LIB_INFIX}_utils")
-set (HDF5_F90_LIB_CORENAME          "hdf5${HDF5_LIB_INFIX}_fortran")
-set (HDF5_F90_C_LIB_CORENAME        "hdf5${HDF5_LIB_INFIX}_f90cstub")
-set (HDF5_F90_TEST_LIB_CORENAME     "hdf5${HDF5_LIB_INFIX}_test_fortran")
-set (HDF5_F90_C_TEST_LIB_CORENAME   "hdf5${HDF5_LIB_INFIX}_test_f90cstub")
-set (HDF5_HL_F90_LIB_CORENAME       "hdf5${HDF5_LIB_INFIX}_hl_fortran")
-set (HDF5_HL_F90_C_LIB_CORENAME     "hdf5${HDF5_LIB_INFIX}_hl_f90cstub")
-set (HDF5_JAVA_JNI_LIB_CORENAME     "hdf5${HDF5_LIB_INFIX}_java")
+# Set the core names of all the libraries CORENAME is the base library name
+# for targets, BASE_CORE
+# filename are made of PREFIX_BASE_INFIX_CORE_SUFFIX
+#-----------------------------------------------------------------------------
+set (HDF5_LIB_BASE              "hdf5")
+
+set (HDF5_LIB_CORE              "")
+set (HDF5_TEST_LIB_CORE         "_test")
+set (HDF5_CPP_LIB_CORE          "_cpp")
+set (HDF5_HL_LIB_CORE           "_hl")
+set (HDF5_HL_CPP_LIB_CORE       "_hl_cpp")
+set (HDF5_TOOLS_LIB_CORE        "_tools")
+set (HDF5_UTILS_LIB_CORE        "_utils")
+set (HDF5_F90_LIB_CORE          "_fortran")
+set (HDF5_F90_C_LIB_CORE        "_f90cstub")
+set (HDF5_F90_TEST_LIB_CORE     "_test_fortran")
+set (HDF5_F90_C_TEST_LIB_CORE   "_test_f90cstub")
+set (HDF5_HL_F90_LIB_CORE       "_hl_fortran")
+set (HDF5_HL_F90_C_LIB_CORE     "_hl_f90cstub")
+set (HDF5_JAVA_JNI_LIB_CORE     "_java")
+
+set (HDF5_LIB_CORENAME              "${HDF5_LIB_BASE}")
+set (HDF5_TEST_LIB_CORENAME         "${HDF5_LIB_BASE}${HDF5_TEST_LIB_CORE}")
+set (HDF5_CPP_LIB_CORENAME          "${HDF5_LIB_BASE}${HDF5_CPP_LIB_CORE}")
+set (HDF5_HL_LIB_CORENAME           "${HDF5_LIB_BASE}${HDF5_HL_LIB_CORE}")
+set (HDF5_HL_CPP_LIB_CORENAME       "${HDF5_LIB_BASE}${HDF5_HL_CPP_LIB_CORE}")
+set (HDF5_TOOLS_LIB_CORENAME        "${HDF5_LIB_BASE}${HDF5_TOOLS_LIB_CORE}")
+set (HDF5_UTILS_LIB_CORENAME        "${HDF5_LIB_BASE}${HDF5_UTILS_LIB_CORE}")
+set (HDF5_F90_LIB_CORENAME          "${HDF5_LIB_BASE}${HDF5_F90_LIB_CORE}")
+set (HDF5_F90_C_LIB_CORENAME        "${HDF5_LIB_BASE}${HDF5_F90_C_LIB_CORE}")
+set (HDF5_F90_TEST_LIB_CORENAME     "${HDF5_LIB_BASE}${HDF5_F90_TEST_LIB_CORE}")
+set (HDF5_F90_C_TEST_LIB_CORENAME   "${HDF5_LIB_BASE}${HDF5_F90_C_TEST_LIB_CORE}")
+set (HDF5_HL_F90_LIB_CORENAME       "${HDF5_LIB_BASE}${HDF5_HL_F90_LIB_CORE}")
+set (HDF5_HL_F90_C_LIB_CORENAME     "${HDF5_LIB_BASE}${HDF5_HL_F90_C_LIB_CORE}")
+set (HDF5_JAVA_JNI_LIB_CORENAME     "${HDF5_LIB_BASE}${HDF5_JAVA_JNI_LIB_CORE}")
 set (HDF5_JAVA_HDF5_LIB_CORENAME    "jarhdf5")
 set (HDF5_JAVA_TEST_LIB_CORENAME    "jartest5")
 
 #-----------------------------------------------------------------------------
 # Set the true names of all the libraries if customized by external project
 #-----------------------------------------------------------------------------
-set (HDF5_LIB_NAME              "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_LIB_CORENAME}")
-set (HDF5_TEST_LIB_NAME         "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_TEST_LIB_CORENAME}")
-set (HDF5_CPP_LIB_NAME          "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_CPP_LIB_CORENAME}")
-set (HDF5_HL_LIB_NAME           "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_HL_LIB_CORENAME}")
-set (HDF5_HL_CPP_LIB_NAME       "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_HL_CPP_LIB_CORENAME}")
-set (HDF5_TOOLS_LIB_NAME        "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_TOOLS_LIB_CORENAME}")
-set (HDF5_UTILS_LIB_NAME        "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_UTILS_LIB_CORENAME}")
-set (HDF5_F90_LIB_NAME          "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_F90_LIB_CORENAME}")
-set (HDF5_F90_C_LIB_NAME        "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_F90_C_LIB_CORENAME}")
-set (HDF5_F90_TEST_LIB_NAME     "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_F90_TEST_LIB_CORENAME}")
-set (HDF5_F90_C_TEST_LIB_NAME   "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_F90_C_TEST_LIB_CORENAME}")
-set (HDF5_HL_F90_LIB_NAME       "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_HL_F90_LIB_CORENAME}")
-set (HDF5_HL_F90_C_LIB_NAME     "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_HL_F90_C_LIB_CORENAME}")
-set (HDF5_JAVA_JNI_LIB_NAME     "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_JAVA_JNI_LIB_CORENAME}")
-set (HDF5_JAVA_HDF5_LIB_NAME    "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_JAVA_HDF5_LIB_CORENAME}")
-set (HDF5_JAVA_TEST_LIB_NAME    "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_JAVA_TEST_LIB_CORENAME}")
+set (HDF5_LIB_NAME              "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_LIB_BASE}${HDF5_LIB_INFIX}${HDF5_LIB_CORE}${HDF5_EXTERNAL_LIB_SUFFIX}")
+set (HDF5_TEST_LIB_NAME         "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_LIB_BASE}${HDF5_LIB_INFIX}${HDF5_TEST_LIB_CORE}${HDF5_EXTERNAL_LIB_SUFFIX}")
+set (HDF5_CPP_LIB_NAME          "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_LIB_BASE}${HDF5_LIB_INFIX}${HDF5_CPP_LIB_CORE}${HDF5_EXTERNAL_LIB_SUFFIX}")
+set (HDF5_HL_LIB_NAME           "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_LIB_BASE}${HDF5_LIB_INFIX}${HDF5_HL_LIB_CORE}${HDF5_EXTERNAL_LIB_SUFFIX}")
+set (HDF5_HL_CPP_LIB_NAME       "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_LIB_BASE}${HDF5_LIB_INFIX}${HDF5_HL_CPP_LIB_CORE}${HDF5_EXTERNAL_LIB_SUFFIX}")
+set (HDF5_TOOLS_LIB_NAME        "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_LIB_BASE}${HDF5_LIB_INFIX}${HDF5_TOOLS_LIB_CORE}${HDF5_EXTERNAL_LIB_SUFFIX}")
+set (HDF5_UTILS_LIB_NAME        "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_LIB_BASE}${HDF5_LIB_INFIX}${HDF5_UTILS_LIB_CORE}${HDF5_EXTERNAL_LIB_SUFFIX}")
+set (HDF5_F90_LIB_NAME          "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_LIB_BASE}${HDF5_LIB_INFIX}${HDF5_F90_LIB_CORE}${HDF5_EXTERNAL_LIB_SUFFIX}")
+set (HDF5_F90_C_LIB_NAME        "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_LIB_BASE}${HDF5_LIB_INFIX}${HDF5_F90_C_LIB_CORE}${HDF5_EXTERNAL_LIB_SUFFIX}")
+set (HDF5_F90_TEST_LIB_NAME     "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_LIB_BASE}${HDF5_LIB_INFIX}${HDF5_F90_TEST_LIB_CORE}${HDF5_EXTERNAL_LIB_SUFFIX}")
+set (HDF5_F90_C_TEST_LIB_NAME   "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_LIB_BASE}${HDF5_LIB_INFIX}${HDF5_F90_C_TEST_LIB_CORE}${HDF5_EXTERNAL_LIB_SUFFIX}")
+set (HDF5_HL_F90_LIB_NAME       "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_LIB_BASE}${HDF5_LIB_INFIX}${HDF5_HL_F90_LIB_CORE}${HDF5_EXTERNAL_LIB_SUFFIX}")
+set (HDF5_HL_F90_C_LIB_NAME     "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_LIB_BASE}${HDF5_LIB_INFIX}${HDF5_HL_F90_C_LIB_CORE}${HDF5_EXTERNAL_LIB_SUFFIX}")
+#Because the loading mechanism of the JNI library requires a fixed name, the name of the JNI library cannot be customized
+#set (HDF5_JAVA_JNI_LIB_NAME     "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_LIB_BASE}${HDF5_LIB_INFIX}${HDF5_JAVA_JNI_LIB_CORE}${HDF5_EXTERNAL_LIB_SUFFIX}")
+set (HDF5_JAVA_JNI_LIB_NAME     "${HDF5_LIB_BASE}${HDF5_JAVA_JNI_LIB_CORE}")
+set (HDF5_JAVA_HDF5_LIB_NAME    "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_JAVA_HDF5_LIB_CORENAME}${HDF5_LIB_INFIX}${HDF5_EXTERNAL_LIB_SUFFIX}")
+set (HDF5_JAVA_TEST_LIB_NAME    "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_JAVA_TEST_LIB_CORENAME}${HDF5_LIB_INFIX}${HDF5_EXTERNAL_LIB_SUFFIX}")
 
 #-----------------------------------------------------------------------------
 # Set the target names of all the libraries
diff --git a/CMakePresets.json b/CMakePresets.json
index b94eeb0bb18..cc6201101a9 100644
--- a/CMakePresets.json
+++ b/CMakePresets.json
@@ -20,9 +20,12 @@
         "ZLIB_PACKAGE_NAME": {"type": "STRING", "value": "zlib"},
         "ZLIB_TGZ_ORIGPATH": {"type": "STRING", "value": "https://github.com/madler/zlib/releases/download/v1.3"},
         "ZLIB_TGZ_NAME": {"type": "STRING", "value": "zlib-1.3.tar.gz"},
+        "ZLIBNG_PACKAGE_NAME": {"type": "STRING", "value": "zlib-ng"},
+        "ZLIBNG_TGZ_ORIGPATH": {"type": "STRING", "value": "https://github.com/zlib-ng/zlib-ng/archive/refs/tags"},
+        "ZLIBNG_TGZ_NAME": {"type": "STRING", "value": "2.1.6.tar.gz"},
         "LIBAEC_PACKAGE_NAME": {"type": "STRING", "value": "libaec"},
-        "LIBAEC_TGZ_ORIGPATH": {"type": "STRING", "value": "https://github.com/MathisRosenhauer/libaec/releases/download/v1.0.6"},
-        "LIBAEC_TGZ_NAME": {"type": "STRING", "value": "libaec-1.0.6.tar.gz"}
+        "LIBAEC_TGZ_ORIGPATH": {"type": "STRING", "value": "https://github.com/MathisRosenhauer/libaec/releases/download/v1.1.3"},
+        "LIBAEC_TGZ_NAME": {"type": "STRING", "value": "libaec-1.1.3.tar.gz"}
       }
     },
     {
@@ -31,6 +34,7 @@
       "inherits": ["ci-base-tgz", "ci-CompressionVars"],
       "cacheVariables": {
         "HDF5_PACKAGE_EXTLIBS": "ON",
+        "HDF5_USE_ZLIB_NG": "OFF",
         "ZLIB_USE_LOCALCONTENT": "OFF",
         "LIBAEC_USE_LOCALCONTENT": "OFF"
       }
diff --git a/CMakeVOL.cmake b/CMakeVOL.cmake
index e0894379f22..a6bd3b4adca 100644
--- a/CMakeVOL.cmake
+++ b/CMakeVOL.cmake
@@ -76,6 +76,8 @@ if (HDF5_VOL_ALLOW_EXTERNAL MATCHES "GIT" OR HDF5_VOL_ALLOW_EXTERNAL MATCHES "LO
   set (HDF5_FOUND 1)
   set (HDF5_LIBRARIES "${HDF5_LIBSH_TARGET};${LINK_LIBS};${LINK_COMP_LIBS};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:MPI::MPI_C>")
   set (HDF5_INCLUDE_DIRS "${HDF5_SRC_INCLUDE_DIRS};${HDF5_SRC_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>")
+  set (HDF5_IS_PARALLEL ${H5_HAVE_PARALLEL})
+  set (HDF5_VERSION ${HDF5_PACKAGE_VERSION})
 
   set (HDF5_C_LIBRARIES "${HDF5_LIBRARIES}")
   
diff --git a/HDF5Examples/CMakeLists.txt b/HDF5Examples/CMakeLists.txt
index d8e02d501d2..4752dc39952 100644
--- a/HDF5Examples/CMakeLists.txt
+++ b/HDF5Examples/CMakeLists.txt
@@ -98,11 +98,11 @@ endif ()
 # Note: Currently CMake only allows configuring of threadsafe on WINDOWS.
 #-----------------------------------------------------------------------------
 option (HDF_ENABLE_THREADSAFE "Enable Threadsafety" OFF)
-if (HDF_ENABLE_THREADSAFE)
-  # check for unsupported options
-  if (HDF_ENABLE_PARALLEL)
-    message (FATAL " **** Parallel and Threadsafe options are mutually exclusive **** ")
-  endif ()
+# Note that HDF_ENABLE_THREADSAFE is the CMake option for determining
+# whether to enable thread-safety in the examples. HDF5_ENABLE_THREADSAFE
+# is the CMake option determining whether HDF5 was configured with
+# thread-safety enabled.
+if (HDF_ENABLE_THREADSAFE AND HDF5_ENABLE_THREADSAFE)
   if (WIN32)
     set (H5_HAVE_WIN_THREADS 1)
     set (H5_HAVE_THREADSAFE 1)
diff --git a/c++/src/CMakeLists.txt b/c++/src/CMakeLists.txt
index 1ba90ce8a23..09546acd451 100644
--- a/c++/src/CMakeLists.txt
+++ b/c++/src/CMakeLists.txt
@@ -175,9 +175,9 @@ set (_PKG_CONFIG_PREFIX ${CMAKE_INSTALL_PREFIX})
 set (_PKG_CONFIG_EXEC_PREFIX \${prefix})
 set (_PKG_CONFIG_LIBDIR \${exec_prefix}/${HDF5_INSTALL_LIB_DIR})
 set (_PKG_CONFIG_INCLUDEDIR \${prefix}/${HDF5_INSTALL_INCLUDE_DIR})
-set (_PKG_CONFIG_LIBNAME "${HDF5_CPP_LIB_CORENAME}")
+set (_PKG_CONFIG_LIBNAME "${HDF5_CPP_LIB_NAME}")
 set (_PKG_CONFIG_VERSION "${HDF5_PACKAGE_VERSION}")
-set (PKG_CONFIG_LIBNAME "${HDF5_CPP_LIB_CORENAME}")
+set (PKG_CONFIG_LIBNAME "${HDF5_CPP_LIB_NAME}")
 if (${HDF_CFG_NAME} MATCHES "Debug" OR ${HDF_CFG_NAME} MATCHES "Developer")
   set (PKG_CONFIG_LIBNAME "${PKG_CONFIG_LIBNAME}${CMAKE_DEBUG_POSTFIX}")
 endif ()
@@ -191,8 +191,8 @@ if (BUILD_SHARED_LIBS)
   set (_PKG_CONFIG_SH_LIBS "${_PKG_CONFIG_SH_LIBS} -l${PKG_CONFIG_LIBNAME}")
 endif ()
 
-set (_PKG_CONFIG_REQUIRES "${HDF5_LIB_CORENAME} = ${HDF5_PACKAGE_VERSION}")
-set (_PKG_CONFIG_REQUIRES_PRIVATE "${HDF5_LIB_CORENAME} = ${HDF5_PACKAGE_VERSION}")
+set (_PKG_CONFIG_REQUIRES "${HDF5_LIB_NAME} = ${HDF5_PACKAGE_VERSION}")
+set (_PKG_CONFIG_REQUIRES_PRIVATE "${HDF5_LIB_NAME} = ${HDF5_PACKAGE_VERSION}")
 
 configure_file (
     ${HDF_CONFIG_DIR}/libhdf5.pc.in
diff --git a/config/cmake/HDFLibMacros.cmake b/config/cmake/HDFLibMacros.cmake
index 8a8813c3036..98f8a2ba028 100644
--- a/config/cmake/HDFLibMacros.cmake
+++ b/config/cmake/HDFLibMacros.cmake
@@ -28,7 +28,11 @@ macro (EXTERNAL_ZLIB_LIBRARY compress_type)
     FetchContent_Populate(HDF5_ZLIB)
 
     # Copy an additional/replacement files into the populated source
-    file(COPY ${HDF_RESOURCES_DIR}/ZLIB/CMakeLists.txt DESTINATION ${hdf5_zlib_SOURCE_DIR})
+    if (HDF5_USE_ZLIB_NG)
+      file(COPY ${HDF_RESOURCES_DIR}/ZLIBNG/CMakeLists.txt DESTINATION ${hdf5_zlib_SOURCE_DIR})
+    else ()
+      file(COPY ${HDF_RESOURCES_DIR}/ZLIB/CMakeLists.txt DESTINATION ${hdf5_zlib_SOURCE_DIR})
+    endif ()
 
     add_subdirectory(${hdf5_zlib_SOURCE_DIR} ${hdf5_zlib_BINARY_DIR})
   endif()
diff --git a/config/cmake/HDFMacros.cmake b/config/cmake/HDFMacros.cmake
index cefdaa03863..3545d4e9ff2 100644
--- a/config/cmake/HDFMacros.cmake
+++ b/config/cmake/HDFMacros.cmake
@@ -271,6 +271,8 @@ macro (TARGET_C_PROPERTIES wintarget libtype)
   if(MSVC)
     set_property(TARGET ${wintarget} APPEND PROPERTY LINK_FLAGS "${WIN_LINK_FLAGS}")
   endif()
+  #Disable UNITY_BUILD for now
+  set_property(TARGET ${wintarget} APPEND PROPERTY UNITY_BUILD OFF)
 endmacro ()
 
 #-----------------------------------------------------------------------------
diff --git a/config/cmake/LIBAEC/CMakeLists.txt b/config/cmake/LIBAEC/CMakeLists.txt
index 54482163c5e..bdf43f8baf7 100644
--- a/config/cmake/LIBAEC/CMakeLists.txt
+++ b/config/cmake/LIBAEC/CMakeLists.txt
@@ -5,6 +5,8 @@ PROJECT (LIBAEC C)
 # Basic LIBAEC stuff here
 #-----------------------------------------------------------------------------
 set(CMAKE_C_STANDARD 99)
+set(CMAKE_C_VISIBILITY_PRESET hidden)
+set(CMAKE_POSITION_INDEPENDENT_CODE ON)
 
 set (LIBAEC_PACKAGE_EXT ${HDF_PACKAGE_EXT})
 set (HDF_USE_GNU_DIRS ${HDF5_USE_GNU_DIRS})
@@ -20,10 +22,12 @@ if (WINDOWS)
 endif ()
 
 if (NOT WINDOWS)
-  TEST_BIG_ENDIAN (WORDS_BIGENDIAN)
+include(TestBigEndian)
+test_big_endian(WORDS_BIGENDIAN)
 endif ()
 
 # Check for __builtin_clzll for faster decoding
+include(CheckCSourceCompiles)
 check_c_source_compiles(
   "int main(void)\n{return __builtin_clzll(1LL);}"
   HAVE_DECL___BUILTIN_CLZLL)
@@ -36,6 +40,13 @@ return _BitScanReverse64(&foo, bar);}"
     HAVE_BSR64)
 endif()
 
+include(CheckSymbolExists)
+check_symbol_exists(snprintf "stdio.h" HAVE_SNPRINTF)
+if(NOT HAVE_SNPRINTF)
+  check_symbol_exists(_snprintf "stdio.h" HAVE__SNPRINTF)
+  check_symbol_exists(_snprintf_s "stdio.h" HAVE__SNPRINTF_S)
+endif()
+
 #-----------------------------------------------------------------------------
 # Define some CMake variables for use later in the project
 #-----------------------------------------------------------------------------
@@ -62,8 +73,8 @@ set (LIBAEC_LIB_TARGET            "${LIBAEC_LIB_CORENAME}-static")
 set (SZIP_LIB_TARGET              "${SZIP_LIB_CORENAME}-static")
 
 set (libaec_VERS_MAJOR 1)
-set (libaec_VERS_MINOR 0)
-set (libaec_VERS_RELEASE 6)
+set (libaec_VERS_MINOR 1)
+set (libaec_VERS_RELEASE 3)
 
 #-----------------------------------------------------------------------------
 set (LIBAEC_PACKAGE "libaec")
@@ -142,6 +153,10 @@ endif ()
 # Generate the aec_config.h file containing user settings needed by compilation
 #-----------------------------------------------------------------------------
 configure_file (${LIBAEC_RESOURCES_DIR}/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h)
+# Create libaec.h with current version information
+configure_file(
+  "include/libaec.h.in"
+  "${CMAKE_CURRENT_BINARY_DIR}/libaec.h")
 
 #-----------------------------------------------------------------------------
 # All libs/tests/examples need the main include directories
@@ -157,10 +172,11 @@ set(LIBAEC_SRCS
     ${LIBAEC_SRC_DIR}/encode.c
     ${LIBAEC_SRC_DIR}/encode_accessors.c
     ${LIBAEC_SRC_DIR}/decode.c
+    ${LIBAEC_SRC_DIR}/vector.c
 )
 
 set (LIBAEC_PUBLIC_HEADERS
-    ${LIBAEC_INC_DIR}/libaec.h
+    ${CMAKE_CURRENT_BINARY_DIR}/libaec.h
 )
 
 add_library (${LIBAEC_LIB_TARGET} STATIC ${LIBAEC_SRCS} ${LIBAEC_PUBLIC_HEADERS})
@@ -224,18 +240,6 @@ endif ()
 
 include (CMakePackageConfigHelpers)
 
-#-----------------------------------------------------------------------------
-# Check for Installation Utilities
-#-----------------------------------------------------------------------------
-if (WIN32)
-  set (PF_ENV_EXT "(x86)")
-  find_program (NSIS_EXECUTABLE NSIS.exe PATHS "$ENV{ProgramFiles}\\NSIS" "$ENV{ProgramFiles${PF_ENV_EXT}}\\NSIS")
-  if(NOT CPACK_WIX_ROOT)
-    file(TO_CMAKE_PATH "$ENV{WIX}" CPACK_WIX_ROOT)
-  endif ()
-  find_program (WIX_EXECUTABLE candle  PATHS "${CPACK_WIX_ROOT}/bin")
-endif ()
-
 #-----------------------------------------------------------------------------
 # Add Target(s) to CMake Install for import into other projects
 #-----------------------------------------------------------------------------
@@ -324,145 +328,3 @@ if (NOT LIBAEC_EXTERNALLY_CONFIGURED)
   )
 endif ()
 
-#-----------------------------------------------------------------------------
-# Check for Installation Utilities
-#-----------------------------------------------------------------------------
-if (WIN32)
-  set (PF_ENV_EXT "(x86)")
-  find_program (NSIS_EXECUTABLE NSIS.exe PATHS "$ENV{ProgramFiles}\\NSIS" "$ENV{ProgramFiles${PF_ENV_EXT}}\\NSIS")
-  if(NOT CPACK_WIX_ROOT)
-    file(TO_CMAKE_PATH "$ENV{WIX}" CPACK_WIX_ROOT)
-  endif()
-  find_program (WIX_EXECUTABLE candle  PATHS "${CPACK_WIX_ROOT}/bin")
-endif ()
-
-configure_file (${LIBAEC_SOURCE_DIR}/LICENSE.txt ${LIBAEC_BINARY_DIR}/LIBAEC_LICENSE.txt @ONLY)
-configure_file (${LIBAEC_SOURCE_DIR}/README.SZIP ${LIBAEC_BINARY_DIR}/LIBAEC_README.SZIP @ONLY)
-configure_file (${LIBAEC_SOURCE_DIR}/README.md ${LIBAEC_BINARY_DIR}/LIBAEC_README.md @ONLY)
-
-#-----------------------------------------------------------------------------
-# Set the cpack variables
-#-----------------------------------------------------------------------------
-if (NOT LIBAEC_EXTERNALLY_CONFIGURED)
-  set (CPACK_PACKAGE_VENDOR "HDF_Group")
-  set (CPACK_PACKAGE_NAME "${LIBAEC_PACKAGE_NAME}")
-  if (NOT WIN32 OR LIBAEC_VERS_SUBRELEASE MATCHES "^[0-9]+$")
-    set (CPACK_PACKAGE_VERSION "${LIBAEC_PACKAGE_VERSION_STRING}")
-  else ()
-    set (CPACK_PACKAGE_VERSION "${LIBAEC_PACKAGE_VERSION}")
-  endif ()
-  set (CPACK_PACKAGE_VERSION_MAJOR "${LIBAEC_PACKAGE_VERSION_MAJOR}")
-  set (CPACK_PACKAGE_VERSION_MINOR "${LIBAEC_PACKAGE_VERSION_MINOR}")
-  set (CPACK_PACKAGE_VERSION_PATCH "")
-  set (CPACK_RESOURCE_FILE_LICENSE "${LIBAEC_BINARY_DIR}/LIBAEC_LICENSE.txt")
-  set (CPACK_PACKAGE_DESCRIPTION_FILE "${LIBAEC_BINARY_DIR}/LIBAEC_README.SZIP")
-  set (CPACK_RESOURCE_FILE_README "${LIBAEC_BINARY_DIR}/LIBAEC_README.md")
-  set (CPACK_PACKAGE_RELOCATABLE TRUE)
-  set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "libaec - Adaptive Entropy Coding library by Deutsches Klimarechenzentrum GmbH")
-  set (CPACK_PACKAGE_INSTALL_DIRECTORY "${CPACK_PACKAGE_VENDOR}/${CPACK_PACKAGE_NAME}/${CPACK_PACKAGE_VERSION}")
-
-  set (CPACK_GENERATOR "TGZ")
-  if (WIN32)
-    set (CPACK_GENERATOR "ZIP")
-
-    if (NSIS_EXECUTABLE)
-      list (APPEND CPACK_GENERATOR "NSIS")
-    endif ()
-    # Installers for 32- vs. 64-bit CMake:
-    #  - Root install directory (displayed to end user at installer-run time)
-    #  - "NSIS package/display name" (text used in the installer GUI)
-    #  - Registry key used to store info about the installation
-    set (CPACK_NSIS_PACKAGE_NAME "${LIBAEC_PACKAGE_STRING}")
-    if (CMAKE_CL_64)
-      set (CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64")
-      set (CPACK_PACKAGE_INSTALL_REGISTRY_KEY "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION} (Win64)")
-    else ()
-      set (CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES")
-      set (CPACK_PACKAGE_INSTALL_REGISTRY_KEY "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}")
-    endif ()
-    set (CPACK_NSIS_DISPLAY_NAME "${CPACK_NSIS_PACKAGE_NAME}")
-    set (CPACK_PACKAGE_INSTALL_DIRECTORY "${CPACK_PACKAGE_VENDOR}\\\\${CPACK_PACKAGE_NAME}\\\\${CPACK_PACKAGE_VERSION}")
-    set (CPACK_NSIS_CONTACT "${LIBAEC_PACKAGE_BUGREPORT}")
-    set (CPACK_NSIS_MODIFY_PATH ON)
-    set (CPACK_NSIS_PACKAGE_NAME "LIBAEC ${LIBAEC_PACKAGE_VERSION}")
-    if (WIX_EXECUTABLE)
-      list (APPEND CPACK_GENERATOR "WIX")
-    endif ()
-#WiX variables
-    set (CPACK_WIX_UNINSTALL "1")
-    set (CPACK_RESOURCE_FILE_LICENSE "${LIBAEC_BINARY_DIR}/LIBAEC_LICENSE.txt")
-  elseif (APPLE)
-    list (APPEND CPACK_GENERATOR "STGZ")
-    list (APPEND CPACK_GENERATOR "DragNDrop")
-    set (CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE ON)
-    set (CPACK_PACKAGING_INSTALL_PREFIX "/${CPACK_PACKAGE_INSTALL_DIRECTORY}")
-    #set (CPACK_PACKAGE_ICON "${LIBAEC_RESOURCES_DIR}/hdf.icns")
-
-    option (LIBAEC_PACK_MACOSX_FRAMEWORK  "Package the LIBAEC Library in a Framework" OFF)
-    if (LIBAEC_PACK_MACOSX_FRAMEWORK AND LIBAEC_BUILD_FRAMEWORKS)
-      set (CPACK_BUNDLE_NAME "${LIBAEC_PACKAGE_STRING}")
-      set (CPACK_BUNDLE_LOCATION "/")    # make sure CMAKE_INSTALL_PREFIX ends in /
-      set (CMAKE_INSTALL_PREFIX "/${CPACK_BUNDLE_NAME}.framework/Versions/${CPACK_PACKAGE_VERSION}/${CPACK_PACKAGE_NAME}/")
-      set (CPACK_SHORT_VERSION_STRING "${CPACK_PACKAGE_VERSION}")
-      #-----------------------------------------------------------------------------
-      # Configure the Info.plist file for the install bundle
-      #-----------------------------------------------------------------------------
-      configure_file (
-          ${LIBAEC_RESOURCES_DIR}/CPack.Info.plist.in
-          ${LIBAEC_BINARY_DIR}/CMakeFiles/Info.plist @ONLY
-      )
-      configure_file (
-          ${LIBAEC_RESOURCES_DIR}/PkgInfo.in
-          ${LIBAEC_BINARY_DIR}/CMakeFiles/PkgInfo @ONLY
-      )
-      install (
-          FILES ${LIBAEC_BINARY_DIR}/CMakeFiles/PkgInfo
-          DESTINATION ..
-      )
-    endif ()
-  else ()
-    list (APPEND CPACK_GENERATOR "STGZ")
-    set (CPACK_PACKAGING_INSTALL_PREFIX "/${CPACK_PACKAGE_INSTALL_DIRECTORY}")
-    set (CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE ON)
-
-    set (CPACK_DEBIAN_PACKAGE_SECTION "Libraries")
-    set (CPACK_DEBIAN_PACKAGE_MAINTAINER "${LIBAEC_PACKAGE_BUGREPORT}")
-
-#      list (APPEND CPACK_GENERATOR "RPM")
-    set (CPACK_RPM_PACKAGE_RELEASE "1")
-    set (CPACK_RPM_COMPONENT_INSTALL ON)
-    set (CPACK_RPM_PACKAGE_RELOCATABLE ON)
-  endif ()
-
-  # By default, do not warn when built on machines using only VS Express:
-  if (NOT DEFINED CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS)
-    set (CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS ON)
-  endif ()
-  include (InstallRequiredSystemLibraries)
-
-  set (CPACK_INSTALL_CMAKE_PROJECTS "${LIBAEC_BINARY_DIR};LIBAEC;libraries;/")
-  set (CPACK_INSTALL_CMAKE_PROJECTS "${LIBAEC_BINARY_DIR};LIBAEC;configinstall;/")
-
-  set (CPACK_ALL_INSTALL_TYPES Full Developer User)
-  set (CPACK_INSTALL_TYPE_FULL_DISPLAY_NAME "Everything")
-
-  set(CPACK_COMPONENTS_ALL libraries headers documents configinstall)
-
-  include (CPack)
-
-  cpack_add_component_group(Runtime)
-
-  cpack_add_component (libraries
-      DISPLAY_NAME "LIBAEC Libraries"
-      REQUIRED
-      GROUP Runtime
-      INSTALL_TYPES Full Developer User
-  )
-  cpack_add_component (configinstall
-      DISPLAY_NAME "LIBAEC CMake files"
-      DEPENDS libraries
-      GROUP Development
-      INSTALL_TYPES Full Developer User
-  )
-
-endif ()
diff --git a/config/cmake/LIBAEC/config.h.in b/config/cmake/LIBAEC/config.h.in
index 04425480729..25f30ee60ca 100644
--- a/config/cmake/LIBAEC/config.h.in
+++ b/config/cmake/LIBAEC/config.h.in
@@ -1,36 +1,6 @@
 #cmakedefine WORDS_BIGENDIAN
 #cmakedefine01 HAVE_DECL___BUILTIN_CLZLL
-#cmakedefine01 HAVE_BSR64
+#cmakedefine HAVE_BSR64
 #cmakedefine HAVE_SNPRINTF
 #cmakedefine HAVE__SNPRINTF
 #cmakedefine HAVE__SNPRINTF_S
-
-/* Name of package */
-#cmakedefine LIBAEC_PACKAGE "@LIBAEC_PACKAGE@"
-
-/* Define to the address where bug reports for this package should be sent. */
-#cmakedefine LIBAEC_PACKAGE_BUGREPORT "@LIBAEC_PACKAGE_BUGREPORT@"
-
-/* Define to the full name of this package. */
-#cmakedefine LIBAEC_PACKAGE_NAME "@LIBAEC_PACKAGE_NAME@"
-
-/* Define to the full name and version of this package. */
-#cmakedefine LIBAEC_PACKAGE_STRING "@LIBAEC_PACKAGE_STRING@"
-
-/* Define to the one symbol short name of this package. */
-#cmakedefine LIBAEC_PACKAGE_TARNAME "@LIBAEC_PACKAGE_TARNAME@"
-
-/* Define to the version of this package. */
-#cmakedefine LIBAEC_PACKAGE_VERSION "@LIBAEC_PACKAGE_VERSION@"
-
-/* Define to 1 if you have the ANSI C header files. */
-#cmakedefine STDC_HEADERS @STDC_HEADERS@
-
-/* Version number of package */
-#define VERSION "@LIBAEC_PACKAGE_VERSION@"
-
-/* Define to empty if `const' does not conform to ANSI C. */
-#cmakedefine const
-
-/* Define to `unsigned int' if <sys/types.h> does not define. */
-#cmakedefine size_t
diff --git a/config/cmake/LIBAEC/libaec-config-version.cmake.in b/config/cmake/LIBAEC/libaec-config-version.cmake.in
index 4f0e7ae9ec7..d32ef969a13 100644
--- a/config/cmake/LIBAEC/libaec-config-version.cmake.in
+++ b/config/cmake/LIBAEC/libaec-config-version.cmake.in
@@ -1,42 +1,15 @@
-#-----------------------------------------------------------------------------
-# LIBAEC Version file for install directory
-#-----------------------------------------------------------------------------
-
-set (PACKAGE_VERSION "@LIBAEC_VERSION_STRING@")
-
-if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" )
+set(PACKAGE_VERSION_MAJOR @PROJECT_VERSION_MAJOR@)
+set(PACKAGE_VERSION_MINOR @PROJECT_VERSION_MINOR@)
+set(PACKAGE_VERSION_PATCH @PROJECT_VERSION_PATCH@)
+set(PACKAGE_VERSION @PROJECT_VERSION@)
+
+# Check whether the requested PACKAGE_FIND_VERSION is compatible
+if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION OR
+   PACKAGE_VERSION_MAJOR GREATER PACKAGE_FIND_VERSION_MAJOR)
   set(PACKAGE_VERSION_COMPATIBLE FALSE)
 else()
-  if ("${PACKAGE_FIND_VERSION_MAJOR}" STREQUAL "@LIBAEC_VERSION_MAJOR@")
-
-    # exact match for version @LIBAEC_VERSION_MAJOR@.@LIBAEC_VERSION_MINOR@
-    if ("${PACKAGE_FIND_VERSION_MINOR}" STREQUAL "@LIBAEC_VERSION_MINOR@")
-
-      # compatible with any version @LIBAEC_VERSION_MAJOR@.@LIBAEC_VERSION_MINOR@.x
-      set (PACKAGE_VERSION_COMPATIBLE TRUE)
-
-      if ("${PACKAGE_FIND_VERSION_PATCH}" STREQUAL "@LIBAEC_VERSION_RELEASE@")
-        set (PACKAGE_VERSION_EXACT TRUE)
-
-        if ("${PACKAGE_FIND_VERSION_TWEAK}" STREQUAL "@LIBAEC_VERSION_SUBRELEASE@")
-          # not using this yet
-        endif ()
-      endif ()
-    else ()
-      set (PACKAGE_VERSION_COMPATIBLE FALSE)
-    endif ()
-  endif ()
-endif ()
-
-# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it:
-if("${CMAKE_SIZEOF_VOID_P}"  STREQUAL ""  OR "@CMAKE_SIZEOF_VOID_P@" STREQUAL "")
-   return()
+  set(PACKAGE_VERSION_COMPATIBLE TRUE)
+  if(PACKAGE_VERSION VERSION_EQUAL PACKAGE_FIND_VERSION)
+    set(PACKAGE_VERSION_EXACT TRUE)
+  endif()
 endif()
-
-# check that the installed version has the same 32/64bit-ness as the one which is currently searching:
-if(NOT "${CMAKE_SIZEOF_VOID_P}" STREQUAL "@CMAKE_SIZEOF_VOID_P@")
-  math(EXPR installedBits "@CMAKE_SIZEOF_VOID_P@ * 8")
-  set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)")
-  set(PACKAGE_VERSION_UNSUITABLE TRUE)
-endif()
-
diff --git a/config/cmake/LIBAEC/libaec-config.cmake.in b/config/cmake/LIBAEC/libaec-config.cmake.in
index 36a116a67f0..6f6c9e9ea8d 100644
--- a/config/cmake/LIBAEC/libaec-config.cmake.in
+++ b/config/cmake/LIBAEC/libaec-config.cmake.in
@@ -1,59 +1,101 @@
-#-----------------------------------------------------------------------------
-# LIBAEC Config file for compiling against LIBAEC build directory
-#-----------------------------------------------------------------------------
-@PACKAGE_INIT@
+# libaec-config.cmake
+# ----------------
+#
+# Finds the AEC library, specify the starting search path in libaec_ROOT.
+#
+# Static vs. shared
+# -----------------
+# To make use of the static library instead of the shared one, one needs
+# to set the variable libaec_USE_STATIC_LIBS to ON before calling find_package.
+# Example:
+#   set(libaec_USE_STATIC_LIBS ON)
+#   find_package(libaec CONFIG)
+#
+# This will define the following variables:
+#
+#   libaec_FOUND   - True if the system has the AEC library.
+#   libaec_VERSION - The version of the AEC library which was found.
+#   SZIP_FOUND     - True if the system has the SZIP library.
+#   SZIP_VERSION   - The version of the SZIP library which was found.
+#   SZIP_LIBRARIES - All the required libraries to make use of SZIP.
+#
+# and the following imported targets:
+#
+#   libaec::aec    - The AEC library.
+#   libaec::sz     - The SZIP compatible version of the AEC library.
 
-string(TOUPPER @LIBAEC_PACKAGE@ LIBAEC_PACKAGE_NAME)
-
-set (${LIBAEC_PACKAGE_NAME}_VALID_COMPONENTS static shared)
-
-#-----------------------------------------------------------------------------
-# User Options
-#-----------------------------------------------------------------------------
-set (${LIBAEC_PACKAGE_NAME}_ENABLE_ENCODING      @LIBAEC_ENABLE_ENCODING@)
-set (${LIBAEC_PACKAGE_NAME}_BUILD_SHARED_LIBS    @BUILD_SHARED_LIBS@)
-set (${LIBAEC_PACKAGE_NAME}_EXPORT_LIBRARIES     @LIBAEC_LIBRARIES_TO_EXPORT@)
+find_path(libaec_INCLUDE_DIR NAMES libaec.h DOC "AEC include directory")
+find_path(SZIP_INCLUDE_DIR NAMES szlib.h DOC "SZIP include directory")
+if (libaec_USE_STATIC_LIBS)
+  if (MSVC)
+    find_library(libaec_LIBRARY NAMES aec-static.lib DOC "AEC library")
+    find_library(SZIP_LIBRARY NAMES szip-static.lib DOC "SZIP compatible version of the AEC library")
+  else ()
+    find_library(libaec_LIBRARY NAMES libaec.a DOC "AEC library")
+    find_library(SZIP_LIBRARY NAMES libsz.a DOC "SZIP compatible version of the AEC library")
+  endif ()
+else ()
+  find_library(libaec_LIBRARY NAMES aec DOC "AEC library")
+  find_library(SZIP_LIBRARY NAMES sz szip DOC "SZIP compatible version of the AEC library")
+endif ()
 
-#-----------------------------------------------------------------------------
-# Directories
-#-----------------------------------------------------------------------------
-set (${LIBAEC_PACKAGE_NAME}_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@")
+# Check version here
+if (libaec_INCLUDE_DIR AND libaec_LIBRARY)
+  set(libaec_VERSION "@PROJECT_VERSION@")
+  set(SZIP_VERSION "2.0.1")
+endif ()
 
-set (${LIBAEC_PACKAGE_NAME}_SHARE_DIR "@PACKAGE_SHARE_INSTALL_DIR@")
-set_and_check (${LIBAEC_PACKAGE_NAME}_BUILD_DIR "@PACKAGE_CURRENT_BUILD_DIR@")
+include(FindPackageHandleStandardArgs)
+set(${CMAKE_FIND_PACKAGE_NAME}_CONFIG "${CMAKE_CURRENT_LIST_FILE}")
+find_package_handle_standard_args(libaec
+  FOUND_VAR libaec_FOUND
+  REQUIRED_VARS libaec_LIBRARY libaec_INCLUDE_DIR SZIP_LIBRARY SZIP_INCLUDE_DIR
+  VERSION_VAR libaec_VERSION
+  CONFIG_MODE
+)
 
-#-----------------------------------------------------------------------------
-# Version Strings
-#-----------------------------------------------------------------------------
-set (${LIBAEC_PACKAGE_NAME}_VERSION_STRING @LIBAEC_VERSION_STRING@)
-set (${LIBAEC_PACKAGE_NAME}_VERSION_MAJOR  @LIBAEC_VERSION_MAJOR@)
-set (${LIBAEC_PACKAGE_NAME}_VERSION_MINOR  @LIBAEC_VERSION_MINOR@)
+if (libaec_FOUND)
+  if (libaec_USE_STATIC_LIBS)
+    add_library(libaec::aec STATIC IMPORTED)
+  else ()
+    add_library(libaec::aec SHARED IMPORTED)
+    target_compile_definitions(libaec::aec INTERFACE LIBAEC_SHARED)
+    if (MSVC)
+      set_target_properties(libaec::aec PROPERTIES
+        IMPORTED_IMPLIB "${libaec_LIBRARY}"
+      )
+    endif ()
+  endif ()
+  set_target_properties(libaec::aec PROPERTIES
+    IMPORTED_LOCATION "${libaec_LIBRARY}"
+    INTERFACE_INCLUDE_DIRECTORIES "${libaec_INCLUDE_DIR}"
+  )
 
-#-----------------------------------------------------------------------------
-# Don't include targets if this file is being picked up by another
-# project which has already build LIBAEC as a subproject
-#-----------------------------------------------------------------------------
-if (NOT TARGET "@LIBAEC_PACKAGE@")
-  include (@PACKAGE_SHARE_INSTALL_DIR@/@LIBAEC_PACKAGE@@LIBAEC_PACKAGE_EXT@-targets.cmake)
-endif ()
+  # SZIP
+  if (libaec_USE_STATIC_LIBS)
+    add_library(libaec::sz STATIC IMPORTED)
+  else ()
+    add_library(libaec::sz SHARED IMPORTED)
+    target_compile_definitions(libaec::sz INTERFACE LIBAEC_SHARED)
+    if (MSVC)
+      set_target_properties(libaec::sz PROPERTIES
+        IMPORTED_IMPLIB "${SZIP_LIBRARY}"
+      )
+    endif ()
+  endif ()
+  set_target_properties(libaec::sz PROPERTIES
+    IMPORTED_LOCATION "${SZIP_LIBRARY}"
+    INTERFACE_INCLUDE_DIRECTORIES "${SZIP_INCLUDE_DIR}"
+  )
 
-# Handle default component(static) :
-if (NOT ${LIBAEC_PACKAGE_NAME}_FIND_COMPONENTS)
-    set (${LIBAEC_PACKAGE_NAME}_FIND_COMPONENTS static)
-    set (${LIBAEC_PACKAGE_NAME}_FIND_REQUIRED_static true)
+  # Set SZIP variables.
+  set(SZIP_FOUND TRUE)
+  set(SZIP_LIBRARIES "${SZIP_LIBRARY}")
 endif ()
 
-# Handle requested components:
-list (REMOVE_DUPLICATES ${LIBAEC_PACKAGE_NAME}_FIND_COMPONENTS)
-foreach (comp IN LISTS ${LIBAEC_PACKAGE_NAME}_FIND_COMPONENTS)
-    list (FIND ${LIBAEC_PACKAGE_NAME}_EXPORT_LIBRARIES "@LIBAEC_LIB_CORENAME@-${comp}" HAVE_COMP)
-    if (${HAVE_COMP} LESS 0)
-      set (${LIBAEC_PACKAGE_NAME}_${comp}_FOUND 0)
-    else ()
-      set (${LIBAEC_PACKAGE_NAME}_${comp}_FOUND 1)
-      string(TOUPPER ${LIBAEC_PACKAGE_NAME}_${comp}_LIBRARY COMP_LIBRARY)
-      set (${COMP_LIBRARY} ${${COMP_LIBRARY}} @LIBAEC_LIB_CORENAME@-${comp})
-    endif ()
-endforeach ()
-
-check_required_components (${LIBAEC_PACKAGE_NAME})
+mark_as_advanced(
+  libaec_LIBRARY
+  libaec_INCLUDE_DIR
+  SZIP_LIBRARY
+  SZIP_INCLUDE_DIR
+)
diff --git a/config/cmake/ZLIB/CMakeLists.txt b/config/cmake/ZLIB/CMakeLists.txt
index e3c90b609d7..d31503b0ac6 100644
--- a/config/cmake/ZLIB/CMakeLists.txt
+++ b/config/cmake/ZLIB/CMakeLists.txt
@@ -1,5 +1,9 @@
-cmake_minimum_required (VERSION 3.12)
-PROJECT (ZLIB C)
+cmake_minimum_required(VERSION 3.12.0)
+set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON)
+
+project(ZLIB C)
+
+set(VERSION "1.3")
 
 #-----------------------------------------------------------------------------
 # Basic ZLIB stuff here
@@ -16,12 +20,6 @@ if (WINDOWS)
   set (HAVE_STDDEF_H 1)
   set (HAVE_SYS_TYPES_H 1)
 endif ()
-#
-# Check for unistd.h
-#
-check_include_file(unistd.h Z_HAVE_UNISTD_H)
-CHECK_FUNCTION_EXISTS (memcpy            HAVE_MEMCPY)
-CHECK_FUNCTION_EXISTS (vsnprintf         HAVE_VSNPRINTF)
 
 #-----------------------------------------------------------------------------
 # Define some CMake variables for use later in the project
@@ -29,66 +27,6 @@ CHECK_FUNCTION_EXISTS (vsnprintf         HAVE_VSNPRINTF)
 set (ZLIB_RESOURCES_DIR          ${HDF_RESOURCES_DIR}/ZLIB)
 set (ZLIB_SRC_DIR                ${ZLIB_SOURCE_DIR})
 
-#-----------------------------------------------------------------------------
-# Set the core names of all the libraries
-#-----------------------------------------------------------------------------
-set (ZLIB_LIB_CORENAME           "zlib")
-
-#-----------------------------------------------------------------------------
-# Set the true names of all the libraries if customized by external project
-#-----------------------------------------------------------------------------
-set (ZLIB_LIB_NAME              "${ZLIB_EXTERNAL_LIB_PREFIX}${ZLIB_LIB_CORENAME}")
-
-#-----------------------------------------------------------------------------
-# Set the target names of all the libraries
-#-----------------------------------------------------------------------------
-set (ZLIB_LIB_TARGET             "${ZLIB_LIB_CORENAME}-static")
-
-set(ZLIB_PC ${CMAKE_CURRENT_BINARY_DIR}/zlib.pc)
-configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/zlib.pc.cmakein ${ZLIB_PC} @ONLY)
-
-#-----------------------------------------------------------------------------
-# Generate the zconf.h file containing user settings needed by compilation
-#-----------------------------------------------------------------------------
-configure_file(${CMAKE_CURRENT_SOURCE_DIR}/zconf.h.cmakein ${CMAKE_CURRENT_BINARY_DIR}/zconf.h @ONLY)
-
-if (DEFINED ADDITIONAL_CMAKE_PREFIX_PATH AND EXISTS "${ADDITIONAL_CMAKE_PREFIX_PATH}")
-  set (CMAKE_PREFIX_PATH ${ADDITIONAL_CMAKE_PREFIX_PATH} ${CMAKE_PREFIX_PATH})
-endif ()
-
-#-----------------------------------------------------------------------------
-# parse the full version number from zlib.h and include in ZLIB_VERS_INFO
-#-----------------------------------------------------------------------------
-file (READ ${ZLIB_SRC_DIR}/zlib.h _zlib_h_contents)
-string (REGEX REPLACE ".*#define[ \t]+ZLIB_VER_MAJOR[ \t]+([0-9]*).*$"
-    "\\1" ZLIB_VERS_MAJOR ${_zlib_h_contents})
-string (REGEX REPLACE ".*#define[ \t]+ZLIB_VER_MINOR[ \t]+([0-9]*).*$"
-    "\\1" ZLIB_VERS_MINOR ${_zlib_h_contents})
-string (REGEX REPLACE ".*#define[ \t]+ZLIB_VER_REVISION[ \t]+([0-9]*).*$"
-    "\\1" ZLIB_VERS_RELEASE ${_zlib_h_contents})
-string (REGEX REPLACE ".*#define[ \t]+ZLIB_VER_SUBREVISION[ \t]+([0-9]*).*$"
-    "\\1" ZLIB_VERS_SUBRELEASE ${_zlib_h_contents})
-#message (STATUS "VERSION: ${ZLIB_VERS_MAJOR}.${ZLIB_VERS_MINOR}.${ZLIB_VERS_RELEASE}-${ZLIB_VERS_SUBRELEASE}")
-string (REGEX REPLACE ".*#define[ \t]+ZLIB_VERSION[ \t]+\"([0-9A-Za-z.]+)\".*"
-    "\\1" ZLIB_FULL_VERSION ${_zlib_h_contents})
-#message (STATUS "VERSION: ${ZLIB_FULL_VERSION}")
-
-#-----------------------------------------------------------------------------
-set (ZLIB_PACKAGE "zlib")
-set (ZLIB_PACKAGE_NAME "ZLIB")
-set (ZLIB_PACKAGE_VERSION "${ZLIB_VERS_MAJOR}.${ZLIB_VERS_MINOR}")
-set (ZLIB_PACKAGE_VERSION_MAJOR "${ZLIB_VERS_MAJOR}.${ZLIB_VERS_MINOR}")
-set (ZLIB_PACKAGE_VERSION_MINOR "${ZLIB_VERS_RELEASE}")
-set (ZLIB_PACKAGE_STRING "${ZLIB_PACKAGE_NAME} ${ZLIB_PACKAGE_VERSION}-${ZLIB_VERS_SUBRELEASE}")
-set (ZLIB_PACKAGE_TARNAME "zlib")
-set (ZLIB_PACKAGE_URL "http://www.hdfgroup.org")
-set (ZLIB_PACKAGE_BUGREPORT "help@hdfgroup.org")
-set (ZLIB_PACKAGE_SOVERSION "${ZLIB_VERS_MAJOR}.${ZLIB_VERS_MINOR}.${ZLIB_VERS_RELEASE}")
-set (ZLIB_PACKAGE_SOVERSION_MAJOR "${ZLIB_VERS_MAJOR}")
-
-
-HDF_DIR_PATHS(${ZLIB_PACKAGE_NAME})
-
 #-----------------------------------------------------------------------------
 # Targets built within this project are exported at Install time for use
 # by other projects
@@ -97,51 +35,9 @@ if (NOT ZLIB_EXPORTED_TARGETS)
   set (ZLIB_EXPORTED_TARGETS "zlib-targets")
 endif ()
 
-#-----------------------------------------------------------------------------
-# To include a library in the list exported by the project AT BUILD TIME,
-# add it to this variable. This is NOT used by Make Install, but for projects
-# which include zlib as a sub-project within their build tree
-#-----------------------------------------------------------------------------
-set_global_variable (ZLIB_LIBRARIES_TO_EXPORT "")
-
 set (CMAKE_POSITION_INDEPENDENT_CODE ON)
 
-#-----------------------------------------------------------------------------
-# When building utility executables that generate other (source) files :
-# we make use of the following variables defined in the root CMakeLists.
-# Certain systems may add /Debug or /Release to output paths
-# and we need to call the executable from inside the CMake configuration
-#-----------------------------------------------------------------------------
-set (EXE_EXT "")
-if (WIN32)
-  set (EXE_EXT ".exe")
-  add_definitions (-D_BIND_TO_CURRENT_VCLIBS_VERSION=1)
-  add_definitions (-D_CRT_SECURE_NO_WARNINGS)
-  add_definitions (-D_CONSOLE)
-  add_definitions (-D_CRT_NONSTDC_NO_DEPRECATE)
-endif ()
-
-if (MSVC)
-  set (CMAKE_MFC_FLAG 0)
-endif ()
-
-#-----------------------------------------------------------------------------
-# Compiler specific flags : Shouldn't there be compiler tests for these
-#-----------------------------------------------------------------------------
-if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
-  set (CMAKE_C_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_C_FLAGS} -Wno-strict-prototypes -Wno-implicit-function-declaration")
-endif ()
-if (CMAKE_C_COMPILER_ID MATCHES "IntelLLVM" OR CMAKE_C_COMPILER_ID MATCHES "[Cc]lang")
-   set (CMAKE_C_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_C_FLAGS} -Wno-implicit-function-declaration")
-endif ()
-
-#-----------------------------------------------------------------------------
-# This is in here to help some of the GCC based IDES like Eclipse
-# and code blocks parse the compiler errors and warnings better.
-#-----------------------------------------------------------------------------
-if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
-  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fmessage-length=0")
-endif ()
+HDF_DIR_PATHS(ZLIB)
 
 #-----------------------------------------------------------------------------
 # All libs/tests/examples need the main include directories
@@ -150,13 +46,79 @@ set_directory_properties(PROPERTIES INCLUDE_DIRECTORIES
     "${ZLIB_BINARY_DIR};${ZLIB_SOURCE_DIR};${CMAKE_RUNTIME_OUTPUT_DIRECTORY}"
 )
 
+include(CheckTypeSize)
+include(CheckFunctionExists)
+include(CheckIncludeFile)
+include(CheckCSourceCompiles)
+
+check_include_file(sys/types.h HAVE_SYS_TYPES_H)
+check_include_file(stdint.h    HAVE_STDINT_H)
+check_include_file(stddef.h    HAVE_STDDEF_H)
+
+#
+# Check to see if we have large file support
+#
+set(CMAKE_REQUIRED_DEFINITIONS -D_LARGEFILE64_SOURCE=1)
+# We add these other definitions here because CheckTypeSize.cmake
+# in CMake 2.4.x does not automatically do so and we want
+# compatibility with CMake 2.4.x.
+if(HAVE_SYS_TYPES_H)
+    list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_SYS_TYPES_H)
+endif()
+if(HAVE_STDINT_H)
+    list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_STDINT_H)
+endif()
+if(HAVE_STDDEF_H)
+    list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_STDDEF_H)
+endif()
+check_type_size(off64_t OFF64_T)
+if(HAVE_OFF64_T)
+   add_definitions(-D_LARGEFILE64_SOURCE=1)
+endif()
+set(CMAKE_REQUIRED_DEFINITIONS) # clear variable
+
+#
+# Check for fseeko
+#
+check_function_exists(fseeko HAVE_FSEEKO)
+if(NOT HAVE_FSEEKO)
+    add_definitions(-DNO_FSEEKO)
+endif()
+
+#
+# Check for unistd.h
+#
+check_include_file(unistd.h Z_HAVE_UNISTD_H)
+
+if(MSVC)
+    set(CMAKE_DEBUG_POSTFIX "d")
+    add_definitions (-D_BIND_TO_CURRENT_VCLIBS_VERSION=1)
+    add_definitions (-D_CRT_SECURE_NO_WARNINGS)
+    add_definitions (-D_CONSOLE)
+    add_definitions(-D_CRT_NONSTDC_NO_DEPRECATE)
+    include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+endif()
+
+if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)
+    # If we're doing an out of source build and the user has a zconf.h
+    # in their source tree...
+    if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h)
+        message(STATUS "Renaming")
+        message(STATUS "    ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h")
+        message(STATUS "to 'zconf.h.included' because this file is included with zlib")
+        message(STATUS "but CMake generates it automatically in the build directory.")
+        file(RENAME ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h.included)
+  endif()
+endif()
+configure_file(	${CMAKE_CURRENT_SOURCE_DIR}/zconf.h.cmakein
+		${CMAKE_CURRENT_BINARY_DIR}/zconf.h @ONLY)
+include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR})
+
+
 #============================================================================
 # zlib
 #============================================================================
 
-#-----------------------------------------------------------------------------
-# Define zlib Library
-#-----------------------------------------------------------------------------
 set(ZLIB_PUBLIC_HDRS
     ${CMAKE_CURRENT_BINARY_DIR}/zconf.h
     zlib.h
@@ -190,77 +152,47 @@ set(ZLIB_SRCS
     zutil.c
 )
 
-if(NOT MINGW)
-    set(ZLIB_DLL_SRCS
-        win32/zlib1.rc # If present will override custom build rule below.
-    )
-endif()
-
-if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
-    if(ASM686)
-        set(ZLIB_ASMS contrib/asm686/match.S)
-    elseif (AMD64)
-        set(ZLIB_ASMS contrib/amd64/amd64-match.S)
-    endif ()
-
-    if(ZLIB_ASMS)
-        add_definitions(-DASMV)
-        set_source_files_properties (${ZLIB_ASMS} PROPERTIES LANGUAGE C COMPILE_FLAGS -DNO_UNDERLINE)
-    endif()
-endif()
-
-if(MSVC)
-    if(ASM686)
-        enable_language(ASM_MASM)
-        set(ZLIB_ASMS
-            contrib/masmx86/inffas32.asm
-            contrib/masmx86/match686.asm
-        )
-    elseif (AMD64)
-        enable_language(ASM_MASM)
-        set(ZLIB_ASMS
-            contrib/masmx64/gvmat64.asm
-            contrib/masmx64/inffasx64.asm
-        )
-    endif()
-
-    if(ZLIB_ASMS)
-        add_definitions(-DASMV -DASMINF)
-    endif()
-endif()
-
-if(MINGW)
-    add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj
-                       COMMAND ${CMAKE_RC_COMPILER}
-                            -D GCC_WINDRES
-                            -I ${CMAKE_CURRENT_SOURCE_DIR}
-                            -I ${CMAKE_CURRENT_BINARY_DIR}
-                            -o ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj
-                            -i ${CMAKE_CURRENT_SOURCE_DIR}/win32/zlib1.rc)
-    set(ZLIB_DLL_SRCS ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj)
-endif()
+# parse the full version number from zlib.h and include in ZLIB_FULL_VERSION
+file(READ ${CMAKE_CURRENT_SOURCE_DIR}/zlib.h _zlib_h_contents)
+string(REGEX REPLACE ".*#define[ \t]+ZLIB_VERSION[ \t]+\"([-0-9A-Za-z.]+)\".*"
+    "\\1" ZLIB_FULL_VERSION ${_zlib_h_contents})
 
-add_library (${ZLIB_LIB_TARGET} STATIC ${ZLIB_SRCS} ${ZLIB_PRIVATE_HDRS} ${ZLIB_PUBLIC_HDRS})
+add_library(zlib-static STATIC ${ZLIB_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})
 if (MSVC AND CMAKE_CL_64)
-  set_target_properties (${ZLIB_LIB_TARGET} PROPERTIES STATIC_LIBRARY_FLAGS "/machine:x64")
+  set_target_properties (zlib-static PROPERTIES STATIC_LIBRARY_FLAGS "/machine:x64")
 endif ()
-target_include_directories(${ZLIB_LIB_TARGET} PRIVATE "${CMAKE_BINARY_DIR}")
-TARGET_C_PROPERTIES (${ZLIB_LIB_TARGET} STATIC)
-target_link_libraries (${ZLIB_LIB_TARGET} PRIVATE ${LINK_LIBS})
-H5_SET_LIB_OPTIONS (${ZLIB_LIB_TARGET} ${ZLIB_LIB_NAME} STATIC 0)
-set_target_properties(${ZLIB_LIB_TARGET} PROPERTIES
+target_include_directories(zlib-static PRIVATE "${CMAKE_BINARY_DIR}")
+set_target_properties(zlib-static PROPERTIES
     PUBLIC_HEADER ""
     LINKER_LANGUAGE C
     INTERFACE_INCLUDE_DIRECTORIES "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include>"
 )
-set_global_variable (ZLIB_LIBRARIES_TO_EXPORT ${ZLIB_LIB_TARGET})
-set (install_targets ${ZLIB_LIB_TARGET})
+set_global_variable (ZLIB_LIBRARIES_TO_EXPORT "zlib-static")
+set (install_targets zlib-static)
+
+#-----------------------------------------------------------------------------
+# Compiler specific flags : Shouldn't there be compiler tests for these
+#-----------------------------------------------------------------------------
+if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
+  target_compile_options(zlib-static PRIVATE -Wno-strict-prototypes -Wno-implicit-function-declaration)
+endif ()
+if (CMAKE_C_COMPILER_ID MATCHES "IntelLLVM" OR CMAKE_C_COMPILER_ID MATCHES "[Cc]lang")
+  target_compile_options(zlib-static PRIVATE -Wno-implicit-function-declaration)
+endif ()
+
+#-----------------------------------------------------------------------------
+# This is in here to help some of the GCC based IDES like Eclipse
+# and code blocks parse the compiler errors and warnings better.
+#-----------------------------------------------------------------------------
+if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
+  target_compile_options(zlib-static PRIVATE -fmessage-length=0)
+endif ()
 
 #-----------------------------------------------------------------------------
 # Add Target(s) to CMake Install for import into other projects
 #-----------------------------------------------------------------------------
 if (ZLIB_EXPORTED_TARGETS)
-  INSTALL_TARGET_PDB (${ZLIB_LIB_TARGET} ${ZLIB_INSTALL_BIN_DIR} libraries)
+  INSTALL_TARGET_PDB (zlib-static ${ZLIB_INSTALL_BIN_DIR} libraries)
 
   install (
       TARGETS
@@ -277,57 +209,6 @@ endif ()
 
 include (CMakePackageConfigHelpers)
 
-#-----------------------------------------------------------------------------
-# Check for Installation Utilities
-#-----------------------------------------------------------------------------
-if (WIN32)
-  set (PF_ENV_EXT "(x86)")
-  find_program (NSIS_EXECUTABLE NSIS.exe PATHS "$ENV{ProgramFiles}\\NSIS" "$ENV{ProgramFiles${PF_ENV_EXT}}\\NSIS")
-  if(NOT CPACK_WIX_ROOT)
-    file(TO_CMAKE_PATH "$ENV{WIX}" CPACK_WIX_ROOT)
-  endif ()
-  find_program (WIX_EXECUTABLE candle  PATHS "${CPACK_WIX_ROOT}/bin")
-endif ()
-
-#-----------------------------------------------------------------------------
-# Add Target(s) to CMake Install for import into other projects
-#-----------------------------------------------------------------------------
-if (NOT ZLIB_EXTERNALLY_CONFIGURED)
-  install (
-      EXPORT ${ZLIB_EXPORTED_TARGETS}
-      DESTINATION ${ZLIB_INSTALL_CMAKE_DIR}
-      FILE ${ZLIB_PACKAGE}${ZLIB_PACKAGE_EXT}-targets.cmake
-      NAMESPACE ${PACKAGE_NAMESPACE}
-      COMPONENT configinstall
-  )
-endif ()
-
-#-----------------------------------------------------------------------------
-# Export all exported targets to the build tree for use by parent project
-#-----------------------------------------------------------------------------
-if (NOT ZLIB_EXTERNALLY_CONFIGURED)
-  export (
-      TARGETS ${ZLIB_LIBRARIES_TO_EXPORT} ${ZLIB_LIB_DEPENDENCIES}
-      FILE ${ZLIB_PACKAGE}${ZLIB_PACKAGE_EXT}-targets.cmake
-      NAMESPACE ${PACKAGE_NAMESPACE}
-  )
-  export (PACKAGE ${ZLIB_PACKAGE}${ZLIB_PACKAGE_EXT})
-endif ()
-
-#-----------------------------------------------------------------------------
-# Set includes needed for build
-#-----------------------------------------------------------------------------
-set (ZLIB_INCLUDES_BUILD_TIME
-    ${ZLIB_SRC_DIR} ${ZLIB_BINARY_DIR}
-)
-
-#-----------------------------------------------------------------------------
-# Set variables needed for installation
-#-----------------------------------------------------------------------------
-set (ZLIB_VERSION_STRING ${ZLIB_PACKAGE_VERSION})
-set (ZLIB_VERSION_MAJOR  ${ZLIB_PACKAGE_VERSION_MAJOR})
-set (ZLIB_VERSION_MINOR  ${ZLIB_PACKAGE_VERSION_MINOR})
-
 #-----------------------------------------------------------------------------
 # Configure the zlib-config.cmake file for the build directory
 #-----------------------------------------------------------------------------
@@ -336,7 +217,7 @@ set (SHARE_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/${ZLIB_INSTALL_CMAKE_DIR}" )
 set (CURRENT_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}" )
 configure_package_config_file (
     ${ZLIB_RESOURCES_DIR}/zlib-config.cmake.in
-    "${ZLIB_BINARY_DIR}/${ZLIB_PACKAGE}${ZLIB_PACKAGE_EXT}-config.cmake"
+    "${ZLIB_BINARY_DIR}/zlib-config.cmake"
     INSTALL_DESTINATION "${ZLIB_INSTALL_CMAKE_DIR}"
     PATH_VARS INCLUDE_INSTALL_DIR SHARE_INSTALL_DIR CURRENT_BUILD_DIR
     INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}"
@@ -350,13 +231,13 @@ set (SHARE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${ZLIB_INSTALL_CMAKE_DIR}" )
 set (CURRENT_BUILD_DIR "${CMAKE_INSTALL_PREFIX}" )
 configure_package_config_file (
     ${ZLIB_RESOURCES_DIR}/zlib-config.cmake.in
-    "${ZLIB_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${ZLIB_PACKAGE}${ZLIB_PACKAGE_EXT}-config.cmake"
+    "${ZLIB_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/zlib-config.cmake"
     INSTALL_DESTINATION "${ZLIB_INSTALL_CMAKE_DIR}"
     PATH_VARS INCLUDE_INSTALL_DIR SHARE_INSTALL_DIR CURRENT_BUILD_DIR
 )
 if (NOT ZLIB_EXTERNALLY_CONFIGURED)
   install (
-      FILES ${ZLIB_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${ZLIB_PACKAGE}${ZLIB_PACKAGE_EXT}-config.cmake
+      FILES ${ZLIB_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/zlib-config.cmake
       DESTINATION ${ZLIB_INSTALL_CMAKE_DIR}
       COMPONENT configinstall
   )
@@ -368,160 +249,37 @@ endif ()
 if (NOT ZLIB_EXTERNALLY_CONFIGURED)
   configure_file (
       ${ZLIB_RESOURCES_DIR}/zlib-config-version.cmake.in
-      ${ZLIB_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${ZLIB_PACKAGE}${ZLIB_PACKAGE_EXT}-config-version.cmake @ONLY
+      ${ZLIB_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/zlib-config-version.cmake @ONLY
   )
   install (
-      FILES ${ZLIB_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${ZLIB_PACKAGE}${ZLIB_PACKAGE_EXT}-config-version.cmake
+      FILES ${ZLIB_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/zlib-config-version.cmake
       DESTINATION ${ZLIB_INSTALL_CMAKE_DIR}
       COMPONENT configinstall
   )
 endif ()
 
 #-----------------------------------------------------------------------------
-# Check for Installation Utilities
-#-----------------------------------------------------------------------------
-if (WIN32)
-  set (PF_ENV_EXT "(x86)")
-  find_program (NSIS_EXECUTABLE NSIS.exe PATHS "$ENV{ProgramFiles}\\NSIS" "$ENV{ProgramFiles${PF_ENV_EXT}}\\NSIS")
-  if(NOT CPACK_WIX_ROOT)
-    file(TO_CMAKE_PATH "$ENV{WIX}" CPACK_WIX_ROOT)
-  endif()
-  find_program (WIX_EXECUTABLE candle  PATHS "${CPACK_WIX_ROOT}/bin")
-endif ()
-
-#-----------------------------------------------------------------------------
-# Configure the LICENSE.txt file for the windows binary package
+# Add Target(s) to CMake Install for import into other projects
 #-----------------------------------------------------------------------------
-if (WIN32)
-  configure_file (${ZLIB_SOURCE_DIR}/LICENSE ${ZLIB_BINARY_DIR}/ZLIB_LICENSE.txt @ONLY)
-else ()
-  configure_file (${ZLIB_SOURCE_DIR}/LICENSE ${ZLIB_BINARY_DIR}/ZLIB_LICENSE @ONLY)
+if (NOT ZLIB_EXTERNALLY_CONFIGURED)
+  install (
+      EXPORT ${ZLIB_EXPORTED_TARGETS}
+      DESTINATION ${ZLIB_INSTALL_CMAKE_DIR}
+      FILE zlib-targets.cmake
+      NAMESPACE ${PACKAGE_NAMESPACE}
+      COMPONENT configinstall
+  )
 endif ()
-configure_file (${ZLIB_SOURCE_DIR}/README ${ZLIB_BINARY_DIR}/ZLIB_README @ONLY)
 
 #-----------------------------------------------------------------------------
-# Set the cpack variables
+# Export all exported targets to the build tree for use by parent project
 #-----------------------------------------------------------------------------
 if (NOT ZLIB_EXTERNALLY_CONFIGURED)
-  set (CPACK_PACKAGE_VENDOR "HDF_Group")
-  set (CPACK_PACKAGE_NAME "${ZLIB_PACKAGE_NAME}")
-  if (NOT WIN32 OR ZLIB_VERS_SUBRELEASE MATCHES "^[0-9]+$")
-    set (CPACK_PACKAGE_VERSION "${ZLIB_PACKAGE_VERSION_STRING}")
-  else ()
-    set (CPACK_PACKAGE_VERSION "${ZLIB_PACKAGE_VERSION}")
-  endif ()
-  set (CPACK_PACKAGE_VERSION_MAJOR "${ZLIB_PACKAGE_VERSION_MAJOR}")
-  set (CPACK_PACKAGE_VERSION_MINOR "${ZLIB_PACKAGE_VERSION_MINOR}")
-  set (CPACK_PACKAGE_VERSION_PATCH "")
-  set (CPACK_RESOURCE_FILE_LICENSE "${ZLIB_BINARY_DIR}/ZLIB_LICENSE")
-  set (CPACK_PACKAGE_DESCRIPTION_FILE "${ZLIB_BINARY_DIR}/ZLIB_README")
-  set (CPACK_RESOURCE_FILE_README "${ZLIB_BINARY_DIR}/ZLIB_README")
-  set (CPACK_PACKAGE_RELOCATABLE TRUE)
-  set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "zlib Installation")
-  set (CPACK_PACKAGE_INSTALL_DIRECTORY "${CPACK_PACKAGE_VENDOR}/${CPACK_PACKAGE_NAME}/${CPACK_PACKAGE_VERSION}")
-
-  set (CPACK_GENERATOR "TGZ")
-  if (WIN32)
-    set (CPACK_GENERATOR "ZIP")
-
-    if (NSIS_EXECUTABLE)
-      list (APPEND CPACK_GENERATOR "NSIS")
-    endif ()
-    # Installers for 32- vs. 64-bit CMake:
-    #  - Root install directory (displayed to end user at installer-run time)
-    #  - "NSIS package/display name" (text used in the installer GUI)
-    #  - Registry key used to store info about the installation
-    set (CPACK_NSIS_PACKAGE_NAME "${ZLIB_PACKAGE_STRING}")
-    if (CMAKE_CL_64)
-      set (CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64")
-      set (CPACK_PACKAGE_INSTALL_REGISTRY_KEY "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION} (Win64)")
-    else ()
-      set (CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES")
-      set (CPACK_PACKAGE_INSTALL_REGISTRY_KEY "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}")
-    endif ()
-    set (CPACK_NSIS_DISPLAY_NAME "${CPACK_NSIS_PACKAGE_NAME}")
-    set (CPACK_PACKAGE_INSTALL_DIRECTORY "${CPACK_PACKAGE_VENDOR}\\\\${CPACK_PACKAGE_NAME}\\\\${CPACK_PACKAGE_VERSION}")
-    set (CPACK_NSIS_CONTACT "${ZLIB_PACKAGE_BUGREPORT}")
-    set (CPACK_NSIS_MODIFY_PATH ON)
-    set (CPACK_NSIS_PACKAGE_NAME "ZLIB ${ZLIB_PACKAGE_VERSION}")
-    if (WIX_EXECUTABLE)
-      list (APPEND CPACK_GENERATOR "WIX")
-    endif ()
-#WiX variables
-    set (CPACK_WIX_UNINSTALL "1")
-    set (CPACK_RESOURCE_FILE_LICENSE "${ZLIB_BINARY_DIR}/ZLIB_LICENSE.txt")
-  elseif (APPLE)
-    list (APPEND CPACK_GENERATOR "STGZ")
-    list (APPEND CPACK_GENERATOR "DragNDrop")
-    set (CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE ON)
-    set (CPACK_PACKAGING_INSTALL_PREFIX "/${CPACK_PACKAGE_INSTALL_DIRECTORY}")
-    #set (CPACK_PACKAGE_ICON "${ZLIB_RESOURCES_DIR}/hdf.icns")
-
-    option (ZLIB_PACK_MACOSX_FRAMEWORK  "Package the ZLIB Library in a Framework" OFF)
-    if (ZLIB_PACK_MACOSX_FRAMEWORK AND ZLIB_BUILD_FRAMEWORKS)
-      set (CPACK_BUNDLE_NAME "${ZLIB_PACKAGE_STRING}")
-      set (CPACK_BUNDLE_LOCATION "/")    # make sure CMAKE_INSTALL_PREFIX ends in /
-      set (CMAKE_INSTALL_PREFIX "/${CPACK_BUNDLE_NAME}.framework/Versions/${CPACK_PACKAGE_VERSION}/${CPACK_PACKAGE_NAME}/")
-      set (CPACK_SHORT_VERSION_STRING "${CPACK_PACKAGE_VERSION}")
-      #-----------------------------------------------------------------------------
-      # Configure the Info.plist file for the install bundle
-      #-----------------------------------------------------------------------------
-      configure_file (
-          ${ZLIB_RESOURCES_DIR}/CPack.Info.plist.in
-          ${ZLIB_BINARY_DIR}/CMakeFiles/Info.plist @ONLY
-      )
-      configure_file (
-          ${ZLIB_RESOURCES_DIR}/PkgInfo.in
-          ${ZLIB_BINARY_DIR}/CMakeFiles/PkgInfo @ONLY
-      )
-      install (
-          FILES ${ZLIB_BINARY_DIR}/CMakeFiles/PkgInfo
-          DESTINATION ..
-      )
-    endif ()
-  else ()
-    list (APPEND CPACK_GENERATOR "STGZ")
-    set (CPACK_PACKAGING_INSTALL_PREFIX "/${CPACK_PACKAGE_INSTALL_DIRECTORY}")
-    set (CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE ON)
-
-    set (CPACK_DEBIAN_PACKAGE_SECTION "Libraries")
-    set (CPACK_DEBIAN_PACKAGE_MAINTAINER "${ZLIB_PACKAGE_BUGREPORT}")
-
-#      list (APPEND CPACK_GENERATOR "RPM")
-    set (CPACK_RPM_PACKAGE_RELEASE "1")
-    set (CPACK_RPM_COMPONENT_INSTALL ON)
-    set (CPACK_RPM_PACKAGE_RELOCATABLE ON)
-  endif ()
-
-  # By default, do not warn when built on machines using only VS Express:
-  if (NOT DEFINED CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS)
-    set (CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS ON)
-  endif ()
-  include (InstallRequiredSystemLibraries)
-
-  set (CPACK_INSTALL_CMAKE_PROJECTS "${ZLIB_BINARY_DIR};ZLIB;libraries;/")
-  set (CPACK_INSTALL_CMAKE_PROJECTS "${ZLIB_BINARY_DIR};ZLIB;configinstall;/")
-
-  set (CPACK_ALL_INSTALL_TYPES Full Developer User)
-  set (CPACK_INSTALL_TYPE_FULL_DISPLAY_NAME "Everything")
-
-  set(CPACK_COMPONENTS_ALL libraries headers documents configinstall)
-
-  include (CPack)
-
-  cpack_add_component_group(Runtime)
-
-  cpack_add_component (libraries
-      DISPLAY_NAME "ZLIB Libraries"
-      REQUIRED
-      GROUP Runtime
-      INSTALL_TYPES Full Developer User
-  )
-  cpack_add_component (configinstall
-      DISPLAY_NAME "ZLIB CMake files"
-      DEPENDS libraries
-      GROUP Development
-      INSTALL_TYPES Full Developer User
+  export (
+      TARGETS ${ZLIB_LIBRARIES_TO_EXPORT}
+      FILE zlib-targets.cmake
+      NAMESPACE ${PACKAGE_NAMESPACE}
   )
-
+  export (PACKAGE zlib)
 endif ()
+
diff --git a/config/cmake/ZLIB/zconf.h.in b/config/cmake/ZLIB/zconf.h.in
index a7f24cce60f..310c43928a2 100644
--- a/config/cmake/ZLIB/zconf.h.in
+++ b/config/cmake/ZLIB/zconf.h.in
@@ -40,6 +40,9 @@
 #  define crc32                 z_crc32
 #  define crc32_combine         z_crc32_combine
 #  define crc32_combine64       z_crc32_combine64
+#  define crc32_combine_gen     z_crc32_combine_gen
+#  define crc32_combine_gen64   z_crc32_combine_gen64
+#  define crc32_combine_op      z_crc32_combine_op
 #  define crc32_z               z_crc32_z
 #  define deflate               z_deflate
 #  define deflateBound          z_deflateBound
@@ -240,7 +243,11 @@
 #endif
 
 #ifdef Z_SOLO
-   typedef unsigned long z_size_t;
+#  ifdef _WIN64
+     typedef unsigned long long z_size_t;
+#  else
+     typedef unsigned long z_size_t;
+#  endif
 #else
 #  define z_longlong long long
 #  if defined(NO_SIZE_T)
@@ -351,6 +358,9 @@
 #    ifdef FAR
 #      undef FAR
 #    endif
+#    ifndef WIN32_LEAN_AND_MEAN
+#      define WIN32_LEAN_AND_MEAN
+#    endif
 #    include <windows.h>
      /* No need for _export, use ZLIB.DEF instead. */
      /* For complete Windows compatibility, use WINAPI, not __stdcall. */
@@ -469,11 +479,18 @@ typedef uLong FAR uLongf;
 #  undef _LARGEFILE64_SOURCE
 #endif
 
-#if defined(__WATCOMC__) && !defined(Z_HAVE_UNISTD_H)
-#  define Z_HAVE_UNISTD_H
+#ifndef Z_HAVE_UNISTD_H
+#  ifdef __WATCOMC__
+#    define Z_HAVE_UNISTD_H
+#  endif
+#endif
+#ifndef Z_HAVE_UNISTD_H
+#  if defined(_LARGEFILE64_SOURCE) && !defined(_WIN32)
+#    define Z_HAVE_UNISTD_H
+#  endif
 #endif
 #ifndef Z_SOLO
-#  if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE)
+#  if defined(Z_HAVE_UNISTD_H)
 #    include <unistd.h>         /* for SEEK_*, off_t, and _LFS64_LARGEFILE */
 #    ifdef VMS
 #      include <unixio.h>       /* for off_t */
@@ -509,7 +526,7 @@ typedef uLong FAR uLongf;
 #if !defined(_WIN32) && defined(Z_LARGE64)
 #  define z_off64_t off64_t
 #else
-#  if defined(_WIN32) && !defined(__GNUC__) && !defined(Z_SOLO)
+#  if defined(_WIN32) && !defined(__GNUC__)
 #    define z_off64_t __int64
 #  else
 #    define z_off64_t z_off_t
diff --git a/config/cmake/ZLIB/zlib-config.cmake.in b/config/cmake/ZLIB/zlib-config.cmake.in
index 9e6ef48fcbe..8815cda00db 100644
--- a/config/cmake/ZLIB/zlib-config.cmake.in
+++ b/config/cmake/ZLIB/zlib-config.cmake.in
@@ -10,7 +10,6 @@ set (${ZLIB_PACKAGE_NAME}_VALID_COMPONENTS static shared)
 #-----------------------------------------------------------------------------
 # User Options
 #-----------------------------------------------------------------------------
-set (${ZLIB_PACKAGE_NAME}_BUILD_SHARED_LIBS    @BUILD_SHARED_LIBS@)
 set (${ZLIB_PACKAGE_NAME}_EXPORT_LIBRARIES     @ZLIB_LIBRARIES_TO_EXPORT@)
 
 #-----------------------------------------------------------------------------
diff --git a/config/cmake/ZLIBNG/CMakeLists.txt b/config/cmake/ZLIBNG/CMakeLists.txt
new file mode 100644
index 00000000000..64e39d7500c
--- /dev/null
+++ b/config/cmake/ZLIBNG/CMakeLists.txt
@@ -0,0 +1,1271 @@
+cmake_minimum_required(VERSION 3.12)
+message(STATUS "Using CMake version ${CMAKE_VERSION}")
+
+# If not specified on the command line, enable C11 as the default
+# Configuration items that affect the global compiler environment standards
+# should be issued before the "project" command.
+if(NOT CMAKE_C_STANDARD)
+    set(CMAKE_C_STANDARD 11)          # The C standard whose features are requested to build this target
+endif()
+if(NOT CMAKE_C_STANDARD_REQUIRED)
+    set(CMAKE_C_STANDARD_REQUIRED ON) # Boolean describing whether the value of C_STANDARD is a requirement
+endif()
+if(NOT CMAKE_C_EXTENSIONS)
+    set(CMAKE_C_EXTENSIONS OFF)       # Boolean specifying whether compiler specific extensions are requested
+endif()
+set(VALID_C_STANDARDS "99" "11")
+if(NOT CMAKE_C_STANDARD IN_LIST VALID_C_STANDARDS)
+    MESSAGE(FATAL_ERROR "CMAKE_C_STANDARD:STRING=${CMAKE_C_STANDARD} not in known standards list\n ${VALID_C_STANDARDS}")
+endif()
+
+# Parse the full version number from zlib.h.in and include in ZLIB_FULL_VERSION
+file(READ ${CMAKE_CURRENT_SOURCE_DIR}/zlib.h.in _zlib_h_contents)
+string(REGEX REPLACE ".*#define[ \t]+ZLIB_VERSION[ \t]+\"([0-9]+.[0-9]+.[0-9]+).*\".*"
+        "\\1" ZLIB_HEADER_VERSION ${_zlib_h_contents})
+string(REGEX REPLACE ".*#define[ \t]+ZLIBNG_VERSION[ \t]+\"([-0-9A-Za-z.]+)\".*"
+        "\\1" ZLIBNG_HEADER_VERSION ${_zlib_h_contents})
+message(STATUS "ZLIB_HEADER_VERSION: ${ZLIB_HEADER_VERSION}")
+message(STATUS "ZLIBNG_HEADER_VERSION: ${ZLIBNG_HEADER_VERSION}")
+
+project(ZLIB VERSION ${ZLIB_HEADER_VERSION} LANGUAGES C)
+
+#-----------------------------------------------------------------------------
+# Basic ZLIB stuff here
+#-----------------------------------------------------------------------------
+set (ZLIB_PACKAGE_EXT ${HDF_PACKAGE_EXT})
+set (HDF_USE_GNU_DIRS ${HDF5_USE_GNU_DIRS})
+set (CMAKE_OSX_ARCHITECTURES ${CMAKE_OSX_ARCHITECTURES})
+set (CMAKE_TOOLCHAIN_FILE ${CMAKE_TOOLCHAIN_FILE})
+set (PACKAGE_NAMESPACE ${HDF_PACKAGE_NAMESPACE})
+
+#-----------------------------------------------------------------------------
+# Define some CMake variables for use later in the project
+#-----------------------------------------------------------------------------
+set (ZLIB_RESOURCES_DIR          ${HDF_RESOURCES_DIR}/ZLIB)
+set (ZLIB_SRC_DIR                ${ZLIB_SOURCE_DIR})
+
+#-----------------------------------------------------------------------------
+# Targets built within this project are exported at Install time for use
+# by other projects
+#-----------------------------------------------------------------------------
+if (NOT ZLIB_EXPORTED_TARGETS)
+  set (ZLIB_EXPORTED_TARGETS "zlib-targets")
+endif ()
+
+set (CMAKE_POSITION_INDEPENDENT_CODE ON)
+
+HDF_DIR_PATHS(ZLIB)
+
+#-----------------------------------------------------------------------------
+# All libs/tests/examples need the main include directories
+#-----------------------------------------------------------------------------
+set_directory_properties(PROPERTIES INCLUDE_DIRECTORIES 
+    "${ZLIB_BINARY_DIR};${ZLIB_SOURCE_DIR};${CMAKE_RUNTIME_OUTPUT_DIRECTORY}"
+)
+
+include(CheckTypeSize)
+include(CheckSymbolExists)
+include(CheckFunctionExists)
+include(CheckIncludeFile)
+include(CheckCSourceCompiles)
+include(CheckCSourceRuns)
+include(CheckCCompilerFlag)
+include(CMakeDependentOption)
+include(FeatureSummary)
+
+include(cmake/detect-arch.cmake)
+include(cmake/detect-install-dirs.cmake)
+include(cmake/detect-coverage.cmake)
+include(cmake/detect-intrinsics.cmake)
+include(cmake/detect-sanitizer.cmake)
+include(cmake/fallback-macros.cmake)
+
+# Make sure we use an appropriate BUILD_TYPE by default, "Release" to be exact
+# this should select the maximum generic optimisation on the current platform (i.e. -O3 for gcc/clang)
+get_property(GENERATOR_IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
+if(NOT GENERATOR_IS_MULTI_CONFIG)
+    if(NOT CMAKE_BUILD_TYPE)
+        set(CMAKE_BUILD_TYPE "Release" CACHE STRING
+            "Choose the type of build, standard options are: Debug Release RelWithDebInfo MinSizeRel."
+            FORCE)
+        add_feature_info(CMAKE_BUILD_TYPE 1 "Build type: ${CMAKE_BUILD_TYPE} (default)")
+    else()
+        add_feature_info(CMAKE_BUILD_TYPE 1 "Build type: ${CMAKE_BUILD_TYPE} (selected)")
+    endif()
+endif()
+
+#
+# Options parsing
+#
+option(WITH_GZFILEOP "Compile with support for gzFile related functions" ON)
+option(ZLIB_COMPAT "Compile with zlib compatible API" ON)
+option(ZLIB_ENABLE_TESTS "Build test binaries" OFF)
+option(ZLIBNG_ENABLE_TESTS "Test zlib-ng specific API" OFF)
+option(WITH_GTEST "Build gtest_zlib" OFF)
+option(WITH_FUZZERS "Build test/fuzz" OFF)
+option(WITH_BENCHMARKS "Build test/benchmarks" OFF)
+option(WITH_BENCHMARK_APPS "Build application benchmarks" OFF)
+option(WITH_OPTIM "Build with optimisation" ON)
+option(WITH_REDUCED_MEM "Reduced memory usage for special cases (reduces performance)" OFF)
+option(WITH_NEW_STRATEGIES "Use new strategies" ON)
+option(WITH_NATIVE_INSTRUCTIONS
+    "Instruct the compiler to use the full instruction set on this host (gcc/clang -march=native)" OFF)
+option(WITH_MAINTAINER_WARNINGS "Build with project maintainer warnings" OFF)
+option(WITH_CODE_COVERAGE "Enable code coverage reporting" OFF)
+option(WITH_INFLATE_STRICT "Build with strict inflate distance checking" OFF)
+option(WITH_INFLATE_ALLOW_INVALID_DIST "Build with zero fill for inflate invalid distances" OFF)
+option(WITH_UNALIGNED "Support unaligned reads on platforms that support it" ON)
+
+set(ZLIB_SYMBOL_PREFIX "" CACHE STRING "Give this prefix to all publicly exported symbols.
+Useful when embedding into a larger library.
+Default is no prefix (empty prefix).")
+
+# Add multi-choice option
+set(WITH_SANITIZER AUTO CACHE STRING "Enable sanitizer support")
+set_property(CACHE WITH_SANITIZER PROPERTY STRINGS "Memory" "Address" "Undefined" "Thread")
+
+if(BASEARCH_ARM_FOUND)
+    option(WITH_ACLE "Build with ACLE" ON)
+    option(WITH_NEON "Build with NEON intrinsics" ON)
+    cmake_dependent_option(WITH_ARMV6 "Build with ARMv6 SIMD" ON "NOT ARCH STREQUAL \"aarch64\"" OFF)
+elseif(BASEARCH_PPC_FOUND)
+    option(WITH_ALTIVEC "Build with AltiVec (VMX) optimisations for PowerPC" ON)
+    option(WITH_POWER8 "Build with optimisations for POWER8" ON)
+    option(WITH_POWER9 "Build with optimisations for POWER9" ON)
+elseif(BASEARCH_RISCV_FOUND)
+    option(WITH_RVV "Build with RVV intrinsics" ON)
+elseif(BASEARCH_S360_FOUND)
+    option(WITH_DFLTCC_DEFLATE "Build with DFLTCC intrinsics for compression on IBM Z" OFF)
+    option(WITH_DFLTCC_INFLATE "Build with DFLTCC intrinsics for decompression on IBM Z" OFF)
+    option(WITH_CRC32_VX "Build with vectorized CRC32 on IBM Z" ON)
+elseif(BASEARCH_X86_FOUND)
+    option(WITH_AVX2 "Build with AVX2" ON)
+    option(WITH_AVX512 "Build with AVX512" ON)
+    option(WITH_AVX512VNNI "Build with AVX512 VNNI extensions" ON)
+    option(WITH_SSE2 "Build with SSE2" ON)
+    option(WITH_SSSE3 "Build with SSSE3" ON)
+    option(WITH_SSE42 "Build with SSE42" ON)
+    option(WITH_PCLMULQDQ "Build with PCLMULQDQ" ON)
+    option(WITH_VPCLMULQDQ "Build with VPCLMULQDQ" ON)
+endif()
+
+option(INSTALL_UTILS "Copy minigzip and minideflate during install" OFF)
+
+mark_as_advanced(FORCE
+    ZLIB_SYMBOL_PREFIX
+    WITH_REDUCED_MEM
+    WITH_ACLE WITH_NEON
+    WITH_ARMV6
+    WITH_DFLTCC_DEFLATE
+    WITH_DFLTCC_INFLATE
+    WITH_CRC32_VX
+    WITH_AVX2 WITH_SSE2
+    WITH_SSSE3 WITH_SSE42
+    WITH_PCLMULQDQ
+    WITH_ALTIVEC
+    WITH_POWER8
+    WITH_POWER9
+    WITH_RVV
+    WITH_INFLATE_STRICT
+    WITH_INFLATE_ALLOW_INVALID_DIST
+    WITH_UNALIGNED
+    INSTALL_UTILS
+    )
+
+if(ZLIB_COMPAT)
+    add_definitions(-DZLIB_COMPAT)
+    set(WITH_GZFILEOP ON)
+    set(SUFFIX "")
+    set(ZLIB_FULL_VERSION ${ZLIB_HEADER_VERSION}.zlib-ng)
+    set(EXPORT_NAME ZLIB)
+else()
+    set(SUFFIX "-ng")
+    set(ZLIB_FULL_VERSION ${ZLIBNG_HEADER_VERSION})
+    set(EXPORT_NAME zlib-ng)
+endif()
+
+if(WITH_GZFILEOP)
+    add_definitions(-DWITH_GZFILEOP)
+endif()
+
+if(CMAKE_C_COMPILER_ID MATCHES "^Intel")
+    if(CMAKE_HOST_UNIX)
+        set(WARNFLAGS -Wall)
+        set(WARNFLAGS_MAINTAINER -Wall -Wcheck -Wremarks)
+        set(WARNFLAGS_DISABLE)
+    else()
+        set(WARNFLAGS /Wall)
+        set(WARNFLAGS_MAINTAINER /W5)
+        set(WARNFLAGS_DISABLE)
+    endif()
+elseif(MSVC)
+    # Minimum supported MSVC version is 1800 = Visual Studio 12.0/2013
+    # See also https://cmake.org/cmake/help/latest/variable/MSVC_VERSION.html
+    if(MSVC_VERSION VERSION_LESS 1800)
+        message(SEND_ERROR "Unsupported Visual Studio compiler version (requires 2013 or later).")
+    endif()
+    # TODO. ICC can be used through MSVC. I'm not sure if we'd ever see that combination
+    # (who'd use cmake from an IDE...) but checking for ICC before checking for MSVC should
+    # avoid mistakes.
+    # /Oi ?
+    set(WARNFLAGS /W3)
+    set(WARNFLAGS_MAINTAINER /W4)
+    set(WARNFLAGS_DISABLE)
+    if(BASEARCH_ARM_FOUND)
+        add_definitions(-D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE)
+        if(NOT "${ARCH}" MATCHES "aarch64")
+            set(NEONFLAG "/arch:VFPv4")
+        endif()
+    endif()
+elseif(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang")
+    # Enable warnings in GCC and Clang
+    set(WARNFLAGS -Wall)
+    set(WARNFLAGS_MAINTAINER -Wextra)
+    set(WARNFLAGS_DISABLE)
+    # Check whether -fno-lto is available
+    set(CMAKE_REQUIRED_FLAGS "-fno-lto")
+    check_c_source_compiles(
+        "int main() { return 0; }"
+        FNO_LTO_AVAILABLE FAIL_REGEX "not supported")
+    set(CMAKE_REQUIRED_FLAGS)
+    if(FNO_LTO_AVAILABLE)
+        set(ZNOLTOFLAG "-fno-lto")
+    endif()
+    if(NOT WITH_NATIVE_INSTRUCTIONS)
+        if(BASEARCH_ARM_FOUND)
+            if("${ARCH}" MATCHES "arm" AND NOT CMAKE_C_FLAGS MATCHES "-mfloat-abi")
+                # Auto-detect support for ARM floating point ABI
+                check_include_file(features.h HAVE_FEATURES_H)
+                if(HAVE_FEATURES_H)
+                    set(CMAKE_REQUIRED_FLAGS -mfloat-abi=softfp)
+                    check_c_source_compiles(
+                        "#include <features.h>
+                        int main() { return 0; }"
+                        HAVE_FLOATABI_SOFTFP)
+                    if(HAVE_FLOATABI_SOFTFP)
+                        set(FLOATABI -mfloat-abi=softfp)
+                    else()
+                        set(CMAKE_REQUIRED_FLAGS -mfloat-abi=hard)
+                        check_c_source_compiles(
+                            "#include <features.h>
+                            int main() { return 0; }"
+                            HAVE_FLOATABI_HARD)
+                        if(HAVE_FLOATABI_HARD)
+                            set(FLOATABI -mfloat-abi=hard)
+                        endif()
+                    endif()
+                    set(CMAKE_REQUIRED_FLAGS)
+                endif()
+                if(FLOATABI)
+                    message(STATUS "ARM floating point arch: ${FLOATABI}")
+                    add_compile_options(${FLOATABI})
+                else()
+                    message(STATUS "ARM floating point arch not auto-detected")
+                endif()
+            endif()
+        endif()
+        # Disable LTO unless Native Instructions are enabled
+        if(FNO_LTO_AVAILABLE)
+            set(NOLTOFLAG ${ZNOLTOFLAG})
+        endif()
+    endif()
+    if(MINGW)
+        # Add `-Wno-pedantic-ms-format` only if the toolchain supports it
+        check_c_compiler_flag(-Wno-pedantic-ms-format HAVE_NO_PEDANTIC_MS_FORMAT)
+        if(HAVE_NO_PEDANTIC_MS_FORMAT)
+            list(APPEND WARNFLAGS_DISABLE -Wno-pedantic-ms-format)
+        endif()
+    endif()
+endif()
+
+# Set native march/mcpu
+if(WITH_NATIVE_INSTRUCTIONS)
+    if(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang")
+        check_c_compiler_flag(-march=native HAVE_MARCH_NATIVE)
+        if(HAVE_MARCH_NATIVE)
+            set(NATIVEFLAG "-march=native")
+        else()
+            check_c_compiler_flag(-mcpu=native HAVE_MCPU_NATIVE)
+            if(HAVE_MCPU_NATIVE)
+                set(NATIVEFLAG "-mcpu=native")
+            endif()
+        endif()
+        # Fall through
+    endif()
+    if(NATIVEFLAG)
+        # Apply flag to all source files and compilation checks
+        add_compile_options(${NATIVEFLAG})
+    else()
+        message(STATUS "Ignoring WITH_NATIVE_INSTRUCTIONS; not implemented yet on this configuration")
+        set(WITH_NATIVE_INSTRUCTIONS OFF)
+    endif()
+endif()
+
+# Force disable LTO if WITH_NATIVE_INSTRUCTIONS is not active
+if(NOT WITH_NATIVE_INSTRUCTIONS)
+    set(CMAKE_INTERPROCEDURAL_OPTIMIZATION OFF)
+    foreach(_cfg_name IN LISTS CMAKE_CONFIGURATION_TYPES)
+        string(TOUPPER "${_cfg_name}" _cfg_name_uc)
+        set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_${_cfg_name_uc} OFF)
+    endforeach()
+endif()
+
+# Set architecture alignment requirements
+if(NOT WITH_UNALIGNED)
+    add_definitions(-DNO_UNALIGNED)
+    message(STATUS "Unaligned reads manually disabled")
+endif()
+
+# Apply warning compiler flags
+if(WITH_MAINTAINER_WARNINGS)
+    add_compile_options(${WARNFLAGS} ${WARNFLAGS_MAINTAINER} ${WARNFLAGS_DISABLE})
+else()
+    add_compile_options(${WARNFLAGS} ${WARNFLAGS_DISABLE})
+endif()
+
+# Set code coverage compiler flags
+if(WITH_CODE_COVERAGE)
+    add_code_coverage()
+endif()
+
+# Replace optimization level 3 added by default with level 2
+if(NOT WITH_CODE_COVERAGE AND NOT MSVC AND NOT CMAKE_C_FLAGS MATCHES "([\\/\\-]O)3")
+    string(REGEX REPLACE "([\\/\\-]O)3" "\\12"
+        CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
+endif()
+
+#
+# Check for standard/system includes
+#
+check_include_file(arm_acle.h  HAVE_ARM_ACLE_H)
+if(HAVE_ARM_ACLE_H)
+    add_definitions(-DHAVE_ARM_ACLE_H)
+endif()
+check_include_file(sys/auxv.h  HAVE_SYS_AUXV_H)
+if(HAVE_SYS_AUXV_H)
+    add_definitions(-DHAVE_SYS_AUXV_H)
+endif()
+check_include_file(sys/sdt.h   HAVE_SYS_SDT_H)
+if(HAVE_SYS_SDT_H)
+    add_definitions(-DHAVE_SYS_SDT_H)
+endif()
+check_include_file(unistd.h    HAVE_UNISTD_H)
+
+#
+# Check to see if we have large file support
+#
+set(CMAKE_REQUIRED_DEFINITIONS -D_LARGEFILE64_SOURCE=1 -D__USE_LARGEFILE64)
+check_type_size(off64_t OFF64_T)
+if(HAVE_OFF64_T)
+    add_definitions(-D_LARGEFILE64_SOURCE=1 -D__USE_LARGEFILE64)
+else()
+    check_type_size(_off64_t _OFF64_T)
+    if(HAVE__OFF64_T)
+        add_definitions(-D_LARGEFILE64_SOURCE=1 -D__USE_LARGEFILE64)
+    else()
+        check_type_size(__off64_t __OFF64_T)
+    endif()
+endif()
+set(CMAKE_REQUIRED_DEFINITIONS) # clear variable
+
+#
+# Check for fseeko and other optional functions
+#
+check_function_exists(fseeko HAVE_FSEEKO)
+if(NOT HAVE_FSEEKO)
+    add_definitions(-DNO_FSEEKO)
+endif()
+
+check_function_exists(strerror HAVE_STRERROR)
+if(NOT HAVE_STRERROR)
+    add_definitions(-DNO_STRERROR)
+endif()
+
+set(CMAKE_REQUIRED_DEFINITIONS -D_POSIX_C_SOURCE=200112L)
+check_symbol_exists(posix_memalign stdlib.h HAVE_POSIX_MEMALIGN)
+if(HAVE_POSIX_MEMALIGN)
+    add_definitions(-DHAVE_POSIX_MEMALIGN)
+endif()
+set(CMAKE_REQUIRED_DEFINITIONS)
+
+set(CMAKE_REQUIRED_DEFINITIONS -D_ISOC11_SOURCE=1)
+check_symbol_exists(aligned_alloc stdlib.h HAVE_ALIGNED_ALLOC)
+if(HAVE_ALIGNED_ALLOC)
+    add_definitions(-DHAVE_ALIGNED_ALLOC)
+endif()
+set(CMAKE_REQUIRED_DEFINITIONS)
+
+if(WITH_SANITIZER STREQUAL "Address")
+    add_address_sanitizer()
+elseif(WITH_SANITIZER STREQUAL "Memory")
+    add_memory_sanitizer()
+elseif(WITH_SANITIZER STREQUAL "Thread")
+    add_thread_sanitizer()
+elseif(WITH_SANITIZER STREQUAL "Undefined")
+    add_undefined_sanitizer()
+endif()
+
+#
+# Check whether compiler supports -fno-semantic-interposition parameter
+#
+check_c_compiler_flag(-fno-semantic-interposition HAVE_NO_INTERPOSITION)
+
+#
+# Check if we can hide zlib internal symbols that are linked between separate source files using hidden
+#
+check_c_source_compiles(
+    "#define Z_INTERNAL __attribute__((visibility (\"hidden\")))
+    int Z_INTERNAL foo;
+    int main() {
+        return 0;
+    }"
+    HAVE_ATTRIBUTE_VISIBILITY_HIDDEN FAIL_REGEX "visibility")
+if(HAVE_ATTRIBUTE_VISIBILITY_HIDDEN)
+    add_definitions(-DHAVE_VISIBILITY_HIDDEN)
+endif()
+
+#
+# Check if we can hide zlib internal symbols that are linked between separate source files using internal
+#
+check_c_source_compiles(
+    "#define Z_INTERNAL __attribute__((visibility (\"internal\")))
+    int Z_INTERNAL foo;
+    int main() {
+        return 0;
+    }"
+    HAVE_ATTRIBUTE_VISIBILITY_INTERNAL FAIL_REGEX "visibility")
+if(HAVE_ATTRIBUTE_VISIBILITY_INTERNAL)
+    add_definitions(-DHAVE_VISIBILITY_INTERNAL)
+endif()
+
+#
+# Check for __attribute__((aligned(x))) support in the compiler
+#
+check_c_source_compiles(
+    "int main(void) {
+        __attribute__((aligned(8))) int test = 0;
+        (void)test;
+        return 0;
+    }"
+    HAVE_ATTRIBUTE_ALIGNED FAIL_REGEX "aligned")
+if(HAVE_ATTRIBUTE_ALIGNED)
+    add_definitions(-DHAVE_ATTRIBUTE_ALIGNED)
+endif()
+
+#
+# check for __builtin_ctz() support in the compiler
+#
+check_c_source_compiles(
+    "int main(void) {
+        unsigned int zero = 0;
+        long test = __builtin_ctz(zero);
+        (void)test;
+        return 0;
+    }"
+    HAVE_BUILTIN_CTZ
+)
+if(HAVE_BUILTIN_CTZ)
+    add_definitions(-DHAVE_BUILTIN_CTZ)
+endif()
+
+#
+# check for __builtin_ctzll() support in the compiler
+#
+check_c_source_compiles(
+    "int main(void) {
+        unsigned int zero = 0;
+        long test = __builtin_ctzll(zero);
+        (void)test;
+        return 0;
+    }"
+    HAVE_BUILTIN_CTZLL
+)
+if(HAVE_BUILTIN_CTZLL)
+    add_definitions(-DHAVE_BUILTIN_CTZLL)
+endif()
+
+#
+# check for ptrdiff_t support
+#
+check_c_source_compiles(
+    "#include <stddef.h>
+     int main() {
+         ptrdiff_t *a;
+         (void)a;
+         return 0;
+    }"
+    HAVE_PTRDIFF_T
+)
+if(NOT HAVE_PTRDIFF_T)
+    set(NEED_PTRDIFF_T 1)
+
+    check_type_size("void *" SIZEOF_DATA_PTR)
+    message(STATUS "sizeof(void *) is ${SIZEOF_DATA_PTR} bytes")
+
+    if(${SIZEOF_DATA_PTR} MATCHES "4")
+        set(PTRDIFF_TYPE "uint32_t")
+    elseif(${SIZEOF_DATA_PTR} MATCHES "8")
+        set(PTRDIFF_TYPE "uint64_t")
+    else()
+        message(FATAL_ERROR "sizeof(void *) is neither 32 nor 64 bit")
+    endif()
+endif()
+
+add_compile_options($<$<CONFIG:Debug>:-DZLIB_DEBUG>)
+
+if(MSVC)
+    set(CMAKE_DEBUG_POSTFIX "d")
+    add_definitions (-D_BIND_TO_CURRENT_VCLIBS_VERSION=1)
+    add_definitions (-D_CRT_SECURE_NO_WARNINGS)
+    add_definitions (-D_CONSOLE)
+    add_definitions(-D_CRT_NONSTDC_NO_DEPRECATE)
+    add_definitions(-D_CRT_SECURE_NO_DEPRECATE)
+    include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+endif()
+
+if(BASEARCH_X86_FOUND)
+    # FORCE_SSE2 option will only be shown if HAVE_SSE2_INTRIN is true
+    if("${ARCH}" MATCHES "i[3-6]86")
+        cmake_dependent_option(FORCE_SSE2 "Always assume CPU is SSE2 capable" OFF "HAVE_SSE2_INTRIN" OFF)
+    endif()
+endif()
+
+#
+# Enable deflate_quick at level 1
+#
+if(NOT WITH_NEW_STRATEGIES)
+    add_definitions(-DNO_QUICK_STRATEGY)
+endif()
+#
+# Enable deflate_medium at level 4-6
+#
+if(NOT WITH_NEW_STRATEGIES)
+    add_definitions(-DNO_MEDIUM_STRATEGY)
+endif()
+#
+# Enable inflate compilation options
+#
+if(WITH_INFLATE_STRICT)
+    add_definitions(-DINFLATE_STRICT)
+    message(STATUS "Inflate strict distance checking enabled")
+endif()
+if(WITH_INFLATE_ALLOW_INVALID_DIST)
+    add_definitions(-DINFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR)
+    message(STATUS "Inflate zero data for invalid distances enabled")
+endif()
+#
+# Enable reduced memory configuration
+#
+if(WITH_REDUCED_MEM)
+    add_definitions(-DHASH_SIZE=32768u -DGZBUFSIZE=8192)
+    message(STATUS "Configured for reduced memory environment")
+endif()
+
+
+set(ZLIB_ARCH_SRCS)
+set(ZLIB_ARCH_HDRS)
+set(ARCHDIR "arch/generic")
+if(BASEARCH_ARM_FOUND)
+    set(ARCHDIR "arch/arm")
+elseif(BASEARCH_PPC_FOUND)
+    set(ARCHDIR "arch/power")
+elseif(BASEARCH_RISCV_FOUND)
+    set(ARCHDIR "arch/riscv")
+elseif(BASEARCH_S360_FOUND)
+    set(ARCHDIR "arch/s390")
+elseif(BASEARCH_X86_FOUND)
+    set(ARCHDIR "arch/x86")
+    if(NOT ${ARCH} MATCHES "x86_64")
+        add_feature_info(SSE2 1 "Support the SSE2 instruction set, using \"${SSE2FLAG}\"")
+    endif()
+else()
+    message(STATUS "No optimized architecture: using ${ARCHDIR}")
+endif()
+
+if(WITH_OPTIM)
+    if(BASEARCH_ARM_FOUND)
+        add_definitions(-DARM_FEATURES)
+        if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
+            if("${ARCH}" MATCHES "aarch64")
+                check_c_source_compiles(
+                    "#include <sys/auxv.h>
+                    int main() {
+                        return (getauxval(AT_HWCAP) & HWCAP_CRC32);
+                    }"
+                    ARM_AUXV_HAS_CRC32
+                )
+                if(ARM_AUXV_HAS_CRC32)
+                    add_definitions(-DARM_AUXV_HAS_CRC32)
+                else()
+                   message(STATUS "HWCAP_CRC32 not present in sys/auxv.h; cannot detect support at runtime.")
+                endif()
+            else()
+                check_c_source_compiles(
+                    "#include <sys/auxv.h>
+                    int main() {
+                        return (getauxval(AT_HWCAP2) & HWCAP2_CRC32);
+                    }"
+                    ARM_AUXV_HAS_CRC32
+                )
+                if(ARM_AUXV_HAS_CRC32)
+                    add_definitions(-DARM_AUXV_HAS_CRC32)
+                else()
+                    check_c_source_compiles(
+                        "#include <sys/auxv.h>
+                        #include <asm/hwcap.h>
+                        int main() {
+                            return (getauxval(AT_HWCAP2) & HWCAP2_CRC32);
+                        }"
+                        ARM_HWCAP_HAS_CRC32
+                    )
+                    if (ARM_HWCAP_HAS_CRC32)
+                        add_definitions(-DARM_AUXV_HAS_CRC32 -DARM_ASM_HWCAP)
+                    else()
+                        message(STATUS "HWCAP2_CRC32 not present in sys/auxv.h; cannot detect support at runtime.")
+                    endif()
+                endif()
+                check_c_source_compiles(
+                    "#include <sys/auxv.h>
+                    int main() {
+                      return (getauxval(AT_HWCAP) & HWCAP_ARM_NEON);
+                    }"
+                    ARM_AUXV_HAS_NEON
+                )
+                if(ARM_AUXV_HAS_NEON)
+                    add_definitions(-DARM_AUXV_HAS_NEON)
+                else()
+                    check_c_source_compiles(
+                        "#include <sys/auxv.h>
+                        int main() {
+                          return (getauxval(AT_HWCAP) & HWCAP_NEON);
+                        }"
+                        ARM_AUXV_HAS_NEON
+                    )
+                    if (ARM_AUXV_HAS_NEON)
+                        add_definitions(-DARM_AUXV_HAS_NEON)
+                    else()
+                        message(STATUS "Neither HWCAP_ARM_NEON or HWCAP_NEON present in sys/auxv.h; cannot detect support at runtime.")
+                    endif()
+                endif()
+            endif()
+        endif()
+        list(APPEND ZLIB_ARCH_HDRS ${ARCHDIR}/arm_features.h)
+        list(APPEND ZLIB_ARCH_SRCS ${ARCHDIR}/arm_features.c)
+        if(WITH_ACLE)
+            check_acle_compiler_flag()
+            if(HAVE_ACLE_FLAG)
+                add_definitions(-DARM_ACLE)
+                set(ACLE_SRCS ${ARCHDIR}/crc32_acle.c ${ARCHDIR}/insert_string_acle.c)
+                set_property(SOURCE ${ACLE_SRCS} PROPERTY COMPILE_FLAGS "${ACLEFLAG} ${NOLTOFLAG}")
+                list(APPEND ZLIB_ARCH_SRCS ${ACLE_SRCS})
+                add_feature_info(ACLE_CRC 1 "Support ACLE optimized CRC hash generation, using \"${ACLEFLAG}\"")
+            else()
+                set(WITH_ACLE OFF)
+            endif()
+        else()
+            set(WITH_ACLE OFF)
+        endif()
+        if(WITH_NEON)
+            check_neon_compiler_flag()
+            if(NEON_AVAILABLE)
+                add_definitions(-DARM_NEON)
+                set(NEON_SRCS ${ARCHDIR}/adler32_neon.c ${ARCHDIR}/chunkset_neon.c
+                    ${ARCHDIR}/compare256_neon.c ${ARCHDIR}/slide_hash_neon.c)
+                list(APPEND ZLIB_ARCH_SRCS ${NEON_SRCS})
+                set_property(SOURCE ${NEON_SRCS} PROPERTY COMPILE_FLAGS "${NEONFLAG} ${NOLTOFLAG}")
+                if(MSVC)
+                    add_definitions(-D__ARM_NEON__)
+                endif()
+                add_feature_info(NEON_ADLER32 1 "Support NEON instructions in adler32, using \"${NEONFLAG}\"")
+                add_feature_info(NEON_SLIDEHASH 1 "Support NEON instructions in slide_hash, using \"${NEONFLAG}\"")
+                check_neon_ld4_intrinsics()
+                if(NEON_HAS_LD4)
+                    add_definitions(-DARM_NEON_HASLD4)
+                endif()
+            else()
+                set(WITH_NEON OFF)
+            endif()
+        endif()
+        if(WITH_ARMV6)
+            check_armv6_compiler_flag()
+            if(HAVE_ARMV6_INLINE_ASM OR HAVE_ARMV6_INTRIN)
+                add_definitions(-DARM_SIMD)
+                set(ARMV6_SRCS ${ARCHDIR}/slide_hash_armv6.c)
+                set_property(SOURCE ${ARMV6_SRCS} PROPERTY COMPILE_FLAGS "${ARMV6FLAG} ${NOLTOFLAG}")
+                list(APPEND ZLIB_ARCH_SRCS ${ARMV6_SRCS})
+                add_feature_info(ARMV6 1 "Support ARMv6 SIMD instructions in slide_hash, using \"${ARMV6FLAG}\"")
+                if(HAVE_ARMV6_INTRIN)
+                    add_definitions(-DARM_SIMD_INTRIN)
+                endif()
+            else()
+                set(WITH_ARMV6 OFF)
+            endif()
+        else()
+            set(WITH_ARMV6 OFF)
+        endif()
+    elseif(BASEARCH_PPC_FOUND)
+        # Common arch detection code
+        if(WITH_ALTIVEC)
+            check_ppc_intrinsics()
+        endif()
+        if(WITH_POWER8)
+            check_power8_intrinsics()
+        endif()
+        if(WITH_POWER9)
+            check_power9_intrinsics()
+        endif()
+        if(HAVE_VMX OR HAVE_POWER8_INTRIN OR HAVE_POWER9_INTRIN)
+            add_definitions(-DPOWER_FEATURES)
+            list(APPEND ZLIB_ARCH_HDRS ${ARCHDIR}/power_features.h)
+            list(APPEND ZLIB_ARCH_SRCS ${ARCHDIR}/power_features.c)
+        endif()
+        # VMX specific options and files
+        if(WITH_ALTIVEC)
+            if(HAVE_VMX)
+                add_definitions(-DPPC_FEATURES)
+                if(HAVE_ALTIVEC)
+                    add_definitions(-DPPC_VMX)
+                    set(PPC_SRCS ${ARCHDIR}/adler32_vmx.c ${ARCHDIR}/slide_hash_vmx.c)
+                    list(APPEND ZLIB_ARCH_SRCS ${PPC_SRCS})
+                    add_feature_info(ALTIVEC 1 "Support the AltiVec instruction set, using \"-maltivec\"")
+                    set_property(SOURCE ${PPC_SRCS} PROPERTY COMPILE_FLAGS "${PPCFLAGS}")
+                else()
+                    set(WITH_ALTIVEC OFF)
+                endif()
+            endif()
+        endif()
+        # Power8 specific options and files
+        if(WITH_POWER8)
+            if(HAVE_POWER8_INTRIN)
+                add_definitions(-DPOWER8_VSX)
+                set(POWER8_SRCS ${ARCHDIR}/adler32_power8.c ${ARCHDIR}/chunkset_power8.c ${ARCHDIR}/slide_hash_power8.c)
+                if("${ARCH}" MATCHES "powerpc64(le)?")
+                    add_definitions(-DPOWER8_VSX_CRC32)
+                    list(APPEND POWER8_SRCS ${ARCHDIR}/crc32_power8.c)
+                endif()
+                list(APPEND ZLIB_ARCH_SRCS ${POWER8_SRCS})
+                set_property(SOURCE ${POWER8_SRCS} PROPERTY COMPILE_FLAGS "${POWER8FLAG} ${NOLTOFLAG}")
+            else()
+                set(WITH_POWER8 OFF)
+            endif()
+        endif()
+        # Power9 specific options and files
+        if(WITH_POWER9)
+            if(HAVE_POWER9_INTRIN)
+                add_definitions(-DPOWER9)
+                set(POWER9_SRCS ${ARCHDIR}/compare256_power9.c)
+                list(APPEND ZLIB_ARCH_SRCS ${POWER9_SRCS})
+                set_property(SOURCE ${POWER9_SRCS} PROPERTY COMPILE_FLAGS "${POWER9FLAG} ${NOLTOFLAG}")
+            else()
+                set(WITH_POWER9 OFF)
+            endif()
+        endif()
+    elseif(BASEARCH_RISCV_FOUND)
+        if(WITH_RVV)
+            check_rvv_intrinsics()
+            if(HAVE_RVV_INTRIN)
+                add_definitions(-DRISCV_FEATURES)
+                add_definitions(-DRISCV_RVV)
+                list(APPEND ZLIB_ARCH_HDRS ${ARCHDIR}/riscv_features.h)
+                list(APPEND ZLIB_ARCH_SRCS ${ARCHDIR}/riscv_features.c)
+                # FIXME: we will not set compile flags for riscv_features.c when
+                # the kernels update hwcap or hwprobe for riscv
+                set(RVV_SRCS ${ARCHDIR}/riscv_features.c ${ARCHDIR}/adler32_rvv.c ${ARCHDIR}/chunkset_rvv.c ${ARCHDIR}/compare256_rvv.c ${ARCHDIR}/slide_hash_rvv.c)
+                list(APPEND ZLIB_ARCH_SRCS ${RVV_SRCS})
+                set_property(SOURCE ${RVV_SRCS} PROPERTY COMPILE_FLAGS "${RISCVFLAG} ${NOLTOFLAG}")
+            else()
+                set(WITH_RVV OFF)
+            endif()
+        endif()
+    elseif(BASEARCH_S360_FOUND)
+        check_s390_intrinsics()
+        if(HAVE_S390_INTRIN)
+            add_definitions(-DS390_FEATURES)
+            list(APPEND ZLIB_ARCH_HDRS ${ARCHDIR}/s390_features.h)
+            list(APPEND ZLIB_ARCH_SRCS ${ARCHDIR}/s390_features.c)
+        endif()
+        if(WITH_DFLTCC_DEFLATE OR WITH_DFLTCC_INFLATE)
+            list(APPEND ZLIB_ARCH_SRCS ${ARCHDIR}/dfltcc_common.c)
+        endif()
+        if(WITH_DFLTCC_DEFLATE)
+            add_definitions(-DS390_DFLTCC_DEFLATE)
+            list(APPEND ZLIB_ARCH_SRCS ${ARCHDIR}/dfltcc_deflate.c)
+        endif()
+        if(WITH_DFLTCC_INFLATE)
+            add_definitions(-DS390_DFLTCC_INFLATE)
+            list(APPEND ZLIB_ARCH_SRCS ${ARCHDIR}/dfltcc_inflate.c)
+        endif()
+        if(WITH_CRC32_VX)
+            check_vgfma_intrinsics()
+            if(HAVE_VGFMA_INTRIN)
+                add_definitions(-DS390_CRC32_VX)
+                set(CRC32_VX_SRCS ${ARCHDIR}/crc32-vx.c)
+                list(APPEND ZLIB_ARCH_SRCS ${CRC32_VX_SRCS})
+                set_property(SOURCE ${CRC32_VX_SRCS} PROPERTY COMPILE_FLAGS "${VGFMAFLAG} ${NOLTOFLAG}")
+            else()
+                set(WITH_CRC32_VX OFF)
+            endif()
+        endif()
+    elseif(BASEARCH_X86_FOUND)
+        add_definitions(-DX86_FEATURES)
+        list(APPEND ZLIB_ARCH_HDRS ${ARCHDIR}/x86_features.h)
+        list(APPEND ZLIB_ARCH_SRCS ${ARCHDIR}/x86_features.c)
+        if(MSVC)
+            list(APPEND ZLIB_ARCH_HDRS fallback_builtins.h)
+        endif()
+        if(WITH_AVX2)
+            check_avx2_intrinsics()
+            if(HAVE_AVX2_INTRIN)
+                add_definitions(-DX86_AVX2)
+                set(AVX2_SRCS ${ARCHDIR}/slide_hash_avx2.c)
+                add_feature_info(AVX2_SLIDEHASH 1 "Support AVX2 optimized slide_hash, using \"${AVX2FLAG}\"")
+                list(APPEND AVX2_SRCS ${ARCHDIR}/chunkset_avx2.c)
+                add_feature_info(AVX2_CHUNKSET 1 "Support AVX2 optimized chunkset, using \"${AVX2FLAG}\"")
+                list(APPEND AVX2_SRCS ${ARCHDIR}/compare256_avx2.c)
+                add_feature_info(AVX2_COMPARE256 1 "Support AVX2 optimized compare256, using \"${AVX2FLAG}\"")
+                list(APPEND AVX2_SRCS ${ARCHDIR}/adler32_avx2.c)
+                add_feature_info(AVX2_ADLER32 1 "Support AVX2-accelerated adler32, using \"${AVX2FLAG}\"")
+                list(APPEND ZLIB_ARCH_SRCS ${AVX2_SRCS})
+                set_property(SOURCE ${AVX2_SRCS} PROPERTY COMPILE_FLAGS "${AVX2FLAG} ${NOLTOFLAG}")
+            else()
+                set(WITH_AVX2 OFF)
+            endif()
+        endif()
+        if(WITH_AVX512)
+            check_avx512_intrinsics()
+            if(HAVE_AVX512_INTRIN)
+                add_definitions(-DX86_AVX512)
+                list(APPEND AVX512_SRCS ${ARCHDIR}/adler32_avx512.c)
+                add_feature_info(AVX512_ADLER32 1 "Support AVX512-accelerated adler32, using \"${AVX512FLAG}\"")
+                list(APPEND ZLIB_ARCH_SRCS ${AVX512_SRCS})
+                list(APPEND ZLIB_ARCH_HDRS ${ARCHDIR}/adler32_avx512_p.h)
+                if(HAVE_MASK_INTRIN)
+                    add_definitions(-DX86_MASK_INTRIN)
+                endif()
+                set_property(SOURCE ${AVX512_SRCS} PROPERTY COMPILE_FLAGS "${AVX512FLAG} ${NOLTOFLAG}")
+            else()
+                set(WITH_AVX512 OFF)
+            endif()
+        endif()
+        if(WITH_AVX512VNNI)
+            check_avx512vnni_intrinsics()
+            if(HAVE_AVX512VNNI_INTRIN)
+                add_definitions(-DX86_AVX512VNNI)
+                add_feature_info(AVX512VNNI_ADLER32 1 "Support AVX512VNNI adler32, using \"${AVX512VNNIFLAG}\"")
+                list(APPEND AVX512VNNI_SRCS ${ARCHDIR}/adler32_avx512_vnni.c)
+                list(APPEND ZLIB_ARCH_SRCS ${AVX512VNNI_SRCS})
+                set_property(SOURCE ${AVX512VNNI_SRCS} PROPERTY COMPILE_FLAGS "${AVX512VNNIFLAG} ${NOLTOFLAG}")
+            else()
+                set(WITH_AVX512VNNI OFF)
+            endif()
+        endif()
+        if(WITH_SSE42)
+            check_sse42_intrinsics()
+            if(HAVE_SSE42_INTRIN)
+                add_definitions(-DX86_SSE42)
+                set(SSE42_SRCS ${ARCHDIR}/adler32_sse42.c ${ARCHDIR}/insert_string_sse42.c)
+                add_feature_info(SSE42_CRC 1 "Support SSE4.2 optimized CRC hash generation, using \"${SSE42FLAG}\"")
+                list(APPEND ZLIB_ARCH_SRCS ${SSE42_SRCS})
+                set_property(SOURCE ${SSE42_SRCS} PROPERTY COMPILE_FLAGS "${SSE42FLAG} ${NOLTOFLAG}")
+            else()
+                set(WITH_SSE42 OFF)
+            endif()
+        endif()
+        if(WITH_SSE2)
+            check_sse2_intrinsics()
+            if(HAVE_SSE2_INTRIN)
+                add_definitions(-DX86_SSE2)
+                set(SSE2_SRCS ${ARCHDIR}/chunkset_sse2.c ${ARCHDIR}/compare256_sse2.c ${ARCHDIR}/slide_hash_sse2.c)
+                list(APPEND ZLIB_ARCH_SRCS ${SSE2_SRCS})
+                if(NOT ${ARCH} MATCHES "x86_64")
+                    set_property(SOURCE ${SSE2_SRCS} PROPERTY COMPILE_FLAGS "${SSE2FLAG} ${NOLTOFLAG}")
+                    add_feature_info(FORCE_SSE2 FORCE_SSE2 "Assume CPU is SSE2 capable")
+                    if(FORCE_SSE2)
+                        add_definitions(-DX86_NOCHECK_SSE2)
+                    endif()
+                endif()
+            else()
+                set(WITH_SSE2 OFF)
+            endif()
+        endif()
+        if(WITH_SSSE3)
+            check_ssse3_intrinsics()
+            if(HAVE_SSSE3_INTRIN)
+                add_definitions(-DX86_SSSE3)
+                set(SSSE3_SRCS ${ARCHDIR}/adler32_ssse3.c ${ARCHDIR}/chunkset_ssse3.c)
+                add_feature_info(SSSE3_ADLER32 1 "Support SSSE3-accelerated adler32, using \"${SSSE3FLAG}\"")
+                list(APPEND ZLIB_ARCH_SRCS ${SSSE3_SRCS})
+                set_property(SOURCE ${SSSE3_SRCS} PROPERTY COMPILE_FLAGS "${SSSE3FLAG} ${NOLTOFLAG}")
+            else()
+                set(WITH_SSSE3 OFF)
+            endif()
+        endif()
+        if(WITH_PCLMULQDQ AND WITH_SSSE3 AND WITH_SSE42)
+            check_pclmulqdq_intrinsics()
+            if(HAVE_PCLMULQDQ_INTRIN AND HAVE_SSSE3_INTRIN)
+                add_definitions(-DX86_PCLMULQDQ_CRC)
+                set(PCLMULQDQ_SRCS ${ARCHDIR}/crc32_pclmulqdq.c)
+                add_feature_info(PCLMUL_CRC 1 "Support CRC hash generation using PCLMULQDQ, using \"${SSSE3FLAG} ${SSE42FLAG} ${PCLMULFLAG}\"")
+                list(APPEND ZLIB_ARCH_SRCS ${PCLMULQDQ_SRCS})
+                set_property(SOURCE ${PCLMULQDQ_SRCS} PROPERTY COMPILE_FLAGS "${SSSE3FLAG} ${SSE42FLAG} ${PCLMULFLAG} ${NOLTOFLAG}")
+
+                if(WITH_VPCLMULQDQ AND WITH_AVX512)
+                    check_vpclmulqdq_intrinsics()
+                    if(HAVE_VPCLMULQDQ_INTRIN AND HAVE_AVX512_INTRIN)
+                        add_definitions(-DX86_VPCLMULQDQ_CRC)
+                        set(VPCLMULQDQ_SRCS ${ARCHDIR}/crc32_vpclmulqdq.c)
+                        add_feature_info(VPCLMUL_CRC 1 "Support CRC hash generation using VPCLMULQDQ, using \"${VPCLMULFLAG} ${AVX512FLAG}\"")
+                        list(APPEND ZLIB_ARCH_SRCS ${VPCLMULQDQ_SRCS})
+                        set_property(SOURCE ${VPCLMULQDQ_SRCS} PROPERTY COMPILE_FLAGS "${SSSE3FLAG} ${SSE42FLAG} ${PCLMULFLAG} ${VPCLMULFLAG} ${AVX512FLAG} ${NOLTOFLAG}")
+                    else()
+                        set(WITH_VPCLMULQDQ OFF)
+                    endif()
+                else()
+                    set(WITH_VPCLMULQDQ OFF)
+                endif()
+            else()
+                set(WITH_PCLMULQDQ OFF)
+                set(WITH_VPCLMULQDQ OFF)
+            endif()
+        else()
+            set(WITH_PCLMULQDQ OFF)
+            set(WITH_VPCLMULQDQ OFF)
+        endif()
+        check_xsave_intrinsics()
+        if(HAVE_XSAVE_INTRIN)
+            add_feature_info(XSAVE 1 "Support XSAVE intrinsics using \"${XSAVEFLAG}\"")
+            set_property(SOURCE ${ARCHDIR}/x86_features.c PROPERTY COMPILE_FLAGS "${XSAVEFLAG}")
+        endif()
+    endif()
+endif()
+
+message(STATUS "Architecture-specific source files: ${ZLIB_ARCH_SRCS}")
+
+#============================================================================
+# zconf.h
+#============================================================================
+
+macro(generate_cmakein input output)
+    file(REMOVE ${output})
+    file(STRINGS ${input} _lines)
+    foreach(_line IN LISTS _lines)
+        string(REGEX REPLACE "#ifdef HAVE_UNISTD_H.*" "@ZCONF_UNISTD_LINE@" _line "${_line}")
+        string(REGEX REPLACE "#ifdef NEED_PTRDIFF_T.*" "@ZCONF_PTRDIFF_LINE@" _line "${_line}")
+        if(NEED_PTRDIFF_T)
+            string(REGEX REPLACE "typedef PTRDIFF_TYPE" "typedef @PTRDIFF_TYPE@" _line "${_line}")
+        endif()
+        file(APPEND ${output} "${_line}\n")
+    endforeach()
+endmacro(generate_cmakein)
+
+generate_cmakein( ${CMAKE_CURRENT_SOURCE_DIR}/zconf${SUFFIX}.h.in ${CMAKE_CURRENT_BINARY_DIR}/zconf${SUFFIX}.h.cmakein )
+
+if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)
+    # If we're doing an out of source build and the user has a zconf.h
+    # in their source tree...
+    if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/zconf${SUFFIX}.h)
+        message(STATUS "Renaming")
+        message(STATUS "    ${CMAKE_CURRENT_SOURCE_DIR}/zconf${SUFFIX}.h")
+        message(STATUS "to 'zconf${SUFFIX}.h.included' because this file is included with zlib")
+        message(STATUS "but CMake generates it automatically in the build directory.")
+        file(RENAME ${CMAKE_CURRENT_SOURCE_DIR}/zconf${SUFFIX}.h ${CMAKE_CURRENT_SOURCE_DIR}/zconf${SUFFIX}.h.included)
+    endif()
+
+    # If we're doing an out of source build and the user has a zconf.h.cmakein
+    # in their source tree...
+    if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/zconf${SUFFIX}.h.cmakein)
+        message(STATUS "Renaming")
+        message(STATUS "    ${CMAKE_CURRENT_SOURCE_DIR}/zconf${SUFFIX}.h.cmakein")
+        message(STATUS "to 'zconf${SUFFIX}.h.cmakeincluded' because this file is included with zlib")
+        message(STATUS "but CMake generates it automatically in the build directory.")
+        file(RENAME ${CMAKE_CURRENT_SOURCE_DIR}/zconf${SUFFIX}.h.cmakein ${CMAKE_CURRENT_SOURCE_DIR}/zconf${SUFFIX}.h.cmakeincluded)
+    endif()
+endif()
+
+
+#============================================================================
+# zlib
+#============================================================================
+
+set(ZLIB_PUBLIC_HDRS
+    ${CMAKE_CURRENT_BINARY_DIR}/zconf${SUFFIX}.h
+    ${CMAKE_CURRENT_BINARY_DIR}/zlib_name_mangling${SUFFIX}.h
+    ${CMAKE_CURRENT_BINARY_DIR}/zlib${SUFFIX}.h
+)
+set(ZLIB_PRIVATE_HDRS
+    adler32_p.h
+    chunkset_tpl.h
+    compare256_rle.h
+    cpu_features.h
+    crc32_braid_p.h
+    crc32_braid_comb_p.h
+    crc32_braid_tbl.h
+    crc32_fold.h
+    deflate.h
+    deflate_p.h
+    functable.h
+    inffast_tpl.h
+    inffixed_tbl.h
+    inflate.h
+    inflate_p.h
+    inftrees.h
+    insert_string_tpl.h
+    match_tpl.h
+    trees.h
+    trees_emit.h
+    trees_tbl.h
+    zbuild.h
+    zendian.h
+    zutil.h
+)
+set(ZLIB_SRCS
+    adler32.c
+    adler32_fold.c
+    chunkset.c
+    compare256.c
+    compress.c
+    cpu_features.c
+    crc32_braid.c
+    crc32_braid_comb.c
+    crc32_fold.c
+    deflate.c
+    deflate_fast.c
+    deflate_huff.c
+    deflate_medium.c
+    deflate_quick.c
+    deflate_rle.c
+    deflate_slow.c
+    deflate_stored.c
+    functable.c
+    infback.c
+    inflate.c
+    inftrees.c
+    insert_string.c
+    insert_string_roll.c
+    slide_hash.c
+    trees.c
+    uncompr.c
+    zutil.c
+)
+
+set(ZLIB_GZFILE_PRIVATE_HDRS
+    gzguts.h
+)
+set(ZLIB_GZFILE_SRCS
+    gzlib.c
+    ${CMAKE_CURRENT_BINARY_DIR}/gzread.c
+    gzwrite.c
+)
+
+set(ZLIB_ALL_SRCS ${ZLIB_SRCS} ${ZLIB_ARCH_HDRS} ${ZLIB_ARCH_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})
+if(WITH_GZFILEOP)
+    list(APPEND ZLIB_ALL_SRCS ${ZLIB_GZFILE_PRIVATE_HDRS} ${ZLIB_GZFILE_SRCS})
+endif()
+
+add_library(zlib-static STATIC ${ZLIB_ALL_SRCS})
+target_include_directories(zlib-static PRIVATE "${CMAKE_BINARY_DIR}")
+
+# INFO: Mimics official zlib CMake target
+# Generates ZLIB.cmake in case ZLIB_COMPAT=ON and always exports the CMake target ZLIB::ZLIB
+# In case ZLIB_COMPAT=OFF, the CMake target and file follows zlib-ng naming convention
+if (ZLIB_COMPAT)
+  set_target_properties(zlib-static PROPERTIES EXPORT_NAME ZLIB)
+endif()
+set_global_variable (ZLIB_LIBRARIES_TO_EXPORT "zlib-static")
+set (install_targets zlib-static)
+
+#-----------------------------------------------------------------------------
+# Compiler specific flags : Shouldn't there be compiler tests for these
+#-----------------------------------------------------------------------------
+if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
+  target_compile_options(zlib-static PRIVATE -Wno-strict-prototypes -Wno-implicit-function-declaration)
+endif ()
+if (CMAKE_C_COMPILER_ID MATCHES "IntelLLVM" OR CMAKE_C_COMPILER_ID MATCHES "[Cc]lang")
+  target_compile_options(zlib-static PRIVATE -Wno-implicit-function-declaration)
+endif ()
+
+foreach(ZLIB_INSTALL_LIBRARY ${ZLIB_INSTALL_LIBRARIES})
+    if(NOT ZLIB_COMPAT)
+        target_compile_definitions(${ZLIB_INSTALL_LIBRARY} PUBLIC ZLIBNG_NATIVE_API)
+    endif()
+    target_include_directories(${ZLIB_INSTALL_LIBRARY} PUBLIC
+        "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}$<SEMICOLON>${CMAKE_CURRENT_SOURCE_DIR}>"
+        "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>")
+endforeach()
+
+set_target_properties(zlib-static PROPERTIES OUTPUT_NAME zlib-static${SUFFIX})
+
+if(HAVE_UNISTD_H)
+  SET(ZCONF_UNISTD_LINE "#if 1    /* was set to #if 1 by configure/cmake/etc */")
+else()
+  SET(ZCONF_UNISTD_LINE "#if 0    /* was set to #if 0 by configure/cmake/etc */")
+endif()
+if(NEED_PTRDIFF_T)
+    SET(ZCONF_PTRDIFF_LINE "#if 1    /* was set to #if 1 by configure/cmake/etc */")
+else()
+    SET(ZCONF_PTRDIFF_LINE "#ifdef NEED_PTRDIFF_T    /* may be set to #if 1 by configure/cmake/etc */")
+endif()
+
+if(WITH_GZFILEOP)
+    set(PKG_CONFIG_CFLAGS "-DWITH_GZFILEOP")
+endif()
+configure_file(${CMAKE_CURRENT_BINARY_DIR}/zconf${SUFFIX}.h.cmakein
+    ${CMAKE_CURRENT_BINARY_DIR}/zconf${SUFFIX}.h @ONLY)
+configure_file(${CMAKE_CURRENT_SOURCE_DIR}/zlib${SUFFIX}.h.in
+    ${CMAKE_CURRENT_BINARY_DIR}/zlib${SUFFIX}.h @ONLY)
+configure_file(${CMAKE_CURRENT_SOURCE_DIR}/gzread.c.in
+    ${CMAKE_CURRENT_BINARY_DIR}/gzread.c @ONLY)
+
+if (NOT ZLIB_SYMBOL_PREFIX STREQUAL "")
+    add_feature_info(ZLIB_SYMBOL_PREFIX ON "Publicly exported symbols have a custom prefix")
+    configure_file(${CMAKE_CURRENT_SOURCE_DIR}/zlib_name_mangling${SUFFIX}.h.in
+        ${CMAKE_CURRENT_BINARY_DIR}/zlib_name_mangling${SUFFIX}.h @ONLY)
+else()
+    add_feature_info(ZLIB_SYMBOL_PREFIX OFF "Publicly exported symbols DO NOT have a custom prefix")
+    configure_file(${CMAKE_CURRENT_SOURCE_DIR}/zlib_name_mangling.h.empty
+        ${CMAKE_CURRENT_BINARY_DIR}/zlib_name_mangling${SUFFIX}.h COPYONLY)
+endif()
+# add_definitions(-DZLIB_SYMBOL_PREFIX=${ZLIB_SYMBOL_PREFIX}) # not needed
+
+#-----------------------------------------------------------------------------
+# Add Target(s) to CMake Install for import into other projects
+#-----------------------------------------------------------------------------
+if (ZLIB_EXPORTED_TARGETS)
+  INSTALL_TARGET_PDB (zlib-static ${ZLIB_INSTALL_BIN_DIR} libraries)
+
+  install (
+      TARGETS
+          ${install_targets}
+      EXPORT
+          ${ZLIB_EXPORTED_TARGETS}
+      LIBRARY DESTINATION ${ZLIB_INSTALL_LIB_DIR} COMPONENT libraries
+      ARCHIVE DESTINATION ${ZLIB_INSTALL_LIB_DIR} COMPONENT libraries
+      RUNTIME DESTINATION ${ZLIB_INSTALL_BIN_DIR} COMPONENT libraries
+      FRAMEWORK DESTINATION ${ZLIB_INSTALL_FWRK_DIR} COMPONENT libraries
+      PUBLIC_HEADER DESTINATION ${ZLIB_INSTALL_INCLUDE_DIR} COMPONENT headers
+  )
+endif ()
+
+include (CMakePackageConfigHelpers)
+
+#-----------------------------------------------------------------------------
+# Configure the zlib-config.cmake file for the build directory
+#-----------------------------------------------------------------------------
+set (INCLUDE_INSTALL_DIR ${ZLIB_INSTALL_INCLUDE_DIR})
+set (SHARE_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/${ZLIB_INSTALL_CMAKE_DIR}" )
+set (CURRENT_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}" )
+configure_package_config_file (
+    ${ZLIB_RESOURCES_DIR}/zlib-config.cmake.in
+    "${ZLIB_BINARY_DIR}/zlib-config.cmake"
+    INSTALL_DESTINATION "${ZLIB_INSTALL_CMAKE_DIR}"
+    PATH_VARS INCLUDE_INSTALL_DIR SHARE_INSTALL_DIR CURRENT_BUILD_DIR
+    INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}"
+)
+
+#-----------------------------------------------------------------------------
+# Configure the zlib-config.cmake file for the install directory
+#-----------------------------------------------------------------------------
+set (INCLUDE_INSTALL_DIR ${ZLIB_INSTALL_INCLUDE_DIR})
+set (SHARE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${ZLIB_INSTALL_CMAKE_DIR}" )
+set (CURRENT_BUILD_DIR "${CMAKE_INSTALL_PREFIX}" )
+configure_package_config_file (
+    ${ZLIB_RESOURCES_DIR}/zlib-config.cmake.in
+    "${ZLIB_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/zlib-config.cmake"
+    INSTALL_DESTINATION "${ZLIB_INSTALL_CMAKE_DIR}"
+    PATH_VARS INCLUDE_INSTALL_DIR SHARE_INSTALL_DIR CURRENT_BUILD_DIR
+)
+if (NOT ZLIB_EXTERNALLY_CONFIGURED)
+  install (
+      FILES ${ZLIB_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/zlib-config.cmake
+      DESTINATION ${ZLIB_INSTALL_CMAKE_DIR}
+      COMPONENT configinstall
+  )
+endif ()
+
+#-----------------------------------------------------------------------------
+# Configure the ZLIB-config-version.cmake file for the install directory
+#-----------------------------------------------------------------------------
+if (NOT ZLIB_EXTERNALLY_CONFIGURED)
+  configure_file (
+      ${ZLIB_RESOURCES_DIR}/zlib-config-version.cmake.in
+      ${ZLIB_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/zlib-config-version.cmake @ONLY
+  )
+  install (
+      FILES ${ZLIB_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/zlib-config-version.cmake
+      DESTINATION ${ZLIB_INSTALL_CMAKE_DIR}
+      COMPONENT configinstall
+  )
+endif ()
+
+#-----------------------------------------------------------------------------
+# Add Target(s) to CMake Install for import into other projects
+#-----------------------------------------------------------------------------
+if (NOT ZLIB_EXTERNALLY_CONFIGURED)
+  install (
+      EXPORT ${ZLIB_EXPORTED_TARGETS}
+      DESTINATION ${ZLIB_INSTALL_CMAKE_DIR}
+      FILE zlib-targets.cmake
+      NAMESPACE ${PACKAGE_NAMESPACE}
+      COMPONENT configinstall
+  )
+endif ()
+
+#-----------------------------------------------------------------------------
+# Export all exported targets to the build tree for use by parent project
+#-----------------------------------------------------------------------------
+if (NOT ZLIB_EXTERNALLY_CONFIGURED)
+  export (
+      TARGETS ${ZLIB_LIBRARIES_TO_EXPORT}
+      FILE zlib-targets.cmake
+      NAMESPACE ${PACKAGE_NAMESPACE}
+  )
+  export (PACKAGE zlib)
+endif ()
+
+add_feature_info(WITH_GZFILEOP WITH_GZFILEOP "Compile with support for gzFile related functions")
+add_feature_info(ZLIB_COMPAT ZLIB_COMPAT "Compile with zlib compatible API")
+add_feature_info(ZLIB_ENABLE_TESTS ZLIB_ENABLE_TESTS "Build test binaries")
+add_feature_info(ZLIBNG_ENABLE_TESTS ZLIBNG_ENABLE_TESTS "Test zlib-ng specific API")
+add_feature_info(WITH_SANITIZER WITH_SANITIZER "Enable sanitizer support")
+add_feature_info(WITH_GTEST WITH_GTEST "Build gtest_zlib")
+add_feature_info(WITH_FUZZERS WITH_FUZZERS "Build test/fuzz")
+add_feature_info(WITH_BENCHMARKS WITH_BENCHMARKS "Build test/benchmarks")
+add_feature_info(WITH_BENCHMARK_APPS WITH_BENCHMARK_APPS "Build application benchmarks")
+add_feature_info(WITH_OPTIM WITH_OPTIM "Build with optimisation")
+add_feature_info(WITH_NEW_STRATEGIES WITH_NEW_STRATEGIES "Use new strategies")
+add_feature_info(WITH_NATIVE_INSTRUCTIONS WITH_NATIVE_INSTRUCTIONS
+    "Instruct the compiler to use the full instruction set on this host (gcc/clang -march=native)")
+add_feature_info(WITH_MAINTAINER_WARNINGS WITH_MAINTAINER_WARNINGS "Build with project maintainer warnings")
+add_feature_info(WITH_CODE_COVERAGE WITH_CODE_COVERAGE "Enable code coverage reporting")
+add_feature_info(WITH_INFLATE_STRICT WITH_INFLATE_STRICT "Build with strict inflate distance checking")
+add_feature_info(WITH_INFLATE_ALLOW_INVALID_DIST WITH_INFLATE_ALLOW_INVALID_DIST "Build with zero fill for inflate invalid distances")
+
+if(BASEARCH_ARM_FOUND)
+    add_feature_info(WITH_ACLE WITH_ACLE "Build with ACLE")
+    add_feature_info(WITH_NEON WITH_NEON "Build with NEON intrinsics")
+    add_feature_info(WITH_ARMV6 WITH_ARMV6 "Build with ARMv6 SIMD")
+elseif(BASEARCH_PPC_FOUND)
+    add_feature_info(WITH_ALTIVEC WITH_ALTIVEC "Build with AltiVec optimisations")
+    add_feature_info(WITH_POWER8 WITH_POWER8 "Build with optimisations for POWER8")
+    add_feature_info(WITH_POWER9 WITH_POWER9 "Build with optimisations for POWER9")
+elseif(BASEARCH_RISCV_FOUND)
+    add_feature_info(WITH_RVV WITH_RVV "Build with RVV intrinsics")
+elseif(BASEARCH_S360_FOUND)
+    add_feature_info(WITH_DFLTCC_DEFLATE WITH_DFLTCC_DEFLATE "Build with DFLTCC intrinsics for compression on IBM Z")
+    add_feature_info(WITH_DFLTCC_INFLATE WITH_DFLTCC_INFLATE "Build with DFLTCC intrinsics for decompression on IBM Z")
+    add_feature_info(WITH_CRC32_VX WITH_CRC32_VX "Build with vectorized CRC32 on IBM Z")
+elseif(BASEARCH_X86_FOUND)
+    add_feature_info(WITH_AVX2 WITH_AVX2 "Build with AVX2")
+    add_feature_info(WITH_AVX512 WITH_AVX512 "Build with AVX512")
+    add_feature_info(WITH_AVX512VNNI WITH_AVX512VNNI "Build with AVX512 VNNI")
+    add_feature_info(WITH_SSE2 WITH_SSE2 "Build with SSE2")
+    add_feature_info(WITH_SSSE3 WITH_SSSE3 "Build with SSSE3")
+    add_feature_info(WITH_SSE42 WITH_SSE42 "Build with SSE42")
+    add_feature_info(WITH_PCLMULQDQ WITH_PCLMULQDQ "Build with PCLMULQDQ")
+    add_feature_info(WITH_VPCLMULQDQ WITH_VPCLMULQDQ "Build with VPCLMULQDQ")
+endif()
+
+add_feature_info(INSTALL_UTILS INSTALL_UTILS "Copy minigzip and minideflate during install")
+
+FEATURE_SUMMARY(WHAT ALL INCLUDE_QUIET_PACKAGES)
+
diff --git a/config/cmake/ZLIBNG/CPack.Info.plist.in b/config/cmake/ZLIBNG/CPack.Info.plist.in
new file mode 100644
index 00000000000..08d371bd5d9
--- /dev/null
+++ b/config/cmake/ZLIBNG/CPack.Info.plist.in
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+  <key>CFBundleDevelopmentRegion</key>
+  <string>English</string>
+  <key>CFBundleExecutable</key>
+  <string>@CPACK_PACKAGE_FILE_NAME@</string>
+  <key>CFBundleIconFile</key>
+  <string>@CPACK_BUNDLE_ICON@</string>
+  <key>CFBundleIdentifier</key>
+  <string>org.@CPACK_PACKAGE_VENDOR@.@CPACK_PACKAGE_NAME@@CPACK_MODULE_VERSION_SUFFIX@</string>
+  <key>CFBundleInfoDictionaryVersion</key>
+  <string>6.0</string>
+  <key>CFBundlePackageType</key>
+  <string>FMWK</string>
+  <key>CFBundleSignature</key>
+  <string>????</string>
+  <key>CFBundleVersion</key>
+  <string>@CPACK_PACKAGE_VERSIO@</string>
+  <key>CFBundleShortVersionString</key>
+  <string>@CPACK_SHORT_VERSION_STRING@</string>
+  <key>CSResourcesFileMapped</key>
+  <true/>
+</dict>
+</plist>
diff --git a/config/cmake/ZLIBNG/zconf.h.in b/config/cmake/ZLIBNG/zconf.h.in
new file mode 100644
index 00000000000..7a6e281e849
--- /dev/null
+++ b/config/cmake/ZLIBNG/zconf.h.in
@@ -0,0 +1,206 @@
+/* zconf.h -- configuration of the zlib compression library
+ * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#ifndef ZCONF_H
+#define ZCONF_H
+
+#include "zlib_name_mangling.h"
+
+#if !defined(_WIN32) && defined(__WIN32__)
+#  define _WIN32
+#endif
+
+/* Clang macro for detecting declspec support
+ * https://clang.llvm.org/docs/LanguageExtensions.html#has-declspec-attribute
+ */
+#ifndef __has_declspec_attribute
+#  define __has_declspec_attribute(x) 0
+#endif
+
+#if defined(ZLIB_CONST) && !defined(z_const)
+#  define z_const const
+#else
+#  define z_const
+#endif
+
+/* Maximum value for memLevel in deflateInit2 */
+#ifndef MAX_MEM_LEVEL
+#  define MAX_MEM_LEVEL 9
+#endif
+
+/* Maximum value for windowBits in deflateInit2 and inflateInit2.
+ * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files
+ * created by gzip. (Files created by minigzip can still be extracted by
+ * gzip.)
+ */
+#ifndef MIN_WBITS
+#  define MIN_WBITS   8  /* 256 LZ77 window */
+#endif
+#ifndef MAX_WBITS
+#  define MAX_WBITS   15 /* 32K LZ77 window */
+#endif
+
+/* The memory requirements for deflate are (in bytes):
+            (1 << (windowBits+2)) +  (1 << (memLevel+9))
+ that is: 128K for windowBits=15  +  128K for memLevel = 8  (default values)
+ plus a few kilobytes for small objects. For example, if you want to reduce
+ the default memory requirements from 256K to 128K, compile with
+     make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7"
+ Of course this will generally degrade compression (there's no free lunch).
+
+   The memory requirements for inflate are (in bytes) 1 << windowBits
+ that is, 32K for windowBits=15 (default value) plus about 7 kilobytes
+ for small objects.
+*/
+
+/* Type declarations */
+
+
+#ifndef OF /* function prototypes */
+#  define OF(args)  args
+#endif
+
+#ifdef ZLIB_INTERNAL
+#  define Z_INTERNAL ZLIB_INTERNAL
+#endif
+
+/* If building or using zlib as a DLL, define ZLIB_DLL.
+ * This is not mandatory, but it offers a little performance increase.
+ */
+#if defined(ZLIB_DLL) && (defined(_WIN32) || (__has_declspec_attribute(dllexport) && __has_declspec_attribute(dllimport)))
+#  ifdef Z_INTERNAL
+#    define Z_EXTERN extern __declspec(dllexport)
+#  else
+#    define Z_EXTERN extern __declspec(dllimport)
+#  endif
+#endif
+
+/* If building or using zlib with the WINAPI/WINAPIV calling convention,
+ * define ZLIB_WINAPI.
+ * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI.
+ */
+#if defined(ZLIB_WINAPI) && defined(_WIN32)
+#  ifndef WIN32_LEAN_AND_MEAN
+#    define WIN32_LEAN_AND_MEAN
+#  endif
+#  include <windows.h>
+   /* No need for _export, use ZLIB.DEF instead. */
+   /* For complete Windows compatibility, use WINAPI, not __stdcall. */
+#  define Z_EXPORT WINAPI
+#  define Z_EXPORTVA WINAPIV
+#endif
+
+#ifndef Z_EXTERN
+#  define Z_EXTERN extern
+#endif
+#ifndef Z_EXPORT
+#  define Z_EXPORT
+#endif
+#ifndef Z_EXPORTVA
+#  define Z_EXPORTVA
+#endif
+
+/* Conditional exports */
+#define ZNG_CONDEXPORT Z_INTERNAL
+
+/* For backwards compatibility */
+
+#ifndef ZEXTERN
+#  define ZEXTERN Z_EXTERN
+#endif
+#ifndef ZEXPORT
+#  define ZEXPORT Z_EXPORT
+#endif
+#ifndef ZEXPORTVA
+#  define ZEXPORTVA Z_EXPORTVA
+#endif
+#ifndef FAR
+#  define FAR
+#endif
+
+/* Legacy zlib typedefs for backwards compatibility. Don't assume stdint.h is defined. */
+typedef unsigned char Byte;
+typedef Byte Bytef;
+
+typedef unsigned int   uInt;  /* 16 bits or more */
+typedef unsigned long  uLong; /* 32 bits or more */
+
+typedef char  charf;
+typedef int   intf;
+typedef uInt  uIntf;
+typedef uLong uLongf;
+
+typedef void const *voidpc;
+typedef void       *voidpf;
+typedef void       *voidp;
+
+typedef unsigned int z_crc_t;
+
+#ifdef HAVE_UNISTD_H    /* may be set to #if 1 by configure/cmake/etc */
+#  define Z_HAVE_UNISTD_H
+#endif
+
+#ifdef NEED_PTRDIFF_T    /* may be set to #if 1 by configure/cmake/etc */
+typedef PTRDIFF_TYPE ptrdiff_t;
+#endif
+
+#include <sys/types.h>      /* for off_t */
+
+#include <stddef.h>         /* for wchar_t and NULL */
+
+/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and
+ * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even
+ * though the former does not conform to the LFS document), but considering
+ * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as
+ * equivalently requesting no 64-bit operations
+ */
+#if defined(_LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1
+#  undef _LARGEFILE64_SOURCE
+#endif
+
+#if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE)
+#  include <unistd.h>         /* for SEEK_*, off_t, and _LFS64_LARGEFILE */
+#  ifndef z_off_t
+#    define z_off_t off_t
+#  endif
+#endif
+
+#if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE-0
+#  define Z_LFS64
+#endif
+
+#if defined(_LARGEFILE64_SOURCE) && defined(Z_LFS64)
+#  define Z_LARGE64
+#endif
+
+#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64 && defined(Z_LFS64)
+#  define Z_WANT64
+#endif
+
+#if !defined(SEEK_SET)
+#  define SEEK_SET        0       /* Seek from beginning of file.  */
+#  define SEEK_CUR        1       /* Seek from current position.  */
+#  define SEEK_END        2       /* Set file pointer to EOF plus "offset" */
+#endif
+
+#ifndef z_off_t
+#  define z_off_t long
+#endif
+
+#if !defined(_WIN32) && defined(Z_LARGE64)
+#  define z_off64_t off64_t
+#else
+#  if defined(__MSYS__)
+#    define z_off64_t _off64_t
+#  elif defined(_WIN32) && !defined(__GNUC__)
+#    define z_off64_t __int64
+#  else
+#    define z_off64_t z_off_t
+#  endif
+#endif
+
+typedef size_t z_size_t;
+
+#endif /* ZCONF_H */
diff --git a/config/cmake/ZLIBNG/zlib-config-version.cmake.in b/config/cmake/ZLIBNG/zlib-config-version.cmake.in
new file mode 100644
index 00000000000..38bcde858aa
--- /dev/null
+++ b/config/cmake/ZLIBNG/zlib-config-version.cmake.in
@@ -0,0 +1,42 @@
+#-----------------------------------------------------------------------------
+# ZLIB Version file for install directory
+#-----------------------------------------------------------------------------
+
+set (PACKAGE_VERSION "@ZLIB_VERSION_STRING@")
+
+if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" )
+  set(PACKAGE_VERSION_COMPATIBLE FALSE)
+else()
+  if ("${PACKAGE_FIND_VERSION_MAJOR}" STREQUAL "@ZLIB_VERSION_MAJOR@")
+
+    # exact match for version @ZLIB_VERSION_MAJOR@.@ZLIB_VERSION_MINOR@
+    if ("${PACKAGE_FIND_VERSION_MINOR}" STREQUAL "@ZLIB_VERSION_MINOR@")
+
+      # compatible with any version @ZLIB_VERSION_MAJOR@.@ZLIB_VERSION_MINOR@.x
+      set (PACKAGE_VERSION_COMPATIBLE TRUE)
+
+      if ("${PACKAGE_FIND_VERSION_PATCH}" STREQUAL "@ZLIB_VERSION_RELEASE@")
+        set (PACKAGE_VERSION_EXACT TRUE)
+
+        if ("${PACKAGE_FIND_VERSION_TWEAK}" STREQUAL "@ZLIB_VERSION_SUBRELEASE@")
+          # not using this yet
+        endif ()
+      endif ()
+    else ()
+      set (PACKAGE_VERSION_COMPATIBLE FALSE)
+    endif ()
+  endif ()
+endif ()
+
+# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it:
+if("${CMAKE_SIZEOF_VOID_P}"  STREQUAL ""  OR "@CMAKE_SIZEOF_VOID_P@" STREQUAL "")
+   return()
+endif()
+
+# check that the installed version has the same 32/64bit-ness as the one which is currently searching:
+if(NOT "${CMAKE_SIZEOF_VOID_P}" STREQUAL "@CMAKE_SIZEOF_VOID_P@")
+  math(EXPR installedBits "@CMAKE_SIZEOF_VOID_P@ * 8")
+  set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)")
+  set(PACKAGE_VERSION_UNSUITABLE TRUE)
+endif()
+
diff --git a/config/cmake/ZLIBNG/zlib-config.cmake.in b/config/cmake/ZLIBNG/zlib-config.cmake.in
new file mode 100644
index 00000000000..8815cda00db
--- /dev/null
+++ b/config/cmake/ZLIBNG/zlib-config.cmake.in
@@ -0,0 +1,57 @@
+#-----------------------------------------------------------------------------
+# ZLIB Config file for compiling against ZLIB build directory
+#-----------------------------------------------------------------------------
+@PACKAGE_INIT@
+
+string(TOUPPER @ZLIB_PACKAGE@ ZLIB_PACKAGE_NAME)
+
+set (${ZLIB_PACKAGE_NAME}_VALID_COMPONENTS static shared)
+
+#-----------------------------------------------------------------------------
+# User Options
+#-----------------------------------------------------------------------------
+set (${ZLIB_PACKAGE_NAME}_EXPORT_LIBRARIES     @ZLIB_LIBRARIES_TO_EXPORT@)
+
+#-----------------------------------------------------------------------------
+# Directories
+#-----------------------------------------------------------------------------
+set (${ZLIB_PACKAGE_NAME}_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@")
+
+set (${ZLIB_PACKAGE_NAME}_SHARE_DIR "@PACKAGE_SHARE_INSTALL_DIR@")
+set_and_check (${ZLIB_PACKAGE_NAME}_BUILD_DIR "@PACKAGE_CURRENT_BUILD_DIR@")
+
+#-----------------------------------------------------------------------------
+# Version Strings
+#-----------------------------------------------------------------------------
+set (${ZLIB_PACKAGE_NAME}_VERSION_STRING @ZLIB_VERSION_STRING@)
+set (${ZLIB_PACKAGE_NAME}_VERSION_MAJOR  @ZLIB_VERSION_MAJOR@)
+set (${ZLIB_PACKAGE_NAME}_VERSION_MINOR  @ZLIB_VERSION_MINOR@)
+
+#-----------------------------------------------------------------------------
+# Don't include targets if this file is being picked up by another
+# project which has already built ZLIB as a subproject
+#-----------------------------------------------------------------------------
+if (NOT TARGET "@ZLIB_PACKAGE@")
+  include (@PACKAGE_SHARE_INSTALL_DIR@/@ZLIB_PACKAGE@@ZLIB_PACKAGE_EXT@-targets.cmake)
+endif ()
+
+# Handle default component(static) :
+if (NOT ${ZLIB_PACKAGE_NAME}_FIND_COMPONENTS)
+    set (${ZLIB_PACKAGE_NAME}_FIND_COMPONENTS static)
+    set (${ZLIB_PACKAGE_NAME}_FIND_REQUIRED_static true)
+endif ()
+
+# Handle requested components:
+list (REMOVE_DUPLICATES ${ZLIB_PACKAGE_NAME}_FIND_COMPONENTS)
+foreach (comp IN LISTS ${ZLIB_PACKAGE_NAME}_FIND_COMPONENTS)
+    list (FIND ${ZLIB_PACKAGE_NAME}_EXPORT_LIBRARIES "@ZLIB_LIB_CORENAME@-${comp}" HAVE_COMP)
+    if (${HAVE_COMP} LESS 0)
+      set (${ZLIB_PACKAGE_NAME}_${comp}_FOUND 0)
+    else ()
+      set (${ZLIB_PACKAGE_NAME}_${comp}_FOUND 1)
+      string(TOUPPER ${ZLIB_PACKAGE_NAME}_${comp}_LIBRARY COMP_LIBRARY)
+      set (${COMP_LIBRARY} ${${COMP_LIBRARY}} @ZLIB_LIB_CORENAME@-${comp})
+    endif ()
+endforeach ()
+
+check_required_components (${ZLIB_PACKAGE_NAME})
diff --git a/config/cmake/cacheinit.cmake b/config/cmake/cacheinit.cmake
index a4f75470ae5..cd42d775368 100644
--- a/config/cmake/cacheinit.cmake
+++ b/config/cmake/cacheinit.cmake
@@ -53,12 +53,18 @@ set (ZLIB_USE_LOCALCONTENT ON CACHE BOOL "Use local file for ZLIB FetchContent"
 set (ZLIB_GIT_URL "https://github.com/madler/zlib.git" CACHE STRING "Use ZLIB from  GitHub repository" FORCE)
 set (ZLIB_GIT_BRANCH "develop" CACHE STRING "" FORCE)
 
+set (ZLIBNG_PACKAGE_NAME "zlib-ng" CACHE STRING "Name of ZLIBNG package" FORCE)
+set (ZLIBNG_TGZ_NAME "2.1.6.tar.gz" CACHE STRING "Use HDF5_ZLib from compressed file" FORCE)
+set (ZLIBNG_TGZ_ORIGPATH "https://github.com/zlib-ng/zlib-ng/archive/refs/tags" CACHE STRING "Use ZLIBNG from original location" FORCE)
+set (ZLIBNG_GIT_URL "https://github.com/zlib-ng/zlib-ng.git" CACHE STRING "Use ZLIBNG from  GitHub repository" FORCE)
+set (ZLIBNG_GIT_BRANCH "develop" CACHE STRING "" FORCE)
+
 set (LIBAEC_PACKAGE_NAME "libaec" CACHE STRING "Name of AEC SZIP package" FORCE)
-set (LIBAEC_TGZ_NAME "libaec-1.0.6.tar.gz" CACHE STRING "Use SZip AEC from compressed file" FORCE)
-set (LIBAEC_TGZ_ORIGPATH "https://github.com/MathisRosenhauer/libaec/releases/download/v1.0.6" CACHE STRING "Use LIBAEC from original location" FORCE)
+set (LIBAEC_TGZ_NAME "libaec-1.1.3.tar.gz" CACHE STRING "Use SZip AEC from compressed file" FORCE)
+set (LIBAEC_TGZ_ORIGPATH "https://github.com/MathisRosenhauer/libaec/releases/download/v1.1.3" CACHE STRING "Use LIBAEC from original location" FORCE)
 set (LIBAEC_USE_LOCALCONTENT ON CACHE BOOL "Use local file for LIBAEC FetchContent" FORCE)
 set (LIBAEC_GIT_URL "https://github.com/MathisRosenhauer/libaec.git" CACHE STRING "Use LIBAEC from  GitHub repository" FORCE)
-set (LIBAEC_GIT_BRANCH "v1.0.6" CACHE STRING "" FORCE)
+set (LIBAEC_GIT_BRANCH "v1.1.3" CACHE STRING "" FORCE)
 
 ########################
 # API test options
diff --git a/config/cmake/mccacheinit.cmake b/config/cmake/mccacheinit.cmake
index 9e4d5811bc6..caa1fe034fe 100644
--- a/config/cmake/mccacheinit.cmake
+++ b/config/cmake/mccacheinit.cmake
@@ -21,7 +21,7 @@ set (HDF_PACKAGE_EXT "" CACHE STRING "Name of HDF package extension" FORCE)
 
 set (HDF_PACKAGE_NAMESPACE "hdf5::" CACHE STRING "Name for HDF package namespace (can be empty)" FORCE)
 
-set (HDF5_BUILD_CPP_LIB ON CACHE BOOL "Build HDF5 C++ Library" FORCE)
+set (HDF5_BUILD_CPP_LIB ON CACHE BOOL "Build C++ support" FORCE)
 
 set (HDF5_BUILD_FORTRAN ON CACHE BOOL "Build FORTRAN support" FORCE)
 
@@ -57,11 +57,21 @@ set (ZLIB_PACKAGE_NAME "zlib" CACHE STRING "Name of ZLIB package" FORCE)
 set (ZLIB_TGZ_NAME "zlib-1.3.tar.gz" CACHE STRING "Use HDF5_ZLib from compressed file" FORCE)
 set (ZLIB_TGZ_ORIGPATH "https://github.com/madler/zlib/releases/download/v1.3" CACHE STRING "Use ZLIB from original location" FORCE)
 set (ZLIB_USE_LOCALCONTENT ON CACHE BOOL "Use local file for ZLIB FetchContent" FORCE)
+set (ZLIB_GIT_URL "https://github.com/madler/zlib.git" CACHE STRING "Use ZLIB from  GitHub repository" FORCE)
+set (ZLIB_GIT_BRANCH "develop" CACHE STRING "" FORCE)
+
+set (ZLIBNG_PACKAGE_NAME "zlib-ng" CACHE STRING "Name of ZLIBNG package" FORCE)
+set (ZLIBNG_TGZ_NAME "2.1.6.tar.gz" CACHE STRING "Use HDF5_ZLib from compressed file" FORCE)
+set (ZLIBNG_TGZ_ORIGPATH "https://github.com/zlib-ng/zlib-ng/archive/refs/tags" CACHE STRING "Use ZLIBNG from original location" FORCE)
+set (ZLIBNG_GIT_URL "https://github.com/zlib-ng/zlib-ng.git" CACHE STRING "Use ZLIBNG from  GitHub repository" FORCE)
+set (ZLIBNG_GIT_BRANCH "develop" CACHE STRING "" FORCE)
 
 set (LIBAEC_PACKAGE_NAME "libaec" CACHE STRING "Name of AEC SZIP package" FORCE)
-set (LIBAEC_TGZ_NAME "libaec-1.0.6.tar.gz" CACHE STRING "Use SZip AEC from compressed file" FORCE)
-set (LIBAEC_TGZ_ORIGPATH "https://github.com/MathisRosenhauer/libaec/releases/download/v1.0.6" CACHE STRING "Use LIBAEC from original location" FORCE)
+set (LIBAEC_TGZ_NAME "libaec-1.1.3.tar.gz" CACHE STRING "Use SZip AEC from compressed file" FORCE)
+set (LIBAEC_TGZ_ORIGPATH "https://github.com/MathisRosenhauer/libaec/releases/download/v1.1.3" CACHE STRING "Use LIBAEC from original location" FORCE)
 set (LIBAEC_USE_LOCALCONTENT ON CACHE BOOL "Use local file for LIBAEC FetchContent" FORCE)
+set (LIBAEC_GIT_URL "https://github.com/MathisRosenhauer/libaec.git" CACHE STRING "Use LIBAEC from  GitHub repository" FORCE)
+set (LIBAEC_GIT_BRANCH "v1.1.3" CACHE STRING "" FORCE)
 
 set (CMAKE_BUILD_TYPE "Debug" CACHE STRING "Build Debug" FORCE)
 
diff --git a/configure.ac b/configure.ac
index 4d64c5a4f52..bf7691055dc 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4441,7 +4441,7 @@ AM_CONDITIONAL([HAVE_SHARED_CONDITIONAL], [test "X$enable_shared" = "Xyes"])
 AC_CONFIG_FILES([Makefile
                  doxygen/Doxyfile
                  src/Makefile
-                 src/libhdf5.settings
+                 src/libhdf5.settings:src/libhdf5.settings.autotools.in
                  src/H5build_settings.c:${BUILD_SETTINGS_FILE}
                  test/Makefile
                  test/H5srcdir_str.h
diff --git a/doxygen/dox/IntroParHDF5.dox b/doxygen/dox/IntroParHDF5.dox
index 884d9d254b2..b8785d43c9d 100644
--- a/doxygen/dox/IntroParHDF5.dox
+++ b/doxygen/dox/IntroParHDF5.dox
@@ -35,7 +35,8 @@ The following shows the Parallel HDF5 implementation layers:
 This tutorial assumes that you are somewhat familiar with parallel programming with MPI (Message Passing Interface).
 
 If you are not familiar with parallel programming, here is a tutorial that may be of interest:
-<a href="http://www.nersc.gov/users/training/online-tutorials/introduction-to-scientific-i-o/?show_all=1">Tutorial on HDF5 I/O tuning at NERSC</a>
+<a href="https://\DOCURL/hdf5_topics/2016_NERSC_Introduction_to_Scientific_IO.pdf">Tutorial on HDF5 I/O tuning at NERSC</a>.
+(NOTE: As of 2024, the specific systems described in this tutorial are outdated.)
 
 Some of the terms that you must understand in this tutorial are:
 <ul>
@@ -150,8 +151,10 @@ Following is example code for creating an access template in HDF5:
 \endcode
 
 The following example programs create an HDF5 file using Parallel HDF5:
-<a href="https://\SRCURL/HDF5Examples/C/H5PAR/ph5_file_create.c">C: file_create.c</a>
-<a href="https://\SRCURL/HDF5Examples/FORTRAN/H5PAR/ph5_f90_file_create.F90">F90: file_create.F90</a>
+
+<a href="https://\SRCURL/HDF5Examples/C/H5PAR/ph5_file_create.c">C: ph5_file_create.c</a>
+
+<a href="https://\SRCURL/HDF5Examples/FORTRAN/H5PAR/ph5_f90_file_create.F90">F90: ph5_f90_file_create.F90</a>
 
 
 \subsection subsec_pintro_create_dset Creating and Accessing a Dataset with PHDF5
@@ -231,8 +234,10 @@ The following code demonstrates a collective write using Parallel HDF5:
 \endcode
 
 The following example programs create an HDF5 dataset using Parallel HDF5:
-<a href="https://\SRCURL/HDF5Examples/C/H5PAR/ph5_dataset.c">C: dataset.c</a>
-<a href="https://\SRCURL/HDF5Examples/FORTRAN/H5PAR/ph5_f90_dataset.F90">F90: dataset.F90</a>
+
+<a href="https://\SRCURL/HDF5Examples/C/H5PAR/ph5_dataset.c">C: ph5_dataset.c</a>
+
+<a href="https://\SRCURL/HDF5Examples/FORTRAN/H5PAR/ph5_f90_dataset.F90">F90: ph5_f90_dataset.F90</a>
 
 
 \subsubsection subsec_pintro_hyperslabs Hyperslabs
diff --git a/doxygen/dox/LearnBasics3.dox b/doxygen/dox/LearnBasics3.dox
index ca9ba8bdc4a..3e9dd8ea090 100644
--- a/doxygen/dox/LearnBasics3.dox
+++ b/doxygen/dox/LearnBasics3.dox
@@ -48,6 +48,19 @@ Navigate back: \ref index "Main" / \ref GettingStarted / \ref LearnBasics
 <hr>
 
 \section secLBDsetLayoutDesc Description of a Dataset
+The Creating a Dataset tutorial topic defines a dataset as a multidimensional array of data elements together with supporting metadata, where:
+
+\li The array of elements consists of the raw data values that a user wishes to store in HDF5.
+\li The supporting metadata describes that data. The metadata is stored in the dataset (object) header of a dataset.
+
+Datatype, dataspace, attribute, and storage layout information were introduced as part of the metadata associated with a dataset:
+<table>
+<tr>
+<td>
+\image html tutr-lodset.png
+</td>
+</tr>
+</table>
 
 \section secLBDsetLayout Dataset Storage Layout
 The storage information, or storage layout, defines how the raw data values in the dataset are
diff --git a/doxygen/img/tutr-lodset.png b/doxygen/img/tutr-lodset.png
new file mode 100755
index 0000000000000000000000000000000000000000..456fc32e4ee4575431be76eba9cf9fb7aa71e1af
GIT binary patch
literal 15071
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
Y-RnTHx!sNf7XeX{SCcD#VE*F20Pn>MQ~&?~

literal 0
HcmV?d00001

diff --git a/fortran/src/CMakeLists.txt b/fortran/src/CMakeLists.txt
index 855310879ef..cb0ff44f907 100644
--- a/fortran/src/CMakeLists.txt
+++ b/fortran/src/CMakeLists.txt
@@ -584,9 +584,9 @@ set (_PKG_CONFIG_EXEC_PREFIX \${prefix})
 set (_PKG_CONFIG_LIBDIR \${exec_prefix}/${HDF5_INSTALL_LIB_DIR})
 set (_PKG_CONFIG_INCLUDEDIR \${prefix}/${HDF5_INSTALL_INCLUDE_DIR})
 set (_PKG_CONFIG_MODULEDIR \${prefix}/${HDF5_INSTALL_MODULE_DIR})
-set (_PKG_CONFIG_LIBNAME "${HDF5_F90_LIB_CORENAME}")
+set (_PKG_CONFIG_LIBNAME "${HDF5_F90_LIB_NAME}")
 set (_PKG_CONFIG_VERSION "${HDF5_PACKAGE_VERSION}")
-set (PKG_CONFIG_LIBNAME "${HDF5_F90_LIB_CORENAME}")
+set (PKG_CONFIG_LIBNAME "${HDF5_F90_LIB_NAME}")
 if (${HDF_CFG_NAME} MATCHES "Debug" OR ${HDF_CFG_NAME} MATCHES "Developer")
   set (PKG_CONFIG_LIBNAME "${PKG_CONFIG_LIBNAME}${CMAKE_DEBUG_POSTFIX}")
 endif ()
@@ -600,8 +600,8 @@ if (BUILD_SHARED_LIBS)
   set (_PKG_CONFIG_SH_LIBS "${_PKG_CONFIG_SH_LIBS} -l${PKG_CONFIG_LIBNAME}")
 endif ()
 
-set (_PKG_CONFIG_REQUIRES "${HDF5_LIB_CORENAME} = ${HDF5_PACKAGE_VERSION}")
-set (_PKG_CONFIG_REQUIRES_PRIVATE "${HDF5_LIB_CORENAME} = ${HDF5_PACKAGE_VERSION}")
+set (_PKG_CONFIG_REQUIRES "${HDF5_LIB_NAME} = ${HDF5_PACKAGE_VERSION}")
+set (_PKG_CONFIG_REQUIRES_PRIVATE "${HDF5_LIB_NAME} = ${HDF5_PACKAGE_VERSION}")
 
 configure_file (
     ${HDF_CONFIG_DIR}/libhdf5.fpc.in
diff --git a/hl/c++/src/CMakeLists.txt b/hl/c++/src/CMakeLists.txt
index c6e43c06973..3f2bd5af14a 100644
--- a/hl/c++/src/CMakeLists.txt
+++ b/hl/c++/src/CMakeLists.txt
@@ -93,9 +93,9 @@ set (_PKG_CONFIG_PREFIX ${CMAKE_INSTALL_PREFIX})
 set (_PKG_CONFIG_EXEC_PREFIX \${prefix})
 set (_PKG_CONFIG_LIBDIR \${exec_prefix}/${HDF5_INSTALL_LIB_DIR})
 set (_PKG_CONFIG_INCLUDEDIR \${prefix}/${HDF5_INSTALL_INCLUDE_DIR})
-set (_PKG_CONFIG_LIBNAME "${HDF5_HL_CPP_LIB_CORENAME}")
+set (_PKG_CONFIG_LIBNAME "${HDF5_HL_CPP_LIB_NAME}")
 set (_PKG_CONFIG_VERSION "${HDF5_PACKAGE_VERSION}")
-set (PKG_CONFIG_LIBNAME "${HDF5_HL_CPP_LIB_CORENAME}")
+set (PKG_CONFIG_LIBNAME "${HDF5_HL_CPP_LIB_NAME}")
 if (${HDF_CFG_NAME} MATCHES "Debug" OR ${HDF_CFG_NAME} MATCHES "Developer")
   set (PKG_CONFIG_LIBNAME "${PKG_CONFIG_LIBNAME}${CMAKE_DEBUG_POSTFIX}")
 endif ()
@@ -109,8 +109,8 @@ if (BUILD_SHARED_LIBS)
   set (_PKG_CONFIG_SH_LIBS "${_PKG_CONFIG_SH_LIBS} -l${PKG_CONFIG_LIBNAME}")
 endif ()
 
-set (_PKG_CONFIG_REQUIRES "${HDF5_HL_LIB_CORENAME} = ${HDF5_PACKAGE_VERSION}")
-set (_PKG_CONFIG_REQUIRES_PRIVATE "${HDF5_HL_LIB_CORENAME} = ${HDF5_PACKAGE_VERSION}")
+set (_PKG_CONFIG_REQUIRES "${HDF5_HL_LIB_NAME} = ${HDF5_PACKAGE_VERSION}")
+set (_PKG_CONFIG_REQUIRES_PRIVATE "${HDF5_HL_LIB_NAME} = ${HDF5_PACKAGE_VERSION}")
 
 configure_file (
     ${HDF_CONFIG_DIR}/libhdf5.pc.in
diff --git a/hl/fortran/src/CMakeLists.txt b/hl/fortran/src/CMakeLists.txt
index a9361ad5029..6ebe08bdc6f 100644
--- a/hl/fortran/src/CMakeLists.txt
+++ b/hl/fortran/src/CMakeLists.txt
@@ -323,9 +323,9 @@ set (_PKG_CONFIG_EXEC_PREFIX \${prefix})
 set (_PKG_CONFIG_LIBDIR \${exec_prefix}/${HDF5_INSTALL_LIB_DIR})
 set (_PKG_CONFIG_INCLUDEDIR \${prefix}/${HDF5_INSTALL_INCLUDE_DIR})
 set (_PKG_CONFIG_MODULEDIR \${prefix}/${HDF5_INSTALL_MODULE_DIR})
-set (_PKG_CONFIG_LIBNAME "${HDF5_HL_F90_LIB_CORENAME}")
+set (_PKG_CONFIG_LIBNAME "${HDF5_HL_F90_LIB_NAME}")
 set (_PKG_CONFIG_VERSION "${HDF5_PACKAGE_VERSION}")
-set (PKG_CONFIG_LIBNAME "${HDF5_HL_F90_LIB_CORENAME}")
+set (PKG_CONFIG_LIBNAME "${HDF5_HL_F90_LIB_NAME}")
 if (${HDF_CFG_NAME} MATCHES "Debug" OR ${HDF_CFG_NAME} MATCHES "Developer")
   set (PKG_CONFIG_LIBNAME "${PKG_CONFIG_LIBNAME}${CMAKE_DEBUG_POSTFIX}")
 endif ()
@@ -339,8 +339,8 @@ if (BUILD_SHARED_LIBS)
   set (_PKG_CONFIG_SH_LIBS "${_PKG_CONFIG_SH_LIBS} -l${PKG_CONFIG_LIBNAME}")
 endif ()
 
-set (_PKG_CONFIG_REQUIRES "${HDF5_F90_LIB_CORENAME} = ${HDF5_PACKAGE_VERSION}")
-set (_PKG_CONFIG_REQUIRES_PRIVATE "${HDF5_F90_LIB_CORENAME} = ${HDF5_PACKAGE_VERSION}")
+set (_PKG_CONFIG_REQUIRES "${HDF5_F90_LIB_NAME} = ${HDF5_PACKAGE_VERSION}")
+set (_PKG_CONFIG_REQUIRES_PRIVATE "${HDF5_F90_LIB_NAME} = ${HDF5_PACKAGE_VERSION}")
 
 configure_file (
     ${HDF_CONFIG_DIR}/libhdf5.fpc.in
diff --git a/hl/src/CMakeLists.txt b/hl/src/CMakeLists.txt
index 71fd6e60a65..3bca28e29f5 100644
--- a/hl/src/CMakeLists.txt
+++ b/hl/src/CMakeLists.txt
@@ -125,9 +125,9 @@ set (_PKG_CONFIG_PREFIX ${CMAKE_INSTALL_PREFIX})
 set (_PKG_CONFIG_EXEC_PREFIX \${prefix})
 set (_PKG_CONFIG_LIBDIR \${exec_prefix}/${HDF5_INSTALL_LIB_DIR})
 set (_PKG_CONFIG_INCLUDEDIR \${prefix}/${HDF5_INSTALL_INCLUDE_DIR})
-set (_PKG_CONFIG_LIBNAME "${HDF5_HL_LIB_CORENAME}")
+set (_PKG_CONFIG_LIBNAME "${HDF5_HL_LIB_NAME}")
 set (_PKG_CONFIG_VERSION "${HDF5_PACKAGE_VERSION}")
-set (PKG_CONFIG_LIBNAME "${HDF5_HL_LIB_CORENAME}")
+set (PKG_CONFIG_LIBNAME "${HDF5_HL_LIB_NAME}")
 if (${HDF_CFG_NAME} MATCHES "Debug" OR ${HDF_CFG_NAME} MATCHES "Developer")
   set (PKG_CONFIG_LIBNAME "${PKG_CONFIG_LIBNAME}${CMAKE_DEBUG_POSTFIX}")
 endif ()
@@ -141,8 +141,8 @@ if (BUILD_SHARED_LIBS)
   set (_PKG_CONFIG_SH_LIBS "${_PKG_CONFIG_SH_LIBS} -l${PKG_CONFIG_LIBNAME}")
 endif ()
 
-set (_PKG_CONFIG_REQUIRES "${HDF5_LIB_CORENAME} = ${HDF5_PACKAGE_VERSION}")
-set (_PKG_CONFIG_REQUIRES_PRIVATE "${HDF5_LIB_CORENAME} = ${HDF5_PACKAGE_VERSION}")
+set (_PKG_CONFIG_REQUIRES "${HDF5_LIB_NAME} = ${HDF5_PACKAGE_VERSION}")
+set (_PKG_CONFIG_REQUIRES_PRIVATE "${HDF5_LIB_NAME} = ${HDF5_PACKAGE_VERSION}")
 
 configure_file (
     ${HDF_CONFIG_DIR}/libhdf5.pc.in
diff --git a/java/src/jni/h5Imp.c b/java/src/jni/h5Imp.c
index e744e567067..898b52ad3ed 100644
--- a/java/src/jni/h5Imp.c
+++ b/java/src/jni/h5Imp.c
@@ -105,7 +105,7 @@ JNIEXPORT jint JNICALL
 Java_hdf_hdf5lib_H5_H5get_1libversion(JNIEnv *env, jclass clss, jintArray libversion)
 {
     jboolean libversionArrayIsCopy;
-    int     *libversionArray = NULL;
+    jint    *libversionArray = NULL;
     herr_t   status          = FAIL;
 
     UNUSED(clss);
diff --git a/release_docs/INSTALL_CMake.txt b/release_docs/INSTALL_CMake.txt
index 99fee1165b3..55761bc32c2 100644
--- a/release_docs/INSTALL_CMake.txt
+++ b/release_docs/INSTALL_CMake.txt
@@ -71,7 +71,8 @@ External compression plugin libraries from https://github.com/HDFGroup/hdf5_plug
 
 External compression szip and zlib libraries:
     ZLIB          "https://github.com/madler/zlib/releases/download/v1.3/zlib-1.3.tar.gz"
-    LIBAEC        "https://github.com/MathisRosenhauer/libaec/releases/download/v1.0.6/libaec-1.0.6.tar.gz"
+    ZLIBNG        "https://github.com/zlib-ng/zlib-ng/archive/refs/tags/2.1.6.tar.gz"
+    LIBAEC        "https://github.com/MathisRosenhauer/libaec/releases/download/v1.1.3/libaec-1.1.3.tar.gz"
 -------------------------------------------------------------------------
 -------------------------------------------------------------------------
 
@@ -531,12 +532,18 @@ These five steps are described in detail below.
             set (ZLIB_USE_LOCALCONTENT ON CACHE BOOL "Use local file for ZLIB FetchContent" FORCE)
             set (ZLIB_GIT_URL "https://github.com/madler/zlib.git" CACHE STRING "Use ZLIB from  GitHub repository" FORCE)
             set (ZLIB_GIT_BRANCH "develop" CACHE STRING "" FORCE)
+            set (HDF5_USE_ZLIB_NG OFF CACHE BOOL "Use zlib-ng library as zlib library" FORCE)
+            set (ZLIBNG_PACKAGE_NAME "zlib-ng" CACHE STRING "Name of ZLIBNG package" FORCE)
+            set (ZLIBNG_TGZ_NAME "2.1.6.tar.gz" CACHE STRING "Use HDF5_ZLib from compressed file" FORCE)
+            set (ZLIBNG_TGZ_ORIGPATH "https://github.com/zlib-ng/zlib-ng/archive/refs/tags" CACHE STRING "Use ZLIBNG from original location" FORCE)
+            set (ZLIBNG_GIT_URL "https://github.com/zlib-ng/zlib-ng.git" CACHE STRING "Use ZLIBNG from  GitHub repository" FORCE)
+            set (ZLIBNG_GIT_BRANCH "develop" CACHE STRING "" FORCE)
             set (LIBAEC_PACKAGE_NAME "libaec" CACHE STRING "Name of AEC SZIP package" FORCE)
-            set (LIBAEC_TGZ_NAME "libaec-1.0.6.tar.gz" CACHE STRING "Use SZip AEC from compressed file" FORCE)
-            set (LIBAEC_TGZ_ORIGPATH "https://github.com/MathisRosenhauer/libaec/releases/download/v1.0.6" CACHE STRING "Use LIBAEC from original location" FORCE)
+            set (LIBAEC_TGZ_NAME "libaec-1.1.3.tar.gz" CACHE STRING "Use SZip AEC from compressed file" FORCE)
+            set (LIBAEC_TGZ_ORIGPATH "https://github.com/MathisRosenhauer/libaec/releases/download/v1.1.3" CACHE STRING "Use LIBAEC from original location" FORCE)
             set (LIBAEC_USE_LOCALCONTENT ON CACHE BOOL "Use local file for LIBAEC FetchContent" FORCE)
             set (LIBAEC_GIT_URL "https://github.com/MathisRosenhauer/libaec.git" CACHE STRING "Use LIBAEC from  GitHub repository" FORCE)
-            set (LIBAEC_GIT_BRANCH "v1.0.6" CACHE STRING "" FORCE)
+            set (LIBAEC_GIT_BRANCH "v1.1.3" CACHE STRING "" FORCE)
             ########################
             # API test options
             ########################
@@ -846,6 +853,7 @@ HDF5_ENABLE_PARALLEL           "Enable parallel build (requires MPI)"
 HDF5_ENABLE_THREADSAFE         "Enable Threadsafety"                                             OFF
 HDF5_DIMENSION_SCALES_NEW_REF  "Use new-style references with dimension scale APIs"              OFF
 HDF5_EXTERNAL_LIB_PREFIX       "Use prefix for custom library naming."                           ""
+HDF5_EXTERNAL_LIB_SUFFIX       "Use suffix for custom library naming."                           ""
 
 HDF5_DISABLE_COMPILER_WARNINGS "Disable compiler warnings"                                       OFF
 HDF5_ENABLE_ALL_WARNINGS       "Enable all warnings"                                             OFF
@@ -926,16 +934,21 @@ HDF5_ENABLE_PLUGIN_SUPPORT  "Enable PLUGIN Filters"                         OFF
 HDF5_ENABLE_SZIP_SUPPORT    "Use SZip Filter"                               OFF
 HDF5_ENABLE_Z_LIB_SUPPORT   "Enable Zlib Filters"                           ON
 
-ZLIB_USE_EXTERNAL           "Use External Library Building for ZLIB else search"        OFF
-ZLIB_TGZ_ORIGPATH           "Use ZLIB from original location"               "https://github.com/madler/zlib/releases/download/v1.2.13"
-ZLIB_TGZ_NAME               "Use ZLIB from original compressed file"        "zlib-1.2.13.tar.gz"
+if (HDF5_USE_ZLIB_NG)
+    ZLIBNG_USE_EXTERNAL     "Use External Library Building for ZLIBNG"      OFF
+    ZLIBNG_TGZ_ORIGPATH     "Use ZLIBNG from original location"             "https://github.com/zlib-ng/zlib-ng/releases/tag/2.1.6"
+    ZLIBNG_TGZ_NAME         "Use ZLIBNG from original compressed file"      "2.1.6.tar.gz"
+else
+    ZLIB_USE_EXTERNAL       "Use External Library Building for ZLIB"        OFF
+    ZLIB_TGZ_ORIGPATH       "Use ZLIB from original location"               "https://github.com/madler/zlib/releases/download/v1.2.13"
+    ZLIB_TGZ_NAME           "Use ZLIB from original compressed file"        "zlib-1.2.13.tar.gz"
 ZLIB_USE_LOCALCONTENT       "Use local file for ZLIB FetchContent"          ON
 
 SZIP_USE_EXTERNAL           "Use External Library Building for SZIP else search"        OFF
 if (HDF5_ENABLE_SZIP_SUPPORT)
     HDF5_ENABLE_SZIP_ENCODING "Use SZip Encoding"                           ON
-LIBAEC_TGZ_ORIGPATH         "Use LIBAEC from original location"             "https://github.com/MathisRosenhauer/libaec/releases/download/v1.0.6"
-LIBAEC_TGZ_NAME             "Use LIBAEC from original compressed file"      "libaec-1.0.6.tar.gz"
+LIBAEC_TGZ_ORIGPATH         "Use LIBAEC from original location"             "https://github.com/MathisRosenhauer/libaec/releases/download/v1.1.3"
+LIBAEC_TGZ_NAME             "Use LIBAEC from original compressed file"      "libaec-1.1.3.tar.gz"
 LIBAEC_USE_LOCALCONTENT     "Use local file for LIBAEC FetchContent"        ON
 
 PLUGIN_USE_EXTERNAL         "Use External Library Building for PLUGINS else search"     OFF
diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt
index c0237ab9e85..39136813326 100644
--- a/release_docs/RELEASE.txt
+++ b/release_docs/RELEASE.txt
@@ -47,6 +47,22 @@ New Features
 
     Configuration:
     -------------
+    - Added support for using zlib-ng package as the zlib library:
+
+          CMake:      HDF5_USE_ZLIB_NG
+          Autotools:  --enable-zlibng
+
+      Added the option HDF5_USE_ZLIB_NG to allow the replacement of the
+      default ZLib package by the zlib-ng package as a built-in compression library.
+
+    - Disable CMake UNITY_BUILD for hdf5
+
+      CMake added a target property, UNITY_BUILD, that when set to true, the target
+      source files will be combined into batches for faster compilation. By default,
+      the setting is OFF, but could be enabled by a project that includes HDF5 as a subproject.
+
+      HDF5 has disabled this feature by setting the property to OFF in the HDFMacros.cmake file.
+
     - Removed "function/code stack" debugging configuration option:
 
           CMake:      HDF5_ENABLE_CODESTACK
@@ -470,7 +486,10 @@ New Features
 
     Tools:
     ------
-    -
+    - Allow h5repack to reserve space for a user block without a file
+
+      This is useful for users who want to reserve space
+      in the file for future use without requiring a file to copy.
 
 
     High-Level APIs:
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index f1b77ec1da8..c6743a85ff7 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1187,9 +1187,9 @@ set (_PKG_CONFIG_PREFIX ${CMAKE_INSTALL_PREFIX})
 set (_PKG_CONFIG_EXEC_PREFIX \${prefix})
 set (_PKG_CONFIG_LIBDIR \${exec_prefix}/${HDF5_INSTALL_LIB_DIR})
 set (_PKG_CONFIG_INCLUDEDIR \${prefix}/${HDF5_INSTALL_INCLUDE_DIR})
-set (_PKG_CONFIG_LIBNAME "${HDF5_LIB_CORENAME}")
+set (_PKG_CONFIG_LIBNAME "${HDF5_LIB_NAME}")
 set (_PKG_CONFIG_VERSION "${HDF5_PACKAGE_VERSION}")
-set (PKGCONFIG_LIBNAME "${HDF5_LIB_CORENAME}")
+set (PKGCONFIG_LIBNAME "${HDF5_LIB_NAME}")
 if (${HDF_CFG_NAME} MATCHES "Debug" OR ${HDF_CFG_NAME} MATCHES "Developer")
   set (PKGCONFIG_LIBNAME "${PKGCONFIG_LIBNAME}${CMAKE_DEBUG_POSTFIX}")
 endif ()
diff --git a/src/H5A.c b/src/H5A.c
index 129dd5f0de9..651ed13c256 100644
--- a/src/H5A.c
+++ b/src/H5A.c
@@ -1880,7 +1880,7 @@ H5Aiterate2(hid_t loc_id, H5_index_t idx_type, H5_iter_order_t order, hsize_t *i
  PURPOSE
     Calls a user's function for each attribute on an object
  USAGE
-    herr_t H5Aiterate2(loc_id, obj_name, idx_type, order, idx, op, op_data, lapl_id)
+    herr_t H5Aiterate_by_name(loc_id, obj_name, idx_type, order, idx, op, op_data, lapl_id)
         hid_t loc_id;           IN: Base location for object
         const char *obj_name;   IN: Name of object relative to location
         H5_index_t idx_type;    IN: Type of index to use
diff --git a/src/H5D.c b/src/H5D.c
index d014d27cacb..e7c3f4df0b3 100644
--- a/src/H5D.c
+++ b/src/H5D.c
@@ -987,8 +987,8 @@ H5D__read_api_common(size_t count, hid_t dset_id[], hid_t mem_type_id[], hid_t m
         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not xfer parms");
 
     /* Read the data */
-    if (H5VL_dataset_read_direct(count, obj, connector, mem_type_id, mem_space_id, file_space_id, dxpl_id,
-                                 buf, token_ptr) < 0)
+    if (H5VL_dataset_read(count, obj, connector, mem_type_id, mem_space_id, file_space_id, dxpl_id, buf,
+                          token_ptr) < 0)
         HGOTO_ERROR(H5E_DATASET, H5E_READERROR, FAIL, "can't read data");
 
 done:
@@ -1289,8 +1289,8 @@ H5D__write_api_common(size_t count, hid_t dset_id[], hid_t mem_type_id[], hid_t
         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not xfer parms");
 
     /* Write the data */
-    if (H5VL_dataset_write_direct(count, obj, connector, mem_type_id, mem_space_id, file_space_id, dxpl_id,
-                                  buf, token_ptr) < 0)
+    if (H5VL_dataset_write(count, obj, connector, mem_type_id, mem_space_id, file_space_id, dxpl_id, buf,
+                           token_ptr) < 0)
         HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "can't write data");
 
 done:
diff --git a/src/H5Dint.c b/src/H5Dint.c
index 66340c8fa54..8f28afb48ef 100644
--- a/src/H5Dint.c
+++ b/src/H5Dint.c
@@ -62,7 +62,7 @@ typedef struct {
 /* Internal data structure for computing variable-length dataset's total size */
 /* (Used for generic 'get vlen buf size' operation) */
 typedef struct {
-    const H5VL_object_t      *dset_vol_obj; /* VOL object for the dataset */
+    H5VL_object_t            *dset_vol_obj; /* VOL object for the dataset */
     hid_t                     fspace_id;    /* Dataset dataspace ID of the dataset we are working on */
     H5S_t                    *fspace;       /* Dataset's dataspace for operation */
     hid_t                     mspace_id;    /* Memory dataspace ID of the dataset we are working on */
@@ -2816,9 +2816,9 @@ H5D__vlen_get_buf_size_gen_cb(void H5_ATTR_UNUSED *elem, hid_t type_id, unsigned
         HGOTO_ERROR(H5E_DATASET, H5E_CANTCREATE, FAIL, "can't select point");
 
     /* Read in the point (with the custom VL memory allocator) */
-    if (H5VL_dataset_read(1, &vlen_bufsize->dset_vol_obj, &type_id, &vlen_bufsize->mspace_id,
-                          &vlen_bufsize->fspace_id, vlen_bufsize->dxpl_id, &vlen_bufsize->common.fl_tbuf,
-                          H5_REQUEST_NULL) < 0)
+    if (H5VL_dataset_read(1, &vlen_bufsize->dset_vol_obj->data, vlen_bufsize->dset_vol_obj->connector,
+                          &type_id, &vlen_bufsize->mspace_id, &vlen_bufsize->fspace_id, vlen_bufsize->dxpl_id,
+                          &vlen_bufsize->common.fl_tbuf, H5_REQUEST_NULL) < 0)
         HGOTO_ERROR(H5E_DATASET, H5E_READERROR, FAIL, "can't read point");
 
 done:
@@ -2860,7 +2860,7 @@ H5D__vlen_get_buf_size_gen(H5VL_object_t *vol_obj, hid_t type_id, hid_t space_id
         HGOTO_ERROR(H5E_DATASET, H5E_BADVALUE, FAIL, "dataspace does not have extent set");
 
     /* Save the dataset */
-    vlen_bufsize.dset_vol_obj = (const H5VL_object_t *)vol_obj;
+    vlen_bufsize.dset_vol_obj = vol_obj;
 
     /* Set up VOL callback arguments */
     vol_cb_args.op_type                 = H5VL_DATASET_GET_SPACE;
diff --git a/src/H5FD.c b/src/H5FD.c
index d2e7cff1bac..1f603806b7d 100644
--- a/src/H5FD.c
+++ b/src/H5FD.c
@@ -955,33 +955,32 @@ H5FD_cmp(const H5FD_t *f1, const H5FD_t *f2)
  *
  * Purpose:     Query a VFL driver for its feature flags. (listed in H5FDpublic.h)
  *
- * Return:      Success:    0
- *              Failure:    -1
+ * Return:      Non-negative on success/Negative on failure
  *
  *-------------------------------------------------------------------------
  */
-int
+herr_t
 H5FDquery(const H5FD_t *file, unsigned long *flags /*out*/)
 {
-    int ret_value = 0;
+    herr_t ret_value = SUCCEED; /* Return value */
 
-    FUNC_ENTER_API((-1))
+    FUNC_ENTER_API(FAIL)
 
     /* Check arguments */
     if (!file)
-        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, (-1), "file pointer cannot be NULL");
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "file pointer cannot be NULL");
     if (!file->cls)
-        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, (-1), "file class pointer cannot be NULL");
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "file class pointer cannot be NULL");
     if (!flags)
-        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, (-1), "flags parameter cannot be NULL");
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "flags parameter cannot be NULL");
 
     /* Call private function */
     if (H5FD__query(file, flags) < 0)
-        HGOTO_ERROR(H5E_VFL, H5E_CANTGET, (-1), "unable to query feature flags");
+        HGOTO_ERROR(H5E_VFL, H5E_CANTGET, FAIL, "unable to query feature flags");
 
 done:
     FUNC_LEAVE_API(ret_value)
-}
+} /* end H5FDquery() */
 
 /*-------------------------------------------------------------------------
  * Function:    H5FD_query
diff --git a/src/H5FDdevelop.h b/src/H5FDdevelop.h
index 27aa2444102..5f1be973d64 100644
--- a/src/H5FDdevelop.h
+++ b/src/H5FDdevelop.h
@@ -367,7 +367,7 @@ H5_DLL herr_t  H5FDunregister(hid_t driver_id);
 H5_DLL H5FD_t *H5FDopen(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr);
 H5_DLL herr_t  H5FDclose(H5FD_t *file);
 H5_DLL int     H5FDcmp(const H5FD_t *f1, const H5FD_t *f2);
-H5_DLL int     H5FDquery(const H5FD_t *f, unsigned long *flags);
+H5_DLL herr_t  H5FDquery(const H5FD_t *f, unsigned long *flags);
 H5_DLL haddr_t H5FDalloc(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size);
 H5_DLL herr_t  H5FDfree(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, hsize_t size);
 H5_DLL haddr_t H5FDget_eoa(H5FD_t *file, H5FD_mem_t type);
diff --git a/src/H5FDlog.c b/src/H5FDlog.c
index 30eaa9287eb..e8131726fef 100644
--- a/src/H5FDlog.c
+++ b/src/H5FDlog.c
@@ -67,14 +67,16 @@ static const char *flavors[] = {
  * occurs), and `op' will be set to H5F_OP_UNKNOWN.
  */
 typedef struct H5FD_log_t {
-    H5FD_t         pub; /* public stuff, must be first      */
-    int            fd;  /* the unix file                    */
-    haddr_t        eoa; /* end of allocated region          */
-    haddr_t        eof; /* end of file; current file size   */
+    H5FD_t  pub; /* public stuff, must be first      */
+    int     fd;  /* the unix file                    */
+    haddr_t eoa; /* end of allocated region          */
+    haddr_t eof; /* end of file; current file size   */
+#ifndef H5_HAVE_PREADWRITE
     haddr_t        pos; /* current file I/O position        */
     H5FD_file_op_t op;  /* last operation                   */
-    bool           ignore_disabled_file_locks;
-    char           filename[H5FD_MAX_FILENAME_LEN]; /* Copy of file name from open operation */
+#endif                  /* H5_HAVE_PREADWRITE */
+    bool ignore_disabled_file_locks;
+    char filename[H5FD_MAX_FILENAME_LEN]; /* Copy of file name from open operation */
 #ifndef H5_HAVE_WIN32_API
     /* On most systems the combination of device and i-node number uniquely
      * identify a file.  Note that Cygwin, MinGW and other Windows POSIX
@@ -526,8 +528,10 @@ H5FD__log_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr)
 
     file->fd = fd;
     H5_CHECKED_ASSIGN(file->eof, haddr_t, sb.st_size, h5_stat_size_t);
+#ifndef H5_HAVE_PREADWRITE
     file->pos = HADDR_UNDEF;
     file->op  = OP_UNKNOWN;
+#endif /* H5_HAVE_PREADWRITE */
 #ifdef H5_HAVE_WIN32_API
     file->hFile = (HANDLE)_get_osfhandle(fd);
     if (INVALID_HANDLE_VALUE == file->hFile)
@@ -1296,16 +1300,20 @@ H5FD__log_read(H5FD_t *_file, H5FD_mem_t type, hid_t H5_ATTR_UNUSED dxpl_id, had
             fprintf(file->logfp, "\n");
     }
 
+#ifndef H5_HAVE_PREADWRITE
     /* Update current position */
     file->pos = addr;
     file->op  = OP_READ;
+#endif /* H5_HAVE_PREADWRITE */
 
 done:
+#ifndef H5_HAVE_PREADWRITE
     if (ret_value < 0) {
         /* Reset last file I/O information */
         file->pos = HADDR_UNDEF;
         file->op  = OP_UNKNOWN;
     }
+#endif /* H5_HAVE_PREADWRITE */
 
     FUNC_LEAVE_NOAPI(ret_value)
 } /* end H5FD__log_read() */
@@ -1510,17 +1518,21 @@ H5FD__log_write(H5FD_t *_file, H5FD_mem_t type, hid_t H5_ATTR_UNUSED dxpl_id, ha
     }
 
     /* Update current position and eof */
+#ifndef H5_HAVE_PREADWRITE
     file->pos = addr;
     file->op  = OP_WRITE;
-    if (file->pos > file->eof)
-        file->eof = file->pos;
+#endif /* H5_HAVE_PREADWRITE */
+    if (addr > file->eof)
+        file->eof = addr;
 
 done:
+#ifndef H5_HAVE_PREADWRITE
     if (ret_value < 0) {
         /* Reset last file I/O information */
         file->pos = HADDR_UNDEF;
         file->op  = OP_UNKNOWN;
     }
+#endif /* H5_HAVE_PREADWRITE */
 
     FUNC_LEAVE_NOAPI(ret_value)
 } /* end H5FD__log_write() */
@@ -1621,10 +1633,12 @@ H5FD__log_truncate(H5FD_t *_file, hid_t H5_ATTR_UNUSED dxpl_id, bool H5_ATTR_UNU
         /* Update the eof value */
         file->eof = file->eoa;
 
+#ifndef H5_HAVE_PREADWRITE
         /* Reset last file I/O information */
         file->pos = HADDR_UNDEF;
         file->op  = OP_UNKNOWN;
-    } /* end if */
+#endif /* H5_HAVE_PREADWRITE */
+    }  /* end if */
 
 done:
     FUNC_LEAVE_NOAPI(ret_value)
diff --git a/src/H5FDsec2.c b/src/H5FDsec2.c
index dcac912454c..0a623e9cb36 100644
--- a/src/H5FDsec2.c
+++ b/src/H5FDsec2.c
@@ -48,14 +48,16 @@ static htri_t ignore_disabled_file_locks_s = FAIL;
  * occurs), and 'op' will be set to H5F_OP_UNKNOWN.
  */
 typedef struct H5FD_sec2_t {
-    H5FD_t         pub; /* public stuff, must be first      */
-    int            fd;  /* the filesystem file descriptor   */
-    haddr_t        eoa; /* end of allocated region          */
-    haddr_t        eof; /* end of file; current file size   */
+    H5FD_t  pub; /* public stuff, must be first      */
+    int     fd;  /* the filesystem file descriptor   */
+    haddr_t eoa; /* end of allocated region          */
+    haddr_t eof; /* end of file; current file size   */
+#ifndef H5_HAVE_PREADWRITE
     haddr_t        pos; /* current file I/O position        */
     H5FD_file_op_t op;  /* last operation                   */
-    bool           ignore_disabled_file_locks;
-    char           filename[H5FD_MAX_FILENAME_LEN]; /* Copy of file name from open operation */
+#endif                  /* H5_HAVE_PREADWRITE */
+    bool ignore_disabled_file_locks;
+    char filename[H5FD_MAX_FILENAME_LEN]; /* Copy of file name from open operation */
 #ifndef H5_HAVE_WIN32_API
     /* On most systems the combination of device and i-node number uniquely
      * identify a file.  Note that Cygwin, MinGW and other Windows POSIX
@@ -334,8 +336,10 @@ H5FD__sec2_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr
 
     file->fd = fd;
     H5_CHECKED_ASSIGN(file->eof, haddr_t, sb.st_size, h5_stat_size_t);
+#ifndef H5_HAVE_PREADWRITE
     file->pos = HADDR_UNDEF;
     file->op  = OP_UNKNOWN;
+#endif /* H5_HAVE_PREADWRITE */
 #ifdef H5_HAVE_WIN32_API
     file->hFile = (HANDLE)_get_osfhandle(fd);
     if (INVALID_HANDLE_VALUE == file->hFile)
@@ -721,16 +725,20 @@ H5FD__sec2_read(H5FD_t *_file, H5FD_mem_t H5_ATTR_UNUSED type, hid_t H5_ATTR_UNU
         buf = (char *)buf + bytes_read;
     } /* end while */
 
+#ifndef H5_HAVE_PREADWRITE
     /* Update current position */
     file->pos = addr;
     file->op  = OP_READ;
+#endif /* H5_HAVE_PREADWRITE */
 
 done:
+#ifndef H5_HAVE_PREADWRITE
     if (ret_value < 0) {
         /* Reset last file I/O information */
         file->pos = HADDR_UNDEF;
         file->op  = OP_UNKNOWN;
-    } /* end if */
+    }  /* end if */
+#endif /* H5_HAVE_PREADWRITE */
 
     FUNC_LEAVE_NOAPI(ret_value)
 } /* end H5FD__sec2_read() */
@@ -822,17 +830,21 @@ H5FD__sec2_write(H5FD_t *_file, H5FD_mem_t H5_ATTR_UNUSED type, hid_t H5_ATTR_UN
     } /* end while */
 
     /* Update current position and eof */
+#ifndef H5_HAVE_PREADWRITE
     file->pos = addr;
     file->op  = OP_WRITE;
-    if (file->pos > file->eof)
-        file->eof = file->pos;
+#endif /* H5_HAVE_PREADWRITE */
+    if (addr > file->eof)
+        file->eof = addr;
 
 done:
+#ifndef H5_HAVE_PREADWRITE
     if (ret_value < 0) {
         /* Reset last file I/O information */
         file->pos = HADDR_UNDEF;
         file->op  = OP_UNKNOWN;
-    } /* end if */
+    }  /* end if */
+#endif /* H5_HAVE_PREADWRITE */
 
     FUNC_LEAVE_NOAPI(ret_value)
 } /* end H5FD__sec2_write() */
@@ -893,10 +905,12 @@ H5FD__sec2_truncate(H5FD_t *_file, hid_t H5_ATTR_UNUSED dxpl_id, bool H5_ATTR_UN
         /* Update the eof value */
         file->eof = file->eoa;
 
+#ifndef H5_HAVE_PREADWRITE
         /* Reset last file I/O information */
         file->pos = HADDR_UNDEF;
         file->op  = OP_UNKNOWN;
-    } /* end if */
+#endif /* H5_HAVE_PREADWRITE */
+    }  /* end if */
 
 done:
     FUNC_LEAVE_NOAPI(ret_value)
diff --git a/src/H5FO.c b/src/H5FO.c
index 534acbe6905..74daa7b55b0 100644
--- a/src/H5FO.c
+++ b/src/H5FO.c
@@ -136,7 +136,7 @@ H5FO_opened(const H5F_t *f, haddr_t addr)
  PURPOSE
     Insert a newly opened object/pointer pair into the opened object info set
  USAGE
-    herr_t H5FO_insert(f,addr,obj)
+    herr_t H5FO_insert(f,addr,obj,delete_flag)
         H5F_t *f;               IN/OUT: File's opened object info set
         haddr_t addr;           IN: Address of object to insert
         void *obj;              IN: Pointer to object to insert
@@ -239,9 +239,10 @@ H5FO_delete(H5F_t *f, haddr_t addr)
  PURPOSE
     Mark an object to be deleted when it is closed
  USAGE
-    herr_t H5FO_mark(f,addr)
+    herr_t H5FO_mark(f,addr,deleted)
         const H5F_t *f;         IN: File opened object is in
         haddr_t addr;           IN: Address of object to delete
+        bool deleted;           IN: true for to be deleted
 
  RETURNS
     Returns a non-negative ID for the object on success, negative on failure
@@ -366,7 +367,7 @@ H5FO_dest(const H5F_t *f)
  PURPOSE
     Create the "top" open object count set
  USAGE
-    herr_t H5FO_create(f)
+    herr_t H5FO_top_create(f)
         H5F_t *f;       IN/OUT: File to create opened object count set for
 
  RETURNS
@@ -509,7 +510,7 @@ H5FO_top_decr(const H5F_t *f, haddr_t addr)
  PURPOSE
     Return the "top" reference count for an object in a file
  USAGE
-    hsize_t H5FO_top_incr(f, addr)
+    hsize_t H5FO_top_count(f, addr)
         H5F_t *f;               IN/OUT: File's opened object info set
         haddr_t addr;           IN: Address of object to increment
 
diff --git a/src/H5P.c b/src/H5P.c
index 918a833a4bc..b69ffd6de33 100644
--- a/src/H5P.c
+++ b/src/H5P.c
@@ -788,7 +788,7 @@ H5Pget_size(hid_t id, const char *name, size_t *size /*out*/)
     The encoding of property values will be done according to the file format
     setting in fapl_id.
  USAGE
-    herr_t H5Pencode(plist_id, buf, nalloc, fapl_id)
+    herr_t H5Pencode2(plist_id, buf, nalloc, fapl_id)
         hid_t plist_id;         IN: Identifier to property list to encode
         void *buf:              OUT: buffer to gold the encoded plist
         size_t *nalloc;         IN/OUT: size of buffer needed to encode plist
diff --git a/src/H5Pdapl.c b/src/H5Pdapl.c
index 07b1d84878f..fd6f2e2ddf9 100644
--- a/src/H5Pdapl.c
+++ b/src/H5Pdapl.c
@@ -302,7 +302,7 @@ H5P__dapl_vds_file_pref_get(hid_t H5_ATTR_UNUSED prop_id, const char H5_ATTR_UNU
 /*-------------------------------------------------------------------------
  * Function:    H5P__dapl_vds_file_pref_enc
  *
- * Purpose:     Callback routine which is called whenever the vds file flags
+ * Purpose:     Callback routine which is called whenever the vds file prefix
  *              property in the dataset access property list is
  *              encoded.
  *
diff --git a/src/H5Pfapl.c b/src/H5Pfapl.c
index 4799ee41607..3d4ca8b69eb 100644
--- a/src/H5Pfapl.c
+++ b/src/H5Pfapl.c
@@ -4976,7 +4976,9 @@ H5Pget_file_locking(hid_t fapl_id, hbool_t *use_file_locking /*out*/, hbool_t *i
 /*-------------------------------------------------------------------------
  * Function:       H5P__encode_coll_md_read_flag_t
  *
- * Purpose:        Generic encoding callback routine for 'coll_md_read_flag' properties.
+ * Purpose:        Callback routine which is called whenever the collective
+ *                 metadata read flag property in the file creation property list is
+ *                 encoded.
  *
  * Return:       Success:    Non-negative
  *           Failure:    Negative
@@ -5010,7 +5012,9 @@ H5P__encode_coll_md_read_flag_t(const void *value, void **_pp, size_t *size)
 /*-------------------------------------------------------------------------
  * Function:       H5P__decode_coll_md_read_flag_t
  *
- * Purpose:        Generic decoding callback routine for 'coll_md_read_flag' properties.
+ * Purpose:        Callback routine which is called whenever the collective
+ *                 metadata read flag property in the file creation property list is
+ *                 decoded.
  *
  * Return:       Success:    Non-negative
  *           Failure:    Negative
@@ -5030,7 +5034,7 @@ H5P__decode_coll_md_read_flag_t(const void **_pp, void *_value)
     assert(*pp);
     assert(coll_md_read_flag);
 
-    /* Decode file close degree */
+    /* Decode metadata read flag */
     *coll_md_read_flag = (H5P_coll_md_read_flag_t) * (*pp);
     *pp += sizeof(H5P_coll_md_read_flag_t);
 
@@ -5468,7 +5472,7 @@ H5P__facc_mpi_info_set(hid_t H5_ATTR_UNUSED prop_id, const char H5_ATTR_UNUSED *
 /*-------------------------------------------------------------------------
  * Function:    H5P__facc_mpi_info_get
  *
- * Purpose:     Copies an MPI comminicator property when it's retrieved from a property list
+ * Purpose:     Copies an MPI info object property when it's retrieved from a property list
  *
  * Return:      Success:        Non-negative
  *              Failure:        Negative
diff --git a/src/H5Pfcpl.c b/src/H5Pfcpl.c
index 446961889d2..8e43874275c 100644
--- a/src/H5Pfcpl.c
+++ b/src/H5Pfcpl.c
@@ -645,7 +645,7 @@ H5Pget_istore_k(hid_t plist_id, unsigned *ik /*out*/)
  * Function:       H5P__fcrt_btree_rank_enc
  *
  * Purpose:        Callback routine which is called whenever the index storage
- *                 btree in file creation property list is encoded.
+ *                 btree in a file creation property list is encoded.
  *
  * Return:	   Success:	Non-negative
  *		   Failure:	Negative
@@ -688,7 +688,7 @@ H5P__fcrt_btree_rank_enc(const void *value, void **_pp, size_t *size)
  * Function:       H5P__fcrt_btree_rank_dec
  *
  * Purpose:        Callback routine which is called whenever the index storage
- *                 btree in file creation property list is decoded.
+ *                 btree in a file creation property list is decoded.
  *
  * Return:	   Success:	Non-negative
  *		   Failure:	Negative
@@ -909,8 +909,8 @@ H5Pget_shared_mesg_index(hid_t plist_id, unsigned index_num, unsigned *mesg_type
  * Function:       H5P__fcrt_shmsg_index_types_enc
  *
  * Purpose:        Callback routine which is called whenever the shared
- *                 message indec types in file creation property list
- *                 is encoded.
+ *                 message index types in a file creation property list
+ *                 are encoded.
  *
  * Return:	   Success:	Non-negative
  *		   Failure:	Negative
@@ -953,8 +953,8 @@ H5P__fcrt_shmsg_index_types_enc(const void *value, void **_pp, size_t *size)
  * Function:       H5P__fcrt_shmsg_index_types_dec
  *
  * Purpose:        Callback routine which is called whenever the shared
- *                 message indec types in file creation property list
- *                 is decoded.
+ *                 message index types in a file creation property list
+ *                 are decoded.
  *
  * Return:	   Success:	Non-negative
  *		   Failure:	Negative
@@ -994,7 +994,7 @@ H5P__fcrt_shmsg_index_types_dec(const void **_pp, void *_value)
  * Function:       H5P__fcrt_shmsg_index_minsize_enc
  *
  * Purpose:        Callback routine which is called whenever the shared
- *                 message index minsize in file creation property list
+ *                 message index minsize in a file creation property list
  *                 is encoded.
  *
  * Return:	   Success:	Non-negative
@@ -1038,7 +1038,7 @@ H5P__fcrt_shmsg_index_minsize_enc(const void *value, void **_pp, size_t *size)
  * Function:       H5P__fcrt_shmsg_index_minsize_dec
  *
  * Purpose:        Callback routine which is called whenever the shared
- *                 message indec minsize in file creation property list
+ *                 message index minsize in a file creation property list
  *                 is decoded.
  *
  * Return:	   Success:	Non-negative
diff --git a/src/H5Pgcpl.c b/src/H5Pgcpl.c
index 321930980d3..b7d9ca1fb23 100644
--- a/src/H5Pgcpl.c
+++ b/src/H5Pgcpl.c
@@ -485,7 +485,7 @@ H5Pget_link_creation_order(hid_t plist_id, unsigned *crt_order_flags /*out*/)
  * Function:       H5P__gcrt_group_info_enc
  *
  * Purpose:        Callback routine which is called whenever the group
- *                 property in the dataset access property list is
+ *                 info property in the dataset access property list is
  *                 encoded.
  *
  * Return:	   Success:	Non-negative
@@ -564,7 +564,7 @@ H5P__gcrt_group_info_dec(const void **_pp, void *_value)
  * Function:       H5P__gcrt_link_info_enc
  *
  * Purpose:        Callback routine which is called whenever the link
- *                 property in the dataset access property list is
+ *                 info property in the dataset access property list is
  *                 encoded.
  *
  * Return:	   Success:	Non-negative
diff --git a/src/H5Plapl.c b/src/H5Plapl.c
index 3f06fb9755e..64cd2996fc4 100644
--- a/src/H5Plapl.c
+++ b/src/H5Plapl.c
@@ -634,7 +634,7 @@ H5P__lacc_elink_pref_get(hid_t H5_ATTR_UNUSED prop_id, const char H5_ATTR_UNUSED
 /*-------------------------------------------------------------------------
  * Function:       H5P__lacc_elink_pref_enc
  *
- * Purpose:        Callback routine which is called whenever the elink flags
+ * Purpose:        Callback routine which is called whenever the elink prefix
  *                 property in the dataset access property list is
  *                 encoded.
  *
diff --git a/src/H5Pocpypl.c b/src/H5Pocpypl.c
index 829371efcec..5cf809140cd 100644
--- a/src/H5Pocpypl.c
+++ b/src/H5Pocpypl.c
@@ -179,7 +179,7 @@ H5P__ocpy_reg_prop(H5P_genclass_t *pclass)
 /*-------------------------------------------------------------------------
  * Function:    H5P__free_merge_comm_dtype_list
  *
- * Purpose:     Frees the provided merge named dtype list
+ * Purpose:     Frees the provided merge committed dtype list
  *
  * Return:      NULL
  *
@@ -329,9 +329,9 @@ H5P__ocpy_merge_comm_dt_list_get(hid_t H5_ATTR_UNUSED prop_id, const char H5_ATT
 /*-------------------------------------------------------------------------
  * Function:       H5P__ocpy_merge_comm_dt_list_enc
  *
- * Purpose:        Callback routine which is called whenever the common
- *		   datatype property in the object copy property list is
- *                 decoded.
+ * Purpose:        Callback routine which is called whenever the merge
+ *                 committed datatype list property in the object copy
+ *                 property list is encoded.
  *
  * Return:	   Success:	Non-negative
  *		   Failure:	Negative
@@ -383,9 +383,9 @@ H5P__ocpy_merge_comm_dt_list_enc(const void *value, void **_pp, size_t *size)
 /*-------------------------------------------------------------------------
  * Function:       H5P__ocpy_merge_comm_dt_list_dec
  *
- * Purpose:        Callback routine which is called whenever the common
- *                 datatype property in the dataset access property list is
- *                 decoded.
+ * Purpose:        Callback routine which is called whenever the merge
+ *                 committed datatype list property in the object copy
+ *                 property list is decoded.
  *
  * Return:	   Success:	Non-negative
  *		   Failure:	Negative
@@ -564,7 +564,7 @@ H5P__ocpy_merge_comm_dt_list_cmp(const void *_dt_list1, const void *_dt_list2, s
 /*--------------------------------------------------------------------------
  * Function:	H5P__ocpy_merge_comm_dt_list_close
  *
- * Purpose:	Close the merge common datatype list property
+ * Purpose:	Close the merge committed datatype list property
  *
  * Return:	Success:	Non-negative
  * 		Failure:	Negative
@@ -578,7 +578,7 @@ H5P__ocpy_merge_comm_dt_list_close(const char H5_ATTR_UNUSED *name, size_t H5_AT
 
     assert(value);
 
-    /* Free the merge named dtype list */
+    /* Free the merge committed dtype list */
     H5P__free_merge_comm_dtype_list(*(H5O_copy_dtype_merge_list_t **)value);
 
     FUNC_LEAVE_NOAPI(SUCCEED)
diff --git a/src/H5Sselect.c b/src/H5Sselect.c
index fb2927f3c3b..5625de3aab4 100644
--- a/src/H5Sselect.c
+++ b/src/H5Sselect.c
@@ -413,7 +413,7 @@ H5S_get_select_npoints(const H5S_t *space)
     Check whether the selection fits within the extent, with the current
     offset defined.
  USAGE
-    htri_t H5Sselect_void(dsid)
+    htri_t H5Sselect_valid(dsid)
         hid_t dsid;             IN: Dataspace ID to query
  RETURNS
     true if the selection fits within the extent, false if it does not and
@@ -451,7 +451,7 @@ H5Sselect_valid(hid_t spaceid)
     Check whether the selection fits within the extent, with the current
     offset defined.
  USAGE
-    htri_t H5S_select_void(space)
+    htri_t H5S_select_valid(space)
         H5S_t *space;           IN: Dataspace to query
  RETURNS
     true if the selection fits within the extent, false if it does not and
@@ -921,7 +921,7 @@ H5S_select_adjust_u(H5S_t *space, const hsize_t *offset)
  PURPOSE
     Adjust a selection by subtracting an offset
  USAGE
-    herr_t H5S_select_adjust_u(space, offset)
+    herr_t H5S_select_adjust_s(space, offset)
         H5S_t *space;           IN/OUT: Pointer to dataspace to adjust
         const hssize_t *offset; IN: Offset to subtract
  RETURNS
@@ -2786,8 +2786,8 @@ H5S_select_subtract(H5S_t *space, H5S_t *subtract_space)
  PURPOSE
     Create a dataspace selection iterator for a dataspace's selection
  USAGE
-    hid_t H5Ssel_iter_create(space)
-        hid_t   space;  IN: ID of the dataspace with selection to iterate over
+    hid_t H5Ssel_iter_create(space,elmt_size,flags)
+        hid_t   space;     IN: ID of the dataspace with selection to iterate over
  RETURNS
     Valid dataspace selection iterator ID on success, H5I_INVALID_HID on failure
  DESCRIPTION
@@ -2997,7 +2997,7 @@ H5S_select_contig_block(H5S_t *space, bool *is_contig, hsize_t *off, size_t *len
  PURPOSE
     Resets a dataspace selection iterator back to an initial state.
  USAGE
-    herr_t H5Ssel_iter_reset(sel_iter_id)
+    herr_t H5Ssel_iter_reset(sel_iter_id,space_id)
         hid_t   sel_iter_id;  IN: ID of the dataspace selection iterator to
                                   reset
         hid_t   space_id;     IN: ID of the dataspace with selection to
diff --git a/src/H5VLcallback.c b/src/H5VLcallback.c
index 02622dab936..2d89d50e7af 100644
--- a/src/H5VLcallback.c
+++ b/src/H5VLcallback.c
@@ -2025,7 +2025,7 @@ H5VL__dataset_read(size_t count, void *obj[], const H5VL_class_t *cls, hid_t mem
 } /* end H5VL__dataset_read() */
 
 /*-------------------------------------------------------------------------
- * Function:    H5VL_dataset_read_direct
+ * Function:    H5VL_dataset_read
  *
  * Purpose:     Reads data from dataset through the VOL.  This is like
  *              H5VL_dataset_read, but takes an array of void * for the
@@ -2039,8 +2039,8 @@ H5VL__dataset_read(size_t count, void *obj[], const H5VL_class_t *cls, hid_t mem
  *-------------------------------------------------------------------------
  */
 herr_t
-H5VL_dataset_read_direct(size_t count, void *obj[], H5VL_t *connector, hid_t mem_type_id[],
-                         hid_t mem_space_id[], hid_t file_space_id[], hid_t dxpl_id, void *buf[], void **req)
+H5VL_dataset_read(size_t count, void *obj[], H5VL_t *connector, hid_t mem_type_id[], hid_t mem_space_id[],
+                  hid_t file_space_id[], hid_t dxpl_id, void *buf[], void **req)
 {
     bool          vol_wrapper_set = false; /* Whether the VOL object wrapping context was set up */
     H5VL_object_t tmp_vol_obj;             /* Temporary VOL object for setting VOL wrapper */
@@ -2069,70 +2069,6 @@ H5VL_dataset_read_direct(size_t count, void *obj[], H5VL_t *connector, hid_t mem
     if (vol_wrapper_set && H5VL_reset_vol_wrapper() < 0)
         HDONE_ERROR(H5E_VOL, H5E_CANTRESET, FAIL, "can't reset VOL wrapper info");
 
-    FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5VL_dataset_read_direct() */
-
-/*-------------------------------------------------------------------------
- * Function:	H5VL_dataset_read
- *
- * Purpose:	Reads data from dataset through the VOL
- *
- * Return:      Success:    Non-negative
- *              Failure:    Negative
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5VL_dataset_read(size_t count, const H5VL_object_t *vol_obj[], hid_t mem_type_id[], hid_t mem_space_id[],
-                  hid_t file_space_id[], hid_t dxpl_id, void *buf[], void **req)
-{
-    bool   vol_wrapper_set = false; /* Whether the VOL object wrapping context was set up */
-    void  *obj_local;               /* Local buffer for obj */
-    void **obj = &obj_local;        /* Array of object pointers */
-    size_t i;                       /* Local index variable */
-    herr_t ret_value = SUCCEED;     /* Return value */
-
-    FUNC_ENTER_NOAPI(FAIL)
-
-    assert(vol_obj);
-    assert(vol_obj[0]);
-
-    /* Set wrapper info in API context */
-    if (H5VL_set_vol_wrapper(vol_obj[0]) < 0)
-        HGOTO_ERROR(H5E_VOL, H5E_CANTSET, FAIL, "can't set VOL wrapper info");
-    vol_wrapper_set = true;
-
-    /* Allocate obj array if necessary */
-    if (count > 1)
-        if (NULL == (obj = (void **)H5MM_malloc(count * sizeof(void *))))
-            HGOTO_ERROR(H5E_VOL, H5E_CANTALLOC, FAIL, "can't allocate space for object array");
-
-    /* Build obj array */
-    for (i = 0; i < count; i++) {
-        /* Get the object */
-        obj[i] = vol_obj[i]->data;
-
-        /* Make sure the class matches */
-        if (vol_obj[i]->connector->cls->value != vol_obj[0]->connector->cls->value)
-            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL,
-                        "datasets are accessed through different VOL connectors and can't be used in the "
-                        "same I/O call");
-    }
-
-    /* Call the corresponding internal VOL routine */
-    if (H5VL__dataset_read(count, obj, vol_obj[0]->connector->cls, mem_type_id, mem_space_id, file_space_id,
-                           dxpl_id, buf, req) < 0)
-        HGOTO_ERROR(H5E_VOL, H5E_READERROR, FAIL, "dataset read failed");
-
-done:
-    /* Reset object wrapping info in API context */
-    if (vol_wrapper_set && H5VL_reset_vol_wrapper() < 0)
-        HDONE_ERROR(H5E_VOL, H5E_CANTRESET, FAIL, "can't reset VOL wrapper info");
-
-    /* Free memory */
-    if (obj != &obj_local)
-        H5MM_free(obj);
-
     FUNC_LEAVE_NOAPI(ret_value)
 } /* end H5VL_dataset_read() */
 
@@ -2212,7 +2148,7 @@ H5VL__dataset_write(size_t count, void *obj[], const H5VL_class_t *cls, hid_t me
 } /* end H5VL__dataset_write() */
 
 /*-------------------------------------------------------------------------
- * Function:    H5VL_dataset_write_direct
+ * Function:    H5VL_dataset_write
  *
  * Purpose:     Writes data from dataset through the VOL.  This is like
  *              H5VL_dataset_write, but takes an array of void * for the
@@ -2226,9 +2162,8 @@ H5VL__dataset_write(size_t count, void *obj[], const H5VL_class_t *cls, hid_t me
  *-------------------------------------------------------------------------
  */
 herr_t
-H5VL_dataset_write_direct(size_t count, void *obj[], H5VL_t *connector, hid_t mem_type_id[],
-                          hid_t mem_space_id[], hid_t file_space_id[], hid_t dxpl_id, const void *buf[],
-                          void **req)
+H5VL_dataset_write(size_t count, void *obj[], H5VL_t *connector, hid_t mem_type_id[], hid_t mem_space_id[],
+                   hid_t file_space_id[], hid_t dxpl_id, const void *buf[], void **req)
 {
     bool          vol_wrapper_set = false; /* Whether the VOL object wrapping context was set up */
     H5VL_object_t tmp_vol_obj;             /* Temporary VOL object for setting VOL wrapper */
@@ -2257,70 +2192,6 @@ H5VL_dataset_write_direct(size_t count, void *obj[], H5VL_t *connector, hid_t me
     if (vol_wrapper_set && H5VL_reset_vol_wrapper() < 0)
         HDONE_ERROR(H5E_VOL, H5E_CANTRESET, FAIL, "can't reset VOL wrapper info");
 
-    FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5VL_dataset_write_direct() */
-
-/*-------------------------------------------------------------------------
- * Function:	H5VL_dataset_write
- *
- * Purpose:	Writes data from dataset through the VOL
- *
- * Return:      Success:    Non-negative
- *              Failure:    Negative
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5VL_dataset_write(size_t count, const H5VL_object_t *vol_obj[], hid_t mem_type_id[], hid_t mem_space_id[],
-                   hid_t file_space_id[], hid_t dxpl_id, const void *buf[], void **req)
-{
-    bool   vol_wrapper_set = false; /* Whether the VOL object wrapping context was set up */
-    void  *obj_local;               /* Local buffer for obj */
-    void **obj = &obj_local;        /* Array of object pointers */
-    size_t i;                       /* Local index variable */
-    herr_t ret_value = SUCCEED;     /* Return value */
-
-    FUNC_ENTER_NOAPI(FAIL)
-
-    assert(vol_obj);
-    assert(vol_obj[0]);
-
-    /* Set wrapper info in API context */
-    if (H5VL_set_vol_wrapper(vol_obj[0]) < 0)
-        HGOTO_ERROR(H5E_VOL, H5E_CANTSET, FAIL, "can't set VOL wrapper info");
-    vol_wrapper_set = true;
-
-    /* Allocate obj array if necessary */
-    if (count > 1)
-        if (NULL == (obj = (void **)H5MM_malloc(count * sizeof(void *))))
-            HGOTO_ERROR(H5E_VOL, H5E_CANTALLOC, FAIL, "can't allocate space for object array");
-
-    /* Build obj array */
-    for (i = 0; i < count; i++) {
-        /* Get the object */
-        obj[i] = vol_obj[i]->data;
-
-        /* Make sure the class matches */
-        if (vol_obj[i]->connector->cls->value != vol_obj[0]->connector->cls->value)
-            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL,
-                        "datasets are accessed through different VOL connectors and can't be used in the "
-                        "same I/O call");
-    }
-
-    /* Call the corresponding internal VOL routine */
-    if (H5VL__dataset_write(count, obj, vol_obj[0]->connector->cls, mem_type_id, mem_space_id, file_space_id,
-                            dxpl_id, buf, req) < 0)
-        HGOTO_ERROR(H5E_VOL, H5E_WRITEERROR, FAIL, "dataset write failed");
-
-done:
-    /* Reset object wrapping info in API context */
-    if (vol_wrapper_set && H5VL_reset_vol_wrapper() < 0)
-        HDONE_ERROR(H5E_VOL, H5E_CANTRESET, FAIL, "can't reset VOL wrapper info");
-
-    /* Free memory */
-    if (obj != &obj_local)
-        H5MM_free(obj);
-
     FUNC_LEAVE_NOAPI(ret_value)
 } /* end H5VL_dataset_write() */
 
diff --git a/src/H5VLprivate.h b/src/H5VLprivate.h
index d0c856b9040..79ed93c03ba 100644
--- a/src/H5VLprivate.h
+++ b/src/H5VLprivate.h
@@ -177,18 +177,12 @@ H5_DLL void  *H5VL_dataset_create(const H5VL_object_t *vol_obj, const H5VL_loc_p
                                   hid_t dcpl_id, hid_t dapl_id, hid_t dxpl_id, void **req);
 H5_DLL void  *H5VL_dataset_open(const H5VL_object_t *vol_obj, const H5VL_loc_params_t *loc_params,
                                 const char *name, hid_t dapl_id, hid_t dxpl_id, void **req);
-H5_DLL herr_t H5VL_dataset_read(size_t count, const H5VL_object_t *vol_obj[], hid_t mem_type_id[],
+H5_DLL herr_t H5VL_dataset_read(size_t count, void *obj[], H5VL_t *connector, hid_t mem_type_id[],
                                 hid_t mem_space_id[], hid_t file_space_id[], hid_t dxpl_id, void *buf[],
                                 void **req);
-H5_DLL herr_t H5VL_dataset_read_direct(size_t count, void *obj[], H5VL_t *connector, hid_t mem_type_id[],
-                                       hid_t mem_space_id[], hid_t file_space_id[], hid_t dxpl_id,
-                                       void *buf[], void **req);
-H5_DLL herr_t H5VL_dataset_write(size_t count, const H5VL_object_t *vol_obj[], hid_t mem_type_id[],
+H5_DLL herr_t H5VL_dataset_write(size_t count, void *obj[], H5VL_t *connector, hid_t mem_type_id[],
                                  hid_t mem_space_id[], hid_t file_space_id[], hid_t dxpl_id,
                                  const void *buf[], void **req);
-H5_DLL herr_t H5VL_dataset_write_direct(size_t count, void *obj[], H5VL_t *connector, hid_t mem_type_id[],
-                                        hid_t mem_space_id[], hid_t file_space_id[], hid_t dxpl_id,
-                                        const void *buf[], void **req);
 H5_DLL herr_t H5VL_dataset_get(const H5VL_object_t *vol_obj, H5VL_dataset_get_args_t *args, hid_t dxpl_id,
                                void **req);
 H5_DLL herr_t H5VL_dataset_specific(const H5VL_object_t *cls, H5VL_dataset_specific_args_t *args,
diff --git a/src/libhdf5.settings.in b/src/libhdf5.settings.autotools.in
similarity index 100%
rename from src/libhdf5.settings.in
rename to src/libhdf5.settings.autotools.in
diff --git a/config/cmake/libhdf5.settings.cmake.in b/src/libhdf5.settings.cmake.in
similarity index 100%
rename from config/cmake/libhdf5.settings.cmake.in
rename to src/libhdf5.settings.cmake.in
diff --git a/test/testfiles/error_test_1 b/test/testfiles/error_test_1
index 6d94d434e49..8ddf3e4da64 100644
--- a/test/testfiles/error_test_1
+++ b/test/testfiles/error_test_1
@@ -50,7 +50,7 @@ HDF5-DIAG: Error detected in HDF5 (version (number)):
   #001: (file name) line (number) in H5D__read_api_common(): can't read data
     major: Dataset
     minor: Read failed
-  #002: (file name) line (number) in H5VL_dataset_read_direct(): dataset read failed
+  #002: (file name) line (number) in H5VL_dataset_read(): dataset read failed
     major: Virtual Object Layer
     minor: Read failed
   #003: (file name) line (number) in H5VL__dataset_read(): dataset read failed
diff --git a/tools/src/h5repack/h5repack.c b/tools/src/h5repack/h5repack.c
index f571a701771..30351e220d7 100644
--- a/tools/src/h5repack/h5repack.c
+++ b/tools/src/h5repack/h5repack.c
@@ -746,8 +746,12 @@ check_options(pack_opt_t *options)
         }
     }
 
-    if (options->ublock_filename == NULL && options->ublock_size != 0)
-        H5TOOLS_GOTO_ERROR((-1), "file name missing for user block");
+    if (options->ublock_filename == NULL && options->ublock_size != 0) {
+        if (options->verbose > 0) {
+            printf("Warning: user block file name missing. Reserving a size of %ld...\n",
+                   options->ublock_size);
+        }
+    }
 
     /*------------------------------------------------------------------------
      * Verify alignment options; threshold is zero default but alignment not
diff --git a/tools/src/h5repack/h5repack_copy.c b/tools/src/h5repack/h5repack_copy.c
index 392191330d8..ca1e76753d4 100644
--- a/tools/src/h5repack/h5repack_copy.c
+++ b/tools/src/h5repack/h5repack_copy.c
@@ -368,7 +368,7 @@ copy_objects(const char *fnamein, const char *fnameout, pack_opt_t *options)
      *-------------------------------------------------------------------------
      */
 
-    if (options->ublock_size > 0) {
+    if (options->ublock_filename != NULL && options->ublock_size > 0) {
         if (copy_user_block(options->ublock_filename, fnameout, options->ublock_size) < 0)
             H5TOOLS_GOTO_ERROR((-1), "Could not copy user block. Exiting...");
     }
diff --git a/tools/test/h5repack/CMakeTests.cmake b/tools/test/h5repack/CMakeTests.cmake
index 0114df863f0..7f185c1fc78 100644
--- a/tools/test/h5repack/CMakeTests.cmake
+++ b/tools/test/h5repack/CMakeTests.cmake
@@ -979,6 +979,51 @@
       )
   endmacro ()
 
+  macro (ADD_H5_VERIFY_USERBLOCK testname userblocksize testfile)
+    if (NOT HDF5_USING_ANALYSIS_TOOL)
+      add_test (
+          NAME H5REPACK_VERIFY_USERBLOCK-${testname}-clear-objects
+          COMMAND ${CMAKE_COMMAND} -E remove testfiles/out-${testname}.${testfile}
+      )
+      add_test (
+          NAME H5REPACK_VERIFY_USERBLOCK-${testname}
+          COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5repack> --enable-error-stack ${ARGN} ${PROJECT_BINARY_DIR}/testfiles/${testfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${testfile}
+      )
+      set_tests_properties (H5REPACK_VERIFY_USERBLOCK-${testname} PROPERTIES
+          DEPENDS H5REPACK_VERIFY_USERBLOCK-${testname}-clear-objects
+      )
+      if ("H5REPACK_VERIFY_USERBLOCK-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+        set_tests_properties (H5REPACK_VERIFY_USERBLOCK-${testname} PROPERTIES DISABLED true)
+      endif ()
+      add_test (
+          NAME H5REPACK_VERIFY_USERBLOCK-${testname}_DMP
+          COMMAND "${CMAKE_COMMAND}"
+              -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}"
+              -D "TEST_PROGRAM=$<TARGET_FILE:h5dump>"
+              -D "TEST_ARGS:STRING=-H;-B;out-${testname}.${testfile}"
+              -D "TEST_FOLDER=${PROJECT_BINARY_DIR}/testfiles"
+              -D "TEST_OUTPUT=${testfile}-${testname}-v.out"
+              -D "TEST_EXPECT=${resultcode}"
+              -D "TEST_FILTER:STRING=USERBLOCK_SIZE ${userblocksize}"
+              -D "TEST_REFERENCE=USERBLOCK_SIZE ${userblocksize}"
+              -P "${HDF_RESOURCES_DIR}/grepTest.cmake"
+      )
+      set_tests_properties (H5REPACK_VERIFY_USERBLOCK-${testname}_DMP PROPERTIES
+          DEPENDS H5REPACK_VERIFY_USERBLOCK-${testname}
+      )
+      if ("H5REPACK_VERIFY_USERBLOCK-${testname}_DMP" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+        set_tests_properties (H5REPACK_VERIFY_USERBLOCK-${testname}_DMP PROPERTIES DISABLED true)
+      endif ()
+      add_test (
+          NAME H5REPACK_VERIFY_USERBLOCK-${testname}-clean-objects
+          COMMAND ${CMAKE_COMMAND} -E remove testfiles/out-${testname}.${testfile}
+      )
+      set_tests_properties (H5REPACK_VERIFY_USERBLOCK-${testname}-clean-objects PROPERTIES
+          DEPENDS H5REPACK_VERIFY_USERBLOCK-${testname}_DMP
+      )
+    endif ()
+  endmacro ()
+
   macro (ADD_H5_TEST_META testname testfile)
       # Remove any output file left over from previous test run
       add_test (
@@ -1540,7 +1585,7 @@
   ADD_H5_TEST (szip_convert ${TESTTYPE} ${arg})
 
 #limit
-  set (arg ${FILE4} -f GZIP=1 -m 1024)
+  set (arg ${FILE4} -f GZIP=2 -m 1024)
   set (TESTTYPE "TEST")
   if (NOT USE_FILTER_DEFLATE)
     set (TESTTYPE "SKIP")
@@ -1719,6 +1764,9 @@
   set (arg ${FILE1} -u ${PROJECT_BINARY_DIR}/testfiles/ublock.bin -b 2048)
   ADD_H5_TEST (add_userblock "TEST" ${arg})
 
+# add a userblock reserve to file
+  ADD_H5_VERIFY_USERBLOCK (reserve_userblock 2048 ${FILE1} -b 2048)
+
 # add alignment
   set (arg ${FILE1} -t 1 -a 1)
   ADD_H5_TEST (add_alignment "TEST" ${arg})
diff --git a/tools/test/h5repack/expected/deflate_limit.h5repack_layout.h5.ddl b/tools/test/h5repack/expected/deflate_limit.h5repack_layout.h5.ddl
index 9d4ca9b65e8..56a64b79373 100644
--- a/tools/test/h5repack/expected/deflate_limit.h5repack_layout.h5.ddl
+++ b/tools/test/h5repack/expected/deflate_limit.h5repack_layout.h5.ddl
@@ -8,7 +8,7 @@ GROUP "/" {
          SIZE XXXX (2.XXX:1 COMPRESSION)
       }
       FILTERS {
-         COMPRESSION DEFLATE { LEVEL 1 }
+         COMPRESSION DEFLATE { LEVEL 2 }
       }
       FILLVALUE {
          FILL_TIME H5D_FILL_TIME_IFSET
@@ -26,7 +26,7 @@ GROUP "/" {
          SIZE XXXX (2.XXX:1 COMPRESSION)
       }
       FILTERS {
-         COMPRESSION DEFLATE { LEVEL 1 }
+         COMPRESSION DEFLATE { LEVEL 2 }
       }
       FILLVALUE {
          FILL_TIME H5D_FILL_TIME_IFSET
@@ -44,7 +44,7 @@ GROUP "/" {
          SIZE XXXX (2.XXX:1 COMPRESSION)
       }
       FILTERS {
-         COMPRESSION DEFLATE { LEVEL 1 }
+         COMPRESSION DEFLATE { LEVEL 2 }
       }
       FILLVALUE {
          FILL_TIME H5D_FILL_TIME_IFSET
@@ -62,7 +62,7 @@ GROUP "/" {
          SIZE XXXX (2.XXX:1 COMPRESSION)
       }
       FILTERS {
-         COMPRESSION DEFLATE { LEVEL 1 }
+         COMPRESSION DEFLATE { LEVEL 2 }
       }
       FILLVALUE {
          FILL_TIME H5D_FILL_TIME_IFSET
@@ -80,7 +80,7 @@ GROUP "/" {
          SIZE XXXX (2.XXX:1 COMPRESSION)
       }
       FILTERS {
-         COMPRESSION DEFLATE { LEVEL 1 }
+         COMPRESSION DEFLATE { LEVEL 2 }
       }
       FILLVALUE {
          FILL_TIME H5D_FILL_TIME_IFSET
@@ -98,7 +98,7 @@ GROUP "/" {
          SIZE XXXX (2.XXX:1 COMPRESSION)
       }
       FILTERS {
-         COMPRESSION DEFLATE { LEVEL 1 }
+         COMPRESSION DEFLATE { LEVEL 2 }
       }
       FILLVALUE {
          FILL_TIME H5D_FILL_TIME_IFSET
@@ -116,7 +116,7 @@ GROUP "/" {
          SIZE XXXX (2.XXX:1 COMPRESSION)
       }
       FILTERS {
-         COMPRESSION DEFLATE { LEVEL 1 }
+         COMPRESSION DEFLATE { LEVEL 2 }
       }
       FILLVALUE {
          FILL_TIME H5D_FILL_TIME_IFSET
diff --git a/tools/test/h5repack/h5repack.sh.in b/tools/test/h5repack/h5repack.sh.in
index b7d46e3c8d5..9b4af9dda45 100644
--- a/tools/test/h5repack/h5repack.sh.in
+++ b/tools/test/h5repack/h5repack.sh.in
@@ -1632,7 +1632,7 @@ fi
 
 
 #limit
-arg="h5repack_layout.h5 -f GZIP=1 -m 1024"
+arg="h5repack_layout.h5 -f GZIP=2 -m 1024"
 if test $USE_FILTER_DEFLATE != "yes"  ; then
  SKIP $arg
 else
@@ -1805,6 +1805,10 @@ fi
 arg="h5repack_objs.h5 -u ublock.bin -b 2048"
 TOOLTEST add_userblock $arg
 
+# reserve a userblock to file
+arg="h5repack_objs.h5 -b 2048"
+TOOLTEST reserve_userblock $arg
+
 # add alignment
 arg="h5repack_objs.h5 -t 1 -a 1 "
 TOOLTEST add_alignment $arg