From e70534a216d096e3155fbdd5eec7530695a988f8 Mon Sep 17 00:00:00 2001 From: Allen Byrne <50328838+byrnHDF@users.noreply.github.com> Date: Mon, 20 Nov 2023 14:02:21 -0600 Subject: [PATCH] Sync CMake changes from hdf5 (#457) * Update CI yaml * Change filters to WARNING * Add oneAPI warning changes and remove CDASH_LOCAL * Correct CI config * Use correct vars for jpeg * No java on mingw * Skip dumper VD and VG tests * Sync latest changes for presets --- .github/workflows/autotools.yml | 72 ++++ .github/workflows/cmake-ctest.yml | 10 +- .github/workflows/cmake.yml | 58 +++ .github/workflows/intel-auto.yml | 99 +++++ .github/workflows/intel-cmake.yml | 126 ++++++ .github/workflows/main-auto.yml | 93 +++++ .github/workflows/main-cmake.yml | 257 ++++++++++++ .github/workflows/main.yml | 393 +----------------- .github/workflows/release-files.yml | 2 +- .github/workflows/release.yml | 4 +- .github/workflows/tarball.yml | 2 +- CMakeFilters.cmake | 285 +++++-------- CMakeInstallation.cmake | 66 +-- CMakeLists.txt | 68 ++- CMakePresets.json | 67 +-- CTestConfig.cmake | 12 +- config/cmake-presets/hidden-presets.json | 68 ++- config/cmake/CTestScript.cmake | 163 -------- config/cmake/ConfigureChecks.cmake | 4 +- config/cmake/HDFCompilerFlags.cmake | 81 ++-- config/cmake/HDFLibMacros.cmake | 265 +----------- config/cmake/HDFMacros.cmake | 2 + config/cmake/JPEG/CMakeLists.txt | 9 +- config/cmake/LIBAEC/CMakeLists.txt | 12 +- config/cmake/ZLIB/CMakeLists.txt | 6 +- config/cmake/ZLIB/zlib-config.cmake.in | 2 +- config/cmake/cacheinit.cmake | 31 +- config/cmake/examples/CTestScript.cmake | 3 +- config/cmake/examples/HDF4_Examples.cmake.in | 5 - config/cmake/grepTest.cmake | 34 +- config/cmake/jrunTest.cmake | 16 + config/cmake/runTest.cmake | 16 + config/cmake/scripts/CTestScript.cmake | 12 +- config/conclude.am | 8 +- config/examples.am | 8 +- config/freebsd | 2 +- config/intel-fflags | 12 +- config/intel-warnings/{ => classic}/15 | 0 config/intel-warnings/{ => classic}/18 | 0 .../{ => classic}/developer-general | 0 config/intel-warnings/{ => classic}/general | 0 .../{ => classic}/ifort-general | 0 .../{ => classic}/win-developer-general | 0 .../intel-warnings/{ => classic}/win-general | 0 .../{ => classic}/win-ifort-general | 0 config/intel-warnings/oneapi/15 | 19 + .../intel-warnings/oneapi/developer-general | 4 + config/intel-warnings/oneapi/general | 1 + config/intel-warnings/oneapi/ifort-general | 1 + .../oneapi/win-developer-general | 1 + config/intel-warnings/oneapi/win-general | 1 + .../intel-warnings/oneapi/win-ifort-general | 1 + config/sanitizer/README.md | 5 +- config/sanitizer/tools.cmake | 83 ++-- config/toolchain/build32.cmake | 2 +- config/toolchain/clang.cmake | 16 +- config/toolchain/crayle.cmake | 10 +- config/toolchain/gcc.cmake | 12 +- config/toolchain/mingw64.cmake | 2 +- config/toolchain/pgi.cmake | 12 +- hdf/CMakeLists.txt | 2 + java/CMakeLists.txt | 9 +- java/test/CMakeLists.txt | 1 - mfhdf/CMakeLists.txt | 2 + mfhdf/ncgen/CMakeTests.cmake | 24 +- 65 files changed, 1289 insertions(+), 1292 deletions(-) create mode 100644 .github/workflows/autotools.yml create mode 100644 .github/workflows/cmake.yml create mode 100644 .github/workflows/intel-auto.yml create mode 100644 .github/workflows/intel-cmake.yml create mode 100644 .github/workflows/main-auto.yml create mode 100644 .github/workflows/main-cmake.yml delete mode 100755 config/cmake/CTestScript.cmake rename config/intel-warnings/{ => classic}/15 (100%) rename config/intel-warnings/{ => classic}/18 (100%) rename config/intel-warnings/{ => classic}/developer-general (100%) rename config/intel-warnings/{ => classic}/general (100%) rename config/intel-warnings/{ => classic}/ifort-general (100%) rename config/intel-warnings/{ => classic}/win-developer-general (100%) rename config/intel-warnings/{ => classic}/win-general (100%) rename config/intel-warnings/{ => classic}/win-ifort-general (100%) create mode 100644 config/intel-warnings/oneapi/15 create mode 100644 config/intel-warnings/oneapi/developer-general create mode 100644 config/intel-warnings/oneapi/general create mode 100644 config/intel-warnings/oneapi/ifort-general create mode 100644 config/intel-warnings/oneapi/win-developer-general create mode 100644 config/intel-warnings/oneapi/win-general create mode 100644 config/intel-warnings/oneapi/win-ifort-general diff --git a/.github/workflows/autotools.yml b/.github/workflows/autotools.yml new file mode 100644 index 0000000000..edfeda9089 --- /dev/null +++ b/.github/workflows/autotools.yml @@ -0,0 +1,72 @@ +name: hdf5 dev autools CI + +# Controls when the action will run. Triggers the workflow on push or pull request +on: + workflow_call: + +permissions: + contents: read + +# A workflow run is made up of one or more jobs that can run sequentially or +# in parallel. We just have one job, but the matrix items defined below will +# run in parallel. +jobs: + call-workflow-xdr-autotools: + name: "Autotools XDR Workflows" + uses: ./.github/workflows/main-auto.yml + with: + xdr: enable + netcdf: enable + shared: enable + build_mode: "production" + + call-system-xdr-autotools: + name: "Autotools System XDR Workflows" + uses: ./.github/workflows/main-auto.yml + with: + xdr: disable + netcdf: enable + shared: enable + build_mode: "production" + + call-debug-netcdf-autotools: + name: "Autotools Debug NetCDF Workflows" + uses: ./.github/workflows/main-auto.yml + with: + xdr: enable + netcdf: enable + shared: enable + build_mode: "debug" + + call-release-netcdf-autotools: + name: "Autotools Release NetCDF Workflows" + uses: ./.github/workflows/main-auto.yml + with: + xdr: enable + netcdf: enable + shared: enable + build_mode: "production" + + call-debug-static-autotools: + name: "Autotools Debug Static Workflows" + uses: ./.github/workflows/main-auto.yml + with: + netcdf: disable + xdr: enable + shared: disable + build_mode: "debug" + + call-release-static-autotools: + name: "Autotools Release Static Workflows" + uses: ./.github/workflows/main-auto.yml + with: + netcdf: disable + xdr: enable + shared: disable + build_mode: "production" + + call-release-auto-intel: + name: "Autotools Intel Workflows" + uses: ./.github/workflows/intel-auto.yml + with: + build_mode: "production" diff --git a/.github/workflows/cmake-ctest.yml b/.github/workflows/cmake-ctest.yml index 7ad4a075e8..f5fbc0faa3 100644 --- a/.github/workflows/cmake-ctest.yml +++ b/.github/workflows/cmake-ctest.yml @@ -1,6 +1,6 @@ name: hdf4 dev ctest runs -# Controls when the action will run. Triggers the workflow on a schedule +# Controls when the action will run. Triggers the workflow on a call on: workflow_call: inputs: @@ -181,8 +181,12 @@ jobs: # symlinks the compiler executables to a common location - name: Setup GNU Fortran - uses: modflowpy/install-gfortran-action@v1 - + uses: fortran-lang/setup-fortran@v1 + id: setup-fortran + with: + compiler: gcc + version: 12 + - name: Run ctest (MacOS) id: run-ctest run: | diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml new file mode 100644 index 0000000000..a8a995bbe1 --- /dev/null +++ b/.github/workflows/cmake.yml @@ -0,0 +1,58 @@ +name: hdf5 dev cmake CI + +# Controls when the action will run. Triggers the workflow on push or pull request +on: + workflow_call: + +permissions: + contents: read + +# A workflow run is made up of one or more jobs that can run sequentially or +# in parallel. We just have one job, but the matrix items defined below will +# run in parallel. +jobs: + call-workflow-nonetcdf-cmake: + name: "CMake Release NetCDF Off Workflows" + uses: ./.github/workflows/main-cmake.yml + with: + netcdf: false + shared: true + build_mode: "Release" + + call-debug-netcdf-cmake: + name: "CMake Debug NetCDF Workflows" + uses: ./.github/workflows/main-cmake.yml + with: + netcdf: true + shared: true + build_mode: "Debug" + + call-release-netcdf-cmake: + name: "CMake Release NetCDF Workflows" + uses: ./.github/workflows/main-cmake.yml + with: + netcdf: true + shared: true + build_mode: "Release" + + call-debug-static-cmake: + name: "CMake Debug Workflows" + uses: ./.github/workflows/main-cmake.yml + with: + netcdf: false + shared: false + build_mode: "Debug" + + call-release-static-cmake: + name: "CMake Release Workflows" + uses: ./.github/workflows/main-cmake.yml + with: + netcdf: false + shared: false + build_mode: "Release" + + call-release-cmake-intel: + name: "CMake Intel Workflows" + uses: ./.github/workflows/intel-cmake.yml + with: + build_mode: "Release" diff --git a/.github/workflows/intel-auto.yml b/.github/workflows/intel-auto.yml new file mode 100644 index 0000000000..3a3d4a2c55 --- /dev/null +++ b/.github/workflows/intel-auto.yml @@ -0,0 +1,99 @@ +name: hdf5 dev autotools icx CI + +on: + workflow_call: + inputs: + build_mode: + description: "release vs. debug build" + required: true + type: string + +permissions: + contents: read + +jobs: + Intel_build_and_test: + name: "Intel ${{ inputs.build_mode }}" + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Install Dependencies + run: | + sudo apt-get update + sudo apt-get install autoconf automake libtool libtool-bin libaec-dev + + - name: Add oneAPI to apt + shell: bash + run: | + cd /tmp + wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB + sudo apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB + rm GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB + sudo add-apt-repository -y "deb https://apt.repos.intel.com/oneapi all main" + + - name: Install oneAPI dpcpp and fortran compiler + shell: bash + run: | + sudo apt update + sudo apt install -y intel-oneapi-compiler-dpcpp-cpp + sudo apt install -y intel-oneapi-compiler-fortran + sudo apt install -y intel-oneapi-mpi-devel + echo "CC=icx" >> $GITHUB_ENV + echo "CXX=icpx" >> $GITHUB_ENV + echo "FC=ifx" >> $GITHUB_ENV + + - name: Install oneAPI MKL library + shell: bash + run: | + sudo apt install -y intel-oneapi-mkl-devel + + - name: Autotools Configure + shell: bash + run: | + source /opt/intel/oneapi/setvars.sh + export PATH=$PATH:/opt/intel/oneapi/compiler/2023.2.1/linux/bin + sh ./autogen.sh + mkdir "${{ runner.workspace }}/build" + cd "${{ runner.workspace }}/build" + $GITHUB_WORKSPACE/configure \ + --enable-build-mode=${{ inputs.build_mode }} \ + --enable-netcdf \ + --enable-shared \ + --enable-hdf4-xdr \ + --disable-fortran + + # BUILD + - name: Autotools Build + run: | + source /opt/intel/oneapi/setvars.sh + export PATH=$PATH:/opt/intel/oneapi/compiler/2023.2.1/linux/bin + make -j3 + working-directory: ${{ runner.workspace }}/build + + # RUN TESTS + # NORMAL + - name: Autotools Run Tests + run: | + source /opt/intel/oneapi/setvars.sh + export PATH=$PATH:/opt/intel/oneapi/compiler/2023.2.1/linux/bin + export SYCL_DEVICE_FILTER=opencl.cpu + make check -j2 + working-directory: ${{ runner.workspace }}/build + + # INSTALL (note that this runs even when we don't run the tests) + - name: Autotools Install + run: | + source /opt/intel/oneapi/setvars.sh + export PATH=$PATH:/opt/intel/oneapi/compiler/2023.2.1/linux/bin + export SYCL_DEVICE_FILTER=opencl.cpu + make install + working-directory: ${{ runner.workspace }}/build + +# - name: Autotools Verify Install +# run: | +# source /opt/intel/oneapi/setvars.sh +# export PATH=$PATH:/opt/intel/oneapi/compiler/2023.2.1/linux/bin +# export SYCL_DEVICE_FILTER=opencl.cpu +# make check-install +# working-directory: ${{ runner.workspace }}/build diff --git a/.github/workflows/intel-cmake.yml b/.github/workflows/intel-cmake.yml new file mode 100644 index 0000000000..831772c8ac --- /dev/null +++ b/.github/workflows/intel-cmake.yml @@ -0,0 +1,126 @@ +name: hdf5 dev CMake icx CI + +# Controls when the action will run. Triggers the workflow on a call +on: + workflow_call: + inputs: + build_mode: + description: "release vs. debug build" + required: true + type: string + +permissions: + contents: read + +jobs: + # Linux (Ubuntu) w/ gcc + CMake + # + Intel_oneapi_linux: + name: "ubuntu-oneapi ${{ inputs.build_mode }}" + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + # Only CMake need ninja-build, but we just install it unilaterally + # libssl, etc. are needed for the ros3 VFD + - name: Install Linux Dependencies + run: | + sudo apt update + sudo apt-get install ninja-build doxygen graphviz + sudo apt install libssl3 libssl-dev libcurl4 libcurl4-openssl-dev + + - name: add oneAPI to env + uses: fortran-lang/setup-fortran@v1 + id: setup-fortran + with: + compiler: intel + version: '2023.2' + + - name: CMake Configure with oneapi + shell: bash + env: + FC: ${{ steps.setup-fortran.outputs.fc }} + CC: ${{ steps.setup-fortran.outputs.cc }} + CXX: ${{ steps.setup-fortran.outputs.cxx }} + 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 }} \ + -DCMAKE_TOOLCHAIN_FILE=config/toolchain/intel.cmake \ + -DJPEG_USE_LOCALCONTENT=OFF \ + -DLIBAEC_USE_LOCALCONTENT=OFF \ + -DZLIB_USE_LOCALCONTENT=OFF \ + -DHDF5_BUILD_FORTRAN=OFF \ + $GITHUB_WORKSPACE + + # BUILD + - name: CMake Build + shell: bash + env: + FC: ${{ steps.setup-fortran.outputs.fc }} + CC: ${{ steps.setup-fortran.outputs.cc }} + CXX: ${{ steps.setup-fortran.outputs.cxx }} + run: | + cmake --build . --parallel 3 --config ${{ inputs.build_mode }} + working-directory: ${{ runner.workspace }}/build + + # RUN TESTS + - name: CMake Run Tests + shell: bash + env: + FC: ${{ steps.setup-fortran.outputs.fc }} + CC: ${{ steps.setup-fortran.outputs.cc }} + CXX: ${{ steps.setup-fortran.outputs.cxx }} + run: | + ctest . --parallel 2 -C ${{ inputs.build_mode }} -V + working-directory: ${{ runner.workspace }}/build + + Intel_oneapi_windows: + name: "windows-oneapi ${{ inputs.build_mode }}" + runs-on: windows-latest + steps: + - uses: actions/checkout@v4 + + - name: Install Dependencies (Windows) + run: choco install ninja + + - name: add oneAPI to env + uses: fortran-lang/setup-fortran@v1 + id: setup-fortran + with: + compiler: intel + version: '2023.2' + + - name: CMake Configure with oneapi + shell: pwsh + env: + FC: ${{ steps.setup-fortran.outputs.fc }} + CC: ${{ steps.setup-fortran.outputs.cc }} + CXX: ${{ steps.setup-fortran.outputs.cxx }} + run: | + mkdir "${{ runner.workspace }}/build" + Set-Location -Path "${{ runner.workspace }}\\build" + cmake -C ${{ github.workspace }}/config/cmake/cacheinit.cmake -G Ninja -DCMAKE_BUILD_TYPE=${{ inputs.build_mode }} -DHDF5_BUILD_FORTRAN=OFF -DJPEG_USE_LOCALCONTENT=OFF -DLIBAEC_USE_LOCALCONTENT=OFF -DZLIB_USE_LOCALCONTENT=OFF ${{ github.workspace }} + + # BUILD + - name: CMake Build + shell: pwsh + env: + FC: ${{ steps.setup-fortran.outputs.fc }} + CC: ${{ steps.setup-fortran.outputs.cc }} + CXX: ${{ steps.setup-fortran.outputs.cxx }} + run: | + cmake --build . --parallel 3 --config ${{ inputs.build_mode }} + working-directory: ${{ runner.workspace }}/build + + # RUN TESTS + - name: CMake Run Tests + shell: pwsh + env: + FC: ${{ steps.setup-fortran.outputs.fc }} + CC: ${{ steps.setup-fortran.outputs.cc }} + CXX: ${{ steps.setup-fortran.outputs.cxx }} + run: | + ctest . --parallel 2 -C ${{ inputs.build_mode }} -V -E HDP-dumpv + working-directory: ${{ runner.workspace }}/build diff --git a/.github/workflows/main-auto.yml b/.github/workflows/main-auto.yml new file mode 100644 index 0000000000..735d51510a --- /dev/null +++ b/.github/workflows/main-auto.yml @@ -0,0 +1,93 @@ +name: hdf4 dev CI + +# Controls when the action will run. Triggers the workflow on a call +on: + workflow_call: + inputs: + build_mode: + description: "release vs. debug build" + required: true + type: string + shared: + description: "shared enable/disable" + required: true + type: string + netcdf: + description: "netcdf enable/disable" + required: true + type: string + xdr: + description: "xdr enable/disable(system)" + required: true + type: string + +permissions: + contents: read + +# A workflow run is made up of one or more jobs that can run sequentially or +# in parallel. We just have one job, but the matrix items defined below will +# run in parallel. +jobs: + + # A workflow that builds the library and runs all the tests + # Linux (Ubuntu) w/ gcc + Autotools + # + Autotools_build_and_test: + name: "GCC-${{ inputs.build_mode }}-NC=${{ inputs.netcdf }}d-XDR=${{ inputs.xdr }}d" + # Don't run the action if the commit message says to skip CI + if: "!contains(github.event.head_commit.message, 'skip-ci')" + + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # SETUP + - name: Install Linux Dependencies + run: | + sudo apt update + sudo apt install gcc-12 g++-12 gfortran-12 + sudo apt install automake autoconf libtool libtool-bin + sudo apt install libaec0 libaec-dev + echo "CC=gcc-12" >> $GITHUB_ENV + echo "CXX=g++-12" >> $GITHUB_ENV + + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - name: Get Sources + uses: actions/checkout@v4 + + # AUTOTOOLS CONFIGURE + - name: Autotools Configure + run: | + sh ./autogen.sh + mkdir "${{ runner.workspace }}/build" + cd "${{ runner.workspace }}/build" + $GITHUB_WORKSPACE/configure \ + --enable-build-mode=${{ inputs.build_mode }} \ + --${{ inputs.xdr }}-hdf4-xdr \ + --${{ inputs.netcdf }}-netcdf \ + --disable-fortran \ + --${{ inputs.shared }}-java \ + --${{ inputs.shared }}-shared + shell: bash + + # BUILD + - name: Autotools Build + run: make -j3 + working-directory: ${{ runner.workspace }}/build + + # RUN TESTS + # NORMAL + - name: Autotools Run Tests + run: make check -j2 + working-directory: ${{ runner.workspace }}/build + + # INSTALL (note that this runs even when we don't run the tests) + - name: Autotools Install + run: make install + working-directory: ${{ runner.workspace }}/build + + # Commented out until autotools linking is fixed +# - name: Autotools Verify Install +# run: make installcheck +# working-directory: ${{ runner.workspace }}/build diff --git a/.github/workflows/main-cmake.yml b/.github/workflows/main-cmake.yml new file mode 100644 index 0000000000..cfdbb71ffd --- /dev/null +++ b/.github/workflows/main-cmake.yml @@ -0,0 +1,257 @@ +name: hdf4 dev CMake CI + +# Controls when the action will run. Triggers the workflow on a call +on: + workflow_call: + inputs: + build_mode: + description: "release vs. debug build" + required: true + type: string + shared: + description: "shared enable/disable" + required: true + type: string + netcdf: + description: "netcdf enable/disable" + required: true + type: string + +permissions: + contents: read + +# A workflow run is made up of one or more jobs that can run sequentially or +# in parallel. We just have one job, but the matrix items defined below will +# run in parallel. +jobs: + + # A workflow that builds the library and runs all the tests + CMake_build_and_test: + strategy: + # The current matrix has one dimensions: + # + # * config name + # + # Most configuration information is added via the 'include' mechanism, + # which will append the key-value pairs in the configuration where the + # names match. + matrix: + name: + - "Windows MSVC" + - "Ubuntu gcc" + - "MacOS Clang" + + # This is where we list the bulk of the options for each configuration. + # The key-value pair values are usually appropriate for being CMake or + # Autotools configure values, so be aware of that. + + include: + + # Windows w/ MSVC + CMake + # + - name: "Windows MSVC" + os: windows-2022 + toolchain: "" + xdr: ON + fortran: OFF + localjpeg: OFF + locallibaec: OFF + localzlib: OFF + cacheinit: "-C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake" + generator: "-G \"Visual Studio 17 2022\" -A x64" + run_tests: true + use_mingw: false + + # Linux (Ubuntu) w/ gcc + CMake + # + # We might think about adding Clang, but MacOS already tests that + # so it's not critical + - name: "Ubuntu gcc" + os: ubuntu-latest + xdr: ON + fortran: OFF + localjpeg: OFF + locallibaec: OFF + localzlib: OFF + toolchain: "$GITHUB_WORKSPACE/config/toolchain/gcc.cmake" + cacheinit: "-C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake" + generator: "-G Ninja" + run_tests: true + use_mingw: false + + + # MacOS w/ Clang + CMake + # + # We could also build with the Autotools via brew installing them, + # but that seems unnecessary + - name: "MacOS Clang" + os: macos-13 + xdr: ON + fortran: OFF + localjpeg: OFF + locallibaec: OFF + localzlib: OFF + toolchain: "$GITHUB_WORKSPACE/config/toolchain/clang.cmake" + cacheinit: "-C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake" + generator: "-G Ninja" + run_tests: true + use_mingw: false + + # Linux (Ubuntu) w/ mingw + CMake + # + - name: "Ubuntu mingw CMake" + os: ubuntu-latest + xdr: ON + fortran: OFF + localjpeg: OFF + locallibaec: OFF + localzlib: OFF + toolchain: "$GITHUB_WORKSPACE/config/toolchain/mingw64.cmake" + cacheinit: "-C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake" + generator: "-G Ninja" + run_tests: false + use_mingw: true + + # Windows w/ MSVC + CMake + # + - name: "Windows static MSVC CMake" + os: windows-2022 + toolchain: "" + xdr: ON + fortran: OFF + localjpeg: OFF + locallibaec: OFF + localzlib: OFF + cacheinit: "-C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake" + generator: "-G \"Visual Studio 17 2022\" -A x64" + run_tests: true + use_mingw: false + + # Linux (Ubuntu) w/ gcc + CMake + # + # We might think about adding Clang, but MacOS already tests that + # so it's not critical + - name: "Ubuntu static gcc CMake" + os: ubuntu-latest + xdr: ON + fortran: OFF + localjpeg: OFF + locallibaec: OFF + localzlib: OFF + toolchain: "$GITHUB_WORKSPACE/config/toolchain/gcc.cmake" + cacheinit: "-C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake" + generator: "-G Ninja" + run_tests: true + use_mingw: false + + # MacOS w/ Clang + CMake + # + # We could also build with the Autotools via brew installing them, + # but that seems unnecessary + - name: "MacOS static Clang CMake" + os: macos-13 + xdr: ON + fortran: OFF + localjpeg: OFF + locallibaec: OFF + localzlib: OFF + toolchain: "$GITHUB_WORKSPACE/config/toolchain/clang.cmake" + cacheinit: "-C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake" + generator: "-G Ninja" + run_tests: true + use_mingw: false + + # Sets the job's name from the properties + name: "${{ matrix.name }}-${{ inputs.build_mode }}-NC=${{ inputs.netcdf }}" + + # Don't run the action if the commit message says to skip CI + if: "!contains(github.event.head_commit.message, 'skip-ci')" + + # The type of runner that the job will run on + runs-on: ${{ matrix.os }} + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + + # + # SETUP + # + + #Useful for debugging + - name: Dump matrix context + run: echo '${{ toJSON(matrix) }}' + + - name: Install CMake Dependencies (Linux) + run: sudo apt-get install -y ninja-build libtirpc-dev + if: matrix.os == 'ubuntu-latest' + + - name: Install MinGW Dependencies (Linux) + uses: egor-tensin/setup-mingw@v2 + with: + platform: x64 + if: (matrix.use_mingw) + + - name: Install Dependencies (Windows) + run: choco install ninja + if: matrix.os == 'windows-latest' + + - name: Install Dependencies (macOS) + run: brew install ninja + if: matrix.os == 'macos-13' + + - name: Set environment for MSVC (Windows) + run: | + # Set these environment variables so CMake picks the correct compiler + echo "CXX=cl.exe" >> $GITHUB_ENV + echo "CC=cl.exe" >> $GITHUB_ENV + if: matrix.os == 'windows-latest' + + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - name: Get Sources + uses: actions/checkout@v4 + + # + # CMAKE CONFIGURE + # + - name: Get Java setting + run: echo "useJava=${{ inputs.shared=='true' && !matrix.use_mingw }}" >> $GITHUB_ENV + + - name: CMake Configure + run: | + mkdir "${{ runner.workspace }}/build" + cd "${{ runner.workspace }}/build" + cmake ${{ matrix.cacheinit }} ${{ matrix.generator }} \ + --log-level=VERBOSE \ + -DCMAKE_BUILD_TYPE=${{ inputs.build_mode }} \ + -DCMAKE_TOOLCHAIN_FILE=${{ matrix.toolchain }} \ + -DBUILD_SHARED_LIBS:BOOL=${{ inputs.shared }} \ + -DHDF4_BUILD_EXAMPLES=ON \ + -DBUILD_JPEG_WITH_PIC:BOOL=ON \ + -DHDF4_BUILD_XDR_LIB:BOOL=${{ matrix.xdr }} \ + -DHDF4_ENABLE_NETCDF:BOOL=${{ inputs.netcdf }} \ + -DHDF4_BUILD_FORTRAN=${{ matrix.fortran }} \ + -DHDF4_BUILD_JAVA=${{ env.useJava }} \ + -DJPEG_USE_LOCALCONTENT=${{ matrix.localjpeg }} \ + -DLIBAEC_USE_LOCALCONTENT=${{ matrix.locallibaec }} \ + -DZLIB_USE_LOCALCONTENT=${{ matrix.localzlib }} \ + $GITHUB_WORKSPACE + shell: bash + + + # + # BUILD + # + + - name: CMake Build + run: cmake --build . --parallel 3 --config ${{ inputs.build_mode }} + working-directory: ${{ runner.workspace }}/build + if: "! ((matrix.name == 'Ubuntu mingw CMake') && (inputs.build_mode == 'Debug'))" + + # + # RUN TESTS + # + + - name: CMake Run Tests + run: ctest . --parallel 2 -C ${{ inputs.build_mode }} -V + working-directory: ${{ runner.workspace }}/build + if: (matrix.run_tests) && ! ((matrix.name == 'Ubuntu mingw CMake') && (inputs.build_mode == 'Debug')) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 99f66dbf9e..67af3f7d08 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -12,6 +12,11 @@ on: - 'COPYING' - '**.md' +# Using concurrency to cancel any in-progress job or run +concurrency: + group: ${{ github.workflow }}-${{ github.sha || github.event.pull_request.number }} + cancel-in-progress: true + permissions: contents: read @@ -19,386 +24,10 @@ permissions: # in parallel. We just have one job, but the matrix items defined below will # run in parallel. jobs: + workflow-autotools: + name: "Autotools Workflows" + uses: ./.github/workflows/autotools.yml - # A workflow that builds the library and runs all the tests - build_and_test: - - strategy: - fail-fast: true - - # The current matrix has three dimensions: - # - # * config name - # * netcdf on/off - # * release vs. debug build - # - # Most configuration information is added via the 'include' mechanism, - # which will append the key-value pairs in the configuration where the - # names match. - - matrix: - - name: - - "Windows MSVC CMake" - - "Ubuntu gcc CMake" - - "Ubuntu gcc Autotools" - - "Ubuntu gcc SysXDR Autotools" - - "MacOS Clang CMake" - - "Ubuntu mingw CMake" - - "Windows static MSVC CMake" - - "Ubuntu static gcc CMake" - - "Ubuntu static gcc Autotools" - - "MacOS static Clang CMake" - - netcdf: - - enabled: enable - cmake: ON - text: " NC" - - enabled: disable - cmake: OFF - text: "" - - build_mode: - - text: " REL" - cmake: "Release" - autotools: "enable-production" - - text: " DBG" - cmake: "Debug" - autotools: "disable-production" - - # This is where we list the bulk of the options for each configuration. - # The key-value pair values are usually appropriate for being CMake or - # Autotools configure values, so be aware of that. - - include: - - # Windows w/ MSVC + CMake - # - - name: "Windows MSVC CMake" - os: windows-2022 - toolchain: "" - shared: ON - xdr: ON - fortran: OFF - java: ON - jpegfc: ON - libaecfc: ON - zlibfc: ON - cacheinit: "-C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake" - generator: "-G \"Visual Studio 17 2022\" -A x64" - run_tests: true - use_mingw: false - - # Linux (Ubuntu) w/ gcc + CMake - # - # We might think about adding Clang, but MacOS already tests that - # so it's not critical - - name: "Ubuntu gcc CMake" - os: ubuntu-latest - shared: ON - xdr: ON - fortran: OFF - java: ON - jpegfc: ON - libaecfc: ON - zlibfc: ON - toolchain: "$GITHUB_WORKSPACE/config/toolchain/gcc.cmake" - cacheinit: "-C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake" - generator: "-G Ninja" - run_tests: true - use_mingw: false - - # Linux (Ubuntu) w/ gcc + Autotools - # - # Keep this identical to the CMake configs. Note the difference in - # the values. - - name: "Ubuntu gcc Autotools" - os: ubuntu-latest - shared: enable - xdr: enable - fortran: disable - java: enable - toolchain: "" - generator: "autogen" - flags: "" - run_tests: true - use_mingw: false - - # Linux (Ubuntu) w/ gcc + system XDR + Autotools - # - # Keep this identical to the CMake configs. Note the difference in - # the values. - - name: "Ubuntu gcc SysXDR Autotools" - os: ubuntu-latest - shared: enable - xdr: disable - fortran: disable - java: enable - toolchain: "" - generator: "autogen" - flags: "" - run_tests: true - use_mingw: false - - # MacOS w/ Clang + CMake - # - # We could also build with the Autotools via brew installing them, - # but that seems unnecessary - - name: "MacOS Clang CMake" - os: macos-13 - shared: ON - xdr: ON - fortran: OFF - java: ON - jpegfc: ON - libaecfc: ON - zlibfc: ON - toolchain: "$GITHUB_WORKSPACE/config/toolchain/clang.cmake" - cacheinit: "-C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake" - generator: "-G Ninja" - run_tests: true - use_mingw: false - - # Linux (Ubuntu) w/ mingw + CMake - # - - name: "Ubuntu mingw CMake" - os: ubuntu-latest - shared: ON - xdr: ON - fortran: OFF - java: OFF - jpegfc: ON - libaecfc: ON - zlibfc: ON - toolchain: "$GITHUB_WORKSPACE/config/toolchain/mingw64.cmake" - cacheinit: "-C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake" - generator: "-G Ninja" - run_tests: false - use_mingw: true - - # Windows w/ MSVC + CMake - # - - name: "Windows static MSVC CMake" - os: windows-2022 - toolchain: "" - shared: OFF - xdr: ON - fortran: OFF - java: OFF - jpegfc: ON - libaecfc: ON - zlibfc: ON - cacheinit: "-C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake" - generator: "-G \"Visual Studio 17 2022\" -A x64" - run_tests: true - use_mingw: false - - # Linux (Ubuntu) w/ gcc + CMake - # - # We might think about adding Clang, but MacOS already tests that - # so it's not critical - - name: "Ubuntu static gcc CMake" - os: ubuntu-latest - shared: OFF - xdr: ON - fortran: ON - java: OFF - jpegfc: ON - libaecfc: ON - zlibfc: ON - toolchain: "$GITHUB_WORKSPACE/config/toolchain/gcc.cmake" - cacheinit: "-C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake" - generator: "-G Ninja" - run_tests: true - use_mingw: false - - # Linux (Ubuntu) w/ gcc + Autotools - # - # Keep this identical to the CMake configs. Note the difference in - # the values. - - name: "Ubuntu static gcc Autotools" - os: ubuntu-latest - shared: disable - # NOTE: Fortran and HDF4 XDR have linking problems w/ Autotools - xdr: enable - fortran: disable - java: disable - toolchain: "" - generator: "autogen" - flags: "" - run_tests: true - use_mingw: false - - # MacOS w/ Clang + CMake - # - # We could also build with the Autotools via brew installing them, - # but that seems unnecessary - - name: "MacOS static Clang CMake" - os: macos-13 - shared: OFF - xdr: ON - fortran: OFF - java: OFF - jpegfc: ON - libaecfc: ON - zlibfc: ON - toolchain: "$GITHUB_WORKSPACE/config/toolchain/clang.cmake" - cacheinit: "-C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake" - generator: "-G Ninja" - run_tests: true - use_mingw: false - - # Sets the job's name from the properties - name: "${{ matrix.name }}${{ matrix.build_mode.text }}${{ matrix.shared.text }}${{ matrix.netcdf.text }}" - - # The type of runner that the job will run on - runs-on: ${{ matrix.os }} - - # Don't run the action if the commit message says to skip CI - if: "!contains(github.event.head_commit.message, 'skip-ci')" - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - - # - # SETUP - # - - #Useful for debugging - - name: Dump matrix context - run: echo '${{ toJSON(matrix) }}' - - - name: Install CMake Dependencies (Linux) - run: sudo apt-get install -y ninja-build libtirpc-dev - if: matrix.os == 'ubuntu-latest' - - - name: Install MinGW Dependencies (Linux) - uses: egor-tensin/setup-mingw@v2 - with: - platform: x64 - if: (matrix.use_mingw) - - - name: Install Autotools Dependencies (Linux) - run: | - sudo apt update - sudo apt install automake autoconf libtool libtool-bin - sudo apt install gcc-12 g++-12 gfortran-12 - echo "CC=gcc-12" >> $GITHUB_ENV - echo "CXX=g++-12" >> $GITHUB_ENV - if: (matrix.generator == 'autogen') - - - name: Install Dependencies (Windows) - run: | - choco install ninja - if: matrix.os == 'windows-2022' - - - name: Install Dependencies (macOS) - run: brew install ninja - if: matrix.os == 'macos-13' - - - name: Set environment for MSVC (Windows) - run: | - # Set these environment variables so CMake picks the correct compiler - echo "CXX=cl.exe" >> $GITHUB_ENV - echo "CC=cl.exe" >> $GITHUB_ENV - if: matrix.os == 'windows-2022' - - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - name: Get Sources - uses: actions/checkout@v3 - - # - # AUTOTOOLS CONFIGURE - # - - - name: Autotools Configure - run: | - sh ./autogen.sh - mkdir "${{ runner.workspace }}/build" - cd "${{ runner.workspace }}/build" - ${{ matrix.flags }} $GITHUB_WORKSPACE/configure \ - --${{ matrix.build_mode.autotools }} \ - --${{ matrix.xdr }}-hdf4-xdr \ - --${{ matrix.netcdf.enabled }}-netcdf \ - --${{ matrix.fortran }}-fortran \ - --${{ matrix.java }}-java \ - --${{ matrix.shared }}-shared - echo - echo "*** h4config.h ***" - echo - cat ./hdf/src/h4config.h - shell: bash - if: (matrix.generator == 'autogen') - - # - # CMAKE CONFIGURE - # - - - name: CMake Configure - run: | - mkdir "${{ runner.workspace }}/build" - cd "${{ runner.workspace }}/build" - cmake ${{ matrix.cacheinit }} ${{ matrix.generator }} \ - --log-level=VERBOSE \ - -DCMAKE_BUILD_TYPE=${{ matrix.build_mode.cmake }} \ - -DCMAKE_TOOLCHAIN_FILE=${{ matrix.toolchain }} \ - -DBUILD_SHARED_LIBS:BOOL=${{ matrix.shared }} \ - -DHDF4_BUILD_EXAMPLES=ON \ - -DBUILD_JPEG_WITH_PIC:BOOL=ON \ - -DHDF4_BUILD_XDR_LIB:BOOL=${{ matrix.xdr }} \ - -DHDF4_ENABLE_NETCDF:BOOL=${{ matrix.netcdf.cmake }} \ - -DHDF4_BUILD_FORTRAN=${{ matrix.fortran }} \ - -DHDF4_BUILD_JAVA=${{ matrix.java }} \ - -DBUILD_JPEG_WITH_FETCHCONTENT=${{ matrix.jpegfc }} \ - -DBUILD_SZIP_WITH_FETCHCONTENT=${{ matrix.libaecfc }} \ - -DBUILD_ZLIB_WITH_FETCHCONTENT=${{ matrix.zlibfc }} \ - $GITHUB_WORKSPACE - echo - echo "*** h4config.h ***" - echo - cat ./h4config.h - shell: bash - if: (matrix.generator != 'autogen') && ! ((matrix.name == 'Ubuntu mingw CMake') && (matrix.build_mode.cmake == 'Debug')) - - # - # BUILD - # - - - name: Autotools Build - run: make - working-directory: ${{ runner.workspace }}/build - if: (matrix.generator == 'autogen') - - - name: CMake Build - run: cmake --build . --config ${{ matrix.build_mode.cmake }} - working-directory: ${{ runner.workspace }}/build - if: (matrix.generator != 'autogen') && ! ((matrix.name == 'Ubuntu mingw CMake') && (matrix.build_mode.cmake == 'Debug')) - - # - # RUN TESTS - # - - - name: Autotools Run Tests - run: make check - working-directory: ${{ runner.workspace }}/build - if: (matrix.generator == 'autogen') && (matrix.run_tests) - - - name: CMake Run Tests - run: ctest --build . -C ${{ matrix.build_mode.cmake }} -V - working-directory: ${{ runner.workspace }}/build - if: (matrix.generator != 'autogen') && (matrix.run_tests) && ! ((matrix.name == 'Ubuntu mingw CMake') && (matrix.build_mode.cmake == 'Debug')) - - # - # INSTALL (note that this runs even when we don't run the tests) - # - - - name: Autotools Install - run: make install - working-directory: ${{ runner.workspace }}/build - if: (matrix.generator == 'autogen') - - # Commented out until autotools linking is fixed -# - name: Autotools Verify Install -# run: make installcheck -# working-directory: ${{ runner.workspace }}/build -# if: (matrix.generator == 'autogen') + workflow-cmake: + name: "CMake Workflows" + uses: ./.github/workflows/cmake.yml diff --git a/.github/workflows/release-files.yml b/.github/workflows/release-files.yml index 4aaea15cbb..5f64d26582 100644 --- a/.github/workflows/release-files.yml +++ b/.github/workflows/release-files.yml @@ -40,7 +40,7 @@ jobs: steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - name: Get Sources - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d2c3aafa8e..81771e100a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,4 +1,4 @@ -name: hdf4 release build +name: hdf4 dev release build # Controls when the action will run. Triggers the workflow on a manual run on: @@ -50,7 +50,7 @@ jobs: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - name: Get Sources - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: path: hdfsrc diff --git a/.github/workflows/tarball.yml b/.github/workflows/tarball.yml index 29cc68feb5..03d399c97f 100644 --- a/.github/workflows/tarball.yml +++ b/.github/workflows/tarball.yml @@ -83,7 +83,7 @@ jobs: steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - name: Get Sources - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: path: hdfsrc diff --git a/CMakeFilters.cmake b/CMakeFilters.cmake index 7103d95f0e..59c57e6d14 100644 --- a/CMakeFilters.cmake +++ b/CMakeFilters.cmake @@ -2,51 +2,36 @@ #----------------------------------------------------------------------------- # Options for HDF4 Filters #----------------------------------------------------------------------------- -option (USE_LIBAEC "Use AEC library as SZip Filter" OFF) option (USE_LIBAEC_STATIC "Use static AEC library " OFF) -option (JPEG_USE_EXTERNAL "Use External Library Building for JPEG" 0) -option (ZLIB_USE_EXTERNAL "Use External Library Building for ZLIB" 0) -option (SZIP_USE_EXTERNAL "Use External Library Building for SZIP" 0) +option (JPEG_USE_EXTERNAL "Use External Library Building for JPEG" OFF) +option (ZLIB_USE_EXTERNAL "Use External Library Building for ZLIB" OFF) +option (SZIP_USE_EXTERNAL "Use External Library Building for SZIP" OFF) -option (BUILD_ZLIB_WITH_FETCHCONTENT "Use FetchContent to use original source files" OFF) -if (BUILD_ZLIB_WITH_FETCHCONTENT) - set (ZLIB_USE_EXTERNAL "Use External Library Building for ZLIB" 1) - if (NOT ZLIB_USE_LOCALCONTENT) - set (ZLIB_URL ${ZLIB_TGZ_ORIGPATH}/${ZLIB_TGZ_ORIGNAME}) - else () - set (ZLIB_URL ${TGZPATH}/${ZLIB_TGZ_ORIGNAME}) - endif () - if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.15.0") - message (VERBOSE "Filter ZLIB file is ${ZLIB_URL}") - endif () +if (NOT JPEG_USE_LOCALCONTENT) + set (JPEG_URL ${JPEG_TGZ_ORIGPATH}/${JPEG_TGZ_NAME}) +else () + set (JPEG_URL ${TGZPATH}/${JPEG_TGZ_NAME}) +endif () +if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.15.0") + message (VERBOSE "Filter JPEG file is ${JPEG_URL}") endif () -option (BUILD_JPEG_WITH_FETCHCONTENT "Use FetchContent to use original source files" OFF) -if (BUILD_JPEG_WITH_FETCHCONTENT) - set (JPEG_USE_EXTERNAL "Use External Library Building for JPEG" 1) - if (NOT JPEG_USE_LOCALCONTENT) - set (JPEG_URL ${JPEG_TGZ_ORIGPATH}/${JPEG_TGZ_ORIGNAME}) - else () - set (JPEG_URL ${TGZPATH}/${JPEG_TGZ_ORIGNAME}) - endif () - if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.15.0") - message (VERBOSE "Filter JPEG file is ${JPEG_URL}") - endif () +if (NOT ZLIB_USE_LOCALCONTENT) + set (ZLIB_URL ${ZLIB_TGZ_ORIGPATH}/${ZLIB_TGZ_NAME}) +else () + set (ZLIB_URL ${TGZPATH}/${ZLIB_TGZ_NAME}) +endif () +if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.15.0") + message (VERBOSE "Filter ZLIB file is ${ZLIB_URL}") endif () -option (BUILD_SZIP_WITH_FETCHCONTENT "Use FetchContent to use original source files" OFF) -if (BUILD_SZIP_WITH_FETCHCONTENT) - # Only libaec library is usable - set (USE_LIBAEC ON CACHE BOOL "Use libaec szip replacement" FORCE) - set (SZIP_USE_EXTERNAL "Use External Library Building for SZIP" 1) - if (NOT LIBAEC_USE_LOCALCONTENT) - set (SZIP_URL ${LIBAEC_TGZ_ORIGPATH}/${LIBAEC_TGZ_ORIGNAME}) - else () - set (SZIP_URL ${TGZPATH}/${LIBAEC_TGZ_ORIGNAME}) - endif () - if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.15.0") - message (VERBOSE "Filter SZIP file is ${SZIP_URL}") - endif () +if (NOT LIBAEC_USE_LOCALCONTENT) + set (SZIP_URL ${LIBAEC_TGZ_ORIGPATH}/${LIBAEC_TGZ_NAME}) +else () + set (SZIP_URL ${TGZPATH}/${LIBAEC_TGZ_NAME}) +endif () +if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.15.0") + message (VERBOSE "Filter SZIP file is ${SZIP_URL}") endif () include (ExternalProject) @@ -54,9 +39,9 @@ include (ExternalProject) set (HDF4_ALLOW_EXTERNAL_SUPPORT "NO" CACHE STRING "Allow External Library Building (NO GIT TGZ)") set_property (CACHE HDF4_ALLOW_EXTERNAL_SUPPORT PROPERTY STRINGS NO GIT TGZ) if (HDF4_ALLOW_EXTERNAL_SUPPORT MATCHES "GIT" OR HDF4_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ") - set (JPEG_USE_EXTERNAL "Use External Library Building for JPEG" 1) - set (ZLIB_USE_EXTERNAL "Use External Library Building for ZLIB" 1) - set (SZIP_USE_EXTERNAL "Use External Library Building for SZIP" 1) + set (JPEG_USE_EXTERNAL ON CACHE BOOL "Use External Library Building for JPEG" FORCE) + set (ZLIB_USE_EXTERNAL ON CACHE BOOL "Use External Library Building for ZLIB" FORCE) + set (SZIP_USE_EXTERNAL ON CACHE BOOL "Use External Library Building for SZIP" FORCE) if (HDF4_ALLOW_EXTERNAL_SUPPORT MATCHES "GIT") set (JPEG_URL ${JPEG_GIT_URL} CACHE STRING "Path to jpeg git repository") set (JPEG_BRANCH ${JPEG_GIT_BRANCH}) @@ -68,47 +53,44 @@ if (HDF4_ALLOW_EXTERNAL_SUPPORT MATCHES "GIT" OR HDF4_ALLOW_EXTERNAL_SUPPORT MAT if (NOT TGZPATH) set (TGZPATH ${HDF4_SOURCE_DIR}) endif () - if (NOT BUILD_JPEG_WITH_FETCHCONTENT) - set (JPEG_URL ${TGZPATH}/${JPEG_TGZ_NAME}) - endif () - if (NOT EXISTS "${JPEG_URL}") - set (HDF4_ENABLE_JPEG_SUPPORT OFF CACHE BOOL "" FORCE) - if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.15.0") - message (VERBOSE "Filter JPEG file ${JPEG_URL} not found") - endif () - endif () - if (NOT BUILD_ZLIB_WITH_FETCHCONTENT) - set (ZLIB_URL ${TGZPATH}/${ZLIB_TGZ_NAME}) - endif () - if (NOT EXISTS "${ZLIB_URL}") - set (HDF4_ENABLE_Z_LIB_SUPPORT OFF CACHE BOOL "" FORCE) - if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.15.0") - message (VERBOSE "Filter ZLIB file ${ZLIB_URL} not found") + if (JPEG_USE_LOCALCONTENT) + if (NOT EXISTS "${JPEG_URL}") + set (HDF4_ENABLE_JPEG_LIB_SUPPORT OFF CACHE BOOL "" FORCE) + if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.15.0") + message (VERBOSE "Filter JPEG file ${JPEG_URL} not found") + endif () endif () endif () - if (NOT BUILD_SZIP_WITH_FETCHCONTENT) - set (SZIP_URL ${TGZPATH}/${SZIP_TGZ_NAME}) - if (USE_LIBAEC) - set (SZIP_URL ${TGZPATH}/${SZAEC_TGZ_NAME}) + if (ZLIB_USE_LOCALCONTENT) + if (NOT EXISTS "${ZLIB_URL}") + set (HDF4_ENABLE_Z_LIB_SUPPORT OFF CACHE BOOL "" FORCE) + if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.15.0") + message (VERBOSE "Filter ZLIB file ${ZLIB_URL} not found") + endif () endif () endif () - if (NOT EXISTS "${SZIP_URL}") - set (HDF4_ENABLE_SZIP_SUPPORT OFF CACHE BOOL "" FORCE) - if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.15.0") - message (VERBOSE "Filter SZIP file ${SZIP_URL} not found") + if (LIBAEC_USE_LOCALCONTENT) + if (NOT EXISTS "${SZIP_URL}") + set (HDF4_ENABLE_SZIP_SUPPORT OFF CACHE BOOL "" FORCE) + if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.15.0") + message (VERBOSE "Filter SZIP file ${SZIP_URL} not found") + endif () endif () endif () else () - set (JPEG_USE_EXTERNAL 0) - set (ZLIB_USE_EXTERNAL 0) - set (SZIP_USE_EXTERNAL 0) + set (HDF4_ENABLE_JPEG_LIB_SUPPORT OFF CACHE BOOL "" FORCE) + set (JPEG_USE_EXTERNAL OFF CACHE BOOL "Use External Library Building for JPEG" FORCE) + set (HDF4_ENABLE_Z_LIB_SUPPORT OFF CACHE BOOL "" FORCE) + set (ZLIB_USE_EXTERNAL OFF CACHE BOOL "Use External Library Building for ZLIB" FORCE) + set (HDF4_ENABLE_SZIP_SUPPORT OFF CACHE BOOL "" FORCE) + set (SZIP_USE_EXTERNAL OFF CACHE BOOL "Use External Library Building for SZIP" FORCE) endif () endif () #----------------------------------------------------------------------------- # Option for LibJpeg support #----------------------------------------------------------------------------- -option (HDF4_ENABLE_JPEG_LIB_SUPPORT "Enable libjpeg" ON) +option (HDF4_ENABLE_JPEG_LIB_SUPPORT "Enable libjpeg" OFF) if (HDF4_ENABLE_JPEG_LIB_SUPPORT) if (NOT H4_JPEGLIB_HEADER) if (NOT JPEG_USE_EXTERNAL) @@ -117,54 +99,36 @@ if (HDF4_ENABLE_JPEG_LIB_SUPPORT) find_package (JPEG) # Legacy find endif () if (JPEG_FOUND) - set (H4_HAVE_JPEGLIB_H 1) - set (H4_HAVE_LIBJPEG 1) set (H4_JPEGLIB_HEADER "jpeglib.h") set (JPEG_INCLUDE_DIR_GEN ${JPEG_INCLUDE_DIR}) set (JPEG_INCLUDE_DIRS ${JPEG_INCLUDE_DIRS} ${JPEG_INCLUDE_DIR}) set (LINK_COMP_LIBS ${LINK_COMP_LIBS} ${JPEG_LIBRARIES}) endif () else () - # May need to build JPEG with PIC on x64 machines with gcc - # Need to use CMAKE_ANSI_CFLAGS define so that compiler test works - if (BUILD_JPEG_WITH_PIC) - set (JPEG_CMAKE_C_FLAGS "-fPIC") - else () - if (DEFINED CMAKE_ANSI_CFLAGS) - set (JPEG_CMAKE_C_FLAGS ${CMAKE_ANSI_CFLAGS}) - else () - set (JPEG_CMAKE_C_FLAGS " ") - endif () - endif () - if (BUILD_JPEG_WITH_FETCHCONTENT) - # Only tgz files available - ORIGINAL_JPEG_LIBRARY ("TGZ" ${JPEG_CMAKE_C_FLAGS}) - set (H4_HAVE_JPEGLIB_H 1) - set (H4_HAVE_LIBJPEG 1) - set (H4_JPEGLIB_HEADER "jpeglib.h") - if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.15.0") - message (VERBOSE "JPEGLIB is built from fetch content") - endif () - set (LINK_COMP_LIBS ${LINK_COMP_LIBS} ${JPEG_STATIC_LIBRARY}) - elseif (HDF4_ALLOW_EXTERNAL_SUPPORT MATCHES "GIT" OR HDF4_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ") - EXTERNAL_JPEG_LIBRARY (${HDF4_ALLOW_EXTERNAL_SUPPORT} ${JPEG_CMAKE_C_FLAGS}) - set (H4_HAVE_JPEGLIB_H 1) - set (H4_HAVE_LIBJPEG 1) - set (H4_JPEGLIB_HEADER "jpeglib.h") + if (HDF4_ALLOW_EXTERNAL_SUPPORT MATCHES "GIT" OR HDF4_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ") + EXTERNAL_JPEG_LIBRARY (${HDF4_ALLOW_EXTERNAL_SUPPORT}) if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.15.0") message (VERBOSE "JPEGLIB is built") endif () set (LINK_COMP_LIBS ${LINK_COMP_LIBS} ${JPEG_STATIC_LIBRARY}) - else () - message (FATAL_ERROR " JPEGLib is Required for JPEGLib support in HDF4") endif () endif () else () # This project is being called from within another and JPEGLib is already configured set (H4_HAVE_JPEGLIB_H 1) + set (H4_HAVE_LIBJPEG 1) + endif () + if (JPEG_FOUND) + set (H4_HAVE_JPEGLIB_H 1) + set (H4_HAVE_LIBJPEG 1) + INCLUDE_DIRECTORIES (${JPEG_INCLUDE_DIRS}) + if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.15.0") + message (VERBOSE "Filter JPEGLIB is ON") + endif () + else () + set (HDF4_ENABLE_JPEG_LIB_SUPPORT OFF CACHE BOOL "" FORCE) + message (FATAL_ERROR " JPEG support in HDF4 was requested but not found") endif () - INCLUDE_DIRECTORIES (${JPEG_INCLUDE_DIRS}) - message (STATUS "JPEGLIB is ON") endif () #----------------------------------------------------------------------------- @@ -179,36 +143,18 @@ if (HDF4_ENABLE_Z_LIB_SUPPORT) find_package (ZLIB) # Legacy find endif () if (ZLIB_FOUND) - set (H4_HAVE_FILTER_DEFLATE 1) - set (H4_HAVE_ZLIB_H 1) - set (H4_HAVE_LIBZ 1) set (H4_ZLIB_HEADER "zlib.h") set (ZLIB_INCLUDE_DIR_GEN ${ZLIB_INCLUDE_DIR}) set (ZLIB_INCLUDE_DIRS ${ZLIB_INCLUDE_DIRS} ${ZLIB_INCLUDE_DIR}) set (LINK_COMP_LIBS ${LINK_COMP_LIBS} ${ZLIB_LIBRARIES}) endif () else () - if (BUILD_ZLIB_WITH_FETCHCONTENT) - # Only tgz files available - ORIGINAL_ZLIB_LIBRARY ("TGZ") - set (H4_HAVE_FILTER_DEFLATE 1) - set (H4_HAVE_ZLIB_H 1) - set (H4_HAVE_LIBZ 1) - if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.15.0") - message (VERBOSE "HDF4_ZLIB is built from fetch content") - endif () - set (LINK_COMP_LIBS ${LINK_COMP_LIBS} ${ZLIB_STATIC_LIBRARY}) - elseif (HDF4_ALLOW_EXTERNAL_SUPPORT MATCHES "GIT" OR HDF4_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ") + if (HDF4_ALLOW_EXTERNAL_SUPPORT MATCHES "GIT" OR HDF4_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ") EXTERNAL_ZLIB_LIBRARY (${HDF4_ALLOW_EXTERNAL_SUPPORT}) - set (H4_HAVE_FILTER_DEFLATE 1) - set (H4_HAVE_ZLIB_H 1) - set (H4_HAVE_LIBZ 1) if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.15.0") message (VERBOSE "Filter HDF4_ZLIB is built") endif () set (LINK_COMP_LIBS ${LINK_COMP_LIBS} ${ZLIB_STATIC_LIBRARY}) - else () - message (FATAL_ERROR " ZLib is Required for ZLib support in HDF4") endif () endif () else () @@ -217,9 +163,17 @@ if (HDF4_ENABLE_Z_LIB_SUPPORT) set (H4_HAVE_ZLIB_H 1) set (H4_HAVE_LIBZ 1) endif () - INCLUDE_DIRECTORIES (${ZLIB_INCLUDE_DIRS}) - if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.15.0") - message (VERBOSE "Filter HDF4_ZLIB is ON") + if (ZLIB_FOUND) + set (H4_HAVE_FILTER_DEFLATE 1) + set (H4_HAVE_ZLIB_H 1) + set (H4_HAVE_LIBZ 1) + INCLUDE_DIRECTORIES (${ZLIB_INCLUDE_DIRS}) + if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.15.0") + message (VERBOSE "Filter HDF4_ZLIB is ON") + endif () + else () + set (HDF4_ENABLE_Z_LIB_SUPPORT OFF CACHE BOOL "" FORCE) + message (FATAL_ERROR " ZLib support in HDF4 was requested but not found") endif () endif () @@ -232,75 +186,48 @@ if (HDF4_ENABLE_SZIP_SUPPORT) option (HDF4_ENABLE_SZIP_ENCODING "Use SZip Encoding" OFF) if (NOT SZIP_USE_EXTERNAL) set(SZIP_FOUND FALSE) - if (USE_LIBAEC) - set(libaec_USE_STATIC_LIBS ${USE_LIBAEC_STATIC}) - find_package (libaec 1.0.5 CONFIG) - if (SZIP_FOUND) - set (LINK_COMP_LIBS ${LINK_COMP_LIBS} ${SZIP_LIBRARIES}) - endif () + set(libaec_USE_STATIC_LIBS ${USE_LIBAEC_STATIC}) + find_package (libaec 1.0.5 CONFIG) + if (SZIP_FOUND) + set (LINK_COMP_LIBS ${LINK_COMP_LIBS} ${SZIP_LIBRARIES}) endif () if (NOT SZIP_FOUND) - find_package (SZIP NAMES ${SZIP_PACKAGE_NAME}${HDF_PACKAGE_EXT} COMPONENTS static shared) + find_package (SZIP NAMES ${LIBAEC_PACKAGE_NAME}${HDF_PACKAGE_EXT} COMPONENTS static shared) if (NOT SZIP_FOUND) find_package (SZIP) # Legacy find endif () - if (SZIP_FOUND) - set (H4_HAVE_FILTER_SZIP 1) - set (H4_HAVE_SZLIB_H 1) - set (H4_HAVE_LIBSZ 1) - set (SZIP_INCLUDE_DIR_GEN ${SZIP_INCLUDE_DIR}) - set (SZIP_INCLUDE_DIRS ${SZIP_INCLUDE_DIRS} ${SZIP_INCLUDE_DIR}) - set (LINK_COMP_LIBS ${LINK_COMP_LIBS} ${SZIP_LIBRARIES}) - endif () + endif () + if (SZIP_FOUND) + set (SZIP_INCLUDE_DIR_GEN ${SZIP_INCLUDE_DIR}) + set (SZIP_INCLUDE_DIRS ${SZIP_INCLUDE_DIRS} ${SZIP_INCLUDE_DIR}) + set (LINK_COMP_LIBS ${LINK_COMP_LIBS} ${SZIP_LIBRARIES}) endif () else () - if (BUILD_SZIP_WITH_FETCHCONTENT) - # Only tgz files available - ORIGINAL_SZIP_LIBRARY ("TGZ" ${HDF4_ENABLE_SZIP_ENCODING}) - set (H4_HAVE_FILTER_SZIP 1) - set (H4_HAVE_SZLIB_H 1) - set (H4_HAVE_LIBSZ 1) - if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.15.0") - message (VERBOSE "SZIP is built from fetch content") - endif () - if (USE_LIBAEC) - if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.15.0") - message (VERBOSE "... with library AEC") - endif () - set (H4SZIP_PACKAGE_NAME ${LIBAEC_PACKAGE_NAME}) - else () - set (H4SZIP_PACKAGE_NAME ${SZIP_PACKAGE_NAME}) - endif () - set (LINK_COMP_LIBS ${LINK_COMP_LIBS} ${SZIP_STATIC_LIBRARY}) - elseif (HDF4_ALLOW_EXTERNAL_SUPPORT MATCHES "GIT" OR HDF4_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ") + if (HDF4_ALLOW_EXTERNAL_SUPPORT MATCHES "GIT" OR HDF4_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ") EXTERNAL_SZIP_LIBRARY (${HDF4_ALLOW_EXTERNAL_SUPPORT} ${HDF4_ENABLE_SZIP_ENCODING}) - set (H4_HAVE_FILTER_SZIP 1) - set (H4_HAVE_SZLIB_H 1) - set (H4_HAVE_LIBSZ 1) if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.15.0") message (VERBOSE "Filter SZIP is built") - endif () - if (USE_LIBAEC) - if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.15.0") - message (VERBOSE "... with library AEC") - endif () - set (H4SZIP_PACKAGE_NAME ${LIBAEC_PACKAGE_NAME}) - else () - set (H4SZIP_PACKAGE_NAME ${SZIP_PACKAGE_NAME}) + message (VERBOSE "... with library AEC") endif () set (LINK_COMP_LIBS ${LINK_COMP_LIBS} ${SZIP_STATIC_LIBRARY}) - else () - message (FATAL_ERROR "SZIP is Required for SZIP support in HDF4") endif () endif () - INCLUDE_DIRECTORIES (${SZIP_INCLUDE_DIRS}) - if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.15.0") - message (VERBOSE "Filter SZIP is ON") - endif () - if (HDF4_ENABLE_SZIP_ENCODING) - set (H4_HAVE_SZIP_ENCODER 1) - set (SZIP_INFO "enabled with encoder") + if (SZIP_FOUND) + set (H4_HAVE_FILTER_SZIP 1) + set (H4_HAVE_SZLIB_H 1) + set (H4_HAVE_LIBSZ 1) + INCLUDE_DIRECTORIES (${SZIP_INCLUDE_DIRS}) + if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.15.0") + message (VERBOSE "Filter SZIP is ON") + endif () + if (HDF4_ENABLE_SZIP_ENCODING) + set (H4_HAVE_SZIP_ENCODER 1) + set (SZIP_INFO "enabled with encoder") + else () + set (SZIP_INFO "enabled with decoder only") + endif () else () - set (SZIP_INFO "enabled with decoder only") + set (HDF4_ENABLE_SZIP_SUPPORT OFF CACHE BOOL "" FORCE) + message (FATAL_ERROR "SZIP support in HDF4 was requested but not found") endif () endif () diff --git a/CMakeInstallation.cmake b/CMakeInstallation.cmake index 9dd3f5ec05..c8b2770df2 100644 --- a/CMakeInstallation.cmake +++ b/CMakeInstallation.cmake @@ -34,12 +34,10 @@ if (NOT HDF4_EXTERNALLY_CONFIGURED) NAMESPACE ${HDF_PACKAGE_NAMESPACE} COMPONENT configinstall ) -endif () -#----------------------------------------------------------------------------- -# Export all exported targets to the build tree for use by parent project -#----------------------------------------------------------------------------- -if (NOT HDF4_EXTERNALLY_CONFIGURED) + #----------------------------------------------------------------------------- + # Export all exported targets to the build tree for use by parent project + #----------------------------------------------------------------------------- export ( TARGETS ${HDF4_LIBRARIES_TO_EXPORT} ${HDF4_LIB_DEPENDENCIES} ${HDF4_UTILS_TO_EXPORT} FILE ${HDF4_PACKAGE}${HDF_PACKAGE_EXT}-targets.cmake @@ -146,16 +144,23 @@ if (HDF4_PACK_EXAMPLES) COMPONENT hdfdocuments ) - option (EXAMPLES_USE_RELEASE_NAME "Use the released examples artifact name" OFF) option (EXAMPLES_DOWNLOAD "Download to use released examples files" OFF) if (EXAMPLES_DOWNLOAD) + option (EXAMPLES_USE_RELEASE_NAME "Use the released examples artifact name" OFF) + if (EXAMPLES_USE_RELEASE_NAME) + set (EXAMPLES_NAME ${EXAMPLES_TGZ_ORIGNAME}) + else () + set (EXAMPLES_NAME ${HDF4_EXAMPLES_COMPRESSED}) + endif () if (NOT EXAMPLES_USE_LOCALCONTENT) - set (EXAMPLES_URL ${EXAMPLES_TGZ_ORIGPATH}/${EXAMPLES_TGZ_ORIGNAME}) + set (EXAMPLES_URL ${EXAMPLES_TGZ_ORIGPATH}/${EXAMPLES_NAME}) + file (DOWNLOAD ${EXAMPLES_URL} ${HDF4_BINARY_DIR}/${HDF4_EXAMPLES_COMPRESSED} STATUS EX_DL) + message (STATUS "Examples file is ${EXAMPLES_URL} STATUS=${EX_DL}") else () - set (EXAMPLES_URL ${TGZPATH}/${EXAMPLES_TGZ_ORIGNAME}) + set (EXAMPLES_URL ${TGZPATH}/${EXAMPLES_NAME}) + file (COPY_FILE ${EXAMPLES_URL} ${HDF4_BINARY_DIR}/${HDF4_EXAMPLES_COMPRESSED} RESULT EX_DL) + message (STATUS "Examples file is ${EXAMPLES_URL} RESULT=${EX_DL}") endif () - message (VERBOSE "Examples file is ${EXAMPLES_URL}") - file (DOWNLOAD ${EXAMPLES_URL} ${HDF4_BINARY_DIR}/${HDF4_EXAMPLES_COMPRESSED}) if (EXISTS "${HDF4_BINARY_DIR}/${HDF4_EXAMPLES_COMPRESSED}") execute_process( COMMAND ${CMAKE_COMMAND} -E tar xzf ${HDF4_EXAMPLES_COMPRESSED} @@ -163,7 +168,6 @@ if (HDF4_PACK_EXAMPLES) COMMAND_ECHO STDOUT ) endif () - set (EXAMPLES_USE_RELEASE_NAME ON CACHE BOOL "" FORCE) else () if (EXISTS "${HDF4_EXAMPLES_COMPRESSED_DIR}/${HDF4_EXAMPLES_COMPRESSED}") execute_process( @@ -173,20 +177,18 @@ if (HDF4_PACK_EXAMPLES) ) endif () endif () - if (EXAMPLES_USE_RELEASE_NAME) - get_filename_component (EX_LAST_EXT ${HDF4_EXAMPLES_COMPRESSED} LAST_EXT) - if (${EX_LAST_EXT} STREQUAL ".zip") - get_filename_component (EX_DIR_NAME ${HDF4_EXAMPLES_COMPRESSED} NAME_WLE) - else () - get_filename_component (EX_DIR_NAME ${HDF4_EXAMPLES_COMPRESSED} NAME_WLE) - get_filename_component (EX_DIR_NAME ${EX_DIR_NAME} NAME_WLE) - endif () - execute_process( - COMMAND ${CMAKE_COMMAND} -E rename ${EX_DIR_NAME} HDF4Examples - WORKING_DIRECTORY ${HDF4_BINARY_DIR} - COMMAND_ECHO STDOUT - ) + get_filename_component (EX_LAST_EXT ${HDF4_EXAMPLES_COMPRESSED} LAST_EXT) + if (${EX_LAST_EXT} STREQUAL ".zip") + get_filename_component (EX_DIR_NAME ${HDF4_EXAMPLES_COMPRESSED} NAME_WLE) + else () + get_filename_component (EX_DIR_NAME ${HDF4_EXAMPLES_COMPRESSED} NAME_WLE) + get_filename_component (EX_DIR_NAME ${EX_DIR_NAME} NAME_WLE) endif () + execute_process( + COMMAND ${CMAKE_COMMAND} -E rename ${EX_DIR_NAME} HDF4Examples + WORKING_DIRECTORY ${HDF4_BINARY_DIR} + COMMAND_ECHO STDOUT + ) install ( DIRECTORY ${HDF4_BINARY_DIR}/HDF4Examples DESTINATION ${HDF4_INSTALL_DATA_DIR} @@ -201,7 +203,7 @@ if (HDF4_PACK_EXAMPLES) ) install ( FILES - ${HDF_RESOURCES_DIR}/CTestScript.cmake + ${HDF_RESOURCES_DIR}/examples/CTestScript.cmake DESTINATION ${HDF4_INSTALL_DATA_DIR} COMPONENT hdfdocuments ) @@ -280,10 +282,10 @@ endif () if (NOT HDF4_EXTERNALLY_CONFIGURED AND NOT HDF4_NO_PACKAGES) set (CPACK_PACKAGE_VENDOR "HDF_Group") set (CPACK_PACKAGE_NAME "${HDF4_PACKAGE_NAME}") - if (CDASH_LOCAL) - set (CPACK_PACKAGE_VERSION "${HDF4_PACKAGE_VERSION}") - else () + if (NOT WIN32 OR HDF4_VERS_SUBRELEASE MATCHES "^[0-9]+$") set (CPACK_PACKAGE_VERSION "${HDF4_PACKAGE_VERSION_STRING}") + else () + set (CPACK_PACKAGE_VERSION "${HDF4_PACKAGE_VERSION}") endif () set (CPACK_PACKAGE_VERSION_MAJOR "${HDF4_PACKAGE_VERSION_MAJOR}") set (CPACK_PACKAGE_VERSION_MINOR "${HDF4_PACKAGE_VERSION_MINOR}") @@ -346,6 +348,13 @@ if (NOT HDF4_EXTERNALLY_CONFIGURED AND NOT HDF4_NO_PACKAGES) set(CPACK_WIX_PROPERTY_ARPURLINFOABOUT "${HDF4_PACKAGE_URL}") set(CPACK_WIX_PROPERTY_ARPHELPLINK "${HDF4_PACKAGE_BUGREPORT}") if (BUILD_SHARED_LIBS) +# if (${HDF_CFG_NAME} MATCHES "Debug") +# set (WIX_CMP_NAME "${HDF_LIB_NAME}${CMAKE_DEBUG_POSTFIX}") +# else () +# set (WIX_CMP_NAME "${HDF_LIB_NAME}") +# endif () +# configure_file (${HDF_RESOURCES_DIR}/patch.xml.in ${HDF_BINARY_DIR}/patch.xml @ONLY) +# set(CPACK_WIX_PATCH_FILE "${HDF_BINARY_DIR}/patch.xml") set(CPACK_WIX_PATCH_FILE "${HDF_RESOURCES_DIR}/patch.xml") endif () elseif (APPLE) @@ -551,4 +560,5 @@ The HDF data model, file format, API, library, and tools are open and distribute INSTALL_TYPES Full Developer User ) endif () + endif () diff --git a/CMakeLists.txt b/CMakeLists.txt index 7b76e523cb..814c18ce1b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -301,6 +301,12 @@ include (${HDF_RESOURCES_DIR}/ConfigureChecks.cmake) set (CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE ON) +#----------------------------------------------------------------------------- +# Include directories in the source or build tree should come before other +# directories to prioritize headers in the sources over installed ones. +#----------------------------------------------------------------------------- +set(CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE ON) + #----------------------------------------------------------------------------- # Mac OS X Options #----------------------------------------------------------------------------- @@ -311,28 +317,30 @@ endif () #----------------------------------------------------------------------------- # Option to Build Shared and Static libs, default is both #----------------------------------------------------------------------------- +option (ONLY_SHARED_LIBS "Only Build Shared Libraries" OFF) +mark_as_advanced (ONLY_SHARED_LIBS) option (BUILD_STATIC_LIBS "Build Static Libraries" ON) set (H4_ENABLE_STATIC_LIB NO) option (BUILD_SHARED_LIBS "Build Shared Libraries" ON) set (H4_ENABLE_SHARED_LIB NO) -option (ONLY_SHARED_LIBS "Only Build Shared Libraries" OFF) -mark_as_advanced (ONLY_SHARED_LIBS) -if (BUILD_STATIC_LIBS) - set (H4_ENABLE_STATIC_LIB YES) -endif () -if (BUILD_SHARED_LIBS) - set (H4_ENABLE_SHARED_LIB YES) -endif () - -# Force only shared libraries if all OFF -if (NOT BUILD_STATIC_LIBS AND NOT BUILD_SHARED_LIBS) +# only shared libraries is true if user forces static OFF +if (NOT BUILD_STATIC_LIBS) set (ONLY_SHARED_LIBS ON CACHE BOOL "Only Build Shared Libraries" FORCE) endif () +# only shared libraries is set ON by user then force settings if (ONLY_SHARED_LIBS) set (H4_ENABLE_STATIC_LIB NO) - set (BUILD_SHARED_LIBS ON CACHE BOOL "Build Shared Libraries") + set (BUILD_SHARED_LIBS ON CACHE BOOL "Build Shared Libraries" FORCE) + set (BUILD_STATIC_LIBS OFF CACHE BOOL "Build Static Libraries" FORCE) +endif () + +if (BUILD_STATIC_LIBS) + set (H4_ENABLE_STATIC_LIB YES) +endif () +if (BUILD_SHARED_LIBS) + set (H4_ENABLE_SHARED_LIB YES) endif () set (CMAKE_POSITION_INDEPENDENT_CODE ON) @@ -358,9 +366,13 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin" OR CYGWIN) endforeach () endif () +option (HDF4_ENABLE_ANALYZER_TOOLS "enable the use of Clang tools" OFF) +mark_as_advanced (HDF4_ENABLE_ANALYZER_TOOLS) if (HDF4_ENABLE_ANALYZER_TOOLS) include (${HDF4_SOURCE_DIR}/config/sanitizer/tools.cmake) endif () +option (HDF4_ENABLE_SANITIZERS "execute the Clang sanitizer" OFF) +mark_as_advanced (HDF4_ENABLE_SANITIZERS) if (HDF4_ENABLE_SANITIZERS) include (${HDF4_SOURCE_DIR}/config/sanitizer/sanitizers.cmake) endif () @@ -445,27 +457,6 @@ include (UserMacros.cmake) #----------------------------------------------------------------------------- include (CMakeFilters.cmake) -#----------------------------------------------------------------------------- -# Option for external libraries on windows -#----------------------------------------------------------------------------- -option (HDF4_PACKAGE_EXTLIBS "CPACK - include external libraries" OFF) -if (NOT HDF4_EXTERNALLY_CONFIGURED) - if (HDF4_PACKAGE_EXTLIBS) - set (HDF4_NO_PACKAGES OFF CACHE BOOL "CPACK - Disable packaging" FORCE) - if (HDF4_ENABLE_JPEG_LIB_SUPPORT AND JPEG_FOUND AND NOT BUILD_JPEG_WITH_FETCHCONTENT) - PACKAGE_JPEG_LIBRARY (${HDF4_ALLOW_EXTERNAL_SUPPORT}) - endif () - - if (HDF4_ENABLE_Z_LIB_SUPPORT AND ZLIB_FOUND AND NOT BUILD_ZLIB_WITH_FETCHCONTENT) - PACKAGE_ZLIB_LIBRARY (${HDF4_ALLOW_EXTERNAL_SUPPORT}) - endif () - - if (HDF4_ENABLE_SZIP_SUPPORT AND SZIP_FOUND AND NOT BUILD_SZIP_WITH_FETCHCONTENT) - PACKAGE_SZIP_LIBRARY (${HDF4_ALLOW_EXTERNAL_SUPPORT}) - endif () - endif () -endif () - #----------------------------------------------------------------------------- # Options to build tools #----------------------------------------------------------------------------- @@ -514,17 +505,6 @@ endif () add_subdirectory (hdf/src) add_subdirectory (mfhdf/libsrc) -if (HDF4_ALLOW_EXTERNAL_SUPPORT MATCHES "GIT" OR HDF4_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ") - if ((JPEG_FOUND AND JPEG_USE_EXTERNAL) OR (ZLIB_FOUND AND ZLIB_USE_EXTERNAL) OR (SZIP_FOUND AND SZIP_USE_EXTERNAL)) - if (NOT ONLY_SHARED_LIBS AND NOT BUILD_JPEG_WITH_FETCHCONTENT) - add_dependencies (${HDF4_LIB_TARGET} ${LINK_COMP_LIBS}) - endif () - if (BUILD_SHARED_LIBS AND NOT BUILD_JPEG_WITH_FETCHCONTENT) - add_dependencies (${HDF4_LIBSH_TARGET} ${LINK_COMP_LIBS}) - endif () - endif () -endif () - if (HDF4_BUILD_XDR_LIB) if (NOT ONLY_SHARED_LIBS) add_dependencies (${HDF4_MF_LIB_TARGET} ${HDF4_MF_XDR_LIB_TARGET}) diff --git a/CMakePresets.json b/CMakePresets.json index 582d065b17..0a06580f20 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -9,53 +9,64 @@ "hidden": true, "inherits": "ci-base", "cacheVariables": { - "HDF4_ALLOW_EXTERNAL_SUPPORT": "NO", - "TGZPATH": {"type": "STRING", "value": "${sourceParentDir}/temp"} + "HDF4_ALLOW_EXTERNAL_SUPPORT": {"type": "STRING", "value": "TGZ"}, + "TGZPATH": {"type": "PATH", "value": "${sourceParentDir}/temp"} + } + }, + { + "name": "ci-CompressionVars", + "hidden": true, + "cacheVariables": { + "JPEG_PACKAGE_NAME": {"type": "STRING", "value": "jpeg"}, + "JPEG_TGZ_ORIGPATH": {"type": "STRING", "value": "https://www.ijg.org/filesz"}, + "JPEG_TGZ_NAME": {"type": "STRING", "value": "jpegsrc.v9e.tar.gz"}, + "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"}, + "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"} } }, { "name": "ci-StdCompression", "hidden": true, - "inherits": "ci-base-tgz", + "inherits": ["ci-base-tgz", "ci-CompressionVars"], "cacheVariables": { "HDF4_ENABLE_JPEG_LIB_SUPPORT": "ON", "HDF4_ENABLE_Z_LIB_SUPPORT": "ON", "HDF4_ENABLE_SZIP_SUPPORT": "ON", "HDF4_ENABLE_SZIP_ENCODING": "ON", - "BUILD_JPEG_WITH_FETCHCONTENT": "ON", - "JPEG_PACKAGE_NAME": {"type": "STRING", "value": "jpeg"}, - "JPEG_TGZ_ORIGPATH": {"type": "STRING", "value": "https://www.ijg.org/filesz"}, - "JPEG_TGZ_ORIGNAME": {"type": "STRING", "value": "jpegsrc.v9e.tar.gz"}, "JPEG_USE_LOCALCONTENT": "OFF", - "BUILD_ZLIB_WITH_FETCHCONTENT": "ON", - "ZLIB_PACKAGE_NAME": {"type": "STRING", "value": "zlib"}, - "ZLIB_TGZ_ORIGPATH": {"type": "STRING", "value": "https://github.com/madler/zlib/releases/download/v1.2.13"}, - "ZLIB_TGZ_ORIGNAME": {"type": "STRING", "value": "zlib-1.2.13.tar.gz"}, "ZLIB_USE_LOCALCONTENT": "OFF", - "BUILD_SZIP_WITH_FETCHCONTENT": "ON", - "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_ORIGNAME": {"type": "STRING", "value": "libaec-1.0.6.tar.gz"}, "LIBAEC_USE_LOCALCONTENT": "OFF" } }, + { + "name": "ci-ExamplesVars", + "hidden": true, + "cacheVariables": { + "HDF4_EXAMPLES_COMPRESSED": {"type": "STRING", "value": "hdf4-examples-0.3.10.tar.gz"}, + "HDF4_EXAMPLES_COMPRESSED_DIR": {"type": "PATH", "value": "${sourceParentDir}/temp"}, + "EXAMPLES_TGZ_ORIGPATH": {"type": "STRING", "value": "https://github.com/HDFGroup/hdf4-examples/archive/refs/tags"}, + "EXAMPLES_TGZ_ORIGNAME": {"type": "STRING", "value": "v0.3.10.tar.gz"} + } + }, { "name": "ci-StdExamples", "hidden": true, - "inherits": "ci-base", + "inherits": ["ci-base", "ci-ExamplesVars", "ci-base-tgz"], "cacheVariables": { + "EXAMPLES_USE_RELEASE_NAME": "ON", + "EXAMPLES_USE_LOCALCONTENT": "OFF", "HDF4_PACK_EXAMPLES": "ON", - "HDF4_EXAMPLES_COMPRESSED": {"type": "STRING", "value": "hdf4-examples-0.3.10.tar.gz"}, - "HDF4_EXAMPLES_COMPRESSED_DIR": {"type": "STRING", "value": "${sourceParentDir}/temp"}, - "EXAMPLES_TGZ_ORIGPATH": {"type": "STRING", "value": "https://github.com/HDFGroup/hdf4-examples/archive/refs/tags/"}, - "EXAMPLES_TGZ_ORIGNAME": {"type": "STRING", "value": "v0.3.10.tar.gz"}, "EXAMPLES_DOWNLOAD": "ON" } }, { "name": "ci-StdShar", "hidden": true, - "inherits": "ci-StdCompression", + "inherits": ["ci-StdCompression", "ci-StdExamples"], "cacheVariables": { "HDF_PACKAGE_NAMESPACE": {"type": "STRING", "value": "hdf4::"}, "HDF4_BUILD_XDR_LIB": "ON", @@ -70,8 +81,7 @@ "inherits": [ "ci-x64-Release-MSVC", "ci-Java", - "ci-StdShar", - "ci-StdExamples" + "ci-StdShar" ] }, { @@ -80,8 +90,7 @@ "inherits": [ "ci-x64-Release-Clang", "ci-Java", - "ci-StdShar", - "ci-StdExamples" + "ci-StdShar" ] }, { @@ -90,8 +99,7 @@ "inherits": [ "ci-x64-Release-GNUC", "ci-Java", - "ci-StdShar", - "ci-StdExamples" + "ci-StdShar" ] } ], @@ -116,7 +124,7 @@ "name": "ci-StdShar-GNUC", "description": "GNUC Standard Build for x64 (Release)", "configurePreset": "ci-StdShar-GNUC", - "verbose": false, + "verbose": true, "inherits": [ "ci-x64-Release-GNUC" ] @@ -191,4 +199,5 @@ ] } ] -} \ No newline at end of file +} + diff --git a/CTestConfig.cmake b/CTestConfig.cmake index 6df4c78e3a..2bb8c6df34 100644 --- a/CTestConfig.cmake +++ b/CTestConfig.cmake @@ -8,17 +8,21 @@ set (CTEST_PROJECT_NAME "HDF4") set (CTEST_NIGHTLY_START_TIME "18:00:00 CST") set (CTEST_DROP_METHOD "https") -if (CDASH_LOCAL) - set (CTEST_DROP_SITE "cdash-internal.hdfgroup.org") - set (CTEST_DROP_LOCATION "/submit.php?project=HDF4") +if (CTEST_DROP_SITE_INIT) + set (CTEST_DROP_SITE "${CTEST_DROP_SITE_INIT}") else () set (CTEST_DROP_SITE "cdash.hdfgroup.org") +endif () +if (CTEST_DROP_LOCATION_INIT) + set (CTEST_DROP_LOCATION "${CTEST_DROP_LOCATION_INIT}") +else () set (CTEST_DROP_LOCATION "/submit.php?project=HDF4") endif () set (CTEST_DROP_SITE_CDASH TRUE) -set (UPDATE_TYPE git) +set(CTEST_LABELS_FOR_SUBPROJECTS HDF MFHDF JAVA) +set (UPDATE_TYPE git) set (VALGRIND_COMMAND "/usr/bin/valgrind") set (VALGRIND_COMMAND_OPTIONS "-v --tool=memcheck --leak-check=full --track-fds=yes --num-callers=50 --show-reachable=yes --track-origins=yes --malloc-fill=0xff --free-fill=0xfe") diff --git a/config/cmake-presets/hidden-presets.json b/config/cmake-presets/hidden-presets.json index 53b738866d..00c34b7bb9 100644 --- a/config/cmake-presets/hidden-presets.json +++ b/config/cmake-presets/hidden-presets.json @@ -172,6 +172,28 @@ "ci-GNUC" ] }, + { + "name": "ci-x64-Debug-Intel", + "description": "Intel for x64 (Debug)", + "hidden": true, + "inherits": [ + "ci-base", + "ci-x64", + "ci-Debug", + "ci-Intel" + ] + }, + { + "name": "ci-x64-Release-Intel", + "description": "Intel for x64 (Release)", + "hidden": true, + "inherits": [ + "ci-base", + "ci-x64", + "ci-Release", + "ci-Intel" + ] + }, { "name": "ci-x64-Debug-MSVC-asan", "description": "x64-Debug-MSVC with /fsanitize=address", @@ -277,6 +299,24 @@ "ci-base" ] }, + { + "name": "ci-x64-Debug-Intel", + "configurePreset": "ci-x64-Debug-Intel", + "hidden": true, + "inherits": [ + "ci-base" + ], + "configuration": "Debug" + }, + { + "name": "ci-x64-Release-Intel", + "configurePreset": "ci-x64-Release-Intel", + "hidden": true, + "inherits": [ + "ci-base" + ], + "configuration": "RelWithDebInfo" + }, { "name": "ci-x64-Debug-MSVC-asan", "configurePreset": "ci-x64-Debug-MSVC-asan", @@ -384,6 +424,22 @@ "ci-base" ] }, + { + "name": "ci-x64-Debug-Intel", + "configurePreset": "ci-x64-Debug-Intel", + "hidden": true, + "inherits": [ + "ci-base" + ] + }, + { + "name": "ci-x64-Release-Intel", + "configurePreset": "ci-x64-Release-Intel", + "hidden": true, + "inherits": [ + "ci-base" + ] + }, { "name": "ci-x64-Debug-MSVC-asan", "configurePreset": "ci-x64-Debug-MSVC-asan", @@ -459,6 +515,16 @@ "generators": [ "TGZ" ] + }, + { + "name": "ci-x64-Release-Intel", + "configurePreset": "ci-x64-Release-Intel", + "hidden": true, + "inherits": "ci-base", + "generators": [ + "TGZ" + ] } ] -} \ No newline at end of file +} + diff --git a/config/cmake/CTestScript.cmake b/config/cmake/CTestScript.cmake deleted file mode 100755 index 0880c04dd4..0000000000 --- a/config/cmake/CTestScript.cmake +++ /dev/null @@ -1,163 +0,0 @@ -cmake_minimum_required (VERSION 3.12) -######################################################## -# For any comments please contact cdashhelp@hdfgroup.org -# -######################################################## -# ----------------------------------------------------------- -# -- Get environment -# ----------------------------------------------------------- -if (NOT SITE_OS_NAME) - ## machine name not provided - attempt to discover with uname - ## -- set hostname - ## -------------------------- - find_program (HOSTNAME_CMD NAMES hostname) - exec_program (${HOSTNAME_CMD} ARGS OUTPUT_VARIABLE HOSTNAME) - set (CTEST_SITE "${HOSTNAME}${CTEST_SITE_EXT}") - find_program (UNAME NAMES uname) - macro (getuname name flag) - exec_program ("${UNAME}" ARGS "${flag}" OUTPUT_VARIABLE "${name}") - endmacro () - - getuname (osname -s) - getuname (osrel -r) - getuname (cpu -m) - message (STATUS "Dashboard script uname output: ${osname}-${osrel}-${cpu}\n") - - set (CTEST_BUILD_NAME "${osname}-${osrel}-${cpu}") - if (SITE_BUILDNAME_SUFFIX) - set (CTEST_BUILD_NAME "${SITE_BUILDNAME_SUFFIX}-${CTEST_BUILD_NAME}") - endif () - set (BUILD_OPTIONS "${ADD_BUILD_OPTIONS}") -else () - ## machine name provided - ## -------------------------- - if (CMAKE_HOST_UNIX) - set(CTEST_BUILD_NAME "${SITE_OS_NAME}-${SITE_OS_VERSION}-${SITE_OS_BITS}-${SITE_COMPILER_NAME}-${SITE_COMPILER_VERSION}") - else () - set(CTEST_BUILD_NAME "${SITE_OS_NAME}-${SITE_OS_VERSION}-${SITE_COMPILER_NAME}") - endif () - if (SITE_BUILDNAME_SUFFIX) - set(CTEST_BUILD_NAME "${CTEST_BUILD_NAME}-${SITE_BUILDNAME_SUFFIX}") - endif () - set (BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DSITE:STRING=${CTEST_SITE} -DBUILDNAME:STRING=${CTEST_BUILD_NAME}") -endif () - -#----------------------------------------------------------------------------- -# MacOS machines need special options -#----------------------------------------------------------------------------- -if (APPLE) - # Compiler choice - execute_process (COMMAND xcrun --find cc OUTPUT_VARIABLE XCODE_CC OUTPUT_STRIP_TRAILING_WHITESPACE) - set (ENV{CC} "${XCODE_CC}") - - if (NOT NO_MAC_FORTRAN) - # Shared fortran is not supported, build static - set (BUILD_OPTIONS "${BUILD_OPTIONS} -DBUILD_SHARED_LIBS:BOOL=OFF -DBUILD_JPEG_WITH_PIC:BOOL=ON") - else () - set (BUILD_OPTIONS "${BUILD_OPTIONS} -DHDF4_BUILD_FORTRAN:BOOL=OFF") - endif () - - set (BUILD_OPTIONS "${BUILD_OPTIONS} -DCTEST_USE_LAUNCHERS:BOOL=ON -DCMAKE_BUILD_WITH_INSTALL_RPATH:BOOL=OFF") -endif () - -#----------------------------------------------------------------------------- -set (NEED_REPOSITORY_CHECKOUT 0) -set (CTEST_CMAKE_COMMAND "\"${CMAKE_COMMAND}\"") -if (CTEST_USE_TAR_SOURCE) - ## Uncompress source if tar or zip file provided - ## -------------------------- - if (WIN32 AND NOT MINGW) - message (STATUS "extracting... [${CMAKE_EXECUTABLE_NAME} -E tar -xvf ${CTEST_DASHBOARD_ROOT}\\${CTEST_USE_TAR_SOURCE}.zip]") - execute_process (COMMAND ${CMAKE_EXECUTABLE_NAME} -E tar -xvf ${CTEST_DASHBOARD_ROOT}\\${CTEST_USE_TAR_SOURCE}.zip RESULT_VARIABLE rv) - else () - message (STATUS "extracting... [${CMAKE_EXECUTABLE_NAME} -E tar -xvf ${CTEST_DASHBOARD_ROOT}/${CTEST_USE_TAR_SOURCE}.tar]") - execute_process (COMMAND ${CMAKE_EXECUTABLE_NAME} -E tar -xvf ${CTEST_DASHBOARD_ROOT}/${CTEST_USE_TAR_SOURCE}.tar RESULT_VARIABLE rv) - endif () - - if (NOT rv EQUAL 0) - message (STATUS "extracting... [error-(${rv}) clean up]") - file (REMOVE_RECURSE "${CTEST_SOURCE_DIRECTORY}") - message (FATAL_ERROR "error: extract of ${CTEST_USE_TAR_SOURCE} failed") - endif () -endif () - -#----------------------------------------------------------------------------- -## Clear the build directory -## -------------------------- -set (CTEST_START_WITH_EMPTY_BINARY_DIRECTORY TRUE) -if (EXISTS "${CTEST_BINARY_DIRECTORY}" AND IS_DIRECTORY "${CTEST_BINARY_DIRECTORY}") - ctest_empty_binary_directory (${CTEST_BINARY_DIRECTORY}) -else () - file (MAKE_DIRECTORY "${CTEST_BINARY_DIRECTORY}") -endif () - -# Use multiple CPU cores to build -include (ProcessorCount) -ProcessorCount (N) -if (NOT N EQUAL 0) - if (MAX_PROC_COUNT) - if (N GREATER MAX_PROC_COUNT) - set (N ${MAX_PROC_COUNT}) - endif () - endif () - if (NOT WIN32) - set (CTEST_BUILD_FLAGS -j${N}) - endif () - set (ctest_test_args ${ctest_test_args} PARALLEL_LEVEL ${N}) -endif () - -#----------------------------------------------------------------------------- -# Initialize the CTEST commands -#------------------------------ -set(CTEST_CONFIGURE_TOOLSET "") -if(CMAKE_GENERATOR_TOOLSET) - set(CTEST_CONFIGURE_TOOLSET "-T${CMAKE_GENERATOR_TOOLSET}") -endif() -set(CTEST_CONFIGURE_ARCHITECTURE "") -if(CMAKE_GENERATOR_ARCHITECTURE) - set(CTEST_CONFIGURE_ARCHITECTURE "-A${CMAKE_GENERATOR_ARCHITECTURE}") -endif() -set (CTEST_CONFIGURE_COMMAND - "${CTEST_CMAKE_COMMAND} -C \"${CTEST_SOURCE_DIRECTORY}/config/cmake/cacheinit.cmake\" -DCMAKE_BUILD_TYPE:STRING=${CTEST_CONFIGURATION_TYPE} ${BUILD_OPTIONS} \"-G${CTEST_CMAKE_GENERATOR}\" \"${CTEST_CONFIGURE_ARCHITECTURE}\" \"${CTEST_CONFIGURE_TOOLSET}\" \"${CTEST_SOURCE_DIRECTORY}\"" -) -#----------------------------------------------------------------------------- - -#----------------------------------------------------------------------------- -## -- set output to english -set ($ENV{LC_MESSAGES} "en_EN") - -#----------------------------------------------------------------------------- - configure_file(${CTEST_SOURCE_DIRECTORY}/config/cmake/CTestCustom.cmake ${CTEST_BINARY_DIRECTORY}/CTestCustom.cmake) - ctest_read_custom_files ("${CTEST_BINARY_DIRECTORY}") -#----------------------------------------------------------------------------- - ## NORMAL process - ## -- LOCAL_SUBMIT reports to CDash server - ## -------------------------- - ctest_start (Experimental) - ctest_configure (BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) - if (LOCAL_SUBMIT) - ctest_submit (PARTS Configure Notes) - endif () - if (${res} LESS 0 OR ${res} GREATER 0) - file (APPEND ${CTEST_SCRIPT_DIRECTORY}/FailedCTest.txt "Failed Configure: ${res}\n") - endif () - - ctest_build (BUILD "${CTEST_BINARY_DIRECTORY}" APPEND RETURN_VALUE res NUMBER_ERRORS errval) - if (LOCAL_SUBMIT) - ctest_submit (PARTS Build) - endif () - if (${res} LESS 0 OR ${res} GREATER 0 OR ${errval} GREATER 0) - file (APPEND ${CTEST_SCRIPT_DIRECTORY}/FailedCTest.txt "Failed ${errval} Build: ${res}\n") - endif () - - ctest_test (BUILD "${CTEST_BINARY_DIRECTORY}" APPEND ${ctest_test_args} RETURN_VALUE res) - if (LOCAL_SUBMIT) - ctest_submit (PARTS Test) - endif() - if (${res} LESS 0 OR ${res} GREATER 0) - file (APPEND ${CTEST_SCRIPT_DIRECTORY}/FailedCTest.txt "Failed Tests: ${res}\n") - endif () - if (${res} LESS 0 OR ${res} GREATER 0) - message (FATAL_ERROR "tests FAILED") - endif () -#----------------------------------------------------------------------------- diff --git a/config/cmake/ConfigureChecks.cmake b/config/cmake/ConfigureChecks.cmake index 591eaffd3c..70586cd453 100644 --- a/config/cmake/ConfigureChecks.cmake +++ b/config/cmake/ConfigureChecks.cmake @@ -16,6 +16,8 @@ include (CheckVariableExists) include (TestBigEndian) include (CheckStructHasMember) +set (HDF_PREFIX "H4") + # Check for Darwin (not just Apple - we also want to catch OpenDarwin) if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") set (${HDF_PREFIX}_HAVE_DARWIN 1) @@ -157,7 +159,7 @@ CHECK_INCLUDE_FILE_CONCAT ("sys/param.h" ${HDF_PREFIX}_HAVE_PARAM_H) ## Check for non-standard extension quadmath.h CHECK_INCLUDE_FILES(quadmath.h C_HAVE_QUADMATH) -if (${C_HAVE_QUADMATH}) +if (C_HAVE_QUADMATH) set(${HDF_PREFIX}_HAVE_QUADMATH_H 1) else () set(${HDF_PREFIX}_HAVE_QUADMATH_H 0) diff --git a/config/cmake/HDFCompilerFlags.cmake b/config/cmake/HDFCompilerFlags.cmake index 49d7549f3c..82785fdfbc 100644 --- a/config/cmake/HDFCompilerFlags.cmake +++ b/config/cmake/HDFCompilerFlags.cmake @@ -10,30 +10,30 @@ endif () #----------------------------------------------------------------------------- # Compiler specific flags : Shouldn't there be compiler tests for these #----------------------------------------------------------------------------- -if(WIN32 AND CMAKE_C_COMPILER_ID STREQUAL "Intel") - set(_INTEL_WINDOWS 1) -endif() +if (WIN32 AND (CMAKE_C_COMPILER_ID STREQUAL "Intel" OR CMAKE_C_COMPILER_ID MATCHES "IntelLLVM")) + set (_INTEL_WINDOWS 1) +endif () -if(WIN32 AND CMAKE_C_COMPILER_ID MATCHES "[Cc]lang" AND "x${CMAKE_C_SIMULATE_ID}" STREQUAL "xMSVC") - set(_CLANG_MSVC_WINDOWS 1) -endif() +if (WIN32 AND CMAKE_C_COMPILER_ID MATCHES "[Cc]lang" AND "x${CMAKE_C_SIMULATE_ID}" STREQUAL "xMSVC") + set (_CLANG_MSVC_WINDOWS 1) +endif () # Disable deprecation warnings for standard C functions. # really only needed for newer versions of VS, but should # not hurt other versions, and this will work into the # future -if(MSVC OR _INTEL_WINDOWS OR _CLANG_MSVC_WINDOWS) - add_definitions(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE) -endif() +if (MSVC OR _INTEL_WINDOWS OR _CLANG_MSVC_WINDOWS) + add_definitions (-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE) +endif () -if(MSVC) - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stack:10000000") -endif() +if (MSVC) + set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stack:10000000") +endif () # MSVC 14.28 enables C5105, but the Windows SDK 10.0.18362.0 triggers it. -if(CMAKE_C_COMPILER_ID STREQUAL "MSVC" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 19.28) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -wd5105") -endif() +if (CMAKE_C_COMPILER_ID STREQUAL "MSVC" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 19.28) + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -wd5105") +endif () if(_CLANG_MSVC_WINDOWS AND "x${CMAKE_C_COMPILER_FRONTEND_VARIANT}" STREQUAL "xGNU") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Xlinker -stack:20000000") @@ -46,7 +46,9 @@ if (CMAKE_COMPILER_IS_GNUCC) set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Og -ftrapv -fno-common") endif () else () - if (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 5.0) + if (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 5.0 AND + NOT CMAKE_C_CLANG_TIDY) + # `clang-tidy` does not understand -fstdarg-opt set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstdarg-opt") endif () if (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 10.0) @@ -56,6 +58,7 @@ if (CMAKE_COMPILER_IS_GNUCC) # This should NOT be on by default as it can cause process issues. #----------------------------------------------------------------------------- option (HDF4_ENABLE_BUILD_DIAGS "Enable color and URL extended diagnostic messages" OFF) + mark_as_advanced (HDF4_ENABLE_BUILD_DIAGS) if (HDF4_ENABLE_BUILD_DIAGS) message (STATUS "... default color and URL extended diagnostic messages enabled") else () @@ -90,7 +93,7 @@ if (HDF4_DISABLE_COMPILER_WARNINGS) endif () #----------------------------------------------------------------------------- -# HDF4 library compile options +# HDF4 library compile options - to be made available to all targets #----------------------------------------------------------------------------- #----------------------------------------------------------------------------- @@ -119,20 +122,20 @@ else () # warnings that are emitted. If you need it, add it at configure time. if (CMAKE_C_COMPILER_ID STREQUAL "Intel") if (_INTEL_WINDOWS) - ADD_H4_FLAGS (HDF4_CMAKE_C_FLAGS "${HDF4_SOURCE_DIR}/config/intel-warnings/win-general") + ADD_H4_FLAGS (HDF4_CMAKE_C_FLAGS "${HDF4_SOURCE_DIR}/config/intel-warnings/classic/win-general") else () - ADD_H4_FLAGS (HDF4_CMAKE_C_FLAGS "${HDF4_SOURCE_DIR}/config/intel-warnings/general") + ADD_H4_FLAGS (HDF4_CMAKE_C_FLAGS "${HDF4_SOURCE_DIR}/config/intel-warnings/classic/general") endif() if (NOT _INTEL_WINDOWS) - if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 15.0) - ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/intel-warnings/15") - endif() + if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 15.0) + ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/intel-warnings/classic/15") + endif () # this is just a failsafe list (APPEND H4_CFLAGS "-finline-functions") - if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 18.0) - ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/intel-warnings/18") - endif() - endif() + if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 18.0) + ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/intel-warnings/classic/18") + endif () + endif () elseif (CMAKE_C_COMPILER_ID STREQUAL "GNU") # Add general CFlags for GCC versions 4.8 and above if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 4.8) @@ -141,8 +144,16 @@ else () # gcc automatically inlines based on the optimization level # this is just a failsafe list (APPEND H4_CFLAGS "-finline-functions") - elseif (CMAKE_C_COMPILER_ID MATCHES "IntelLLVM" OR CMAKE_C_COMPILER_ID MATCHES "[Cc]lang") - ADD_H4_FLAGS (HDF4_CMAKE_C_FLAGS "${HDF4_SOURCE_DIR}/config/clang-warnings/general") + elseif (CMAKE_C_COMPILER_ID MATCHES "IntelLLVM") + if (_INTEL_WINDOWS) + ADD_H4_FLAGS (HDF5_CMAKE_C_FLAGS "${HDF4_SOURCE_DIR}/config/intel-warnings/oneapi/win-general") + else () + # this is just a failsafe + list (APPEND H4_CFLAGS "-finline-functions") + ADD_H4_FLAGS (HDF5_CMAKE_C_FLAGS "${HDF4_SOURCE_DIR}/config/intel-warnings/oneapi/general") + endif () + elseif (CMAKE_C_COMPILER_ID MATCHES "[Cc]lang") + ADD_H4_FLAGS (HDF5_CMAKE_C_FLAGS "${HDF4_SOURCE_DIR}/config/clang-warnings/general") elseif (CMAKE_C_COMPILER_ID STREQUAL "PGI") list (APPEND HDF4_CMAKE_C_FLAGS "-Minform=inform") endif () @@ -162,19 +173,25 @@ if (HDF4_ENABLE_DEV_WARNINGS) message (STATUS "....HDF4 developer group warnings are enabled") if (CMAKE_C_COMPILER_ID STREQUAL "Intel") if (_INTEL_WINDOWS) - ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/intel-warnings/win-developer-general") + ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/intel-warnings/classic/win-developer-general") else () - ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/intel-warnings/developer-general") + ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/intel-warnings/classic/developer-general") endif () elseif (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 4.8) ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/gnu-warnings/developer-general") - elseif (CMAKE_C_COMPILER_ID MATCHES "IntelLLVM" OR CMAKE_C_COMPILER_ID MATCHES "[Cc]lang") + elseif (CMAKE_C_COMPILER_ID MATCHES "IntelLLVM") + if (_INTEL_WINDOWS) + ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/intel-warnings/oneapi/win-developer-general") + else () + ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/intel-warnings/oneapi/developer-general") + endif () + elseif (CMAKE_C_COMPILER_ID MATCHES "[Cc]lang") ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/clang-warnings/developer-general") endif () else () if (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 4.8) ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/gnu-warnings/no-developer-general") - elseif (CMAKE_C_COMPILER_ID MATCHES "IntelLLVM" OR CMAKE_C_COMPILER_ID MATCHES "[Cc]lang") + elseif (CMAKE_C_COMPILER_ID MATCHES "[Cc]lang") ADD_H4_FLAGS (H4_CFLAGS "${HDF4_SOURCE_DIR}/config/clang-warnings/no-developer-general") endif () endif () diff --git a/config/cmake/HDFLibMacros.cmake b/config/cmake/HDFLibMacros.cmake index f2f847df38..7d2a314d6d 100644 --- a/config/cmake/HDFLibMacros.cmake +++ b/config/cmake/HDFLibMacros.cmake @@ -1,11 +1,14 @@ #------------------------------------------------------------------------------- -macro (ORIGINAL_ZLIB_LIBRARY compress_type) +macro (EXTERNAL_ZLIB_LIBRARY compress_type) if (${compress_type} MATCHES "GIT") FetchContent_Declare (HDF4_ZLIB GIT_REPOSITORY ${ZLIB_URL} GIT_TAG ${ZLIB_BRANCH} ) elseif (${compress_type} MATCHES "TGZ") + if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.15.0") + message (VERBOSE "Filter ZLIB file ${ZLIB_URL}") + endif () FetchContent_Declare (HDF4_ZLIB URL ${ZLIB_URL} URL_HASH "" @@ -29,16 +32,20 @@ macro (ORIGINAL_ZLIB_LIBRARY compress_type) set (ZLIB_INCLUDE_DIR "${hdf4_zlib_SOURCE_DIR}") set (ZLIB_FOUND 1) set (ZLIB_INCLUDE_DIRS ${ZLIB_INCLUDE_DIR_GEN} ${ZLIB_INCLUDE_DIR}) + message (STATUS "ZLIB link libs: ${ZLIB_LIBRARIES}") endmacro () #------------------------------------------------------------------------------- -macro (ORIGINAL_JPEG_LIBRARY compress_type jpeg_pic) +macro (EXTERNAL_JPEG_LIBRARY compress_type) if (${compress_type} MATCHES "GIT") FetchContent_Declare (JPEG GIT_REPOSITORY ${JPEG_URL} GIT_TAG ${JPEG_BRANCH} ) elseif (${compress_type} MATCHES "TGZ") + if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.15.0") + message (VERBOSE "Filter JPEG file ${JPEG_URL}") + endif () FetchContent_Declare (JPEG URL ${JPEG_URL} URL_HASH "" @@ -62,10 +69,11 @@ macro (ORIGINAL_JPEG_LIBRARY compress_type jpeg_pic) set (JPEG_INCLUDE_DIR "${jpeg_SOURCE_DIR}") set (JPEG_FOUND 1) set (JPEG_INCLUDE_DIRS ${JPEG_INCLUDE_DIR_GEN} ${JPEG_INCLUDE_DIR}) + message (STATUS "JPEG link libs: ${JPEG_LIBRARIES}") endmacro () #------------------------------------------------------------------------------- -macro (ORIGINAL_SZIP_LIBRARY compress_type encoding) +macro (EXTERNAL_SZIP_LIBRARY compress_type encoding) # Only libaec library is usable if (${compress_type} MATCHES "GIT") FetchContent_Declare (SZIP @@ -73,6 +81,9 @@ macro (ORIGINAL_SZIP_LIBRARY compress_type encoding) GIT_TAG ${SZIP_BRANCH} ) elseif (${compress_type} MATCHES "TGZ") + if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.15.0") + message (VERBOSE "Filter SZIP file ${SZIP_URL}") + endif () FetchContent_Declare (SZIP URL ${SZIP_URL} URL_HASH "" @@ -88,7 +99,6 @@ macro (ORIGINAL_SZIP_LIBRARY compress_type encoding) add_subdirectory(${szip_SOURCE_DIR} ${szip_BINARY_DIR}) endif() - set (USE_LIBAEC ON CACHE BOOL "Use libaec szip replacement" FORCE) add_library (${HDF_PACKAGE_NAMESPACE}szaec-static ALIAS szaec-static) add_library (${HDF_PACKAGE_NAMESPACE}aec-static ALIAS aec-static) set (SZIP_STATIC_LIBRARY "${HDF_PACKAGE_NAMESPACE}szaec-static;${HDF_PACKAGE_NAMESPACE}aec-static") @@ -98,250 +108,5 @@ macro (ORIGINAL_SZIP_LIBRARY compress_type encoding) set (SZIP_INCLUDE_DIR "${szip_SOURCE_DIR}/include") set (SZIP_FOUND 1) set (SZIP_INCLUDE_DIRS ${SZIP_INCLUDE_DIR_GEN} ${SZIP_INCLUDE_DIR}) -endmacro () - -#------------------------------------------------------------------------------- -macro (EXTERNAL_JPEG_LIBRARY compress_type jpeg_pic) - if (${compress_type} MATCHES "GIT") - EXTERNALPROJECT_ADD (JPEG - GIT_REPOSITORY ${JPEG_URL} - GIT_TAG ${JPEG_BRANCH} - INSTALL_COMMAND "" - CMAKE_ARGS - -DBUILD_SHARED_LIBS:BOOL=OFF - -DJPEG_PACKAGE_EXT:STRING=${HDF_PACKAGE_EXT} - -DJPEG_EXTERNALLY_CONFIGURED:BOOL=OFF - -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} - -DCMAKE_DEBUG_POSTFIX:STRING=${CMAKE_DEBUG_POSTFIX} - -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX} - -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY} - -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY} - -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY} - -DCMAKE_PDB_OUTPUT_DIRECTORY:PATH=${CMAKE_PDB_OUTPUT_DIRECTORY} - -DCMAKE_ANSI_CFLAGS:STRING=${jpeg_pic} - -DHDF_USE_GNU_DIRS:STRING=${HDF4_USE_GNU_DIRS} - -DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHITECTURES} - -DCMAKE_TOOLCHAIN_FILE:STRING=${CMAKE_TOOLCHAIN_FILE} - -DPACKAGE_NAMESPACE=${HDF_PACKAGE_NAMESPACE} - ) - elseif (${compress_type} MATCHES "TGZ") - EXTERNALPROJECT_ADD (JPEG - URL ${JPEG_URL} - URL_MD5 "" - INSTALL_COMMAND "" - CMAKE_ARGS - -DBUILD_SHARED_LIBS:BOOL=OFF - -DJPEG_PACKAGE_EXT:STRING=${HDF_PACKAGE_EXT} - -DJPEG_EXTERNALLY_CONFIGURED:BOOL=OFF - -DCMAKE_BUILD_TYPE:STRING=${HDF_CFG_NAME} - -DCMAKE_DEBUG_POSTFIX:STRING=${CMAKE_DEBUG_POSTFIX} - -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX} - -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY} - -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY} - -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY} - -DCMAKE_PDB_OUTPUT_DIRECTORY:PATH=${CMAKE_PDB_OUTPUT_DIRECTORY} - -DCMAKE_ANSI_CFLAGS:STRING=${jpeg_pic} - -DHDF_USE_GNU_DIRS:STRING=${HDF4_USE_GNU_DIRS} - -DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHITECTURES} - -DCMAKE_TOOLCHAIN_FILE:STRING=${CMAKE_TOOLCHAIN_FILE} - -DPACKAGE_NAMESPACE=${HDF_PACKAGE_NAMESPACE} - ) - endif () - externalproject_get_property (JPEG BINARY_DIR SOURCE_DIR) - -##include (${BINARY_DIR}/${JPEG_PACKAGE_NAME}${HDF_PACKAGE_EXT}-targets.cmake) -# Create imported target jpeg-static - add_library(${HDF_PACKAGE_NAMESPACE}jpeg-static STATIC IMPORTED) - HDF_IMPORT_SET_LIB_OPTIONS (${HDF_PACKAGE_NAMESPACE}jpeg-static "jpeg" STATIC "") - add_dependencies (${HDF_PACKAGE_NAMESPACE}jpeg-static JPEG) - set (JPEG_STATIC_LIBRARY "${HDF_PACKAGE_NAMESPACE}jpeg-static") - set (JPEG_LIBRARIES ${JPEG_STATIC_LIBRARY}) - - set (JPEG_INCLUDE_DIR_GEN "${BINARY_DIR}") - set (JPEG_INCLUDE_DIR "${SOURCE_DIR}/src") - set (JPEG_FOUND 1) - set (JPEG_INCLUDE_DIRS ${JPEG_INCLUDE_DIR_GEN} ${JPEG_INCLUDE_DIR}) -endmacro () - -#------------------------------------------------------------------------------- -macro (PACKAGE_JPEG_LIBRARY compress_type) - add_custom_target (JPEG-GenHeader-Copy ALL - COMMAND ${CMAKE_COMMAND} -E copy_if_different ${JPEG_INCLUDE_DIR_GEN}/jconfig.h ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ - COMMENT "Copying ${JPEG_INCLUDE_DIR_GEN}/jconfig.h to ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/" - ) - set (EXTERNAL_HEADER_LIST ${EXTERNAL_HEADER_LIST} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/jconfig.h) - if (${compress_type} MATCHES "GIT" OR ${compress_type} MATCHES "TGZ") - add_dependencies (JPEG-GenHeader-Copy JPEG) - endif () -endmacro () - -#------------------------------------------------------------------------------- -macro (EXTERNAL_SZIP_LIBRARY compress_type encoding) - if (${compress_type} MATCHES "GIT") - EXTERNALPROJECT_ADD (SZIP - GIT_REPOSITORY ${SZIP_URL} - GIT_TAG ${SZIP_BRANCH} - INSTALL_COMMAND "" - CMAKE_ARGS - -DBUILD_SHARED_LIBS:BOOL=OFF - -DSZIP_PACKAGE_EXT:STRING=${HDF_PACKAGE_EXT} - -DSZIP_EXTERNALLY_CONFIGURED:BOOL=OFF - -DCMAKE_BUILD_TYPE:STRING=${HDF_CFG_NAME} - -DCMAKE_DEBUG_POSTFIX:STRING=${CMAKE_DEBUG_POSTFIX} - -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX} - -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY} - -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY} - -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY} - -DCMAKE_PDB_OUTPUT_DIRECTORY:PATH=${CMAKE_PDB_OUTPUT_DIRECTORY} - -DSZIP_ENABLE_ENCODING:BOOL=${encoding} - -DHDF_USE_GNU_DIRS:STRING=${HDF4_USE_GNU_DIRS} - -DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHITECTURES} - -DCMAKE_TOOLCHAIN_FILE:STRING=${CMAKE_TOOLCHAIN_FILE} - -DPACKAGE_NAMESPACE=${HDF_PACKAGE_NAMESPACE} - ) - elseif (${compress_type} MATCHES "TGZ") - EXTERNALPROJECT_ADD (SZIP - URL ${SZIP_URL} - URL_MD5 "" - INSTALL_COMMAND "" - CMAKE_ARGS - -DBUILD_SHARED_LIBS:BOOL=OFF - -DSZIP_PACKAGE_EXT:STRING=${HDF_PACKAGE_EXT} - -DSZIP_EXTERNALLY_CONFIGURED:BOOL=OFF - -DCMAKE_BUILD_TYPE:STRING=${HDF_CFG_NAME} - -DCMAKE_DEBUG_POSTFIX:STRING=${CMAKE_DEBUG_POSTFIX} - -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX} - -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY} - -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY} - -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY} - -DCMAKE_PDB_OUTPUT_DIRECTORY:PATH=${CMAKE_PDB_OUTPUT_DIRECTORY} - -DSZIP_ENABLE_ENCODING:BOOL=${encoding} - -DHDF_USE_GNU_DIRS:STRING=${HDF4_USE_GNU_DIRS} - -DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHITECTURES} - -DCMAKE_TOOLCHAIN_FILE:STRING=${CMAKE_TOOLCHAIN_FILE} - -DPACKAGE_NAMESPACE=${HDF_PACKAGE_NAMESPACE} - ) - endif () - externalproject_get_property (SZIP BINARY_DIR SOURCE_DIR) -# -##include (${BINARY_DIR}/${H4SZIP_PACKAGE_NAME}${HDF_PACKAGE_EXT}-targets.cmake) -# Create imported target szip-static - if (USE_LIBAEC) - add_library(${HDF_PACKAGE_NAMESPACE}szaec-static STATIC IMPORTED) - HDF_IMPORT_SET_LIB_OPTIONS (${HDF_PACKAGE_NAMESPACE}szaec-static "szaec" STATIC "") - add_dependencies (${HDF_PACKAGE_NAMESPACE}szaec-static SZIP) - add_library(${HDF_PACKAGE_NAMESPACE}aec-static STATIC IMPORTED) - HDF_IMPORT_SET_LIB_OPTIONS (${HDF_PACKAGE_NAMESPACE}aec-static "aec" STATIC "") - add_dependencies (${HDF_PACKAGE_NAMESPACE}aec-static SZIP) - set (SZIP_STATIC_LIBRARY "${HDF_PACKAGE_NAMESPACE}szaec-static;${HDF_PACKAGE_NAMESPACE}aec-static") - else () - add_library(${HDF_PACKAGE_NAMESPACE}szip-static STATIC IMPORTED) - HDF_IMPORT_SET_LIB_OPTIONS (${HDF_PACKAGE_NAMESPACE}szip-static "szip" STATIC "") - add_dependencies (${HDF_PACKAGE_NAMESPACE}szip-static SZIP) - set (SZIP_STATIC_LIBRARY "${HDF_PACKAGE_NAMESPACE}szip-static") - endif () - set (SZIP_LIBRARIES ${SZIP_STATIC_LIBRARY}) - - set (SZIP_INCLUDE_DIR_GEN "${BINARY_DIR}") - if (USE_LIBAEC) - set (SZIP_INCLUDE_DIR "${SOURCE_DIR}/include") - else () - set (SZIP_INCLUDE_DIR "${SOURCE_DIR}/src") - endif () - set (SZIP_FOUND 1) - set (SZIP_INCLUDE_DIRS ${SZIP_INCLUDE_DIR_GEN} ${SZIP_INCLUDE_DIR}) -endmacro () - -#------------------------------------------------------------------------------- -macro (PACKAGE_SZIP_LIBRARY compress_type) - set (SZIP_HDR "SZconfig") - if (USE_LIBAEC) - set (SZIP_HDR "aec_config") - else () - set (SZIP_HDR "libaec_Export") - endif () - add_custom_target (SZIP-GenHeader-Copy ALL - COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SZIP_INCLUDE_DIR_GEN}/${SZIP_HDR}.h ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ - COMMENT "Copying ${SZIP_INCLUDE_DIR_GEN}/${SZIP_HDR}.h to ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/" - ) - set (EXTERNAL_HEADER_LIST ${EXTERNAL_HEADER_LIST} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${SZIP_HDR}.h) - if (${compress_type} MATCHES "GIT" OR ${compress_type} MATCHES "TGZ") - add_dependencies (SZIP-GenHeader-Copy SZIP) - endif () -endmacro () - -#------------------------------------------------------------------------------- -macro (EXTERNAL_ZLIB_LIBRARY compress_type) - if (${compress_type} MATCHES "GIT") - EXTERNALPROJECT_ADD (HDF4_ZLIB - GIT_REPOSITORY ${ZLIB_URL} - GIT_TAG ${ZLIB_BRANCH} - INSTALL_COMMAND "" - CMAKE_ARGS - -DBUILD_SHARED_LIBS:BOOL=OFF - -DZLIB_PACKAGE_EXT:STRING=${HDF_PACKAGE_EXT} - -DZLIB_EXTERNALLY_CONFIGURED:BOOL=OFF - -DCMAKE_BUILD_TYPE:STRING=${HDF_CFG_NAME} - -DCMAKE_DEBUG_POSTFIX:STRING=${CMAKE_DEBUG_POSTFIX} - -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX} - -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY} - -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY} - -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY} - -DCMAKE_PDB_OUTPUT_DIRECTORY:PATH=${CMAKE_PDB_OUTPUT_DIRECTORY} - -DHDF_USE_GNU_DIRS:STRING=${HDF4_USE_GNU_DIRS} - -DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHITECTURES} - -DCMAKE_TOOLCHAIN_FILE:STRING=${CMAKE_TOOLCHAIN_FILE} - -DPACKAGE_NAMESPACE=${HDF_PACKAGE_NAMESPACE} - ) - elseif (${compress_type} MATCHES "TGZ") - EXTERNALPROJECT_ADD (HDF4_ZLIB - URL ${ZLIB_URL} - URL_MD5 "" - INSTALL_COMMAND "" - CMAKE_ARGS - -DBUILD_SHARED_LIBS:BOOL=OFF - -DZLIB_PACKAGE_EXT:STRING=${HDF_PACKAGE_EXT} - -DZLIB_EXTERNALLY_CONFIGURED:BOOL=OFF - -DCMAKE_BUILD_TYPE:STRING=${HDF_CFG_NAME} - -DCMAKE_DEBUG_POSTFIX:STRING=${CMAKE_DEBUG_POSTFIX} - -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX} - -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY} - -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY} - -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY} - -DCMAKE_PDB_OUTPUT_DIRECTORY:PATH=${CMAKE_PDB_OUTPUT_DIRECTORY} - -DHDF_USE_GNU_DIRS:STRING=${HDF4_USE_GNU_DIRS} - -DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHITECTURES} - -DCMAKE_TOOLCHAIN_FILE:STRING=${CMAKE_TOOLCHAIN_FILE} - -DPACKAGE_NAMESPACE=${HDF_PACKAGE_NAMESPACE} - ) - endif () - externalproject_get_property (HDF4_ZLIB BINARY_DIR SOURCE_DIR) - - if (NOT ZLIB_LIB_NAME) - set (ZLIB_LIB_NAME "z") - endif () -##include (${BINARY_DIR}/${ZLIB_PACKAGE_NAME}${HDF_PACKAGE_EXT}-targets.cmake) -# Create imported target zlib-static - add_library(${HDF_PACKAGE_NAMESPACE}zlib-static STATIC IMPORTED) - HDF_IMPORT_SET_LIB_OPTIONS (${HDF_PACKAGE_NAMESPACE}zlib-static ${ZLIB_LIB_NAME} STATIC "") - add_dependencies (${HDF_PACKAGE_NAMESPACE}zlib-static HDF4_ZLIB) - set (ZLIB_STATIC_LIBRARY "${HDF_PACKAGE_NAMESPACE}zlib-static") - set (ZLIB_LIBRARIES ${ZLIB_STATIC_LIBRARY}) - - set (ZLIB_INCLUDE_DIR_GEN "${BINARY_DIR}") - set (ZLIB_INCLUDE_DIR "${SOURCE_DIR}") - set (ZLIB_FOUND 1) - set (ZLIB_INCLUDE_DIRS ${ZLIB_INCLUDE_DIR_GEN} ${ZLIB_INCLUDE_DIR}) -endmacro () - -#------------------------------------------------------------------------------- -macro (PACKAGE_ZLIB_LIBRARY compress_type) - add_custom_target (ZLIB-GenHeader-Copy ALL - COMMAND ${CMAKE_COMMAND} -E copy_if_different ${ZLIB_INCLUDE_DIR_GEN}/zconf.h ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ - COMMENT "Copying ${ZLIB_INCLUDE_DIR_GEN}/zconf.h to ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/" - ) - set (EXTERNAL_HEADER_LIST ${EXTERNAL_HEADER_LIST} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/zconf.h) - if (${compress_type} MATCHES "GIT" OR ${compress_type} MATCHES "TGZ") - add_dependencies (ZLIB-GenHeader-Copy HDF4_ZLIB) - endif () + message (STATUS "SZIP link libs: ${SZIP_LIBRARIES}") endmacro () diff --git a/config/cmake/HDFMacros.cmake b/config/cmake/HDFMacros.cmake index 55b10a42a1..b4506c843d 100644 --- a/config/cmake/HDFMacros.cmake +++ b/config/cmake/HDFMacros.cmake @@ -58,6 +58,8 @@ endmacro () #------------------------------------------------------------------------------- macro (INSTALL_TARGET_PDB libtarget targetdestination targetcomponent) + option (DISABLE_PDB_FILES "Do not install PDB files" OFF) + mark_as_advanced (DISABLE_PDB_FILES) if (WIN32 AND MSVC AND NOT DISABLE_PDB_FILES) get_target_property (target_type ${libtarget} TYPE) if (${target_type} MATCHES "SHARED") diff --git a/config/cmake/JPEG/CMakeLists.txt b/config/cmake/JPEG/CMakeLists.txt index 6b27c777e6..321d81c438 100644 --- a/config/cmake/JPEG/CMakeLists.txt +++ b/config/cmake/JPEG/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required (VERSION 3.2.2) +cmake_minimum_required (VERSION 3.12) PROJECT (JPEG C) #----------------------------------------------------------------------------- @@ -6,7 +6,6 @@ PROJECT (JPEG C) #----------------------------------------------------------------------------- set (JPEG_PACKAGE_EXT ${HDF_PACKAGE_EXT}) -set (CMAKE_ANSI_CFLAGS ${jpeg_pic}) set (HDF_USE_GNU_DIRS ${HDF4_USE_GNU_DIRS}) set (CMAKE_OSX_ARCHITECTURES ${CMAKE_OSX_ARCHITECTURES}) set (CMAKE_TOOLCHAIN_FILE ${CMAKE_TOOLCHAIN_FILE}) @@ -415,10 +414,10 @@ configure_file (${JPEG_SOURCE_DIR}/README ${JPEG_BINARY_DIR}/JPEG_README @ONLY) if (NOT JPEG_EXTERNALLY_CONFIGURED) set (CPACK_PACKAGE_VENDOR "HDF_Group") set (CPACK_PACKAGE_NAME "${JPEG_PACKAGE_NAME}") - if (CDASH_LOCAL) - set (CPACK_PACKAGE_VERSION "${JPEG_PACKAGE_VERSION}") - else () + if (NOT WIN32 OR JPEG_VERS_SUBRELEASE MATCHES "^[0-9]+$") set (CPACK_PACKAGE_VERSION "${JPEG_PACKAGE_VERSION_STRING}") + else () + set (CPACK_PACKAGE_VERSION "${JPEG_PACKAGE_VERSION}") endif () set (CPACK_PACKAGE_VERSION_MAJOR "${JPEG_PACKAGE_VERSION_MAJOR}") set (CPACK_PACKAGE_VERSION_MINOR "${JPEG_PACKAGE_VERSION_MINOR}") diff --git a/config/cmake/LIBAEC/CMakeLists.txt b/config/cmake/LIBAEC/CMakeLists.txt index 660e78fbd4..ffc7373f16 100644 --- a/config/cmake/LIBAEC/CMakeLists.txt +++ b/config/cmake/LIBAEC/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required (VERSION 3.10) +cmake_minimum_required (VERSION 3.12) PROJECT (LIBAEC C) #----------------------------------------------------------------------------- @@ -169,7 +169,7 @@ target_include_directories (${LIBAEC_LIB_TARGET} PUBLIC "$") TARGET_C_PROPERTIES (${LIBAEC_LIB_TARGET} STATIC) target_link_libraries (${LIBAEC_LIB_TARGET} PRIVATE ${LINK_LIBS}) -H4_SET_LIB_OPTIONS (${LIBAEC_LIB_TARGET} ${LIBAEC_LIB_NAME} STATIC) +H4_SET_LIB_OPTIONS (${LIBAEC_LIB_TARGET} ${LIBAEC_LIB_NAME} STATIC 0) set_target_properties (${LIBAEC_LIB_TARGET} PROPERTIES VERSION 0.0.12 SOVERSION 0 PUBLIC_HEADER "${LIBAEC_PUBLIC_HEADERS}" @@ -191,7 +191,7 @@ add_library (${SZIP_LIB_TARGET} STATIC ${SZIP_SRCS} ${SZIP_PUBLIC_HEADERS}) target_include_directories (${SZIP_LIB_TARGET} PUBLIC "${LIBAEC_SOURCE_DIR};${LIBAEC_SOURCE_DIR}/include;${CMAKE_BINARY_DIR}") TARGET_C_PROPERTIES (${SZIP_LIB_TARGET} STATIC) target_link_libraries (${SZIP_LIB_TARGET} PRIVATE ${LIBAEC_LIB_TARGET}) -H4_SET_LIB_OPTIONS (${SZIP_LIB_TARGET} ${SZIP_LIB_NAME} STATIC) +H4_SET_LIB_OPTIONS (${SZIP_LIB_TARGET} ${SZIP_LIB_NAME} STATIC 0) set_target_properties (${SZIP_LIB_TARGET} PROPERTIES VERSION 2.0.1 SOVERSION 2 PUBLIC_HEADER "${SZIP_PUBLIC_HEADERS}" @@ -369,10 +369,10 @@ configure_file (${LIBAEC_SOURCE_DIR}/README.md ${LIBAEC_BINARY_DIR}/LIBAEC_READM if (NOT LIBAEC_EXTERNALLY_CONFIGURED) set (CPACK_PACKAGE_VENDOR "HDF_Group") set (CPACK_PACKAGE_NAME "${LIBAEC_PACKAGE_NAME}") - if (CDASH_LOCAL) - set (CPACK_PACKAGE_VERSION "${LIBAEC_PACKAGE_VERSION}") - else () + 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}") diff --git a/config/cmake/ZLIB/CMakeLists.txt b/config/cmake/ZLIB/CMakeLists.txt index d50b54f5be..032b591d1a 100644 --- a/config/cmake/ZLIB/CMakeLists.txt +++ b/config/cmake/ZLIB/CMakeLists.txt @@ -428,10 +428,10 @@ configure_file (${ZLIB_SOURCE_DIR}/README ${ZLIB_BINARY_DIR}/ZLIB_README @ONLY) if (NOT ZLIB_EXTERNALLY_CONFIGURED) set (CPACK_PACKAGE_VENDOR "HDF_Group") set (CPACK_PACKAGE_NAME "${ZLIB_PACKAGE_NAME}") - if (CDASH_LOCAL) - set (CPACK_PACKAGE_VERSION "${ZLIB_PACKAGE_VERSION}") - else () + 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}") diff --git a/config/cmake/ZLIB/zlib-config.cmake.in b/config/cmake/ZLIB/zlib-config.cmake.in index 307896b61a..9e6ef48fcb 100644 --- a/config/cmake/ZLIB/zlib-config.cmake.in +++ b/config/cmake/ZLIB/zlib-config.cmake.in @@ -30,7 +30,7 @@ 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 build ZLIB as a subproject +# 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) diff --git a/config/cmake/cacheinit.cmake b/config/cmake/cacheinit.cmake index 8fb712f9e6..a07ab34a13 100644 --- a/config/cmake/cacheinit.cmake +++ b/config/cmake/cacheinit.cmake @@ -18,30 +18,29 @@ set (HDF4_BUILD_UTILS ON CACHE BOOL "Build HDF4 Library Utilities" FORCE) set (HDF4_BUILD_GENERATORS OFF CACHE BOOL "Build Test Generators" FORCE) +set (HDF4_ENABLE_JPEG_LIB_SUPPORT ON CACHE BOOL "Use JPEG Filter" FORCE) + set (HDF4_ENABLE_SZIP_SUPPORT ON CACHE BOOL "Use SZip Filter" FORCE) set (HDF4_ENABLE_SZIP_ENCODING ON CACHE BOOL "Use SZip Encoding" FORCE) -set (HDF4_ALLOW_EXTERNAL_SUPPORT "NO" CACHE STRING "Allow External Library Building (NO GIT SVN TGZ)" FORCE) -set_property (CACHE HDF4_ALLOW_EXTERNAL_SUPPORT PROPERTY STRINGS NO GIT SVN TGZ) +set (HDF4_ALLOW_EXTERNAL_SUPPORT "TGZ" CACHE STRING "Allow External Library Building (NO GIT TGZ)" FORCE) +set_property (CACHE HDF4_ALLOW_EXTERNAL_SUPPORT PROPERTY STRINGS NO GIT TGZ) +######################## +# compression options +######################## set (ZLIB_PACKAGE_NAME "zlib" CACHE STRING "Name of ZLIB package" FORCE) -set (ZLIB_TGZ_NAME "ZLib.tar.gz" CACHE STRING "Use HDF4_ZLib from compressed file" FORCE) -set (ZLIB_TGZ_ORIGPATH "https://github.com/madler/zlib/releases/download/v1.2.13" CACHE STRING "Use ZLIB from original location" FORCE) -set (ZLIB_TGZ_ORIGNAME "zlib-1.2.13.tar.gz" CACHE STRING "Use ZLIB from original compressed file" FORCE) -set (ZLIB_USE_LOCALCONTENT OFF CACHE BOOL "Use local file for ZLIB FetchContent" FORCE) +set (ZLIB_TGZ_NAME "zlib-1.3.tar.gz" CACHE STRING "Use HDF4_ZLib from compressed file" FORCE) +set (ZLIB_TGZ_ORIGPATH "https://github.com/madler/zlib/releases/download/v1.3" CACHE STRING "Use HDF4_ZLIB from original location" FORCE) +set (ZLIB_USE_LOCALCONTENT ON CACHE BOOL "Use local file for HDF4_ZLIB FetchContent" FORCE) -set (SZIP_PACKAGE_NAME "szip" CACHE STRING "Name of SZIP package" FORCE) set (LIBAEC_PACKAGE_NAME "libaec" CACHE STRING "Name of AEC SZIP package" FORCE) -set (SZIP_TGZ_NAME "SZip.tar.gz" CACHE STRING "Use SZip from compressed file" FORCE) -set (SZAEC_TGZ_NAME "LIBAEC.tar.gz" CACHE STRING "Use SZip AEC from compressed file" FORCE) -set (USE_LIBAEC ON CACHE BOOL "Use libaec szip replacement" FORCE) -set (LIBAEC_TGZ_ORIGPATH "https://gitlab.dkrz.de/k202009/libaec/-/archive/v1.0.6" CACHE STRING "Use LIBAEC from original location" FORCE) -set (LIBAEC_TGZ_ORIGNAME "libaec-v1.0.6.tar.gz" CACHE STRING "Use LIBAEC from original compressed file" FORCE) -set (LIBAEC_USE_LOCALCONTENT OFF CACHE BOOL "Use local file for LIBAEC FetchContent" 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_USE_LOCALCONTENT ON CACHE BOOL "Use local file for LIBAEC FetchContent" FORCE) set (JPEG_PACKAGE_NAME "jpeg" CACHE STRING "Name of JPEG package" FORCE) -set (JPEG_TGZ_NAME "JPEG9e.tar.gz" CACHE STRING "Use JPEG from compressed file" FORCE) set (JPEG_TGZ_ORIGPATH "https://www.ijg.org/filesz" CACHE STRING "Use JPEG from original location" FORCE) -set (JPEG_TGZ_ORIGNAME "jpegsrc.v9e.tar.gz" CACHE STRING "Use JPEG from original compressed file" FORCE) -set (JPEG_USE_LOCALCONTENT OFF CACHE BOOL "Use local file for JPEG FetchContent" FORCE) +set (JPEG_TGZ_NAME "jpegsrc.v9e.tar.gz" CACHE STRING "Use JPEG from original compressed file" FORCE) +set (JPEG_USE_LOCALCONTENT ON CACHE BOOL "Use local file for JPEG FetchContent" FORCE) diff --git a/config/cmake/examples/CTestScript.cmake b/config/cmake/examples/CTestScript.cmake index 0ed1d72464..ed0d1c22e4 100644 --- a/config/cmake/examples/CTestScript.cmake +++ b/config/cmake/examples/CTestScript.cmake @@ -1,6 +1,5 @@ cmake_minimum_required (VERSION 3.12) ######################################################## -# This dashboard is maintained by The HDF Group # For any comments please contact cdashhelp@hdfgroup.org # ######################################################## @@ -51,7 +50,7 @@ else() endif() #----------------------------------------------------------------------------- -# MAC machines need special option +# MacOS machines need special options #----------------------------------------------------------------------------- if (APPLE) # Compiler choice diff --git a/config/cmake/examples/HDF4_Examples.cmake.in b/config/cmake/examples/HDF4_Examples.cmake.in index 3a4bf3d5d7..5d643ea7af 100644 --- a/config/cmake/examples/HDF4_Examples.cmake.in +++ b/config/cmake/examples/HDF4_Examples.cmake.in @@ -51,11 +51,6 @@ if(NOT DEFINED CTEST_SOURCE_NAME) set(CTEST_SOURCE_NAME "HDF4Examples") endif() -if(NOT DEFINED HDF_LOCAL) - set(CDASH_LOCAL "NO") -else() - set(CDASH_LOCAL "YES") -endif() if(NOT DEFINED CTEST_SITE) set(CTEST_SITE "local") endif() diff --git a/config/cmake/grepTest.cmake b/config/cmake/grepTest.cmake index 7d442605a0..f5d66ee9e1 100644 --- a/config/cmake/grepTest.cmake +++ b/config/cmake/grepTest.cmake @@ -62,8 +62,8 @@ message (STATUS "COMMAND Error: ${TEST_ERROR}") # remove special output file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM) -string (FIND TEST_STREAM "_pmi_alps" "${TEST_FIND_RESULT}") -if (TEST_FIND_RESULT GREATER 0) +string (FIND TEST_STREAM "_pmi_alps" TEST_FIND_RESULT) +if (TEST_FIND_RESULT GREATER -1) string (REGEX REPLACE "^.*_pmi_alps[^\n]+\n" "" TEST_STREAM "${TEST_STREAM}") file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} ${TEST_STREAM}) endif () @@ -160,12 +160,14 @@ else () # else grep the output with the reference set (TEST_GREP_RESULT 0) file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM) - - # TEST_REFERENCE should always be matched - string (REGEX MATCH "${TEST_REFERENCE}" TEST_MATCH ${TEST_STREAM}) - string (COMPARE EQUAL "${TEST_REFERENCE}" "${TEST_MATCH}" TEST_GREP_RESULT) - if (NOT TEST_GREP_RESULT) - message (FATAL_ERROR "Failed: The output of ${TEST_PROGRAM} did not contain ${TEST_REFERENCE}") + list (LENGTH TEST_STREAM test_len) + if (test_len GREATER 0) + # TEST_REFERENCE should always be matched + string (REGEX MATCH "${TEST_REFERENCE}" TEST_MATCH ${TEST_STREAM}) + string (COMPARE EQUAL "${TEST_REFERENCE}" "${TEST_MATCH}" TEST_GREP_RESULT) + if (NOT TEST_GREP_RESULT) + message (FATAL_ERROR "Failed: The output of ${TEST_PROGRAM} did not contain ${TEST_REFERENCE}") + endif () endif () endif () @@ -181,6 +183,22 @@ if (TEST_FILTER) endif () endif () +if (NOT DEFINED ENV{HDF4_NOCLEANUP}) + if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") + file (REMOVE ${TEST_FOLDER}/${TEST_OUTPUT}) + endif () + + if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}.err") + file (REMOVE ${TEST_FOLDER}/${TEST_OUTPUT}.err) + endif () + + if (TEST_DELETE_LIST) + foreach (dfile in ${TEST_DELETE_LIST}) + file (REMOVE ${dfile}) + endforeach () + endif () +endif () + # everything went fine... message (STATUS "Passed: The output of ${TEST_PROGRAM} matched") diff --git a/config/cmake/jrunTest.cmake b/config/cmake/jrunTest.cmake index a0cd2d0c7c..21ce16b2b9 100644 --- a/config/cmake/jrunTest.cmake +++ b/config/cmake/jrunTest.cmake @@ -282,6 +282,22 @@ if (TEST_SKIP_COMPARE AND NOT TEST_NO_DISPLAY) endif () endif () +if (NOT DEFINED ENV{HDF4_NOCLEANUP}) + if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}") + file (REMOVE ${TEST_FOLDER}/${TEST_OUTPUT}) + endif () + + if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}.err") + file (REMOVE ${TEST_FOLDER}/${TEST_OUTPUT}.err) + endif () + + if (TEST_DELETE_LIST) + foreach (dfile in ${TEST_DELETE_LIST}) + file (REMOVE ${dfile}) + endforeach () + endif () +endif () + # everything went fine... message (STATUS "${TEST_PROGRAM} Passed") diff --git a/config/cmake/runTest.cmake b/config/cmake/runTest.cmake index b6024ef702..9d2f9fd303 100644 --- a/config/cmake/runTest.cmake +++ b/config/cmake/runTest.cmake @@ -111,6 +111,10 @@ if (NOT TEST_RESULT EQUAL TEST_EXPECT) file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM) message (STATUS "Output :\n${TEST_STREAM}") endif () + if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}.err") + file (READ ${TEST_FOLDER}/${TEST_OUTPUT}.err TEST_STREAM) + message (STATUS "Error Output :\n${TEST_STREAM}") + endif () endif () message (FATAL_ERROR "Failed: Test program ${TEST_PROGRAM} exited != ${TEST_EXPECT}.\n${TEST_ERROR}") endif () @@ -365,6 +369,18 @@ if (TEST_SKIP_COMPARE AND NOT TEST_NO_DISPLAY) ) endif () +if (NOT DEFINED ENV{HDF4_NOCLEANUP}) + if (EXISTS "${TEST_FOLDER}/${TEST_OUTPUT}.err") + file (REMOVE ${TEST_FOLDER}/${TEST_OUTPUT}.err) + endif () + + if (TEST_DELETE_LIST) + foreach (dfile in ${TEST_DELETE_LIST}) + file (REMOVE ${dfile}) + endforeach () + endif () +endif () + # everything went fine... message (STATUS "${TEST_PROGRAM} Passed") diff --git a/config/cmake/scripts/CTestScript.cmake b/config/cmake/scripts/CTestScript.cmake index 410410d6a6..605874f687 100755 --- a/config/cmake/scripts/CTestScript.cmake +++ b/config/cmake/scripts/CTestScript.cmake @@ -196,14 +196,14 @@ endforeach () # Initialize the CTEST commands #------------------------------ if (CMAKE_GENERATOR_TOOLSET) - set (CTEST_CONFIGURE_TOOLSET "-T${CMAKE_GENERATOR_TOOLSET}") + set (CTEST_CONFIGURE_TOOLSET "\"-T${CMAKE_GENERATOR_TOOLSET}\"") else () - set (CTEST_CONFIGURE_TOOLSET "") + set (CTEST_CONFIGURE_TOOLSET) endif() if (CMAKE_GENERATOR_ARCHITECTURE) - set (CTEST_CONFIGURE_ARCHITECTURE "-A${CMAKE_GENERATOR_ARCHITECTURE}") + set (CTEST_CONFIGURE_ARCHITECTURE "\"-A${CMAKE_GENERATOR_ARCHITECTURE}\"") else () - set (CTEST_CONFIGURE_ARCHITECTURE "") + set (CTEST_CONFIGURE_ARCHITECTURE) endif() if (LOCAL_MEMCHECK_TEST) if(LOCAL_USE_VALGRIND) @@ -211,7 +211,7 @@ if (LOCAL_MEMCHECK_TEST) find_program(CTEST_MEMORYCHECK_COMMAND NAMES valgrind) endif() set (CTEST_CONFIGURE_COMMAND - "${CTEST_CMAKE_COMMAND} -C \"${CTEST_SOURCE_DIRECTORY}/config/cmake/mccacheinit.cmake\" -DCMAKE_BUILD_TYPE:STRING=${CTEST_CONFIGURATION_TYPE} ${BUILD_OPTIONS} \"-G${CTEST_CMAKE_GENERATOR}\" \"${CTEST_CONFIGURE_ARCHITECTURE}\" \"${CTEST_CONFIGURE_TOOLSET}\" \"${CTEST_SOURCE_DIRECTORY}\"" + "${CTEST_CMAKE_COMMAND} -C \"${CTEST_SOURCE_DIRECTORY}/config/cmake/mccacheinit.cmake\" -DCMAKE_BUILD_TYPE:STRING=${CTEST_CONFIGURATION_TYPE} ${BUILD_OPTIONS} \"-G${CTEST_CMAKE_GENERATOR}\" ${CTEST_CONFIGURE_ARCHITECTURE} ${CTEST_CONFIGURE_TOOLSET} \"${CTEST_SOURCE_DIRECTORY}\"" ) else () if (LOCAL_COVERAGE_TEST) @@ -220,7 +220,7 @@ else () endif () endif () set (CTEST_CONFIGURE_COMMAND - "${CTEST_CMAKE_COMMAND} -C \"${CTEST_SOURCE_DIRECTORY}/config/cmake/cacheinit.cmake\" -DCMAKE_BUILD_TYPE:STRING=${CTEST_CONFIGURATION_TYPE} ${BUILD_OPTIONS} \"-G${CTEST_CMAKE_GENERATOR}\" \"${CTEST_CONFIGURE_ARCHITECTURE}\" \"${CTEST_CONFIGURE_TOOLSET}\" \"${CTEST_SOURCE_DIRECTORY}\"" + "${CTEST_CMAKE_COMMAND} -C \"${CTEST_SOURCE_DIRECTORY}/config/cmake/cacheinit.cmake\" -DCMAKE_BUILD_TYPE:STRING=${CTEST_CONFIGURATION_TYPE} ${BUILD_OPTIONS} \"-G${CTEST_CMAKE_GENERATOR}\" ${CTEST_CONFIGURE_ARCHITECTURE} ${CTEST_CONFIGURE_TOOLSET} \"${CTEST_SOURCE_DIRECTORY}\"" ) endif () diff --git a/config/conclude.am b/config/conclude.am index 9696cfed9f..913083f324 100644 --- a/config/conclude.am +++ b/config/conclude.am @@ -8,7 +8,7 @@ ## This file is part of HDF. The full HDF copyright notice, including ## terms governing use, modification, and redistribution, is contained in ## the COPYING file, which can be found at the root of the source code -## distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. +## distribution tree, or in https://www.hdfgroup.org/licenses. ## If you do not have access to either file, you may request a copy from ## help@hdfgroup.org. @@ -16,11 +16,11 @@ ## Textually included at the end of most HDF4 Makefiles.am. ## Contains build rules. -# Automake needs to be taught how to build lib, progs, and tests targets. +# Automake needs to be taught how to build lib, progs and tests targets. # These will be filled in automatically for the most part (e.g., # lib_LIBRARIES are built for lib target), but EXTRA_LIB, EXTRA_PROG # variables are supplied to allow the user to force targets to -# be built at certain times. +# be built at certain times. LIB = $(lib_LIBRARIES) $(lib_LTLIBRARIES) $(noinst_LIBRARIES) \ $(noinst_LTLIBRARIES) $(check_LIBRARIES) $(check_LTLIBRARIES) $(EXTRA_LIB) PROGS = $(bin_PROGRAMS) $(bin_SCRIPTS) $(noinst_PROGRAMS) $(noinst_SCRIPTS) \ @@ -67,7 +67,7 @@ all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(chk_TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. # UPDATE: docs no longer reside in this build tree, so this target -# is depreciated. +# is deprecated. install-doc uninstall-doc: @echo "Nothing to be done." diff --git a/config/examples.am b/config/examples.am index 530322be94..0d9dfb3f24 100644 --- a/config/examples.am +++ b/config/examples.am @@ -7,7 +7,7 @@ ## This file is part of HDF. The full HDF copyright notice, including ## terms governing use, modification, and redistribution, is contained in ## the COPYING file, which can be found at the root of the source code -## distribution tree, or in https://support.hdfgroup.org/ftp/HDF/releases/. +## distribution tree, or in https://www.hdfgroup.org/licenses. ## If you do not have access to either file, you may request a copy from ## help@hdfgroup.org. @@ -25,7 +25,7 @@ ## The source files that the examples use which should be installed. ## ## EXAMPLEDIR -## The directory into which examples should be installed. +## The directory into which examples should be installed. ## ## Build rules for $(EXTRA_PROG). ## Dependencies for example programs. @@ -52,11 +52,11 @@ install-data-local: uninstall-local: @$(MAKE) $(AM_MAKEFLAGS) uninstall-examples -install-examples: $(EXAMPLEDIR) +install-examples: $(EXAMPLEDIR) @for f in X $(INSTALL_FILES); do \ if test $$f != X; then \ (set -x; $(INSTALL) $(srcdir)/$$f $(EXAMPLEDIR)/. || exit 1); \ - chmod a-x $(EXAMPLEDIR)/$$f; \ + chmod a-x $(EXAMPLEDIR)/$$f; \ fi; \ done @for f in X $(INSTALL_SCRIPT_FILES); do \ diff --git a/config/freebsd b/config/freebsd index 8eb73ada34..e98165012d 100644 --- a/config/freebsd +++ b/config/freebsd @@ -26,7 +26,7 @@ if test -z "$CC"; then CC_BASENAME=cc fi -# Figure out Clang C compiler flags +# Figure out clang C compiler flags . $srcdir/config/clang-flags # Figure out GNU C compiler flags diff --git a/config/intel-fflags b/config/intel-fflags index ad1ce7c4bb..11322d65c4 100644 --- a/config/intel-fflags +++ b/config/intel-fflags @@ -3,13 +3,9 @@ # Copyright by The HDF Group. # All rights reserved. # -# This file is part of HDF5. The full HDF5 copyright notice, including -# terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code -# distribution tree, or in https://www.hdfgroup.org/licenses. -# If you do not have access to either file, you may request a copy from -# help@hdfgroup.org. - +# This file is part of the HDF4 build script. It is processed shortly +# after configure starts and defines, among other things, flags for +# the various compilation modes. # This file should be sourced into configure if the compiler is the # Intel ifort compiler or a derivative. It is careful not to do anything @@ -123,7 +119,7 @@ if test "X-ifort" = "X-$f9x_vendor"; then ########### H5_FCFLAGS="$H5_FCFLAGS -free" - H5_FCFLAGS="$H5_FCFLAGS $(load_intel_arguments ifort-general)" + H5_FCFLAGS="$H5_FCFLAGS $(load_intel_arguments classic/ifort-general)" ############################# # Version-specific warnings # diff --git a/config/intel-warnings/15 b/config/intel-warnings/classic/15 similarity index 100% rename from config/intel-warnings/15 rename to config/intel-warnings/classic/15 diff --git a/config/intel-warnings/18 b/config/intel-warnings/classic/18 similarity index 100% rename from config/intel-warnings/18 rename to config/intel-warnings/classic/18 diff --git a/config/intel-warnings/developer-general b/config/intel-warnings/classic/developer-general similarity index 100% rename from config/intel-warnings/developer-general rename to config/intel-warnings/classic/developer-general diff --git a/config/intel-warnings/general b/config/intel-warnings/classic/general similarity index 100% rename from config/intel-warnings/general rename to config/intel-warnings/classic/general diff --git a/config/intel-warnings/ifort-general b/config/intel-warnings/classic/ifort-general similarity index 100% rename from config/intel-warnings/ifort-general rename to config/intel-warnings/classic/ifort-general diff --git a/config/intel-warnings/win-developer-general b/config/intel-warnings/classic/win-developer-general similarity index 100% rename from config/intel-warnings/win-developer-general rename to config/intel-warnings/classic/win-developer-general diff --git a/config/intel-warnings/win-general b/config/intel-warnings/classic/win-general similarity index 100% rename from config/intel-warnings/win-general rename to config/intel-warnings/classic/win-general diff --git a/config/intel-warnings/win-ifort-general b/config/intel-warnings/classic/win-ifort-general similarity index 100% rename from config/intel-warnings/win-ifort-general rename to config/intel-warnings/classic/win-ifort-general diff --git a/config/intel-warnings/oneapi/15 b/config/intel-warnings/oneapi/15 new file mode 100644 index 0000000000..6746f97573 --- /dev/null +++ b/config/intel-warnings/oneapi/15 @@ -0,0 +1,19 @@ +-Wcomment +-Wdeprecated +-Wextra-tokens +-Wformat +-Wformat-security +-Wmain +-Wmissing-declarations +-Wmissing-prototypes +-Wp64 +-Wpointer-arith +-Wreturn-type +-Wshadow +-Wstrict-prototypes +-Wtrigraphs +-Wuninitialized +-Wunknown-pragmas +-Wunused-function +-Wunused-variable +-Wwrite-strings diff --git a/config/intel-warnings/oneapi/developer-general b/config/intel-warnings/oneapi/developer-general new file mode 100644 index 0000000000..fae56f0acc --- /dev/null +++ b/config/intel-warnings/oneapi/developer-general @@ -0,0 +1,4 @@ +-Winline +-Wreorder +-Wport +-Wstrict-aliasing diff --git a/config/intel-warnings/oneapi/general b/config/intel-warnings/oneapi/general new file mode 100644 index 0000000000..bd866b6966 --- /dev/null +++ b/config/intel-warnings/oneapi/general @@ -0,0 +1 @@ +-Wall diff --git a/config/intel-warnings/oneapi/ifort-general b/config/intel-warnings/oneapi/ifort-general new file mode 100644 index 0000000000..1644c7cb82 --- /dev/null +++ b/config/intel-warnings/oneapi/ifort-general @@ -0,0 +1 @@ +-warn all diff --git a/config/intel-warnings/oneapi/win-developer-general b/config/intel-warnings/oneapi/win-developer-general new file mode 100644 index 0000000000..6cd7ed79b7 --- /dev/null +++ b/config/intel-warnings/oneapi/win-developer-general @@ -0,0 +1 @@ +/Wport diff --git a/config/intel-warnings/oneapi/win-general b/config/intel-warnings/oneapi/win-general new file mode 100644 index 0000000000..ef54b2b611 --- /dev/null +++ b/config/intel-warnings/oneapi/win-general @@ -0,0 +1 @@ +/Wall diff --git a/config/intel-warnings/oneapi/win-ifort-general b/config/intel-warnings/oneapi/win-ifort-general new file mode 100644 index 0000000000..a3359590c7 --- /dev/null +++ b/config/intel-warnings/oneapi/win-ifort-general @@ -0,0 +1 @@ +/warn:all diff --git a/config/sanitizer/README.md b/config/sanitizer/README.md index 0d5fb6cdde..e314145540 100644 --- a/config/sanitizer/README.md +++ b/config/sanitizer/README.md @@ -53,7 +53,7 @@ These obviously force the standard to be required, and also disables compiler-sp ## Sanitizer Builds [`sanitizers.cmake`](sanitizers.cmake) -Sanitizers are tools that perform checks during a program’s runtime and returns issues, and as such, along with unit testing, code coverage and static analysis, is another tool to add to the programmers toolbox. And of course, like the previous tools, are tragically simple to add into any project using CMake, allowing any project and developer to quickly and easily use. +Sanitizers are tools that perform checks during a program's runtime and return issues, and as such, along with unit testing, code coverage and static analysis, are another tool to add to the programmer's toolbox. And, of course, like the previous tools, they are simple to add to any project using CMake, allowing any project and developer to quickly and easily use them. A quick rundown of the tools available, and what they do: - [LeakSanitizer](https://clang.llvm.org/docs/LeakSanitizer.html) detects memory leaks, or issues where memory is allocated and never deallocated, causing programs to slowly consume more and more memory, eventually leading to a crash. @@ -304,4 +304,5 @@ file(GLOB_RECURSE CMAKE_FILES ) cmake_format(TARGET_NAME ${CMAKE_FILES}) -``` \ No newline at end of file +``` + diff --git a/config/sanitizer/tools.cmake b/config/sanitizer/tools.cmake index 3904042d04..bf1d818837 100644 --- a/config/sanitizer/tools.cmake +++ b/config/sanitizer/tools.cmake @@ -14,70 +14,49 @@ # the License. option(IWYU "Turns on include-what-you-use processing if it is found." OFF) -option(CPPCHECK "Turns on cppcheck processing if it is found." OFF) +if(IWYU) + find_program(IWYU_EXE NAMES "include-what-you-use") + mark_as_advanced(FORCE IWYU_EXE) + if(IWYU_EXE) + message(STATUS "include-what-you-use found: ${IWYU_EXE}") + else() + message(SEND_ERROR "Cannot enable include-what-you-use, as executable not found!") + set(CMAKE_C_INCLUDE_WHAT_YOU_USE "" CACHE STRING "" FORCE) # delete it + endif() +else() + #message(STATUS "include-what-you-use NOT ENABLED via 'IWYU' variable!") + set(CMAKE_C_INCLUDE_WHAT_YOU_USE "" CACHE STRING "" FORCE) # delete it +endif() # Adds include_what_you_use to the compilation, with the given arguments being # used as the options set. macro(include_what_you_use) if(IWYU AND IWYU_EXE) - set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE ${IWYU_EXE} ${ARGN}) + set(CMAKE_C_INCLUDE_WHAT_YOU_USE ${IWYU_EXE} ${ARGN}) endif() endmacro() +option(CPPCHECK "Turns on cppcheck processing if it is found." OFF) +if(CPPCHECK) + if(CPPCHECK_EXE) + message(STATUS "cppcheck found: ${CPPCHECK_EXE}") + set(CMAKE_C_CPPCHECK + "${CPPCHECK_EXE};--enable=warning,performance,portability,missingInclude;--template=\"[{severity}][{id}] {message} {callstack} \(On {file}:{line}\)\";--suppress=missingIncludeSystem;--quiet;--verbose;--force" + ) + else() + message(SEND_ERROR "Cannot enable cppcheck, as executable not found!") + set(CMAKE_C_CPPCHECK "" CACHE STRING "" FORCE) # delete it + endif() +else() + # message(SEND_ERROR "cppcheck NOT ENABLED via 'CPPCHECK' variable!") + set(CMAKE_C_CPPCHECK "" CACHE STRING "" FORCE) # delete it +endif() + # Adds cppcheck to the compilation, with the given arguments being used as the # options set. macro(cppcheck) if(CPPCHECK AND CPPCHECK_EXE) - set(CMAKE_CXX_CPPCHECK ${CPPCHECK_EXE} ${ARGN}) + set(CMAKE_C_CPPCHECK ${CPPCHECK_EXE} ${ARGN}) endif() endmacro() -find_program(IWYU_EXE NAMES "include-what-you-use") -mark_as_advanced(FORCE IWYU_EXE) -if(IWYU_EXE) - message(STATUS "include-what-you-use found: ${IWYU_EXE}") - if(NOT IWYU) - message(STATUS "include-what-you-use NOT ENABLED via 'IWYU' variable!") - set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE - "" - CACHE STRING "" FORCE) # delete it - endif() -elseif(IWYU) - message( - SEND_ERROR "Cannot enable include-what-you-use, as executable not found!") - set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE - "" - CACHE STRING "" FORCE) # delete it -else() - message(STATUS "include-what-you-use not found!") - set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE - "" - CACHE STRING "" FORCE) # delete it -endif() - -find_program(CPPCHECK_EXE NAMES "cppcheck") -mark_as_advanced(FORCE CPPCHECK_EXE) -if(CPPCHECK_EXE) - message(STATUS "cppcheck found: ${CPPCHECK_EXE}") - if(CPPCHECK) - set(CMAKE_CXX_CPPCHECK - "${CPPCHECK_EXE};--enable=warning,performance,portability,missingInclude;--template=\"[{severity}][{id}] {message} {callstack} \(On {file}:{line}\)\";--suppress=missingIncludeSystem;--quiet;--verbose;--force" - ) - endif() - if(NOT CPPCHECK) - message(STATUS "cppcheck NOT ENABLED via 'CPPCHECK' variable!") - set(CMAKE_CXX_CPPCHECK - "" - CACHE STRING "" FORCE) # delete it - endif() -elseif(CPPCHECK) - message(SEND_ERROR "Cannot enable cppcheck, as executable not found!") - set(CMAKE_CXX_CPPCHECK - "" - CACHE STRING "" FORCE) # delete it -else() - message(STATUS "cppcheck not found!") - set(CMAKE_CXX_CPPCHECK - "" - CACHE STRING "" FORCE) # delete it -endif() diff --git a/config/toolchain/build32.cmake b/config/toolchain/build32.cmake index a2566c3436..f636ea845f 100644 --- a/config/toolchain/build32.cmake +++ b/config/toolchain/build32.cmake @@ -42,7 +42,7 @@ elseif(MINGW) set (CMAKE_CROSSCOMPILING_EMULATOR wine) include_directories(/usr/${TOOLCHAIN_PREFIX}/include) - set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS On CACHE BOOL "Export windows symbols") + set (CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS On CACHE BOOL "Export windows symbols") else () set (CMAKE_SYSTEM_NAME Linux) diff --git a/config/toolchain/clang.cmake b/config/toolchain/clang.cmake index af176aa21c..2d35641a14 100644 --- a/config/toolchain/clang.cmake +++ b/config/toolchain/clang.cmake @@ -1,16 +1,16 @@ # Uncomment the following to use cross-compiling -#set(CMAKE_SYSTEM_NAME Linux) +#set (CMAKE_SYSTEM_NAME Linux) -set(CMAKE_COMPILER_VENDOR "clang") +set (CMAKE_COMPILER_VENDOR "clang") if(WIN32) - set(CMAKE_C_COMPILER clang-cl) - set(CMAKE_CXX_COMPILER clang-cl) + set (CMAKE_C_COMPILER clang-cl) + set (CMAKE_CXX_COMPILER clang-cl) else() - set(CMAKE_C_COMPILER clang) - set(CMAKE_CXX_COMPILER clang++) + set (CMAKE_C_COMPILER clang) + set (CMAKE_CXX_COMPILER clang++) endif() -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) +set (CMAKE_EXPORT_COMPILE_COMMANDS ON) # the following is used if cross-compiling -set(CMAKE_CROSSCOMPILING_EMULATOR "") +set (CMAKE_CROSSCOMPILING_EMULATOR "") diff --git a/config/toolchain/crayle.cmake b/config/toolchain/crayle.cmake index bf7cf69d6d..02df8ffb9d 100644 --- a/config/toolchain/crayle.cmake +++ b/config/toolchain/crayle.cmake @@ -1,10 +1,10 @@ # The following line will use cross-compiling -set(CMAKE_SYSTEM_NAME Linux) +set (CMAKE_SYSTEM_NAME Linux) -set(CMAKE_COMPILER_VENDOR "CrayLinuxEnvironment") +set (CMAKE_COMPILER_VENDOR "CrayLinuxEnvironment") -set(CMAKE_C_COMPILER cc) -set(CMAKE_Fortran_COMPILER ftn) +set (CMAKE_C_COMPILER cc) +set (CMAKE_Fortran_COMPILER ftn) # the following is used if cross-compiling -set(CMAKE_CROSSCOMPILING_EMULATOR "") +set (CMAKE_CROSSCOMPILING_EMULATOR "") diff --git a/config/toolchain/gcc.cmake b/config/toolchain/gcc.cmake index 387edef1a5..f0771edb67 100644 --- a/config/toolchain/gcc.cmake +++ b/config/toolchain/gcc.cmake @@ -1,11 +1,11 @@ # Uncomment the following line and the correct system name to use cross-compiling -#set(CMAKE_SYSTEM_NAME Linux) +#set (CMAKE_SYSTEM_NAME Linux) -set(CMAKE_COMPILER_VENDOR "gcc") +set (CMAKE_COMPILER_VENDOR "GCC") -set(CMAKE_C_COMPILER cc) -set(CMAKE_CXX_COMPILER c++) -set(CMAKE_Fortran_COMPILER gfortran) +set (CMAKE_C_COMPILER cc) +set (CMAKE_CXX_COMPILER c++) +set (CMAKE_Fortran_COMPILER gfortran) # the following is used if cross-compiling -set(CMAKE_CROSSCOMPILING_EMULATOR "") +set (CMAKE_CROSSCOMPILING_EMULATOR "") diff --git a/config/toolchain/mingw64.cmake b/config/toolchain/mingw64.cmake index 18304887c1..1b13891908 100644 --- a/config/toolchain/mingw64.cmake +++ b/config/toolchain/mingw64.cmake @@ -11,4 +11,4 @@ set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set (CMAKE_CROSSCOMPILING_EMULATOR wine64) include_directories(/usr/${TOOLCHAIN_PREFIX}/include) -set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS On CACHE BOOL "Export windows symbols") +set (CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS On CACHE BOOL "Export windows symbols") diff --git a/config/toolchain/pgi.cmake b/config/toolchain/pgi.cmake index afae5b361b..ff2f048575 100644 --- a/config/toolchain/pgi.cmake +++ b/config/toolchain/pgi.cmake @@ -1,11 +1,11 @@ # Uncomment the following to use cross-compiling -#set(CMAKE_SYSTEM_NAME Linux) +#set (CMAKE_SYSTEM_NAME Linux) -set(CMAKE_COMPILER_VENDOR "pgi") +set (CMAKE_COMPILER_VENDOR "PGI") -set(CMAKE_C_COMPILER pgcc) -set(CMAKE_CXX_COMPILER pgc++) -set(CMAKE_Fortran_COMPILER pgf90) +set (CMAKE_C_COMPILER pgcc) +set (CMAKE_CXX_COMPILER pgc++) +set (CMAKE_Fortran_COMPILER pgf90) # the following is used if cross-compiling -set(CMAKE_CROSSCOMPILING_EMULATOR "") +set (CMAKE_CROSSCOMPILING_EMULATOR "") diff --git a/hdf/CMakeLists.txt b/hdf/CMakeLists.txt index 6089c0eb82..e0e36db7d5 100644 --- a/hdf/CMakeLists.txt +++ b/hdf/CMakeLists.txt @@ -1,6 +1,8 @@ cmake_minimum_required (VERSION 3.12) project (HDF4_HDF C) +set(CMAKE_DIRECTORY_LABELS “HDF”) + #----------------------------------------------------------------------------- # Option to build HDF4 Utilities #----------------------------------------------------------------------------- diff --git a/java/CMakeLists.txt b/java/CMakeLists.txt index 3299856e44..b8ca1d98d0 100644 --- a/java/CMakeLists.txt +++ b/java/CMakeLists.txt @@ -1,17 +1,20 @@ cmake_minimum_required (VERSION 3.12) project (HDF4_JAVA C Java) +set(CMAKE_DIRECTORY_LABELS “JAVA”) + set (CMAKE_MODULE_PATH "${HDF_RESOURCES_DIR}") find_package (Java) + #----------------------------------------------------------------------------- # Include some macros for reusable code #----------------------------------------------------------------------------- include (${HDF_RESOURCES_DIR}/UseJava.cmake) -message (STATUS "JAVA: JAVA_HOME=$ENV{JAVA_HOME} JAVA_ROOT=$ENV{JAVA_ROOT}") +message (VERBOSE "JAVA: JAVA_HOME=$ENV{JAVA_HOME} JAVA_ROOT=$ENV{JAVA_ROOT}") find_package (JNI) -message (STATUS "JNI_LIBRARIES=${JNI_LIBRARIES}") -message (STATUS "JNI_INCLUDE_DIRS=${JNI_INCLUDE_DIRS}") +message (VERBOSE "JNI_LIBRARIES=${JNI_LIBRARIES}") +message (VERBOSE "JNI_INCLUDE_DIRS=${JNI_INCLUDE_DIRS}") if (WIN32) diff --git a/java/test/CMakeLists.txt b/java/test/CMakeLists.txt index 8c7b26dc79..be4e89cd1d 100644 --- a/java/test/CMakeLists.txt +++ b/java/test/CMakeLists.txt @@ -53,7 +53,6 @@ get_property (target_name TARGET ${HDF4_JAVA_JNI_LIB_TARGET} PROPERTY OUTPUT_NAM set (CMD_ARGS "-Dhdf.hdflib.HDFLibrary.loadLibraryName=${target_name}$<$:${CMAKE_DEBUG_POSTFIX}>;") foreach (test_file ${HDF4_JAVA_TEST_SOURCES}) - set (CMAKE_JAVA_CLASSPATH ".") foreach (CMAKE_INCLUDE_PATH ${CMAKE_JAVA_INCLUDE_PATH}) set (CMAKE_JAVA_CLASSPATH "${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${CMAKE_INCLUDE_PATH}") diff --git a/mfhdf/CMakeLists.txt b/mfhdf/CMakeLists.txt index d586ef484c..e22fb64bd0 100644 --- a/mfhdf/CMakeLists.txt +++ b/mfhdf/CMakeLists.txt @@ -1,6 +1,8 @@ cmake_minimum_required (VERSION 3.12) project (HDF4_MFHDF C) +set(CMAKE_DIRECTORY_LABELS “MFHDF”) + #----------------------------------------------------------------------------- # Option to build HDF4 Tools #----------------------------------------------------------------------------- diff --git a/mfhdf/ncgen/CMakeTests.cmake b/mfhdf/ncgen/CMakeTests.cmake index a700cf77ce..c2a71e32a2 100644 --- a/mfhdf/ncgen/CMakeTests.cmake +++ b/mfhdf/ncgen/CMakeTests.cmake @@ -30,12 +30,6 @@ add_test ( test1.nc test2.cdl ) -if (NOT "${last_test}" STREQUAL "") - set_tests_properties (NCGEN-clearall-objects PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME}) -else () - set_tests_properties (NCGEN-clearall-objects PROPERTIES LABELS ${PROJECT_NAME}) -endif () -set (last_test "NCGEN-clearall-objects") HDFTEST_COPY_FILE("${HDF4_MFHDF_NCGEN_SOURCE_DIR}/test0.cdl" "${PROJECT_BINARY_DIR}/test0.cdl" "ncgen_files") add_custom_target(ncgen_files ALL COMMENT "Copying files needed by ncgen tests" DEPENDS ${ncgen_files_list}) @@ -45,8 +39,7 @@ add_test ( NAME NCGEN-test0.nc COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ -b -o test0.nc test0.cdl ) -set_tests_properties (NCGEN-test0.nc PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME}) -set (last_test "NCGEN-test0.nc") +set_tests_properties (NCGEN-test0.nc PROPERTIES DEPENDS "NCGEN-clearall-objects" LABELS ${PROJECT_NAME}) add_test ( NAME NCGEN-test1.cdl @@ -60,15 +53,13 @@ add_test ( -D "TEST_SKIP_COMPARE=TRUE" -P "${HDF_RESOURCES_DIR}/runTest.cmake" ) -set_tests_properties (NCGEN-test1.cdl PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME}) -set (last_test "NCGEN-test1.cdl") +set_tests_properties (NCGEN-test1.cdl PROPERTIES DEPENDS "NCGEN-test0.nc" LABELS ${PROJECT_NAME}) add_test ( NAME NCGEN-test1.nc COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ -b test1.cdl ) -set_tests_properties (NCGEN-test1.nc PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME}) -set (last_test "NCGEN-test1.nc") +set_tests_properties (NCGEN-test1.nc PROPERTIES DEPENDS "NCGEN-test1.cdl" LABELS ${PROJECT_NAME}) add_test ( NAME NCGEN-test2.cdl @@ -82,8 +73,7 @@ add_test ( -D "TEST_REFERENCE=test1.cdl" -P "${HDF_RESOURCES_DIR}/runTest.cmake" ) -set_tests_properties (NCGEN-test2.cdl PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME}) -set (last_test "NCGEN-test2.cdl") +set_tests_properties (NCGEN-test2.cdl PROPERTIES DEPENDS "NCGEN-test1.nc" LABELS ${PROJECT_NAME}) # #ctest0$(EXEEXT): ncgen$(EXEEXT) $(srcdir)/test0.cdl @@ -103,8 +93,7 @@ add_test ( -D "TEST_SKIP_COMPARE=TRUE" -P "${HDF_RESOURCES_DIR}/runTest.cmake" ) -set_tests_properties (NCGEN-ctest0 PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME}) -set (last_test "NCGEN-ctest0") +set_tests_properties (NCGEN-ctest0 PROPERTIES DEPENDS "NCGEN-test2.cdl" LABELS ${PROJECT_NAME}) # ## Test the "-c" option of ncgen #c-check: b-check ctest0 @@ -133,8 +122,7 @@ add_test ( -D "TEST_SKIP_COMPARE=TRUE" -P "${HDF_RESOURCES_DIR}/runTest.cmake" ) -set_tests_properties (NCGEN-ftest0 PROPERTIES DEPENDS ${last_test} LABELS ${PROJECT_NAME}) -set (last_test "NCGEN-ftest0") +set_tests_properties (NCGEN-ftest0 PROPERTIES DEPENDS "NCGEN-ctest0" LABELS ${PROJECT_NAME}) # Test the "-f" option of ncgen #f-check: b-check ftest0 # $(TESTS_ENVIRONMENT) ./ftest0