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