summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.github/FUNDING.yml2
-rw-r--r--.github/workflows/cve.yml2
-rw-r--r--.github/workflows/main-cmake.yml60
-rw-r--r--.github/workflows/main.yml2
-rw-r--r--CMakeInstallation.cmake2
-rw-r--r--CMakeTests.cmake3
-rw-r--r--CMakeVOL.cmake139
-rw-r--r--README.md2
-rw-r--r--c++/test/CMakeTests.cmake3
-rw-r--r--c++/test/CMakeVFDTests.cmake3
-rw-r--r--config/cmake/ConfigureChecks.cmake59
-rw-r--r--config/cmake/LIBAEC/CMakeLists.txt51
-rw-r--r--config/cmake/ZLIB/CMakeLists.txt49
-rw-r--r--config/cmake/examples/HDF5_Examples.cmake.in1
-rw-r--r--config/cmake/scripts/CTestScript.cmake5
-rw-r--r--configure.ac10
-rw-r--r--doc/branches-explained.md2
-rw-r--r--doc/cmake-vols-fetchcontent.md26
-rw-r--r--fortran/src/FortBuildFlow.fig78
-rw-r--r--fortran/src/FortBuildFlow.svg169
-rw-r--r--fortran/src/H5Off.F902
-rw-r--r--fortran/src/H5Pf.c70
-rw-r--r--fortran/src/H5Pff.F9057
-rw-r--r--fortran/src/H5VLff.F9064
-rw-r--r--fortran/src/H5f90proto.h4
-rw-r--r--fortran/src/README133
-rw-r--r--fortran/src/README.md159
-rw-r--r--fortran/src/hdf5_fortrandll.def.in6
-rw-r--r--fortran/test/CMakeTests.cmake18
-rw-r--r--fortran/test/tH5O_F03.F9034
-rw-r--r--fortran/testpar/CMakeTests.cmake11
-rw-r--r--fortran/testpar/Makefile.am2
-rw-r--r--hl/c++/examples/ptExampleFL.cpp2
-rw-r--r--hl/c++/test/CMakeTests.cmake4
-rw-r--r--hl/fortran/test/CMakeTests.cmake3
-rw-r--r--hl/test/CMakeTests.cmake3
-rw-r--r--hl/tools/h5watch/CMakeTests.cmake9
-rw-r--r--java/test/CMakeLists.txt6
-rw-r--r--release_docs/INSTALL_CMake.txt1
-rw-r--r--release_docs/RELEASE.txt104
-rw-r--r--src/H5Dchunk.c264
-rw-r--r--src/H5Dmpio.c7
-rw-r--r--src/H5FDcore.c4
-rw-r--r--src/H5FDcore.h12
-rw-r--r--src/H5FDdirect.h33
-rw-r--r--src/H5FDfamily.c3
-rw-r--r--src/H5FDfamily.h11
-rw-r--r--src/H5FDhdfs.h21
-rw-r--r--src/H5FDlog.c2
-rw-r--r--src/H5FDlog.h11
-rw-r--r--src/H5FDmirror.h11
-rw-r--r--src/H5FDmpi.c48
-rw-r--r--src/H5FDmpio.c39
-rw-r--r--src/H5FDmpio.h25
-rw-r--r--src/H5FDmulti.h8
-rw-r--r--src/H5FDonion.h17
-rw-r--r--src/H5FDprivate.h1
-rw-r--r--src/H5FDpublic.h1
-rw-r--r--src/H5FDros3.h20
-rw-r--r--src/H5FDsec2.c2
-rw-r--r--src/H5FDsec2.h13
-rw-r--r--src/H5FDsplitter.h121
-rw-r--r--src/H5FDstdio.h14
-rw-r--r--src/H5FDsubfiling/H5FDsubfiling.c6
-rw-r--r--src/H5FDwindows.h7
-rw-r--r--src/H5Fint.c8
-rw-r--r--src/H5Fmpi.c34
-rw-r--r--src/H5Fprivate.h1
-rw-r--r--src/H5Smpio.c2
-rw-r--r--src/H5T.c6
-rw-r--r--src/H5Tinit_float.c54
-rw-r--r--src/H5Tvlen.c2
-rw-r--r--src/H5Z.c142
-rw-r--r--src/H5mpi.c4
-rw-r--r--src/H5private.h1
-rw-r--r--src/H5system.c3
-rw-r--r--test/API/CMakeLists.txt117
-rw-r--r--test/API/H5_api_test.c13
-rw-r--r--test/CMakeLists.txt128
-rw-r--r--test/CMakePassthroughVOLTests.cmake16
-rw-r--r--test/CMakeTests.cmake68
-rw-r--r--test/CMakeVFDTests.cmake19
-rw-r--r--test/ShellTests.cmake12
-rw-r--r--test/accum.c2
-rw-r--r--test/h5test.c36
-rw-r--r--test/testframe.c84
-rw-r--r--testpar/API/CMakeLists.txt2
-rw-r--r--testpar/CMakeLists.txt19
-rw-r--r--testpar/CMakeTests.cmake9
-rw-r--r--testpar/CMakeVFDTests.cmake3
-rw-r--r--testpar/t_2Gio.c6
-rw-r--r--testpar/t_bigio.c39
-rw-r--r--testpar/t_file.c102
-rw-r--r--testpar/t_filters_parallel.c33
-rw-r--r--testpar/t_mpi.c46
-rw-r--r--testpar/t_pflush2.c11
-rw-r--r--testpar/t_ph5basic.c136
-rw-r--r--testpar/t_pshutdown.c39
-rw-r--r--testpar/t_shapesame.c56
-rw-r--r--testpar/t_subfiling_vfd.c146
-rw-r--r--testpar/t_vfd.c298
-rw-r--r--testpar/testphdf5.c42
-rw-r--r--testpar/testphdf5.h2
-rw-r--r--tools/libtest/CMakeTests.cmake3
-rw-r--r--tools/libtest/Makefile.am2
-rw-r--r--tools/src/h5dump/h5dump.c6
-rw-r--r--tools/src/misc/h5repart.c8
-rw-r--r--tools/test/h5copy/CMakeTests.cmake53
-rw-r--r--tools/test/h5diff/CMakeTests.cmake9
-rw-r--r--tools/test/h5dump/CMakeTests.cmake62
-rw-r--r--tools/test/h5dump/CMakeTestsPBITS.cmake3
-rw-r--r--tools/test/h5dump/CMakeTestsVDS.cmake9
-rw-r--r--tools/test/h5dump/CMakeTestsXML.cmake5
-rw-r--r--tools/test/h5dump/CMakeVFDTests.cmake3
-rw-r--r--tools/test/h5format_convert/CMakeTests.cmake108
-rw-r--r--tools/test/h5import/CMakeTests.cmake29
-rw-r--r--tools/test/h5jam/CMakeTests.cmake36
-rw-r--r--tools/test/h5ls/CMakeTests.cmake9
-rw-r--r--tools/test/h5ls/CMakeTestsVDS.cmake6
-rw-r--r--tools/test/h5repack/CMakeTests.cmake136
-rw-r--r--tools/test/h5repack/CMakeVFDTests.cmake3
-rw-r--r--tools/test/h5stat/CMakeTests.cmake6
-rw-r--r--tools/test/misc/CMakeTestsClear.cmake45
-rw-r--r--tools/test/misc/CMakeTestsMkgrp.cmake12
-rw-r--r--tools/test/misc/CMakeTestsRepart.cmake15
-rw-r--r--tools/test/perform/CMakeTests.cmake21
-rw-r--r--utils/Makefile.am2
-rw-r--r--utils/mirror_vfd/CMakeLists.txt14
-rw-r--r--utils/subfiling_vfd/CMakeLists.txt13
-rwxr-xr-xutils/subfiling_vfd/h5fuse.in (renamed from utils/subfiling_vfd/h5fuse.sh.in)4
130 files changed, 3238 insertions, 1186 deletions
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
index 7c4daaf..e34496c 100644
--- a/.github/FUNDING.yml
+++ b/.github/FUNDING.yml
@@ -1,3 +1,3 @@
# These are supported funding model platforms
-custom: "https://hdfgroup.org/about-us/donate-to-the-hdf-group/"
+custom: "https://www.hdfgroup.org/donate"
diff --git a/.github/workflows/cve.yml b/.github/workflows/cve.yml
index 54dc299..6d51019 100644
--- a/.github/workflows/cve.yml
+++ b/.github/workflows/cve.yml
@@ -16,7 +16,7 @@ on:
# Using concurrency to cancel any in-progress job or run
concurrency:
- group: ${{ github.workflow }}-${{ github.sha || github.event.pull_request.number }}
+ group: ${{ github.workflow }}-${{ github.head_ref && github.ref || github.run_id }}
cancel-in-progress: true
permissions:
diff --git a/.github/workflows/main-cmake.yml b/.github/workflows/main-cmake.yml
index bf53c41..ce39b6d 100644
--- a/.github/workflows/main-cmake.yml
+++ b/.github/workflows/main-cmake.yml
@@ -249,3 +249,63 @@ jobs:
#
# INSTALL (note that this runs even when we don't run the tests)
#
+
+ #
+ # The GitHub runners are inadequate for running parallel HDF5 tests,
+ # so we catch most issues in daily testing. What we have here is just
+ # a compile check to make sure nothing obvious is broken.
+ # A workflow that builds the library
+ # Parallel Linux (Ubuntu) w/ gcc + Autotools
+ #
+ CMake_build_parallel:
+ name: "Parallel GCC-${{ inputs.build_mode }}-TS=${{ inputs.thread_safety }}"
+ # 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-get install ninja-build doxygen graphviz
+ sudo apt install libssl3 libssl-dev libcurl4 libcurl4-openssl-dev
+ sudo apt install gcc-12 g++-12 gfortran-12
+ sudo apt install libaec0 libaec-dev
+ sudo apt install openmpi-bin openmpi-common mpi-default-dev
+ echo "CC=mpicc" >> $GITHUB_ENV
+ echo "FC=mpif90" >> $GITHUB_ENV
+
+ # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
+ - name: Get Sources
+ uses: actions/checkout@v4
+
+ # CMAKE CONFIGURE
+ - name: CMake Configure
+ run: |
+ mkdir "${{ runner.workspace }}/build"
+ cd "${{ runner.workspace }}/build"
+ CC=mpicc cmake -C $GITHUB_WORKSPACE/config/cmake/cacheinit.cmake \
+ -DCMAKE_BUILD_TYPE=${{ inputs.build_mode }} \
+ -DCMAKE_TOOLCHAIN_FILE=${{ matrix.toolchain }} \
+ -DBUILD_SHARED_LIBS=ON \
+ -DHDF5_ENABLE_ALL_WARNINGS=ON \
+ -DHDF5_ENABLE_PARALLEL:BOOL=ON \
+ -DHDF5_BUILD_CPP_LIB:BOOL=OFF \
+ -DHDF5_BUILD_FORTRAN=ON \
+ -DHDF5_BUILD_JAVA=OFF \
+ -DLIBAEC_USE_LOCALCONTENT=OFF \
+ -DZLIB_USE_LOCALCONTENT=OFF \
+ -DHDF5_ENABLE_MIRROR_VFD:BOOL=OFF \
+ -DHDF5_ENABLE_DIRECT_VFD:BOOL=OFF \
+ -DHDF5_ENABLE_ROS3_VFD:BOOL=OFF \
+ $GITHUB_WORKSPACE
+ shell: bash
+
+ # BUILD
+ - name: CMake Build
+ run: cmake --build . --parallel 3 --config ${{ inputs.build_mode }}
+ working-directory: ${{ runner.workspace }}/build
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index e8921bd..df3bcec 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -17,7 +17,7 @@ on:
# Using concurrency to cancel any in-progress job or run
concurrency:
- group: ${{ github.workflow }}-${{ github.sha || github.event.pull_request.number }}
+ group: ${{ github.workflow }}-${{ github.head_ref && github.ref || github.run_id }}
cancel-in-progress: true
permissions:
diff --git a/CMakeInstallation.cmake b/CMakeInstallation.cmake
index 02f8dc3..7128740 100644
--- a/CMakeInstallation.cmake
+++ b/CMakeInstallation.cmake
@@ -508,7 +508,6 @@ The HDF5 data model, file format, API, library, and tools are open and distribut
set (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${ZLIB_INCLUDE_DIR_GEN};HDF5_ZLIB;ALL;/")
else ()
set (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${ZLIB_INCLUDE_DIR_GEN};HDF5_ZLIB;libraries;/")
- set (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${ZLIB_INCLUDE_DIR_GEN};HDF5_ZLIB;headers;/")
set (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${ZLIB_INCLUDE_DIR_GEN};HDF5_ZLIB;configinstall;/")
endif ()
endif ()
@@ -517,7 +516,6 @@ The HDF5 data model, file format, API, library, and tools are open and distribut
set (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${SZIP_INCLUDE_DIR_GEN};SZIP;ALL;/")
else ()
set (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${SZIP_INCLUDE_DIR_GEN};SZIP;libraries;/")
- set (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${SZIP_INCLUDE_DIR_GEN};SZIP;headers;/")
set (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${SZIP_INCLUDE_DIR_GEN};SZIP;configinstall;/")
endif ()
endif ()
diff --git a/CMakeTests.cmake b/CMakeTests.cmake
index 1dfa700..6619901 100644
--- a/CMakeTests.cmake
+++ b/CMakeTests.cmake
@@ -23,6 +23,9 @@
math (EXPR CTEST_LONG_TIMEOUT "${DART_TESTING_TIMEOUT} * 2")
math (EXPR CTEST_VERY_LONG_TIMEOUT "${DART_TESTING_TIMEOUT} * 3")
+ option (HDF5_DISABLE_TESTS_REGEX "Regex pattern to set execution of specific tests to DISABLED" "")
+ mark_as_advanced (HDF5_DISABLE_TESTS_REGEX)
+
option (HDF5_TEST_API "Execute HDF5 API tests" OFF)
mark_as_advanced (HDF5_TEST_API)
if (HDF5_TEST_API)
diff --git a/CMakeVOL.cmake b/CMakeVOL.cmake
index 79afa59..8b2207a 100644
--- a/CMakeVOL.cmake
+++ b/CMakeVOL.cmake
@@ -26,14 +26,51 @@ function (get_generated_cmake_targets out_var dir)
set (${out_var} "${dir_targets}" PARENT_SCOPE)
endfunction ()
-# For now, only support building of external VOL connectors with FetchContent
-option (HDF5_VOL_ALLOW_EXTERNAL "Allow building of external HDF5 VOL connectors with FetchContent" "NO")
-mark_as_advanced (HDF5_VOL_ALLOW_EXTERNAL)
-if (HDF5_VOL_ALLOW_EXTERNAL)
- if (HDF5_VOL_ALLOW_EXTERNAL MATCHES "NO" OR (NOT HDF5_VOL_ALLOW_EXTERNAL MATCHES "GIT" AND NOT HDF5_VOL_ALLOW_EXTERNAL MATCHES "LOCAL_DIR"))
- message (FATAL_ERROR "HDF5_VOL_ALLOW_EXTERNAL must be set to 'GIT' or 'LOCAL_DIR' to allow building of external HDF5 VOL connectors")
- endif()
+# Function to apply connector-specify workarounds to build
+# code once a connector has been populated through FetchContent
+function (apply_connector_workarounds connector_name source_dir)
+ # For the cache VOL, remove the call to find_package(ASYNC).
+ # Eventually, the FetchContent OVERRIDE_FIND_PACKAGE should be
+ # able to fulfill this dependency when building the cache VOL,
+ # but for now we have to hack around this until the async and
+ # cache VOLs create CMake .config files
+ if ("${connector_name}" MATCHES "vol-cache")
+ # Remove find_package(ASYNC) call from connector's CMake code
+ file (READ "${source_dir}/CMakeLists.txt" vol_cmake_contents)
+ string (REGEX REPLACE "[ \t]*find_package[ \t]*\\([ \t]*ASYNC[^\r\n\\)]*\\)[ \t]*[\r\n]+" "" vol_cmake_contents "${vol_cmake_contents}")
+ file (WRITE "${source_dir}/CMakeLists.txt" "${vol_cmake_contents}")
+
+ # Remove setting of HDF5_VOL_CONNECTOR and HDF5_PLUGIN_PATH
+ # in connector's external tests CMake code
+ file (STRINGS "${source_dir}/tests/CMakeLists.txt" file_lines)
+ file (WRITE "${source_dir}/tests/CMakeLists.txt" "")
+ foreach (line IN LISTS file_lines)
+ set (stripped_line "${line}")
+ string (REGEX MATCH "^[ \t]*set_tests_properties\\([ \t]*[\r\n]?" match_string "${line}")
+ if (NOT "${match_string}" STREQUAL "")
+ string (REGEX REPLACE "^[ \t]*set_tests_properties\\([ \t]*[\r\n]?" "" stripped_line "${line}")
+ endif ()
+ string (REGEX MATCH "^[ \t]*.\\{test\\}[ \t]*[\r\n]?" match_string "${line}")
+ if (NOT "${match_string}" STREQUAL "")
+ string (REGEX REPLACE "^[ \t]*.\\{[A-Za-z]*\\}[ \t]*[\r\n]?" "" stripped_line "${line}")
+ endif ()
+ string (REGEX MATCH "^[ \t]*PROPERTIES[ \t]*[\r\n]?" match_string "${line}")
+ if (NOT "${match_string}" STREQUAL "")
+ string (REGEX REPLACE "^[ \t]*PROPERTIES[ \t]*[\r\n]?" "" stripped_line "${line}")
+ endif ()
+ string (REGEX MATCH "^[ \t]*ENVIRONMENT[ \t]*.*[\r\n]?" match_string "${line}")
+ if (NOT "${match_string}" STREQUAL "")
+ string (REGEX REPLACE "^[ \t]*ENVIRONMENT[ \t]*.*[\r\n]?" "" stripped_line "${line}")
+ endif ()
+ file (APPEND "${source_dir}/tests/CMakeLists.txt" "${stripped_line}\n")
+ endforeach ()
+ endif ()
+endfunction ()
+set (HDF5_VOL_ALLOW_EXTERNAL "NO" CACHE STRING "Allow building of external HDF5 VOL connectors with FetchContent")
+set_property (CACHE HDF5_VOL_ALLOW_EXTERNAL PROPERTY STRINGS NO GIT LOCAL_DIR)
+mark_as_advanced (HDF5_VOL_ALLOW_EXTERNAL)
+if (HDF5_VOL_ALLOW_EXTERNAL MATCHES "GIT" OR HDF5_VOL_ALLOW_EXTERNAL MATCHES "LOCAL_DIR")
# For compatibility, set some variables that projects would
# typically look for after calling find_package(HDF5)
set (HDF5_FOUND 1)
@@ -103,6 +140,13 @@ if (HDF5_VOL_ALLOW_EXTERNAL)
mark_as_advanced ("HDF5_VOL_${hdf5_vol_name_upper}_BRANCH")
endif()
+ set ("HDF5_VOL_${hdf5_vol_name_upper}_CMAKE_PACKAGE_NAME"
+ "${hdf5_vol_name_lower}"
+ CACHE
+ STRING
+ "CMake package name used by find_package(...) calls for VOL connector '${hdf5_vol_name}'"
+ )
+
set ("HDF5_VOL_${hdf5_vol_name_upper}_NAME" "" CACHE STRING "Name of VOL connector to set for the HDF5_VOL_CONNECTOR environment variable")
option ("HDF5_VOL_${hdf5_vol_name_upper}_TEST_PARALLEL" "Whether to test VOL connector '${hdf5_vol_name}' against the parallel API tests" OFF)
@@ -124,22 +168,40 @@ if (HDF5_VOL_ALLOW_EXTERNAL)
message (FATAL_ERROR "HDF5_VOL_PATH${vol_idx_fixed} must be an absolute path to a valid directory")
endif ()
+ # Set internal convenience variables for FetchContent dependency name
+ set (hdf5_vol_depname "${HDF5_VOL_${hdf5_vol_name_upper}_CMAKE_PACKAGE_NAME}")
+ string (TOLOWER "${hdf5_vol_depname}" hdf5_vol_depname_lower)
+
if (HDF5_VOL_ALLOW_EXTERNAL MATCHES "GIT")
- FetchContent_Declare (HDF5_VOL_${hdf5_vol_name_lower}
- GIT_REPOSITORY "${HDF5_VOL_SOURCE}"
- GIT_TAG "${HDF5_VOL_${hdf5_vol_name_upper}_BRANCH}"
- )
+ if (${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.24")
+ FetchContent_Declare (${hdf5_vol_depname}
+ GIT_REPOSITORY "${HDF5_VOL_SOURCE}"
+ GIT_TAG "${HDF5_VOL_${hdf5_vol_name_upper}_BRANCH}"
+ OVERRIDE_FIND_PACKAGE
+ )
+ else ()
+ FetchContent_Declare (${hdf5_vol_depname}
+ GIT_REPOSITORY "${HDF5_VOL_SOURCE}"
+ GIT_TAG "${HDF5_VOL_${hdf5_vol_name_upper}_BRANCH}"
+ FIND_PACKAGE_ARGS NAMES ${hdf5_vol_name_lower}
+ )
+ endif ()
elseif(HDF5_VOL_ALLOW_EXTERNAL MATCHES "LOCAL_DIR")
- FetchContent_Declare (HDF5_VOL_${hdf5_vol_name_lower}
- SOURCE_DIR "${HDF5_VOL_SOURCE}"
+ FetchContent_Declare (${hdf5_vol_depname}
+ SOURCE_DIR "${HDF5_VOL_SOURCE}"
)
endif()
- FetchContent_GetProperties(HDF5_VOL_${hdf5_vol_name_lower})
- if (NOT hdf5_vol_${hdf5_vol_name_lower}_POPULATED)
- FetchContent_Populate(HDF5_VOL_${hdf5_vol_name_lower})
+ FetchContent_GetProperties(${hdf5_vol_depname})
+ if (NOT ${hdf5_vol_depname}_POPULATED)
+ FetchContent_Populate(${hdf5_vol_depname})
+
+ # Now that content has been populated, set other internal
+ # convenience variables for FetchContent dependency
+ set (hdf5_vol_depname_source_dir "${${hdf5_vol_depname_lower}_SOURCE_DIR}")
+ set (hdf5_vol_depname_binary_dir "${${hdf5_vol_depname_lower}_BINARY_DIR}")
- if (NOT EXISTS "${hdf5_vol_${hdf5_vol_name_lower}_SOURCE_DIR}/CMakeLists.txt")
+ if (NOT EXISTS "${hdf5_vol_depname_source_dir}/CMakeLists.txt")
if (HDF5_VOL_ALLOW_EXTERNAL MATCHES "GIT")
message (SEND_ERROR "The git repository branch '${HDF5_VOL_${hdf5_vol_name_upper}_BRANCH}' for VOL connector '${hdf5_vol_name}' does not appear to contain a CMakeLists.txt file")
elseif (HDF5_VOL_ALLOW_EXTERNAL MATCHES "LOCAL_DIR")
@@ -150,21 +212,24 @@ if (HDF5_VOL_ALLOW_EXTERNAL)
# If there are any calls to find_package(HDF5) in the connector's
# CMakeLists.txt files, remove those since any found HDF5 targets
# will conflict with targets being generated by this build of HDF5
- if (EXISTS "${hdf5_vol_${hdf5_vol_name_lower}_SOURCE_DIR}/CMakeLists.txt")
- file (READ "${hdf5_vol_${hdf5_vol_name_lower}_SOURCE_DIR}/CMakeLists.txt" vol_cmake_contents)
+ if (EXISTS "${hdf5_vol_depname_source_dir}/CMakeLists.txt")
+ file (READ "${hdf5_vol_depname_source_dir}/CMakeLists.txt" vol_cmake_contents)
string (REGEX REPLACE "[ \t]*find_package[ \t]*\\([ \t]*HDF5[^\r\n\\)]*\\)[ \t]*[\r\n]+" "" vol_cmake_contents "${vol_cmake_contents}")
- file (WRITE "${hdf5_vol_${hdf5_vol_name_lower}_SOURCE_DIR}/CMakeLists.txt" "${vol_cmake_contents}")
+ file (WRITE "${hdf5_vol_depname_source_dir}/CMakeLists.txt" "${vol_cmake_contents}")
endif ()
- if (EXISTS "${hdf5_vol_${hdf5_vol_name_lower}_SOURCE_DIR}/src/CMakeLists.txt")
- file (READ "${hdf5_vol_${hdf5_vol_name_lower}_SOURCE_DIR}/src/CMakeLists.txt" vol_cmake_contents)
+ if (EXISTS "${hdf5_vol_depname_source_dir}/src/CMakeLists.txt")
+ file (READ "${hdf5_vol_depname_source_dir}/src/CMakeLists.txt" vol_cmake_contents)
string (REGEX REPLACE "[ \t]*find_package[ \t]*\\([ \t]*HDF5[^\r\n\\)]*\\)[ \t]*[\r\n]+" "" vol_cmake_contents "${vol_cmake_contents}")
- file (WRITE "${hdf5_vol_${hdf5_vol_name_lower}_SOURCE_DIR}/src/CMakeLists.txt" "${vol_cmake_contents}")
+ file (WRITE "${hdf5_vol_depname_source_dir}/src/CMakeLists.txt" "${vol_cmake_contents}")
endif ()
- add_subdirectory (${hdf5_vol_${hdf5_vol_name_lower}_SOURCE_DIR} ${hdf5_vol_${hdf5_vol_name_lower}_BINARY_DIR})
+ # Apply any connector-specific workarounds
+ apply_connector_workarounds ("${hdf5_vol_name_lower}" "${hdf5_vol_depname_source_dir}")
+
+ add_subdirectory (${hdf5_vol_depname_source_dir} ${hdf5_vol_depname_binary_dir})
# Get list of targets generated by build of connector
- get_generated_cmake_targets (connector_targets ${hdf5_vol_${hdf5_vol_name_lower}_SOURCE_DIR})
+ get_generated_cmake_targets (connector_targets ${hdf5_vol_depname_source_dir})
# Create a custom target for the connector to encompass all its
# targets and other custom properties set by us for later use
@@ -217,8 +282,30 @@ if (HDF5_VOL_ALLOW_EXTERNAL)
HDF5_VOL_TEST_PARALLEL ${HDF5_VOL_${hdf5_vol_name_upper}_TEST_PARALLEL}
)
- # Add this connector's target to the list of external connector targets
+ # Add this VOL connector's target to the list of external connector targets
list (APPEND HDF5_EXTERNAL_VOL_TARGETS "HDF5_VOL_${hdf5_vol_name_lower}")
+
+ # Get the list of library targets from this VOL connector
+ unset (connector_lib_targets)
+ foreach (connector_target ${connector_targets})
+ get_target_property (target_type ${connector_target} TYPE)
+ if (target_type STREQUAL "SHARED_LIBRARY" OR target_type STREQUAL "STATIC_LIBRARY")
+ list (APPEND connector_lib_targets "${connector_target}")
+ endif ()
+ endforeach ()
+
+ # Add all of the previous VOL connector's library targets as
+ # dependencies for the current VOL connector to ensure that
+ # VOL connectors get built serially in case there are dependencies
+ if (DEFINED last_vol_lib_targets)
+ foreach (connector_target ${connector_targets})
+ add_dependencies (${connector_target} ${last_vol_lib_targets})
+ endforeach ()
+ endif ()
+
+ # Use this connector's library targets as dependencies
+ # for the next connector that is built
+ set (last_vol_lib_targets "${connector_lib_targets}")
endif ()
endif ()
endforeach ()
diff --git a/README.md b/README.md
index dd99efa..4511b11 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@ HDF5 version 1.14.4-1 currently under development
![HDF5 Logo](doxygen/img/HDF5.png)
-[![1.14 build status](https://img.shields.io/github/actions/workflow/status/HDFGroup/hdf5/main.yml?branch=hdf5_1_14&label=1.14)](https://github.com/HDFGroup/hdf5/actions?query=branch%3Ahdf5_1_14)
+[![1.14 build status](https://img.shields.io/github/actions/workflow/status/HDFGroup/hdf5/main.yml?branch=hdf5_1_14&label=1.14)](https://github.com/HDFGroup/hdf5/actions/workflows/main.yml?query=branch%3Ahdf5_1_14)
[![BSD](https://img.shields.io/badge/License-BSD-blue.svg)](https://github.com/HDFGroup/hdf5/blob/develop/COPYING)
*Please refer to the release_docs/INSTALL file for installation instructions.*
diff --git a/c++/test/CMakeTests.cmake b/c++/test/CMakeTests.cmake
index fc94a68..224b099 100644
--- a/c++/test/CMakeTests.cmake
+++ b/c++/test/CMakeTests.cmake
@@ -35,6 +35,9 @@ endif ()
set_tests_properties (CPP_testhdf5 PROPERTIES
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
)
+if ("CPP_testhdf5" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (CPP_testhdf5 PROPERTIES DISABLED true)
+endif ()
##############################################################################
##############################################################################
diff --git a/c++/test/CMakeVFDTests.cmake b/c++/test/CMakeVFDTests.cmake
index 5405df3..52f8069 100644
--- a/c++/test/CMakeVFDTests.cmake
+++ b/c++/test/CMakeVFDTests.cmake
@@ -37,6 +37,9 @@ macro (ADD_VFD_TEST vfdname resultcode)
-P "${HDF_RESOURCES_DIR}/vfdTest.cmake"
)
set_tests_properties (CPP_VFD-${vfdname}-cpp_testhdf5 PROPERTIES TIMEOUT ${CTEST_SHORT_TIMEOUT})
+ if ("CPP_VFD-${vfdname}-cpp_testhdf5" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (CPP_VFD-${vfdname}-cpp_testhdf5 PROPERTIES DISABLED true)
+ endif ()
endif ()
endmacro ()
diff --git a/config/cmake/ConfigureChecks.cmake b/config/cmake/ConfigureChecks.cmake
index 3d4c23b..8013363 100644
--- a/config/cmake/ConfigureChecks.cmake
+++ b/config/cmake/ConfigureChecks.cmake
@@ -872,35 +872,46 @@ if (HDF5_BUILD_FORTRAN)
endif()
#-----------------------------------------------------------------------------
-# Macro to determine the various conversion capabilities
+# Macro to determine long double conversion properties
#-----------------------------------------------------------------------------
-macro (H5ConversionTests TEST msg)
+macro (H5ConversionTests TEST def msg)
if (NOT DEFINED ${TEST})
- TRY_RUN (${TEST}_RUN ${TEST}_COMPILE
- ${CMAKE_BINARY_DIR}
- ${HDF_RESOURCES_DIR}/ConversionTests.c
- CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=-D${TEST}_TEST
- OUTPUT_VARIABLE OUTPUT
- )
- if (${TEST}_COMPILE)
- if (${TEST}_RUN EQUAL "0")
- set (${TEST} 1 CACHE INTERNAL ${msg})
- message (VERBOSE "${msg}... yes")
+ if (NOT CMAKE_CROSSCOMPILING)
+ # Build and run the test code if not cross-compiling
+ TRY_RUN (${TEST}_RUN ${TEST}_COMPILE
+ ${CMAKE_BINARY_DIR}
+ ${HDF_RESOURCES_DIR}/ConversionTests.c
+ CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=-D${TEST}_TEST
+ OUTPUT_VARIABLE OUTPUT
+ )
+ if (${TEST}_COMPILE)
+ if (${TEST}_RUN EQUAL "0")
+ set (${TEST} 1 CACHE INTERNAL ${msg})
+ message (VERBOSE "${msg}... yes")
+ else ()
+ set (${TEST} "" CACHE INTERNAL ${msg})
+ message (VERBOSE "${msg}... no")
+ file (APPEND ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeError.log
+ "Test ${TEST} Run failed with the following output and exit code:\n ${OUTPUT}\n"
+ )
+ endif ()
else ()
set (${TEST} "" CACHE INTERNAL ${msg})
message (VERBOSE "${msg}... no")
file (APPEND ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeError.log
- "Test ${TEST} Run failed with the following output and exit code:\n ${OUTPUT}\n"
+ "Test ${TEST} Compile failed with the following output:\n ${OUTPUT}\n"
)
endif ()
else ()
- set (${TEST} "" CACHE INTERNAL ${msg})
- message (VERBOSE "${msg}... no")
- file (APPEND ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeError.log
- "Test ${TEST} Compile failed with the following output:\n ${OUTPUT}\n"
- )
+ # Use the default if there's no cache variable and cross-compiling
+ if (${def})
+ message (VERBOSE "${msg}... yes (cross-compile default)")
+ set (${TEST} 1 CACHE INTERNAL ${msg})
+ else ()
+ message (VERBOSE "${msg}... no (cross-compile default)")
+ set (${TEST} "" CACHE INTERNAL ${msg})
+ endif ()
endif ()
-
endif ()
endmacro ()
@@ -917,7 +928,7 @@ endmacro ()
# The machine's conversion gets the correct value. We define the macro and disable
# this kind of test until we figure out what algorithm they use.
#-----------------------------------------------------------------------------
-H5ConversionTests (${HDF_PREFIX}_LDOUBLE_TO_LONG_SPECIAL "Checking IF your system converts long double to (unsigned) long values with special algorithm")
+H5ConversionTests (${HDF_PREFIX}_LDOUBLE_TO_LONG_SPECIAL FALSE "Checking IF your system converts long double to (unsigned) long values with special algorithm")
# ----------------------------------------------------------------------
# Set the flag to indicate that the machine is using a special algorithm
# to convert some values of '(unsigned) long' to 'long double' values.
@@ -926,7 +937,7 @@ H5ConversionTests (${HDF_PREFIX}_LDOUBLE_TO_LONG_SPECIAL "Checking IF your syst
# ..., 7fffff..., the compiler uses a unknown algorithm. We define a
# macro and skip the test for now until we know about the algorithm.
#-----------------------------------------------------------------------------
-H5ConversionTests (${HDF_PREFIX}_LONG_TO_LDOUBLE_SPECIAL "Checking IF your system can convert (unsigned) long to long double values with special algorithm")
+H5ConversionTests (${HDF_PREFIX}_LONG_TO_LDOUBLE_SPECIAL FALSE "Checking IF your system can convert (unsigned) long to long double values with special algorithm")
# ----------------------------------------------------------------------
# Set the flag to indicate that the machine can accurately convert
# 'long double' to '(unsigned) long long' values. (This flag should be set for
@@ -936,7 +947,7 @@ H5ConversionTests (${HDF_PREFIX}_LONG_TO_LDOUBLE_SPECIAL "Checking IF your syste
# 0x4351ccf385ebc8a0dfcc... or 0x4351ccf385ebc8a0ffcc... will make the converted
# values wildly wrong. This test detects this wrong behavior and disable the test.
#-----------------------------------------------------------------------------
-H5ConversionTests (${HDF_PREFIX}_LDOUBLE_TO_LLONG_ACCURATE "Checking IF correctly converting long double to (unsigned) long long values")
+H5ConversionTests (${HDF_PREFIX}_LDOUBLE_TO_LLONG_ACCURATE TRUE "Checking IF correctly converting long double to (unsigned) long long values")
# ----------------------------------------------------------------------
# Set the flag to indicate that the machine can accurately convert
# '(unsigned) long long' to 'long double' values. (This flag should be set for
@@ -944,9 +955,9 @@ H5ConversionTests (${HDF_PREFIX}_LDOUBLE_TO_LLONG_ACCURATE "Checking IF correctl
# 007fff..., 00ffff..., 01ffff..., ..., 7fffff..., the converted values are twice
# as big as they should be.
#-----------------------------------------------------------------------------
-H5ConversionTests (${HDF_PREFIX}_LLONG_TO_LDOUBLE_CORRECT "Checking IF correctly converting (unsigned) long long to long double values")
+H5ConversionTests (${HDF_PREFIX}_LLONG_TO_LDOUBLE_CORRECT TRUE "Checking IF correctly converting (unsigned) long long to long double values")
# ----------------------------------------------------------------------
# Set the flag to indicate that the machine can accurately convert
# some long double values
#-----------------------------------------------------------------------------
-H5ConversionTests (${HDF_PREFIX}_DISABLE_SOME_LDOUBLE_CONV "Checking IF the cpu is power9 and cannot correctly converting long double values")
+H5ConversionTests (${HDF_PREFIX}_DISABLE_SOME_LDOUBLE_CONV FALSE "Checking IF the cpu is power9 and cannot correctly converting long double values")
diff --git a/config/cmake/LIBAEC/CMakeLists.txt b/config/cmake/LIBAEC/CMakeLists.txt
index 9ffb68d..a819587 100644
--- a/config/cmake/LIBAEC/CMakeLists.txt
+++ b/config/cmake/LIBAEC/CMakeLists.txt
@@ -172,7 +172,7 @@ target_link_libraries (${LIBAEC_LIB_TARGET} PRIVATE ${LINK_LIBS})
H5_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}"
+ PUBLIC_HEADER ""
LINKER_LANGUAGE C
INTERFACE_INCLUDE_DIRECTORIES "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include>"
)
@@ -194,7 +194,7 @@ target_link_libraries (${SZIP_LIB_TARGET} PRIVATE ${LIBAEC_LIB_TARGET})
H5_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}"
+ PUBLIC_HEADER ""
LINKER_LANGUAGE C
INTERFACE_INCLUDE_DIRECTORIES "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include>"
)
@@ -235,17 +235,6 @@ if (WIN32)
endif ()
#-----------------------------------------------------------------------------
-# Add file(s) to CMake Install
-#-----------------------------------------------------------------------------
-#if (NOT LIBAEC_INSTALL_NO_DEVELOPMENT)
-# install (
-# FILES ${PROJECT_BINARY_DIR}/aec_config.h
-# DESTINATION ${LIBAEC_INSTALL_INCLUDE_DIR}
-# COMPONENT headers
-# )
-#endif ()
-
-#-----------------------------------------------------------------------------
# Add Target(s) to CMake Install for import into other projects
#-----------------------------------------------------------------------------
if (NOT LIBAEC_EXTERNALLY_CONFIGURED)
@@ -334,20 +323,6 @@ if (NOT LIBAEC_EXTERNALLY_CONFIGURED)
endif ()
#-----------------------------------------------------------------------------
-# Add Document File(s) to CMake Install
-#-----------------------------------------------------------------------------
-if (NOT LIBAEC_EXTERNALLY_CONFIGURED)
- install (
- FILES
- ${LIBAEC_SOURCE_DIR}/README.md
- ${LIBAEC_SOURCE_DIR}/INSTALL.md
- ${LIBAEC_SOURCE_DIR}/CHANGELOG.md
- DESTINATION ${LIBAEC_INSTALL_DATA_DIR}
- COMPONENT documents
- )
-endif ()
-
-#-----------------------------------------------------------------------------
# Check for Installation Utilities
#-----------------------------------------------------------------------------
if (WIN32)
@@ -464,7 +439,6 @@ if (NOT LIBAEC_EXTERNALLY_CONFIGURED)
include (InstallRequiredSystemLibraries)
set (CPACK_INSTALL_CMAKE_PROJECTS "${LIBAEC_BINARY_DIR};LIBAEC;libraries;/")
- set (CPACK_INSTALL_CMAKE_PROJECTS "${LIBAEC_BINARY_DIR};LIBAEC;headers;/")
set (CPACK_INSTALL_CMAKE_PROJECTS "${LIBAEC_BINARY_DIR};LIBAEC;configinstall;/")
set (CPACK_ALL_INSTALL_TYPES Full Developer User)
@@ -476,33 +450,12 @@ if (NOT LIBAEC_EXTERNALLY_CONFIGURED)
cpack_add_component_group(Runtime)
- cpack_add_component_group(Documents
- EXPANDED
- DESCRIPTION "Release notes for libaec"
- )
-
- cpack_add_component_group(Development
- EXPANDED
- DESCRIPTION "All of the tools you'll need to develop applications"
- )
-
cpack_add_component (libraries
DISPLAY_NAME "LIBAEC Libraries"
REQUIRED
GROUP Runtime
INSTALL_TYPES Full Developer User
)
- cpack_add_component (headers
- DISPLAY_NAME "LIBAEC Headers"
- DEPENDS libraries
- GROUP Development
- INSTALL_TYPES Full Developer
- )
- cpack_add_component (documents
- DISPLAY_NAME "LIBAEC Documents"
- GROUP Documents
- INSTALL_TYPES Full Developer
- )
cpack_add_component (configinstall
DISPLAY_NAME "LIBAEC CMake files"
DEPENDS libraries
diff --git a/config/cmake/ZLIB/CMakeLists.txt b/config/cmake/ZLIB/CMakeLists.txt
index 5c06a54..d4b3924 100644
--- a/config/cmake/ZLIB/CMakeLists.txt
+++ b/config/cmake/ZLIB/CMakeLists.txt
@@ -247,7 +247,7 @@ TARGET_C_PROPERTIES (${ZLIB_LIB_TARGET} STATIC)
target_link_libraries (${ZLIB_LIB_TARGET} PRIVATE ${LINK_LIBS})
H5_SET_LIB_OPTIONS (${ZLIB_LIB_TARGET} ${ZLIB_LIB_NAME} STATIC 0)
set_target_properties(${ZLIB_LIB_TARGET} PROPERTIES
- PUBLIC_HEADER "${ZLIB_PUBLIC_HEADERS}"
+ PUBLIC_HEADER ""
LINKER_LANGUAGE C
INTERFACE_INCLUDE_DIRECTORIES "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include>"
)
@@ -288,17 +288,6 @@ if (WIN32)
endif ()
#-----------------------------------------------------------------------------
-# Add file(s) to CMake Install
-#-----------------------------------------------------------------------------
-if (NOT ZLIB_INSTALL_NO_DEVELOPMENT)
- install (
- FILES ${PROJECT_BINARY_DIR}/zconf.h
- DESTINATION ${ZLIB_INSTALL_INCLUDE_DIR}
- COMPONENT headers
- )
-endif ()
-
-#-----------------------------------------------------------------------------
# Add Target(s) to CMake Install for import into other projects
#-----------------------------------------------------------------------------
if (NOT ZLIB_EXTERNALLY_CONFIGURED)
@@ -387,20 +376,6 @@ if (NOT ZLIB_EXTERNALLY_CONFIGURED)
endif ()
#-----------------------------------------------------------------------------
-# Add Document File(s) to CMake Install
-#-----------------------------------------------------------------------------
-if (NOT ZLIB_EXTERNALLY_CONFIGURED)
- install (
- FILES
- ${ZLIB_SOURCE_DIR}/FAQ
- ${ZLIB_SOURCE_DIR}/README
- ${ZLIB_SOURCE_DIR}/INDEX
- DESTINATION ${ZLIB_INSTALL_DATA_DIR}
- COMPONENT documents
- )
-endif ()
-
-#-----------------------------------------------------------------------------
# Check for Installation Utilities
#-----------------------------------------------------------------------------
if (WIN32)
@@ -523,7 +498,6 @@ if (NOT ZLIB_EXTERNALLY_CONFIGURED)
include (InstallRequiredSystemLibraries)
set (CPACK_INSTALL_CMAKE_PROJECTS "${ZLIB_BINARY_DIR};ZLIB;libraries;/")
- set (CPACK_INSTALL_CMAKE_PROJECTS "${ZLIB_BINARY_DIR};ZLIB;headers;/")
set (CPACK_INSTALL_CMAKE_PROJECTS "${ZLIB_BINARY_DIR};ZLIB;configinstall;/")
set (CPACK_ALL_INSTALL_TYPES Full Developer User)
@@ -535,33 +509,12 @@ if (NOT ZLIB_EXTERNALLY_CONFIGURED)
cpack_add_component_group(Runtime)
- cpack_add_component_group(Documents
- EXPANDED
- DESCRIPTION "Release notes for zlib"
- )
-
- cpack_add_component_group(Development
- EXPANDED
- DESCRIPTION "All of the tools you'll need to develop applications"
- )
-
cpack_add_component (libraries
DISPLAY_NAME "ZLIB Libraries"
REQUIRED
GROUP Runtime
INSTALL_TYPES Full Developer User
)
- cpack_add_component (headers
- DISPLAY_NAME "ZLIB Headers"
- DEPENDS libraries
- GROUP Development
- INSTALL_TYPES Full Developer
- )
- cpack_add_component (documents
- DISPLAY_NAME "ZLIB Documents"
- GROUP Documents
- INSTALL_TYPES Full Developer
- )
cpack_add_component (configinstall
DISPLAY_NAME "ZLIB CMake files"
DEPENDS libraries
diff --git a/config/cmake/examples/HDF5_Examples.cmake.in b/config/cmake/examples/HDF5_Examples.cmake.in
index 8f28aae..9c99719 100644
--- a/config/cmake/examples/HDF5_Examples.cmake.in
+++ b/config/cmake/examples/HDF5_Examples.cmake.in
@@ -78,6 +78,7 @@ set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DSITE:STRING=${CTEST_SITE} -DBUILDN
###############################################################################################################
set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ROOT:PATH=${INSTALLDIR}")
+set (ENV{HDF5_ROOT} "${INSTALLDIR}")
if(WIN32)
set(SITE_OS_NAME "Windows")
set(CTEST_BINARY_NAME ${CTEST_SOURCE_NAME}\\build)
diff --git a/config/cmake/scripts/CTestScript.cmake b/config/cmake/scripts/CTestScript.cmake
index 2a57db8..37bf0d4 100644
--- a/config/cmake/scripts/CTestScript.cmake
+++ b/config/cmake/scripts/CTestScript.cmake
@@ -184,6 +184,11 @@ list (APPEND CTEST_NOTES_FILES
"${CMAKE_CURRENT_LIST_FILE}"
"${CTEST_SOURCE_DIRECTORY}/config/cmake/cacheinit.cmake"
)
+if (EXISTS "${CTEST_SCRIPT_DIRECTORY}/SkipTests.log")
+ list(APPEND CTEST_NOTES_FILES
+ "${CTEST_SCRIPT_DIRECTORY}/SkipTests.log"
+ )
+endif ()
#-----------------------------------------------------------------------------
# Check for required variables.
diff --git a/configure.ac b/configure.ac
index 48e6ce3..9c27229 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4231,10 +4231,10 @@ AC_CONFIG_FILES([Makefile
hl/fortran/examples/Makefile
hl/fortran/examples/run-hlfortran-ex.sh])
-AC_CONFIG_FILES([utils/subfiling_vfd/h5fuse.sh], [chmod +x utils/subfiling_vfd/h5fuse.sh])
+AC_CONFIG_FILES([utils/subfiling_vfd/h5fuse], [chmod +x utils/subfiling_vfd/h5fuse])
if test -n "$TESTPARALLEL"; then
if test "X$SUBFILING_VFD" = "Xyes"; then
- AC_CONFIG_LINKS([testpar/h5fuse.sh:utils/subfiling_vfd/h5fuse.sh])
+ AC_CONFIG_LINKS([testpar/h5fuse:utils/subfiling_vfd/h5fuse])
fi
fi
@@ -4280,11 +4280,5 @@ if test "X$HDF_FORTRAN" = "Xyes"; then
esac
fi
-## HDF5 configure code created by autotools with gcc 4.9.2 is adding problematic
-## linker flags: -l with no library name; -l <libname>, specifically gfortran or m.
-## This sed script corrects "-l <libname>" first and then "-l " with no library name.
-## If the order is not preserved, all instances of "-l " will be removed.
-sed -e '/^postdeps/ s/-l \([a-zA-Z]\)/-l\1/g' -e '/^postdeps/ s/-l //g' -i libtool
-
## show the configure settings
cat src/libhdf5.settings
diff --git a/doc/branches-explained.md b/doc/branches-explained.md
index 5b55ec7..f2aa627 100644
--- a/doc/branches-explained.md
+++ b/doc/branches-explained.md
@@ -2,7 +2,7 @@
This document describes current HDF5 branches.
-Branches are tested nightly and testing results are available at https://cdash-internal.hdfgroup.org/ and https://cdash.hdfgroup.org/.
+Branches are tested nightly and testing results are available at https://cdash.hdfgroup.org/.
Commits that break daily testing should be fixed by 3:00 pm Central time or reverted.
We encourage code contributors to check the status of their commits. If you have any questions, please contact help@hdfgroup.org.
diff --git a/doc/cmake-vols-fetchcontent.md b/doc/cmake-vols-fetchcontent.md
index 9d3c1ba..ff05913 100644
--- a/doc/cmake-vols-fetchcontent.md
+++ b/doc/cmake-vols-fetchcontent.md
@@ -97,12 +97,21 @@ After the VOL's internal name is generated, the following new variables get crea
variable must be set in order for the VOL connector to be testable with
HDF5's tests.
+ HDF5_VOL_<VOL name>_CMAKE_PACKAGE_NAME (Default: "<lowercased <VOL name>>")
+ This variable specifies the exact name that would be passed to CMake
+ find_package(...) calls for the VOL connector in question. It is used as
+ the dependency name when making CMake FetchContent calls to try to ensure
+ that any other VOL connectors to be built which depend on this VOL connector
+ can make find_package(...) calls for this VOL connector at configure time.
+ By default, this variable is set to a lowercased version of the internal
+ name generated for the VOL connector (described above).
+
HDF5_VOL_<VOL name>_TEST_PARALLEL (Default: OFF)
This variable determines whether the VOL connector with the CMake-internal
name '<VOL name>' should be tested against HDF5's parallel tests.
If the source was retrieved from a Git URL, then the following variable will additionally be created:
-
+
HDF5_VOL_<VOL name>_BRANCH (Default: "main")
This variable specifies the git branch name or tag to use when fetching
the source code for the VOL connector with the CMake-internal name
@@ -111,9 +120,10 @@ If the source was retrieved from a Git URL, then the following variable will add
As an example, this would create the following variables for the
previously-mentioned VOL connector if it is retrieved from a URL:
- HDF5_VOL_VOL-ASYNC_BRANCH
- HDF5_VOL_VOL-ASYNC_NAME
- HDF5_VOL_VOL-ASYNC_TEST_PARALLEL
+ HDF5_VOL_VOL-ASYNC_NAME ""
+ HDF5_VOL_VOL-ASYNC_CMAKE_PACKAGE_NAME "vol-async"
+ HDF5_VOL_VOL-ASYNC_BRANCH "main"
+ HDF5_VOL_VOL-ASYNC_TEST_PARALLEL OFF
**NOTE**
If a VOL connector requires extra information to be passed in its
@@ -139,9 +149,10 @@ would typically be passed when building HDF5, such as `CMAKE_INSTALL_PREFIX`,
-DHDF5_TEST_API=ON
-DHDF5_VOL_ALLOW_EXTERNAL="GIT"
-DHDF5_VOL_URL01=https://github.com/hpc-io/vol-async.git
- -DHDF5_VOL_VOL-ASYNC_BRANCH=develop
+ -DHDF5_VOL_VOL-ASYNC_BRANCH=develop
-DHDF5_VOL_VOL-ASYNC_NAME="async under_vol=0\;under_info={}"
- -DHDF5_VOL_VOL-ASYNC_TEST_PARALLEL=ON ..
+ -DHDF5_VOL_VOL-ASYNC_TEST_PARALLEL=ON
+ ..
Here, we are specifying that:
@@ -156,7 +167,8 @@ Here, we are specifying that:
variable should be set to "async under_vol=0\;under_info={}", which
specifies that the VOL connector with the canonical name "async" should
be loaded and it should be passed the string "under_vol=0;under_info={}"
- for its configuration
+ for its configuration (note the backslash-escaping of semicolons in the string
+ provided)
* The Asynchronous I/O VOL connector should be tested against HDF5's parallel API tests
Note that this also assumes that the Asynchronous I/O VOL connector's
diff --git a/fortran/src/FortBuildFlow.fig b/fortran/src/FortBuildFlow.fig
new file mode 100644
index 0000000..fd2dee7
--- /dev/null
+++ b/fortran/src/FortBuildFlow.fig
@@ -0,0 +1,78 @@
+#FIG 3.2 Produced by xfig version 3.2.9
+#encoding: UTF-8
+Landscape
+Center
+Inches
+Letter
+100.00
+Single
+-2
+1200 2
+6 4650 3675 7725 4350
+2 4 0 1 0 7 52 -1 18 0.000 0 0 7 0 0 5
+ 7725 4350 4650 4350 4650 3735 7725 3735 7725 4350
+4 0 0 37 -1 2 16 0.0000 4 240 2528 4800 4125 H5fort_type_defines.h\001
+-6
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 2 1 1.00 60.00 120.00
+ 4125 675 4650 675
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 2 1 1.00 60.00 120.00
+ 4125 2775 4575 2775
+2 1 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 8175 525 9525 525
+2 4 0 1 0 7 50 -1 18 0.000 0 0 7 0 0 5
+ 10800 3375 8325 3375 8325 2760 10800 2760 10800 3375
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 2 1 1.00 60.00 120.00
+ 10760 1200 11400 1200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 2 1 1.00 60.00 120.00
+ 10820 2100 11460 2100
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 2 1 1.00 60.00 120.00
+ 10790 3075 11430 3075
+2 4 0 1 0 7 50 -1 18 0.000 0 0 7 0 0 5
+ 4125 3375 1500 3375 1500 60 4125 60 4125 3375
+2 1 0 4 0 7 48 -1 -1 0.000 0 0 -1 0 0 2
+ 1500 1800 4050 1800
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 2 1 1.00 60.00 120.00
+ 5775 960 5775 1410
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 2 1 1.00 60.00 120.00
+ 5670 3255 5670 3705
+2 4 0 1 0 7 50 -1 18 0.000 0 0 7 0 0 5
+ 14220 1500 11460 1500 11460 870 14220 870 14220 1500
+2 4 0 1 0 7 50 -1 18 0.000 0 0 7 0 0 5
+ 14250 2430 11445 2430 11445 1800 14250 1800 14250 2430
+2 4 0 1 0 7 50 -1 18 0.000 0 0 7 0 0 5
+ 6975 960 4725 960 4725 360 6975 360 6975 960
+2 4 0 1 0 7 50 -1 18 0.000 0 0 7 0 0 5
+ 6960 2025 4710 2025 4710 1425 6960 1425 6960 2025
+2 4 0 1 0 7 52 -1 19 0.000 0 0 7 0 0 5
+ 16875 5250 8100 5250 8100 45 16875 45 16875 5250
+2 4 0 1 0 7 50 -1 18 0.000 0 0 7 0 0 5
+ 7725 3225 4650 3225 4650 2610 7725 2610 7725 3225
+2 4 0 1 0 7 63 -1 19 0.000 0 0 7 0 0 5
+ 8025 5250 1425 5250 1425 45 8025 45 8025 5250
+2 4 0 1 0 7 50 -1 18 0.000 0 0 7 0 0 5
+ 10800 2400 8310 2400 8310 840 10800 840 10800 2400
+2 4 0 1 0 7 50 -1 18 0.000 0 0 7 0 0 5
+ 14265 3375 11475 3375 11475 2775 14265 2775 14265 3375
+2 4 0 1 0 7 50 -1 18 0.000 0 0 7 0 0 5
+ 16725 4125 11475 4125 11475 3525 16725 3525 16725 4125
+2 4 0 1 0 7 50 -1 18 0.000 0 0 7 0 0 5
+ 16725 4950 11475 4950 11475 4275 16725 4275 16725 4950
+4 0 0 50 -1 2 24 0.0000 4 284 1249 8250 450 BUILD\001
+4 0 0 50 -1 2 24 0.0000 4 284 2421 1575 1725 CONFIGURE\001
+4 0 0 50 -1 2 16 0.0000 4 221 2083 8550 3150 H5_buildiface.F90\001
+4 0 0 50 -1 2 16 0.0000 4 235 1952 8640 1680 H5match_types.c\001
+4 0 0 50 -1 2 16 0.0000 4 239 2379 11550 2175 H5fortran_types.F90\001
+4 0 0 50 -1 2 16 0.0000 4 240 1507 11550 1275 H5f90i_gen.h\001
+4 0 0 50 -1 2 16 0.0000 4 238 1358 11550 3150 H5_gen.F90\001
+4 0 0 50 -1 2 16 0.0000 4 233 5100 11550 3900 H5[A,D,S,T,E,ES,F,Z,G,I,L,O,P,R,VL]ff.F90\001
+4 0 0 50 -1 2 16 0.0000 4 233 4702 11550 4725 H5[A,D,S,T,E,ES,F,Z,G,I,L,O,P,R,VL]f.c\001
+4 0 0 50 -1 2 16 0.0000 4 240 1944 4815 750 H5config_f.inc.in\001
+4 0 0 50 -1 2 16 0.0000 4 240 1656 4815 1815 H5config_f.inc\001
+4 0 0 50 -1 2 16 0.0000 4 240 2817 4740 3000 H5fort_type_defines.h.in\001
diff --git a/fortran/src/FortBuildFlow.svg b/fortran/src/FortBuildFlow.svg
new file mode 100644
index 0000000..b7ebc47
--- /dev/null
+++ b/fortran/src/FortBuildFlow.svg
@@ -0,0 +1,169 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Creator: fig2dev Version 3.2.9 -->
+<!-- CreationDate: 2023-11-17 17:06:33 -->
+<!-- Magnification: 1 -->
+<svg xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ width="929pt" height="314pt"
+ viewBox="1413 33 15474 5229">
+<g fill="none">
+<!-- Line -->
+<rect x="1425" y="45" width="6600" height="5205" rx="105" fill="#f2f2f2"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Line -->
+<rect x="8100" y="45" width="8775" height="5205" rx="105" fill="#f2f2f2"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Line -->
+<rect x="4650" y="3735" width="3075" height="615" rx="105" fill="#e5e5e5"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Line -->
+<polyline points=" 8175,525 9525,525"
+ stroke="#000000" stroke-width="45px"/>
+<!-- Line -->
+<rect x="8325" y="2760" width="2475" height="615" rx="105" fill="#e5e5e5"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Line -->
+<defs>
+<clipPath id="cp0">
+ <path clip-rule="evenodd" d="M 1413,33 H 16887 V 5262 H 1413 z
+ M 11230,1170 11260,1200 11230,1230 11407,1207 11407,1193z"/>
+</clipPath>
+</defs>
+<polyline points=" 10760,1200 11400,1200" clip-path="url(#cp0)"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Forward arrow to point 11400,1200 -->
+<polygon points=" 11230,1230 11380,1200 11230,1170 11260,1200 11230,1230"
+ stroke="#000000" stroke-width="8px" stroke-miterlimit="8" fill="#000000"/>
+<!-- Line -->
+<defs>
+<clipPath id="cp1">
+ <path clip-rule="evenodd" d="M 1413,33 H 16887 V 5262 H 1413 z
+ M 11290,2070 11320,2100 11290,2130 11467,2107 11467,2093z"/>
+</clipPath>
+</defs>
+<polyline points=" 10820,2100 11460,2100" clip-path="url(#cp1)"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Forward arrow to point 11460,2100 -->
+<polygon points=" 11290,2130 11440,2100 11290,2070 11320,2100 11290,2130"
+ stroke="#000000" stroke-width="8px" stroke-miterlimit="8" fill="#000000"/>
+<!-- Line -->
+<defs>
+<clipPath id="cp2">
+ <path clip-rule="evenodd" d="M 1413,33 H 16887 V 5262 H 1413 z
+ M 11260,3045 11290,3075 11260,3105 11437,3082 11437,3068z"/>
+</clipPath>
+</defs>
+<polyline points=" 10790,3075 11430,3075" clip-path="url(#cp2)"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Forward arrow to point 11430,3075 -->
+<polygon points=" 11260,3105 11410,3075 11260,3045 11290,3075 11260,3105"
+ stroke="#000000" stroke-width="8px" stroke-miterlimit="8" fill="#000000"/>
+<!-- Line -->
+<rect x="1500" y="60" width="2625" height="3315" rx="105" fill="#e5e5e5"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Line -->
+<defs>
+<clipPath id="cp3">
+ <path clip-rule="evenodd" d="M 1413,33 H 16887 V 5262 H 1413 z
+ M 5805,1240 5775,1270 5745,1240 5768,1417 5782,1417z"/>
+</clipPath>
+</defs>
+<polyline points=" 5775,960 5775,1410" clip-path="url(#cp3)"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Forward arrow to point 5775,1410 -->
+<polygon points=" 5745,1240 5775,1390 5805,1240 5775,1270 5745,1240"
+ stroke="#000000" stroke-width="8px" stroke-miterlimit="8" fill="#000000"/>
+<!-- Line -->
+<defs>
+<clipPath id="cp4">
+ <path clip-rule="evenodd" d="M 1413,33 H 16887 V 5262 H 1413 z
+ M 5700,3535 5670,3565 5640,3535 5663,3712 5677,3712z"/>
+</clipPath>
+</defs>
+<polyline points=" 5670,3255 5670,3705" clip-path="url(#cp4)"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Forward arrow to point 5670,3705 -->
+<polygon points=" 5640,3535 5670,3685 5700,3535 5670,3565 5640,3535"
+ stroke="#000000" stroke-width="8px" stroke-miterlimit="8" fill="#000000"/>
+<!-- Line -->
+<rect x="11460" y="870" width="2760" height="630" rx="105" fill="#e5e5e5"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Line -->
+<rect x="11445" y="1800" width="2805" height="630" rx="105" fill="#e5e5e5"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Line -->
+<rect x="4725" y="360" width="2250" height="600" rx="105" fill="#e5e5e5"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Line -->
+<rect x="4710" y="1425" width="2250" height="600" rx="105" fill="#e5e5e5"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Line -->
+<rect x="4650" y="2610" width="3075" height="615" rx="105" fill="#e5e5e5"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Text -->
+<text xml:space="preserve" x="4740" y="3000" fill="#000000" font-family="Times" font-style="normal" font-weight="bold" font-size="192" text-anchor="start">H5fort_type_defines.h.in</text>
+<!-- Line -->
+<defs>
+<clipPath id="cp5">
+ <path clip-rule="evenodd" d="M 1413,33 H 16887 V 5262 H 1413 z
+ M 4480,645 4510,675 4480,705 4657,682 4657,668z"/>
+</clipPath>
+</defs>
+<polyline points=" 4125,675 4650,675" clip-path="url(#cp5)"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Forward arrow to point 4650,675 -->
+<polygon points=" 4480,705 4630,675 4480,645 4510,675 4480,705"
+ stroke="#000000" stroke-width="8px" stroke-miterlimit="8" fill="#000000"/>
+<!-- Line -->
+<defs>
+<clipPath id="cp6">
+ <path clip-rule="evenodd" d="M 1413,33 H 16887 V 5262 H 1413 z
+ M 4405,2745 4435,2775 4405,2805 4582,2782 4582,2768z"/>
+</clipPath>
+</defs>
+<polyline points=" 4125,2775 4575,2775" clip-path="url(#cp6)"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Forward arrow to point 4575,2775 -->
+<polygon points=" 4405,2805 4555,2775 4405,2745 4435,2775 4405,2805"
+ stroke="#000000" stroke-width="8px" stroke-miterlimit="8" fill="#000000"/>
+<!-- Text -->
+<text xml:space="preserve" x="4815" y="750" fill="#000000" font-family="Times" font-style="normal" font-weight="bold" font-size="192" text-anchor="start">H5config_f.inc.in</text>
+<!-- Text -->
+<text xml:space="preserve" x="4815" y="1815" fill="#000000" font-family="Times" font-style="normal" font-weight="bold" font-size="192" text-anchor="start">H5config_f.inc</text>
+<!-- Line -->
+<rect x="8310" y="840" width="2490" height="1560" rx="105" fill="#e5e5e5"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Line -->
+<rect x="11475" y="2775" width="2790" height="600" rx="105" fill="#e5e5e5"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Line -->
+<rect x="11475" y="3525" width="5250" height="600" rx="105" fill="#e5e5e5"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Line -->
+<rect x="11475" y="4275" width="5250" height="675" rx="105" fill="#e5e5e5"
+ stroke="#000000" stroke-width="8px"/>
+<!-- Text -->
+<text xml:space="preserve" x="8250" y="450" fill="#000000" font-family="Times" font-style="normal" font-weight="bold" font-size="288" text-anchor="start">BUILD</text>
+<!-- Text -->
+<text xml:space="preserve" x="1575" y="1725" fill="#000000" font-family="Times" font-style="normal" font-weight="bold" font-size="288" text-anchor="start">CONFIGURE</text>
+<!-- Text -->
+<text xml:space="preserve" x="8550" y="3150" fill="#000000" font-family="Times" font-style="normal" font-weight="bold" font-size="192" text-anchor="start">H5_buildiface.F90</text>
+<!-- Text -->
+<text xml:space="preserve" x="8640" y="1680" fill="#000000" font-family="Times" font-style="normal" font-weight="bold" font-size="192" text-anchor="start">H5match_types.c</text>
+<!-- Text -->
+<text xml:space="preserve" x="11550" y="2175" fill="#000000" font-family="Times" font-style="normal" font-weight="bold" font-size="192" text-anchor="start">H5fortran_types.F90</text>
+<!-- Text -->
+<text xml:space="preserve" x="11550" y="1275" fill="#000000" font-family="Times" font-style="normal" font-weight="bold" font-size="192" text-anchor="start">H5f90i_gen.h</text>
+<!-- Text -->
+<text xml:space="preserve" x="11550" y="3150" fill="#000000" font-family="Times" font-style="normal" font-weight="bold" font-size="192" text-anchor="start">H5_gen.F90</text>
+<!-- Text -->
+<text xml:space="preserve" x="11550" y="3900" fill="#000000" font-family="Times" font-style="normal" font-weight="bold" font-size="192" text-anchor="start">H5[A,D,S,T,E,ES,F,Z,G,I,L,O,P,R,VL]ff.F90</text>
+<!-- Text -->
+<text xml:space="preserve" x="11550" y="4725" fill="#000000" font-family="Times" font-style="normal" font-weight="bold" font-size="192" text-anchor="start">H5[A,D,S,T,E,ES,F,Z,G,I,L,O,P,R,VL]f.c</text>
+<!-- Line -->
+<polyline points=" 1500,1800 4050,1800"
+ stroke="#000000" stroke-width="45px"/>
+<!-- Text -->
+<text xml:space="preserve" x="4800" y="4125" fill="#000000" font-family="Times" font-style="normal" font-weight="bold" font-size="192" text-anchor="start">H5fort_type_defines.h</text>
+</g>
+</svg>
diff --git a/fortran/src/H5Off.F90 b/fortran/src/H5Off.F90
index b705ba3..9c8b091 100644
--- a/fortran/src/H5Off.F90
+++ b/fortran/src/H5Off.F90
@@ -1263,7 +1263,7 @@ CONTAINS
INTERFACE
INTEGER FUNCTION h5oget_info_by_idx_c(loc_id, group_name, namelen, &
index_field, order, n, lapl_id_default, object_info, fields) BIND(C, NAME='h5oget_info_by_idx_c')
- IMPORT :: c_char, c_ptr, c_funptr
+ IMPORT :: c_char, c_ptr
IMPORT :: HID_T, SIZE_T, HSIZE_T
INTEGER(HID_T) , INTENT(IN) :: loc_id
CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: group_name
diff --git a/fortran/src/H5Pf.c b/fortran/src/H5Pf.c
index 3a97d7e..87e6bfb 100644
--- a/fortran/src/H5Pf.c
+++ b/fortran/src/H5Pf.c
@@ -69,30 +69,6 @@ done:
return ret_value;
}
-/****if* H5Pf/h5pclose_c
- * NAME
- * h5pclose_c
- * PURPOSE
- * Call H5Pclose to close property lis
- * INPUTS
- * prp_id - identifier of the property list to be closed
- * RETURNS
- * 0 on success, -1 on failure
- * SOURCE
- */
-
-int_f
-h5pclose_c(hid_t_f *prp_id)
-/******/
-{
- int_f ret_value = 0;
-
- if (H5Pclose((hid_t)*prp_id) < 0)
- ret_value = -1;
-
- return ret_value;
-}
-
/****if* H5Pf/h5pcopy_c
* NAME
* h5pcopy_c
@@ -2252,52 +2228,6 @@ h5pget_hyper_vector_size_c(hid_t_f *prp_id, size_t_f *size)
return ret_value;
}
-/****if* H5Pf/h5pcreate_class_c
- * NAME
- * h5pcreate_class_c
- * PURPOSE
- * Call H5Pcreate_class ito create a new property class
- * INPUTS
- * parent - property list class identifier
- * name - name of the new class
- * name_len - length of the "name" buffer
- * OUTPUTS
- * class - new class identifier
- * RETURNS
- * 0 on success, -1 on failure
- * SOURCE
- */
-int_f
-h5pcreate_class_c(hid_t_f *parent, _fcd name, int_f *name_len, hid_t_f *cls, H5P_cls_create_func_t create,
- void *create_data, H5P_cls_copy_func_t copy, void *copy_data, H5P_cls_close_func_t close,
- void *close_data)
-/******/
-{
- int ret_value = -1;
- hid_t c_class;
- char *c_name;
-
- c_name = (char *)HD5f2cstring(name, (size_t)*name_len);
- if (c_name == NULL)
- goto DONE;
-
- /*
- * Call H5Pcreate_class function.
- */
- c_class =
- H5Pcreate_class((hid_t)*parent, c_name, create, create_data, copy, copy_data, close, close_data);
-
- if (c_class < 0)
- goto DONE;
- *cls = (hid_t_f)c_class;
- ret_value = 0;
-
-DONE:
- if (c_name != NULL)
- free(c_name);
- return ret_value;
-}
-
/****if* H5Pf/h5pregister_c
* NAME
* h5pregister_c
diff --git a/fortran/src/H5Pff.F90 b/fortran/src/H5Pff.F90
index 5821889..afd17f3 100644
--- a/fortran/src/H5Pff.F90
+++ b/fortran/src/H5Pff.F90
@@ -400,15 +400,16 @@ CONTAINS
INTEGER(HID_T), INTENT(IN) :: prp_id
INTEGER, INTENT(OUT) :: hdferr
INTERFACE
- INTEGER FUNCTION h5pclose_c(prp_id) &
- BIND(C,NAME='h5pclose_c')
+ INTEGER(C_INT) FUNCTION H5Pclose(prp_id) &
+ BIND(C,NAME='H5Pclose')
+ IMPORT :: C_INT
IMPORT :: HID_T
IMPLICIT NONE
- INTEGER(HID_T), INTENT(IN) :: prp_id
- END FUNCTION h5pclose_c
+ INTEGER(HID_T), VALUE :: prp_id
+ END FUNCTION H5Pclose
END INTERFACE
- hdferr = h5pclose_c(prp_id)
+ hdferr = INT(H5Pclose(prp_id))
END SUBROUTINE h5pclose_f
!>
@@ -5005,31 +5006,32 @@ SUBROUTINE h5pset_attr_phase_change_f(ocpl_id, max_compact, min_dense, hdferr)
INTEGER , INTENT(OUT) :: hdferr
TYPE(C_PTR) , OPTIONAL, INTENT(IN) :: create_data, copy_data, close_data
TYPE(C_FUNPTR) , OPTIONAL, INTENT(IN) :: create, copy, close
- INTEGER :: name_len
- TYPE(C_PTR) :: create_data_default, copy_data_default, close_data_default
+ TYPE(C_PTR) :: create_data_default, copy_data_default, close_data_default
TYPE(C_FUNPTR) :: create_default, copy_default, close_default
+
+ CHARACTER(LEN=LEN_TRIM(name)+1,KIND=C_CHAR) :: c_name
+
INTERFACE
- INTEGER FUNCTION h5pcreate_class_c(parent, name, name_len, class, &
+ INTEGER(HID_T) FUNCTION H5Pcreate_class(parent, name, &
create, create_data, copy, copy_data, close, close_data) &
- BIND(C, NAME='h5pcreate_class_c')
- IMPORT :: c_char, c_ptr, c_funptr
+ BIND(C, NAME='H5Pcreate_class')
+ IMPORT :: C_CHAR, C_PTR, C_FUNPTR
IMPORT :: HID_T
- INTEGER(HID_T), INTENT(IN) :: parent
- CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: name
- INTEGER, INTENT(IN) :: name_len
- INTEGER(HID_T), INTENT(OUT) :: class
- TYPE(C_PTR), VALUE :: create_data, copy_data, close_data
- TYPE(C_FUNPTR), VALUE :: create, copy, close
- END FUNCTION h5pcreate_class_c
+ INTEGER(HID_T), VALUE :: parent
+ CHARACTER(KIND=C_CHAR), DIMENSION(*) :: name
+ TYPE(C_PTR), VALUE :: create_data, copy_data, close_data
+ TYPE(C_FUNPTR), VALUE :: create, copy, close
+ END FUNCTION H5Pcreate_class
END INTERFACE
- name_len = LEN(name)
- create_default = c_null_funptr !fix:scot
- create_data_default = c_null_ptr
- copy_default = c_null_funptr !fix:scot
- copy_data_default = c_null_ptr
- close_default = c_null_funptr !fix:scot
- close_data_default = c_null_ptr
+ c_name = TRIM(name)//C_NULL_CHAR
+
+ create_default = C_NULL_FUNPTR
+ create_data_default = C_NULL_PTR
+ copy_default = C_NULL_FUNPTR
+ copy_data_default = C_NULL_PTR
+ close_default = C_NULL_FUNPTR
+ close_data_default = C_NULL_PTR
IF(PRESENT(create)) create_default = create
IF(PRESENT(create_data)) create_data_default = create_data
@@ -5038,11 +5040,14 @@ SUBROUTINE h5pset_attr_phase_change_f(ocpl_id, max_compact, min_dense, hdferr)
IF(PRESENT(close)) close_default = close
IF(PRESENT(close_data)) close_data_default = close_data
- hdferr = h5pcreate_class_c(parent, name , name_len, class, &
+ class = H5Pcreate_class(parent, c_name, &
create_default, create_data_default, &
copy_default, copy_data_default, &
close_default, close_data_default)
+ hdferr = 0
+ IF(class.LT.0) hdferr = -1
+
END SUBROUTINE h5pcreate_class_f
!>
@@ -5337,7 +5342,7 @@ SUBROUTINE h5pset_attr_phase_change_f(ocpl_id, max_compact, min_dense, hdferr)
!! \brief Retrieves local and global causes that broke collective I/O on the last parallel I/O call.
!!
!! \param plist_id Dataset transfer property list identifier
-!! \param local_no_collective_cause An enumerated set value indicating the causes that prevented collective I/O in the local process
+!! \param local_no_collective_cause An enumerated set value indicating the causes that prevented collective I/O in the local process
!! \param global_no_collective_cause An enumerated set value indicating the causes across all processes that prevented collective I/O
!! \param hdferr \fortran_error
!!
diff --git a/fortran/src/H5VLff.F90 b/fortran/src/H5VLff.F90
index 5a1fa9f..4467a59 100644
--- a/fortran/src/H5VLff.F90
+++ b/fortran/src/H5VLff.F90
@@ -401,4 +401,68 @@ CONTAINS
END SUBROUTINE H5VLunregister_connector_f
+!>
+!! \ingroup FH5VL
+!!
+!! \brief Retrieves the token representation from an address for a location identifier.
+!!
+!! \param loc_id Specifies a location identifier
+!! \param addr Address for object in the file
+!! \param token Token representing the object in the file
+!! \param hdferr \fortran_error
+!!
+!! See C API: @ref H5VLnative_addr_to_token()
+!!
+ SUBROUTINE h5vlnative_addr_to_token_f(loc_id, addr, token, hdferr)
+ IMPLICIT NONE
+ INTEGER(HID_T) , INTENT(IN) :: loc_id
+ INTEGER(HADDR_T) , INTENT(IN) :: addr
+ TYPE(H5O_TOKEN_T_F), INTENT(OUT) :: token
+ INTEGER , INTENT(OUT) :: hdferr
+
+ INTERFACE
+ INTEGER(C_INT) FUNCTION H5VLnative_addr_to_token(loc_id, addr, token) BIND(C, NAME='H5VLnative_addr_to_token')
+ IMPORT :: HID_T, C_INT, HADDR_T, H5O_TOKEN_T_F
+ INTEGER(HID_T) , VALUE :: loc_id
+ INTEGER(HADDR_T), VALUE :: addr
+ TYPE(H5O_TOKEN_T_F) :: token
+ END FUNCTION H5VLnative_addr_to_token
+ END INTERFACE
+
+ hdferr = INT(H5VLnative_addr_to_token(loc_id, addr, token))
+
+ END SUBROUTINE h5vlnative_addr_to_token_f
+
+!>
+!! \ingroup FH5VL
+!!
+!! \brief Retrieves the object address from a token representation for a location identifier.
+!!
+!! \param loc_id Specifies a location identifier
+!! \param token Token representing the object in the file
+!! \param addr Address for object in the file
+!! \param hdferr \fortran_error
+!!
+!! See C API: @ref H5VLnative_token_to_addr()
+!!
+ SUBROUTINE h5vlnative_token_to_addr_f(loc_id, token, addr, hdferr)
+ IMPLICIT NONE
+ INTEGER(HID_T) , INTENT(IN) :: loc_id
+ TYPE(H5O_TOKEN_T_F), INTENT(IN) :: token
+ INTEGER(HADDR_T) , INTENT(OUT) :: addr
+ INTEGER , INTENT(OUT) :: hdferr
+
+ INTERFACE
+ INTEGER(C_INT) FUNCTION H5VLnative_token_to_addr(loc_id, token, addr) BIND(C, NAME='H5VLnative_token_to_addr')
+ IMPORT :: HID_T, C_INT, HADDR_T, H5O_TOKEN_T_F
+ INTEGER(HID_T) , VALUE :: loc_id
+ TYPE(H5O_TOKEN_T_F), VALUE :: token
+ INTEGER(HADDR_T) :: addr
+ END FUNCTION H5VLnative_token_to_addr
+ END INTERFACE
+
+ hdferr = INT(H5VLnative_token_to_addr(loc_id, token, addr))
+
+ END SUBROUTINE h5vlnative_token_to_addr_f
+
END MODULE H5VL
diff --git a/fortran/src/H5f90proto.h b/fortran/src/H5f90proto.h
index 28a4fa6..0fe1b20 100644
--- a/fortran/src/H5f90proto.h
+++ b/fortran/src/H5f90proto.h
@@ -368,7 +368,6 @@ H5_FCDLL int_f h5otoken_cmp_c(hid_t_f *loc_id, H5O_token_t *token1, H5O_token_t
* Functions from H5Pf.c
*/
H5_FCDLL int_f h5pcreate_c(hid_t_f *cls, hid_t_f *prp_id);
-H5_FCDLL int_f h5pclose_c(hid_t_f *prp_id);
H5_FCDLL int_f h5pcopy_c(hid_t_f *prp_id, hid_t_f *new_prp_id);
H5_FCDLL int_f h5pequal_c(hid_t_f *plist1_id, hid_t_f *plist2_id, int_f *c_flag);
H5_FCDLL int_f h5pget_class_c(hid_t_f *prp_id, hid_t_f *classtype);
@@ -451,9 +450,6 @@ H5_FCDLL int_f h5pset_small_data_block_size_c(hid_t_f *plist, hsize_t_f *size);
H5_FCDLL int_f h5pget_small_data_block_size_c(hid_t_f *plist, hsize_t_f *size);
H5_FCDLL int_f h5pset_hyper_vector_size_c(hid_t_f *plist, size_t_f *size);
H5_FCDLL int_f h5pget_hyper_vector_size_c(hid_t_f *plist, size_t_f *size);
-H5_FCDLL int_f h5pcreate_class_c(hid_t_f *parent, _fcd name, int_f *name_len, hid_t_f *cls,
- H5P_cls_create_func_t create, void *create_data, H5P_cls_copy_func_t copy,
- void *copy_data, H5P_cls_close_func_t close, void *close_data);
H5_FCDLL int_f h5pregister_c(hid_t_f *cls, _fcd name, int_f *name_len, size_t_f *size, void *value);
H5_FCDLL int_f h5pinsert_c(hid_t_f *plist, _fcd name, int_f *name_len, size_t_f *size, void *value);
H5_FCDLL int_f h5pset_c(hid_t_f *prp_id, _fcd name, int_f *name_len, void *value);
diff --git a/fortran/src/README b/fortran/src/README
deleted file mode 100644
index f73a59a..0000000
--- a/fortran/src/README
+++ /dev/null
@@ -1,133 +0,0 @@
-===================================
-README for the Fortran APIs to HDF5
-===================================
-
-This directory contains Fortran APIs for HDF5 Library functionality.
-A complete list of implemented Fortran subroutines can be found in the HDF5
-Reference Manual.
-
-About the source code organization
-==================================
-
-The Fortran APIs are organized in modules parallel to the HDF5 Interfaces.
-Each module is in a separate file with the name H5*ff.F90. Corresponding C
-stubs are in the H5*f.c files. For example, the Fortran File APIs are in
-the file H5Fff.F90 and the corresponding C stubs are in the file H5Ff.c.
-
-Each module contains Fortran definitions of the constants, interfaces to
-the subroutines if needed, and the subroutines themselves.
-
-Users must use constant names in their programs instead of the numerical
-values, as the numerical values are subject to change without notice.
-
-Quick overview of the Fortran APIs
-==============================================
-
-* An in-depth description of each Fortran API and its parameters can
- be found in the HDF5 Reference Manual.
-
-* The Fortran APIs come in the form of Fortran subroutines.
-
-* Each Fortran subroutine name is derived from the corresponding C function
- name by adding "_f" to the name. For example, the name of the C function
- to create an HDF5 file is H5Fcreate; the corresponding Fortran subroutine
- is h5fcreate_f.
-
-* The parameter list for each Fortran subroutine usually has two more parameters
- than the corresponding C function. These additional parameters typically hold
- the return value and an error code. The order of the Fortran subroutine
- parameters may differ from the order of the C function parameters.
-
- The Fortran subroutine parameters are usually listed in the following order:
- -- required input parameters,
- -- output parameters, including return value and error code, and
- optional input parameters.
-
- For example, the C function to create a dataset has the following
- prototype:
-
- hid_t H5Dcreate2(hid_it loc_id, char *name, hid_t type_id,
- hid_t space_id, hid_t link_creation_prp, hid_t dset_creation_prp,
- hid_t dset_access_prop);
-
- The corresponding Fortran subroutine has the following form:
-
- SUBROUTINE h5dcreate_f(loc_id, name, type_id, space_id, dset_id, &
- hdferr, dset_creation_prp, link_creation_prp, dset_access_prop)
-
- The first four parameters of the Fortran subroutine correspond to the
- C function parameters. The fifth parameter dset_id is an output
- parameter and contains a valid dataset identifier if the value of the
- sixth output parameter, hdferr, indicates successful completion.
- (Error code descriptions are provided with the subroutine descriptions
- in the Reference Manual.) The last three input parameters are optional
- and may be omitted, resulting in default values being used.
-
-* Parameters to the Fortran subroutines typically include
- predefined datatypes (see the build-time generated file
- H5fortran_types.F90 for a complete listing):
-
- INTEGER(HID_T) compares with hid_t type in HDF5 C APIs
- INTEGER(HSIZE_T) compares with hsize_t in HDF5 C APIs
- INTEGER(HSSIZE_T) compares with hssize_t in HDF5 C APIs
- INTEGER(SIZE_T) compares with the C size_t type
-
- These integer types usually correspond to 4 or 8 byte integers,
- depending on the Fortran compiler and corresponding HDF5
- C library definitions.
-
-* Each Fortran application must call the h5open_f subroutine to
- initialize the Fortran predefined datatypes before calling the HDF5 Fortran
- subroutines. The application should call the h5close_f subroutine
- after all calls to the HDF5 Fortran Library.
-
-* When a C application reads data stored from a Fortran program, the data
- will appear to be transposed due to the difference in the C - Fortran
- storage order. For example, if Fortran writes a 4x6 two-dimensional dataset
- to the file, a C program will read it as a 6x4 two-dimensional dataset into
- memory. The HDF5 C utilities h5dump and h5ls display transposed data, if
- data is written from a Fortran program.
-
-* Fortran indices are 1 based.
-
-============================
-FOR DEVELOPERS
-============================
-
-Procedure to add a new function
-----------------------------------
-
-(1) Edit the fortran/src/H5*ff.F90 file
-(2) Edit the fortran/src/H5*f.c file
-(3) Edit the fortran/src/H5f90proto.h file
-(4) Add the new function to fortran/src/hdf5_fortrandll.def.in
-
-Procedure for passing C variables to Fortran
----------------------------------------------
-
-(1) Find the C struct name you are interested in:
- (a) src/H5public.h if it is a generic type, i.e. H5_*
- or
- (b) src/H5*public.h if is a specific type, i.e. H5*_
-
-(2) Put that structure into an array that will be passed to fortran in:
- (a) fortran/src/H5_f.c (add to nh5init_flags_c subroutine)
- (b) edit fortran/src/H5f90proto.h and edit nh5init_flags_c interface call
-
-(3) Edit the function call in fortran/src/H5_ff.F90
- (a) edit the call: FUNCTION h5init_flags_c
- (b) edit h5init_flags_c call in h5open_f to match the number of arguments passing
-
-(4) add the size of the array and array to fortran/src/H5f90global.F90
- - must match the size found it H5_f.c
-
-NOTE: To just add a default C value argument, do steps (2a) and (4)
-
-
-Procedure for adding a new file to the repository
---------------------------------------------------
-
-Add the name of the file to the:
- (1) Makefile.am located in the same directory as the newfile
- (2) CMakeLists.txt located in the same directory as the newfile
-
diff --git a/fortran/src/README.md b/fortran/src/README.md
new file mode 100644
index 0000000..229e546
--- /dev/null
+++ b/fortran/src/README.md
@@ -0,0 +1,159 @@
+Information about the Fortran APIs
+===================================
+
+This directory contains Fortran APIs for HDF5 Library functionality.
+A complete list of implemented Fortran subroutines can be found in the HDF5
+Reference Manual.
+
+About the source code organization
+----------------------------------
+
+The Fortran APIs are organized in modules parallel to the HDF5 Interfaces.
+Each module is in a separate file with the name H5\*ff.F90. Corresponding C
+stubs are in the H5\*f.c files. For example, the Fortran File APIs are in
+the file H5Fff.F90, and the corresponding C stubs are in the file H5Ff.c.
+
+Each module contains Fortran definitions of the constants, interfaces to
+the subroutines if needed, and the subroutines themselves.
+
+It is crucial for users to use constant names in their programs instead
+of the numerical values, as the constant names have values which are
+subject to change without notice.
+
+Quick overview of the Fortran APIs
+----------------------------------
+
+* An in-depth description of each Fortran API and its parameters can
+ be found in the HDF5 Reference Manual. They tend to be summarized
+ from the C descriptions.
+
+* The Fortran APIs come in the form of Fortran subroutines.
+
+* Each Fortran subroutine name is derived from the corresponding C function
+ name by adding "_f" to the name. For example, the name of the C function
+ to create an HDF5 file is H5Fcreate; the corresponding Fortran subroutine
+ is h5fcreate_f.
+
+* The parameter list for each Fortran subroutine usually has two more parameters
+ than the corresponding C function. These additional parameters typically hold
+ the return value and an error code. The order of the Fortran subroutine
+ parameters may differ from the order of the C function parameters.
+
+ The Fortran subroutine parameters are usually listed in the following order:
+
+ * required input parameters,
+ * output parameters, including return value and error code, and
+ optional input parameters.
+
+ For example, the C function to create a dataset has the following
+ prototype:
+
+ hid_t H5Dcreate2(hid_it loc_id, char *name, hid_t type_id,
+ hid_t space_id, hid_t link_creation_prp, hid_t dset_creation_prp,
+ hid_t dset_access_prop);
+
+ The corresponding Fortran subroutine has the following form:
+
+ SUBROUTINE h5dcreate_f(loc_id, name, type_id, space_id, dset_id, &
+ hdferr, dset_creation_prp, link_creation_prp, dset_access_prop)
+
+ The first four parameters of the Fortran subroutine correspond to the
+ parameters of the C function. The fifth parameter, dset_id, is an output
+ parameter containing a valid dataset identifier, and the sixth
+ output parameter, hdferr, indicates successful completion.
+ The error code descriptions can be found in the subroutine descriptions
+ of the Reference Manual. The last three input parameters are optional
+ and can be omitted, in which case default values will be used.
+
+* Parameters to the Fortran subroutines typically include
+ predefined datatypes (see the build-time generated file
+ H5fortran_types.F90 for a complete listing):
+
+ INTEGER(HID_T) compares with hid_t type in HDF5 C APIs
+ INTEGER(HSIZE_T) compares with hsize_t in HDF5 C APIs
+ INTEGER(HSSIZE_T) compares with hssize_t in HDF5 C APIs
+ INTEGER(SIZE_T) compares with the C size_t type
+
+ These integer types usually correspond to 4- or 8-byte integers,
+ depending on the Fortran compiler and corresponding HDF5
+ C library definitions.
+
+* Before calling HDF5 Fortran subroutines, each Fortran application must initialize Fortran datatypes
+ by calling the h5open_f subroutine. After all calls to the HDF5 Fortran Library, the application
+ should call the h5close_f subroutine.
+
+* All public APIs for the Reference Manual have Doxygen descriptions and should use parameter aliases when possible.
+
+* When a C application reads data stored by a Fortran program, the data appears
+ to be transposed. This is because C and Fortran have different storage orders
+ (row-major and column-major, respectively). For instance, if a Fortran program
+ writes a 4x6 two-dimensional dataset to a file, a C program will read it into
+ memory as a 6x4 two-dimensional dataset. The HDF5 C utilities h5dump and h5ls
+ display transposed data if it was written from a Fortran program.
+
+* It is important to note that in Fortran, the indexing of arrays starts at 1.
+
+
+FOR DEVELOPERS
+==============
+
+* The build system generates APIs compatible with Fortran 90 to handle the backward compatibility
+ of the older F90 APIs. During the configuration process, the build system determines all
+ valid integer and real KINDs, as well as the maximum decimal precision for reals and floats
+ in both Fortran and C. To determine all the available kinds, the Fortran program
+ *PROGRAM FC_AVAIL_KINDS* is used, which is located in aclocal_fc.f90. The available KINDs
+ are stored in H5config_f.inc, a file processed during configuration time from
+ H5config_f.inc.in. Each program in m4/aclocal_fc.f90 is enclosed with a
+ "!---START-----+" line and a "!---END-------+" line, which are used as markers to
+ isolate each test program for the build systems.
+
+ The valid KINDs for integers and reals that are stored in H5config_f.inc are used in the H5_buildiface.F90 file located in the fortran/src directory. During the build process, H5_buildiface.F90 generates all the valid F90 KIND interfaces for the following APIs: h5awrite_f, h5aread_f, h5dwrite_f, h5dread_f, h5pset_fill_value_f, h5pget_fill_value_f, h5pset_f, h5pget_f, h5pregister_f, and h5pinsert_f. These APIs can handle up to and including rank seven arrays for all the found KINDs. Again, it's important to note that no new Fortran APIs should be added to H5_buildiface.F90 since new Fortran APIs should not use F90 specification but should instead use F2003. The source file generated by H5_buildiface.F90 is H5_gen.F90, which is the Fortran module H5_GEN, Figure 1. This module is included in the HDF5 module HDF5.F90.
+
+ <figure>
+ <!-- Xfig graphic -->
+ <img src="./FortBuildFlow.svg">
+ <figcaption>Figure 1: During the configure and build phases, Fortran files are generated and compiled. This overview explains the flow steps of the build process.</figcaption>
+ </figure>
+
+Procedure to add a new function
+--------------------------------
+
+> [!IMPORTANT]
+> The use of C stubs (H5\*f.c) is no longer recommended. The C APIs should now be called from Fortran wrappers. C wrappers description exists for maintenance purposes and to create and understand alternative development options.
+
+1. Edit the fortran/src/H5\*ff.F90 file
+2. Edit the fortran/src/H5\*f.c file
+3. Edit the fortran/src/H5f90proto.h file
+4. Add the new function to fortran/src/hdf5_fortrandll.def.in
+
+Procedure for passing C variables to Fortran
+---------------------------------------------
+
+(1) Find the C struct name you are interested in:
+
+ (a) src/H5public.h if it is a generic type, i.e. H5_*
+ or
+ (b) src/H5*public.h if is a specific type, i.e. H5*_
+
+(2) Put that structure into an array that will be passed to Fortran in:
+
+ (a) fortran/src/H5_f.c (add to the h5init_flags_c subroutine)
+ (b) edit fortran/src/H5f90proto.h and edit h5init_flags_c interface call
+
+(3) Edit the function call in fortran/src/H5_ff.F90
+
+ (a) edit the call: FUNCTION h5init_flags_c
+ (b) edit h5init_flags_c call in h5open_f to match the number of arguments being passed
+
+(4) Add the size of the array and array to fortran/src/H5f90global.F90, it must match the size found in H5_f.c
+
+> [!NOTE]
+> To add a default C value argument, do steps (2a) and (4).
+
+
+Procedure for adding a new file to the repository
+--------------------------------------------------
+
+Add the name of the file to the:
+ (1) Makefile.am located in the same directory as the new file.
+ (2) CMakeLists.txt located in the same directory as the new file.
diff --git a/fortran/src/hdf5_fortrandll.def.in b/fortran/src/hdf5_fortrandll.def.in
index 8d8b2b0..55f4f2b 100644
--- a/fortran/src/hdf5_fortrandll.def.in
+++ b/fortran/src/hdf5_fortrandll.def.in
@@ -253,12 +253,13 @@ H5O_mp_H5OVISIT_BY_NAME_F
H5O_mp_H5OVISIT_F
H5O_mp_H5OTOKEN_CMP_F
; H5P
+H5P_mp_H5PCLOSE_F
H5P_mp_H5PCREATE_F
+H5P_mp_H5PCREATE_CLASS_F
H5P_mp_H5PSET_PRESERVE_F
H5P_mp_H5PGET_PRESERVE_F
H5P_mp_H5PGET_CLASS_F
H5P_mp_H5PCOPY_F
-H5P_mp_H5PCLOSE_F
H5P_mp_H5PSET_CHUNK_F
H5P_mp_H5PGET_CHUNK_F
H5P_mp_H5PSET_DEFLATE_F
@@ -331,7 +332,6 @@ H5P_mp_H5PCOPY_PROP_F
H5P_mp_H5PREMOVE_F
H5P_mp_H5PUNREGISTER_F
H5P_mp_H5PCLOSE_CLASS_F
-H5P_mp_H5PCREATE_CLASS_F
H5P_mp_H5PREGISTER_INTEGER
H5P_mp_H5PREGISTER_CHAR
H5P_mp_H5PINSERT_CHAR
@@ -555,6 +555,8 @@ H5VL_mp_H5VLGET_CONNECTOR_ID_BY_VALUE_F
H5VL_mp_H5VLGET_CONNECTOR_NAME_F
H5VL_mp_H5VLCLOSE_F
H5VL_mp_H5VLUNREGISTER_CONNECTOR_F
+H5VL_mp_H5VLNATIVE_ADDR_TO_TOKEN_F
+H5VL_mp_H5VLNATIVE_TOKEN_TO_ADDR_F
; H5Z
H5Z_mp_H5ZUNREGISTER_F
H5Z_mp_H5ZFILTER_AVAIL_F
diff --git a/fortran/test/CMakeTests.cmake b/fortran/test/CMakeTests.cmake
index 02c23bb..46b8972 100644
--- a/fortran/test/CMakeTests.cmake
+++ b/fortran/test/CMakeTests.cmake
@@ -94,6 +94,9 @@ endif ()
set_tests_properties (FORTRAN_testhdf5_fortran PROPERTIES
FIXTURES_REQUIRED clear_testhdf5_fortran
)
+if ("FORTRAN_testhdf5_fortran" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (FORTRAN_testhdf5_fortran PROPERTIES DISABLED true)
+endif ()
#-- Adding test for testhdf5_fortran_1_8
if (HDF5_ENABLE_USING_MEMCHECKER)
@@ -118,6 +121,9 @@ set_tests_properties (FORTRAN_testhdf5_fortran_1_8 PROPERTIES
DEPENDS FORTRAN_testhdf5_fortran
FIXTURES_REQUIRED clear_testhdf5_fortran
)
+if ("FORTRAN_testhdf5_fortran_1_8" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (FORTRAN_testhdf5_fortran_1_8 PROPERTIES DISABLED true)
+endif ()
#-- Adding test for fortranlib_test_F03
if (HDF5_ENABLE_USING_MEMCHECKER)
@@ -142,6 +148,9 @@ set_tests_properties (FORTRAN_fortranlib_test_F03 PROPERTIES
DEPENDS FORTRAN_testhdf5_fortran_1_8
FIXTURES_REQUIRED clear_testhdf5_fortran
)
+if ("FORTRAN_fortranlib_test_F03" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (FORTRAN_fortranlib_test_F03 PROPERTIES DISABLED true)
+endif ()
#-- Adding test for vol_connector
if (HDF5_ENABLE_USING_MEMCHECKER)
@@ -164,6 +173,9 @@ endif ()
set_tests_properties (FORTRAN_vol_connector PROPERTIES
FIXTURES_REQUIRED clear_testhdf5_fortran
)
+if ("FORTRAN_vol_connector" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (FORTRAN_vol_connector PROPERTIES DISABLED true)
+endif ()
#-- Adding test for fflush1
add_test (
@@ -177,6 +189,9 @@ add_test (
set_tests_properties (FORTRAN_fflush1 PROPERTIES
DEPENDS FORTRAN_flush1-clear-objects
)
+if ("FORTRAN_fflush1" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (FORTRAN_fflush1 PROPERTIES DISABLED true)
+endif ()
#-- Adding test for fflush2
add_test (
@@ -186,6 +201,9 @@ add_test (
set_tests_properties (FORTRAN_fflush2 PROPERTIES
DEPENDS FORTRAN_fflush1
)
+if ("FORTRAN_fflush2" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (FORTRAN_fflush2 PROPERTIES DISABLED true)
+endif ()
add_test (
NAME FORTRAN_flush1-clean-objects
COMMAND ${CMAKE_COMMAND} -E remove flush.h5
diff --git a/fortran/test/tH5O_F03.F90 b/fortran/test/tH5O_F03.F90
index b27b067..a4cf282 100644
--- a/fortran/test/tH5O_F03.F90
+++ b/fortran/test/tH5O_F03.F90
@@ -73,6 +73,8 @@ CONTAINS
INTEGER :: cmp_value
INTEGER :: i
INTEGER :: ierr
+ INTEGER(HADDR_T) :: addr
+ TYPE(H5O_TOKEN_T_F) :: token
status = 0
@@ -82,7 +84,7 @@ CONTAINS
RETURN
ENDIF
token_c%token = oinfo_c%token%token
- CALL H5Otoken_cmp_f(loc_id, oinfo_f%token, token_c, cmp_value, ierr);
+ CALL H5Otoken_cmp_f(loc_id, oinfo_f%token, token_c, cmp_value, ierr)
IF( (ierr .EQ. -1) .OR. (cmp_value .NE. 0) ) THEN
status = -1
RETURN
@@ -96,6 +98,22 @@ CONTAINS
RETURN
ENDIF
+ CALL h5vlnative_token_to_addr_f(loc_id, oinfo_f%token, addr, ierr)
+ IF( ierr .EQ. -1) THEN
+ status = -1
+ RETURN
+ ENDIF
+ CALL h5vlnative_addr_to_token_f(loc_id, addr, token, ierr)
+ IF( ierr .EQ. -1) THEN
+ status = -1
+ RETURN
+ ENDIF
+ CALL H5Otoken_cmp_f(loc_id, oinfo_f%token, token, cmp_value, ierr)
+ IF( (ierr .EQ. -1) .OR. (cmp_value .NE. 0) ) THEN
+ status = -1
+ RETURN
+ ENDIF
+
ENDIF
IF((field .EQ. H5O_INFO_TIME_F).OR.(field .EQ. H5O_INFO_ALL_F))THEN
@@ -132,7 +150,7 @@ CONTAINS
status = 0
IF( oinfo_c%fileno .NE. oinfo_f%fileno) status = status + 1
token_c%token = oinfo_c%token%token
- CALL H5Otoken_cmp_f(loc_id, oinfo_f%token, token_c, cmp_value, ierr);
+ CALL H5Otoken_cmp_f(loc_id, oinfo_f%token, token_c, cmp_value, ierr)
IF( (ierr .EQ. -1) .OR. (cmp_value .NE. 0) ) THEN
status = -1
RETURN
@@ -156,7 +174,7 @@ CONTAINS
status = 0
IF( oinfo_c%fileno .NE. oinfo_f%fileno) status = status + 1
token_c%token = oinfo_c%token%token
- CALL H5Otoken_cmp_f(loc_id, oinfo_f%token, token_c, cmp_value, ierr);
+ CALL H5Otoken_cmp_f(loc_id, oinfo_f%token, token_c, cmp_value, ierr)
IF( (ierr .EQ. -1) .OR. (cmp_value .NE. 0) ) THEN
status = -1
RETURN
@@ -234,25 +252,24 @@ CONTAINS
ENDIF
! Check H5Oget_info_by_name_f; if partial field values were filled correctly
- CALL H5Oget_info_by_name_f(group_id, name2, oinfo_f, ierr);
+ CALL H5Oget_info_by_name_f(group_id, name2, oinfo_f, ierr)
visit_obj_cb = compare_h5o_info_t( group_id, oinfo_f, oinfo_c, op_data%field, .TRUE. )
IF(visit_obj_cb.EQ.-1) RETURN
! Check H5Oget_info_by_name_f, only check field values
- CALL H5Oget_info_by_name_f(group_id, name2, oinfo_f, ierr, fields = op_data%field);
+ CALL H5Oget_info_by_name_f(group_id, name2, oinfo_f, ierr, fields = op_data%field)
visit_obj_cb = compare_h5o_info_t(group_id, oinfo_f, oinfo_c, op_data%field, .FALSE. )
IF(visit_obj_cb.EQ.-1) RETURN
-
IF(op_data%idx.EQ.1)THEN
! Check H5Oget_info_f, only check field values
- CALL H5Oget_info_f(group_id, oinfo_f, ierr, fields = op_data%field);
+ CALL H5Oget_info_f(group_id, oinfo_f, ierr, fields = op_data%field)
visit_obj_cb = compare_h5o_info_t(group_id, oinfo_f, oinfo_c, op_data%field, .FALSE. )
IF(visit_obj_cb.EQ.-1) RETURN
! Check H5Oget_info_f; if partial field values where filled correctly
- CALL H5Oget_info_f(group_id, oinfo_f, ierr);
+ CALL H5Oget_info_f(group_id, oinfo_f, ierr)
visit_obj_cb = compare_h5o_info_t(group_id, oinfo_f, oinfo_c, op_data%field, .TRUE. )
IF(visit_obj_cb.EQ.-1) RETURN
@@ -677,7 +694,6 @@ SUBROUTINE test_obj_info(total_error)
CALL check("h5oget_info_by_idx_f", -1, total_error)
ENDIF
-
! Close objects
CALL h5dclose_f(did, error)
CALL check("h5dclose_f", error, total_error)
diff --git a/fortran/testpar/CMakeTests.cmake b/fortran/testpar/CMakeTests.cmake
index 473049f..f9ce2b8 100644
--- a/fortran/testpar/CMakeTests.cmake
+++ b/fortran/testpar/CMakeTests.cmake
@@ -16,5 +16,16 @@
##############################################################################
##############################################################################
add_test (NAME MPI_TEST_FORT_parallel_test COMMAND ${MPIEXEC_EXECUTABLE} ${MPIEXEC_NUMPROC_FLAG} ${MPIEXEC_MAX_NUMPROCS} ${MPIEXEC_PREFLAGS} $<TARGET_FILE:parallel_test> ${MPIEXEC_POSTFLAGS})
+if ("MPI_TEST_FORT_parallel_test" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (MPI_TEST_FORT_parallel_test PROPERTIES DISABLED true)
+endif ()
+
add_test (NAME MPI_TEST_FORT_subfiling_test COMMAND ${MPIEXEC_EXECUTABLE} ${MPIEXEC_NUMPROC_FLAG} ${MPIEXEC_MAX_NUMPROCS} ${MPIEXEC_PREFLAGS} $<TARGET_FILE:subfiling_test> ${MPIEXEC_POSTFLAGS})
+if ("MPI_TEST_FORT_subfiling_test" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (MPI_TEST_FORT_subfiling_test PROPERTIES DISABLED true)
+endif ()
+
add_test (NAME MPI_TEST_FORT_async_test COMMAND ${MPIEXEC_EXECUTABLE} ${MPIEXEC_NUMPROC_FLAG} ${MPIEXEC_MAX_NUMPROCS} ${MPIEXEC_PREFLAGS} $<TARGET_FILE:async_test> ${MPIEXEC_POSTFLAGS})
+if ("MPI_TEST_FORT_async_test" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (MPI_TEST_FORT_async_test PROPERTIES DISABLED true)
+endif ()
diff --git a/fortran/testpar/Makefile.am b/fortran/testpar/Makefile.am
index afdda98..1c37409 100644
--- a/fortran/testpar/Makefile.am
+++ b/fortran/testpar/Makefile.am
@@ -36,7 +36,7 @@ TEST_PROG_PARA=parallel_test subfiling_test async_test
check_PROGRAMS=$(TEST_PROG_PARA)
# Temporary files
-CHECK_CLEANFILES+=parf[12].h5 h5*_tests.h5 subf.h5* test_async_apis.mod
+CHECK_CLEANFILES+=parf[12].h5 h5*_tests.h5 subf.h5* *.mod
# Test source files
parallel_test_SOURCES=ptest.F90 hyper.F90 mdset.F90 multidsetrw.F90
diff --git a/hl/c++/examples/ptExampleFL.cpp b/hl/c++/examples/ptExampleFL.cpp
index 0e280f0..cb407e2 100644
--- a/hl/c++/examples/ptExampleFL.cpp
+++ b/hl/c++/examples/ptExampleFL.cpp
@@ -72,7 +72,7 @@ main(void)
if (err < 0)
fprintf(stderr, "Error getting packet count.");
- printf("Number of packets in packet table after five appends: %llu\n", count);
+ printf("Number of packets in packet table after five appends: %" PRIuHSIZE "\n", count);
/* Initialize packet table's "current record" */
ptable.ResetIndex();
diff --git a/hl/c++/test/CMakeTests.cmake b/hl/c++/test/CMakeTests.cmake
index 4137270..b07dd6d 100644
--- a/hl/c++/test/CMakeTests.cmake
+++ b/hl/c++/test/CMakeTests.cmake
@@ -44,6 +44,9 @@ else ()
)
endif ()
set_tests_properties (HL_CPP_ptableTest PROPERTIES DEPENDS HL_CPP_ptableTest-clear-objects)
+if ("HL_CPP_ptableTest" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (HL_CPP_ptableTest PROPERTIES DISABLED true)
+endif ()
add_test (
NAME HL_CPP_ptableTest-clean-objects
COMMAND ${CMAKE_COMMAND}
@@ -53,3 +56,4 @@ set_tests_properties (HL_CPP_ptableTest-clean-objects PROPERTIES
DEPENDS HL_CPP_ptableTest
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
)
+
diff --git a/hl/fortran/test/CMakeTests.cmake b/hl/fortran/test/CMakeTests.cmake
index 209186b..8421872 100644
--- a/hl/fortran/test/CMakeTests.cmake
+++ b/hl/fortran/test/CMakeTests.cmake
@@ -68,6 +68,9 @@ macro (ADD_H5_FORTRAN_TEST file)
FIXTURES_REQUIRED clear_HL_FORTRAN_test
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
)
+ if ("HL_FORTRAN_f90_${file}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (HL_FORTRAN_f90_${file} PROPERTIES DISABLED true)
+ endif ()
endmacro ()
foreach (h5_test ${H5_TESTS})
diff --git a/hl/test/CMakeTests.cmake b/hl/test/CMakeTests.cmake
index 781ed14..6ec5f29 100644
--- a/hl/test/CMakeTests.cmake
+++ b/hl/test/CMakeTests.cmake
@@ -118,6 +118,9 @@ macro (HL_ADD_TEST hl_name)
ENVIRONMENT "srcdir=${HDF5_HL_TEST_BINARY_DIR}"
WORKING_DIRECTORY ${HDF5_HL_TEST_BINARY_DIR}
)
+ if ("HL_${hl_name}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (HL_${hl_name} PROPERTIES DISABLED true)
+ endif ()
endmacro ()
HL_add_test (test_lite )
diff --git a/hl/tools/h5watch/CMakeTests.cmake b/hl/tools/h5watch/CMakeTests.cmake
index 7c1a7f5..aa4c41a 100644
--- a/hl/tools/h5watch/CMakeTests.cmake
+++ b/hl/tools/h5watch/CMakeTests.cmake
@@ -86,6 +86,9 @@ add_custom_target(H5WATCH_files ALL COMMENT "Copying files needed by H5WATCH tes
DEPENDS ${last_test}
FIXTURES_REQUIRED gen_test_watch
)
+ if ("H5WATCH_ARGS-h5watch-${resultfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5WATCH_ARGS-h5watch-${resultfile} PROPERTIES DISABLED true)
+ endif ()
set (last_test "H5WATCH_ARGS-h5watch-${resultfile}")
endif ()
endmacro ()
@@ -109,6 +112,9 @@ add_custom_target(H5WATCH_files ALL COMMENT "Copying files needed by H5WATCH tes
DEPENDS ${last_test}
FIXTURES_REQUIRED gen_test_watch
)
+ if ("H5WATCH_ARGS-h5watch-${resultfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5WATCH_ARGS-h5watch-${resultfile} PROPERTIES DISABLED true)
+ endif ()
set (last_test "H5WATCH_ARGS-h5watch-${resultfile}")
endif ()
endmacro ()
@@ -131,6 +137,9 @@ add_custom_target(H5WATCH_files ALL COMMENT "Copying files needed by H5WATCH tes
DEPENDS ${last_test}
FIXTURES_REQUIRED gen_test_watch
)
+ if ("H5WATCH-${resultfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5WATCH-${resultfile} PROPERTIES DISABLED true)
+ endif ()
set (last_test "H5WATCH-${resultfile}")
endif ()
endmacro ()
diff --git a/java/test/CMakeLists.txt b/java/test/CMakeLists.txt
index 967795b..43137a2 100644
--- a/java/test/CMakeLists.txt
+++ b/java/test/CMakeLists.txt
@@ -175,6 +175,9 @@ if (HDF5_TEST_JAVA AND HDF5_TEST_SERIAL)
FIXTURES_REQUIRED clear_JUnit
WORKING_DIRECTORY ${HDF5_BINARY_DIR}/java/test
)
+ if ("JUnit-${test_file}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (JUnit-${test_file} PROPERTIES DISABLED true)
+ endif ()
endforeach ()
@@ -208,6 +211,9 @@ if (HDF5_TEST_JAVA AND HDF5_TEST_SERIAL)
ENVIRONMENT "HDF5_PLUGIN_PATH=${CMAKE_BINARY_DIR}/testdir2"
WORKING_DIRECTORY ${HDF5_BINARY_DIR}/java/test/${volname}
)
+ if ("JUnit-VOL-${volname}-${voltest}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (JUnit-VOL-${volname}-${voltest} PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME JUnit-VOL-${volname}-${voltest}-clean-objects
COMMAND ${CMAKE_COMMAND} -E remove
diff --git a/release_docs/INSTALL_CMake.txt b/release_docs/INSTALL_CMake.txt
index c395148..230c501 100644
--- a/release_docs/INSTALL_CMake.txt
+++ b/release_docs/INSTALL_CMake.txt
@@ -879,6 +879,7 @@ if (BUILD_TESTING)
if (HDF5_TEST_VFD)
HDF5_TEST_FHEAP_VFD "Execute fheap test with different VFDs" ON
TEST_SHELL_SCRIPTS "Enable shell script tests" ON
+ HDF5_DISABLE_TESTS_REGEX "Regex pattern to set execution of specific tests to DISABLED" ""
---------------- External Library Options ---------------------
HDF5_ALLOW_EXTERNAL_SUPPORT "Allow External Library Building (NO GIT TGZ)" "NO"
diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt
index 4e376f5..04ce910 100644
--- a/release_docs/RELEASE.txt
+++ b/release_docs/RELEASE.txt
@@ -47,7 +47,33 @@ New Features
Configuration:
-------------
- -
+ - Added new option for CMake to mark tests as SKIPPED.
+
+ HDF5_DISABLE_TESTS_REGEX is a REGEX string that will be checked with
+ test names and if there is a match then that test's property will be
+ set to DISABLED. HDF5_DISABLE_TESTS_REGEX can be initialized on the
+ command line: "-DHDF5_DISABLE_TESTS_REGEX:STRING=<regex>"
+ See CMake documentation for regex-specification.
+
+ - Added defaults to CMake for long double conversion checks
+
+ HDF5 performs a couple of checks at build time to see if long double
+ values can be converted correctly (IBM's Power architecture uses a
+ special format for long doubles). These checks were performed using
+ TRY_RUN, which is a problem when cross-compiling.
+
+ These checks now use default values appropriate for most non-Power
+ systems when cross-compiling. The cache values can be pre-set if
+ necessary, which will preempt both the TRY_RUN and the default.
+
+ Affected values:
+ H5_LDOUBLE_TO_LONG_SPECIAL (default no)
+ H5_LONG_TO_LDOUBLE_SPECIAL (default no)
+ H5_LDOUBLE_TO_LLONG_ACCURATE (default yes)
+ H5_LLONG_TO_LDOUBLE_CORRECT (default yes)
+ H5_DISABLE_SOME_LDOUBLE_CONV (default no)
+
+ Fixes GitHub #3585
Library:
@@ -62,7 +88,8 @@ New Features
Fortran Library:
----------------
- -
+ - Added Fortran APIs:
+ h5vlnative_addr_to_token_f and h5vlnative_token_to_address_f
C++ Library:
@@ -109,6 +136,29 @@ Bug Fixes since HDF5-1.14.3 release
===================================
Library
-------
+ - Suppressed floating-point exceptions in H5T init code
+
+ The floating-point datatype initialization code in H5Tinit_float.c
+ could raise FE_INVALID exceptions while munging bits and performing
+ comparisons that might involve NaN. This was not a problem when the
+ initialization code was executed in H5detect at compile time (prior
+ to 1.14.3), but now that the code is executed at library startup
+ (1.14.3+), these exceptions can be caught by user code, as is the
+ default in the NAG Fortran compiler.
+
+ Starting in 1.14.4, we now suppress floating-point exceptions while
+ initializing the floating-point types and clear FE_INVALID before
+ restoring the original environment.
+
+ Fixes GitHub #3831
+
+ - Fixed a file handle leak in the core VFD
+
+ When opening a file with the core VFD and a file image, if the file
+ already exists, the file check would leak the POSIX file handle.
+
+ Fixes GitHub issue #635
+
- Dropped support for MPI-2
The MPI-2 supporting artifacts have been removed due to the cessation
@@ -122,12 +172,32 @@ Bug Fixes since HDF5-1.14.3 release
Configuration
-------------
- -
+ - Removed an Autotools configure hack that causes problems on MacOS
+
+ A sed line in configure.ac was added in the past to paper over some
+ problems with older versions of the Autotools that would add incorrect
+ linker flags. This hack is not needed with recent versions of the
+ Autotools and the sed line errors on MacOS (though this was a silent
+ error that didn't break the build) so the hack has been removed.
+
+ Fixes GitHub issue #3843
+
+ - Fixed an issue where the h5tools_test_utils test program was being
+ installed on the system for Autotools builds of HDF5
+
+ The h5tools_test_utils test program was mistakenly added to bin_PROGRAMS
+ in its Makefile.am configuration file, causing the executable to be
+ installed on the system. The executable is now added to noinst_PROGRAMS
+ instead and will no longer be installed on the system for Autotools builds
+ of HDF5. The CMake configuration code already avoids installing the
+ executable on the system.
Tools
-----
- -
+ - Renamed h5fuse.sh to h5fuse
+
+ Addresses Discussion #3791
Performance
@@ -299,11 +369,27 @@ Platforms Tested
Known Problems
==============
- IEEE standard arithmetic enables software to raise exceptions such as overflow,
- division by zero, and other illegal operations without interrupting or halting
- the program flow. The HDF5 C library intentionally performs these exceptions.
- Therefore, the "-ieee=full" nagfor switch is necessary when compiling a program
- to avoid stopping on an exception.
+ When HDF5 is compiled with NVHPC versions 23.5 - 23.9 (additional versions may
+ also be applicable) and with -O2 (or higher) and -DNDEBUG, test failures occur
+ in the following tests:
+
+ H5PLUGIN-filter_plugin
+ H5TEST-flush2
+ H5TEST-testhdf5-base
+ MPI_TEST_t_filters_parallel
+
+ Since these tests pass with an optimization level of -O1 (and -O0) and it is
+ currently unclear whether the test failures are due to issues in HDF5 or issues
+ in the 'nvc' compiler, the maximum optimization level for NVHPC has been set
+ to -O1 until the test failures can be resolved. Note that even at -O1 optimization
+ level, there still appears to be a sporadic test failure in the Java JUnit tests
+ that has occasionally been seen in JUnit-TestH5Pfapl and JUnit-TestH5D. It is also
+ unclear whether this is an issue in HDF5 or with the 'nvc' compiler. Finally, note
+ that NVHPC 23.9 will fail to compile the test/tselect.c test file with a compiler
+ error of 'use of undefined value' when the optimization level is -O2 or higher.
+ Nvidia is aware of this issue and has suggested lowering the optimization level to
+ -O1 for the time being:
+ https://forums.developer.nvidia.com/t/hdf5-no-longer-compiles-with-nv-23-9/269045.
CMake files do not behave correctly with paths containing spaces.
Do not use spaces in paths because the required escaping for handling spaces
diff --git a/src/H5Dchunk.c b/src/H5Dchunk.c
index 41d774d..c8bad76 100644
--- a/src/H5Dchunk.c
+++ b/src/H5Dchunk.c
@@ -5536,11 +5536,9 @@ done:
/*-------------------------------------------------------------------------
* Function: H5D__chunk_collective_fill
*
- * Purpose: Use MPIO collective write to fill the chunks (if number of
- * chunks to fill is greater than the number of MPI procs;
- * otherwise use independent I/O).
+ * Purpose: Use MPIO selection vector I/O for writing fill chunks
*
- * Return: Non-negative on success/Negative on failure
+ * Return: Non-negative on success/Negative on failure
*
*-------------------------------------------------------------------------
*/
@@ -5554,19 +5552,24 @@ H5D__chunk_collective_fill(const H5D_t *dset, H5D_chunk_coll_fill_info_t *chunk_
int mpi_code; /* MPI return code */
size_t num_blocks; /* Number of blocks between processes. */
size_t leftover_blocks; /* Number of leftover blocks to handle */
- int blocks, leftover; /* converted to int for MPI */
- MPI_Aint *chunk_disp_array = NULL;
- MPI_Aint *block_disps = NULL;
- int *block_lens = NULL;
- MPI_Datatype mem_type = MPI_BYTE, file_type = MPI_BYTE;
- H5FD_mpio_xfer_t prev_xfer_mode; /* Previous data xfer mode */
- bool have_xfer_mode = false; /* Whether the previous xffer mode has been retrieved */
- bool need_sort = false;
- size_t i; /* Local index variable */
+ int blocks; /* converted to int for MPI */
+ int leftover; /* converted to int for MPI */
+ H5FD_mpio_xfer_t prev_xfer_mode; /* Previous data xfer mode */
+ bool have_xfer_mode = false; /* Whether the previous xffer mode has been retrieved */
+ size_t i; /* Local index variable */
+ haddr_t *io_addrs = NULL;
+ size_t *io_sizes = NULL;
+ const void **io_wbufs = NULL;
+ H5FD_mem_t io_types[2];
+ bool all_same_block_len = true;
+ bool need_sort = false;
+ size_t io_2sizes[2];
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_PACKAGE
+ assert(chunk_fill_info->num_chunks != 0);
+
/*
* If a separate fill buffer is provided for partial chunks, ensure
* that the "don't filter partial edge chunks" flag is set.
@@ -5589,6 +5592,7 @@ H5D__chunk_collective_fill(const H5D_t *dset, H5D_chunk_coll_fill_info_t *chunk_
/* Distribute evenly the number of blocks between processes. */
if (mpi_size == 0)
HGOTO_ERROR(H5E_DATASET, H5E_BADVALUE, FAIL, "Resulted in division by zero");
+
num_blocks =
(size_t)(chunk_fill_info->num_chunks / (size_t)mpi_size); /* value should be the same on all procs */
@@ -5602,157 +5606,97 @@ H5D__chunk_collective_fill(const H5D_t *dset, H5D_chunk_coll_fill_info_t *chunk_
H5_CHECKED_ASSIGN(leftover, int, leftover_blocks, size_t);
/* Check if we have any chunks to write on this rank */
- if (num_blocks > 0 || (leftover && leftover > mpi_rank)) {
- MPI_Aint partial_fill_buf_disp = 0;
- bool all_same_block_len = true;
-
- /* Allocate buffers */
- if (NULL == (chunk_disp_array = (MPI_Aint *)H5MM_malloc((size_t)(blocks + 1) * sizeof(MPI_Aint))))
- HGOTO_ERROR(H5E_DATASET, H5E_CANTALLOC, FAIL, "couldn't allocate chunk file displacement buffer");
-
- if (partial_chunk_fill_buf) {
- MPI_Aint fill_buf_addr;
- MPI_Aint partial_fill_buf_addr;
-
- /* Calculate the displacement between the fill buffer and partial chunk fill buffer */
- if (MPI_SUCCESS != (mpi_code = MPI_Get_address(fill_buf, &fill_buf_addr)))
- HMPI_GOTO_ERROR(FAIL, "MPI_Get_address failed", mpi_code)
- if (MPI_SUCCESS != (mpi_code = MPI_Get_address(partial_chunk_fill_buf, &partial_fill_buf_addr)))
- HMPI_GOTO_ERROR(FAIL, "MPI_Get_address failed", mpi_code)
-
-#if H5_CHECK_MPI_VERSION(3, 1)
- partial_fill_buf_disp = MPI_Aint_diff(partial_fill_buf_addr, fill_buf_addr);
-#else
- partial_fill_buf_disp = partial_fill_buf_addr - fill_buf_addr;
-#endif
+ if (num_blocks > 0 || leftover > mpi_rank) {
- /*
- * Allocate all-zero block displacements array. If a block's displacement
- * is left as zero, that block will be written to from the regular fill
- * buffer. If a block represents an unfiltered partial edge chunk, its
- * displacement will be set so that the block is written to from the
- * unfiltered fill buffer.
- */
- if (NULL == (block_disps = (MPI_Aint *)H5MM_calloc((size_t)(blocks + 1) * sizeof(MPI_Aint))))
- HGOTO_ERROR(H5E_DATASET, H5E_CANTALLOC, FAIL, "couldn't allocate block displacements buffer");
- }
+ if (NULL == (io_addrs = H5MM_malloc((size_t)(blocks + 1) * sizeof(*io_addrs))))
+ HGOTO_ERROR(H5E_RESOURCE, H5E_CANTALLOC, FAIL,
+ "couldn't allocate space for I/O addresses vector");
- /*
- * Perform initial scan of chunk info list to:
- * - make sure that chunk addresses are monotonically non-decreasing
- * - check if all blocks have the same length
- */
- for (i = 1; i < chunk_fill_info->num_chunks; i++) {
- if (chunk_fill_info->chunk_info[i].addr < chunk_fill_info->chunk_info[i - 1].addr)
- need_sort = true;
-
- if (chunk_fill_info->chunk_info[i].chunk_size != chunk_fill_info->chunk_info[i - 1].chunk_size)
- all_same_block_len = false;
- }
+ if (NULL == (io_wbufs = H5MM_malloc((size_t)(blocks + 1) * sizeof(*io_wbufs))))
+ HGOTO_ERROR(H5E_RESOURCE, H5E_CANTALLOC, FAIL, "couldn't allocate space for I/O buffers vector");
+ }
- if (need_sort)
- qsort(chunk_fill_info->chunk_info, chunk_fill_info->num_chunks,
- sizeof(struct chunk_coll_fill_info), H5D__chunk_cmp_coll_fill_info);
+ /*
+ * Perform initial scan of chunk info list to:
+ * - make sure that chunk addresses are monotonically non-decreasing
+ * - check if all blocks have the same length
+ */
+ for (i = 1; i < chunk_fill_info->num_chunks; i++) {
+ if (chunk_fill_info->chunk_info[i].addr < chunk_fill_info->chunk_info[i - 1].addr)
+ need_sort = true;
- /* Allocate buffer for block lengths if necessary */
- if (!all_same_block_len)
- if (NULL == (block_lens = (int *)H5MM_malloc((size_t)(blocks + 1) * sizeof(int))))
- HGOTO_ERROR(H5E_DATASET, H5E_CANTALLOC, FAIL, "couldn't allocate chunk lengths buffer");
+ if (chunk_fill_info->chunk_info[i].chunk_size != chunk_fill_info->chunk_info[i - 1].chunk_size)
+ all_same_block_len = false;
+ }
- for (i = 0; i < (size_t)blocks; i++) {
- size_t idx = i + (size_t)(mpi_rank * blocks);
+ /*
+ * Note that we sort all of the chunks here, and not just a subset
+ * corresponding to this rank. We do this since we have found MPI I/O to work
+ * better when each rank writes blocks that are contiguous in the file,
+ * and by sorting the full list we maximize the chance of that happening.
+ */
+ if (need_sort)
+ qsort(chunk_fill_info->chunk_info, chunk_fill_info->num_chunks, sizeof(struct chunk_coll_fill_info),
+ H5D__chunk_cmp_coll_fill_info);
- /* store the chunk address as an MPI_Aint */
- chunk_disp_array[i] = (MPI_Aint)(chunk_fill_info->chunk_info[idx].addr);
+ /*
+ * If all the chunks have the same length, use the compressed feature
+ * to store the size.
+ * Otherwise, allocate the array of sizes for storing chunk sizes.
+ */
+ if (all_same_block_len) {
+ io_2sizes[0] = chunk_fill_info->chunk_info[0].chunk_size;
+ io_2sizes[1] = 0;
+ }
+ else {
+ if (NULL == (io_sizes = H5MM_malloc((size_t)(blocks + 1) * sizeof(*io_sizes))))
+ HGOTO_ERROR(H5E_RESOURCE, H5E_CANTALLOC, FAIL, "couldn't allocate space for I/O sizes vector");
+ }
- if (!all_same_block_len)
- H5_CHECKED_ASSIGN(block_lens[i], int, chunk_fill_info->chunk_info[idx].chunk_size, size_t);
+ /*
+ * Since the type of all chunks is raw data, use the compressed feature
+ * to store the chunk type.
+ */
+ io_types[0] = H5FD_MEM_DRAW;
+ io_types[1] = H5FD_MEM_NOLIST;
- if (chunk_fill_info->chunk_info[idx].unfiltered_partial_chunk) {
- assert(partial_chunk_fill_buf);
- block_disps[i] = partial_fill_buf_disp;
- }
- } /* end for */
+ /*
+ * For the chunks corresponding to this rank, fill in the
+ * address, size and buf pointer for each chunk.
+ */
+ for (i = 0; i < (size_t)blocks; i++) {
+ size_t idx = i + (size_t)(mpi_rank * blocks);
- /* Calculate if there are any leftover blocks after evenly
- * distributing. If there are, then round-robin the distribution
- * to processes 0 -> leftover.
- */
- if (leftover && leftover > mpi_rank) {
- chunk_disp_array[blocks] =
- (MPI_Aint)chunk_fill_info->chunk_info[(blocks * mpi_size) + mpi_rank].addr;
-
- if (!all_same_block_len)
- H5_CHECKED_ASSIGN(block_lens[blocks], int,
- chunk_fill_info->chunk_info[(blocks * mpi_size) + mpi_rank].chunk_size,
- size_t);
-
- if (chunk_fill_info->chunk_info[(blocks * mpi_size) + mpi_rank].unfiltered_partial_chunk) {
- assert(partial_chunk_fill_buf);
- block_disps[blocks] = partial_fill_buf_disp;
- }
+ io_addrs[i] = chunk_fill_info->chunk_info[idx].addr;
- blocks++;
- }
+ if (!all_same_block_len)
+ io_sizes[i] = chunk_fill_info->chunk_info[idx].chunk_size;
- /* Create file and memory types for the write operation */
- if (all_same_block_len) {
- int block_len;
+ if (chunk_fill_info->chunk_info[idx].unfiltered_partial_chunk)
+ io_wbufs[i] = partial_chunk_fill_buf;
+ else
+ io_wbufs[i] = fill_buf;
+ }
- H5_CHECKED_ASSIGN(block_len, int, chunk_fill_info->chunk_info[0].chunk_size, size_t);
+ /*
+ * For the leftover chunk corresponding to this rank, fill in the
+ * address, size and buf pointer for the chunk.
+ */
+ if (leftover > mpi_rank) {
+ io_addrs[blocks] = chunk_fill_info->chunk_info[(blocks * mpi_size) + mpi_rank].addr;
- mpi_code =
- MPI_Type_create_hindexed_block(blocks, block_len, chunk_disp_array, MPI_BYTE, &file_type);
- if (mpi_code != MPI_SUCCESS)
- HMPI_GOTO_ERROR(FAIL, "MPI_Type_create_hindexed_block failed", mpi_code)
+ if (!all_same_block_len)
+ io_sizes[blocks] = chunk_fill_info->chunk_info[(blocks * mpi_size) + mpi_rank].chunk_size;
- if (partial_chunk_fill_buf) {
- /*
- * If filters are disabled for partial edge chunks, those chunks could
- * potentially have the same block length as the other chunks, but still
- * need to be written to using the unfiltered fill buffer. Use an hindexed
- * block type rather than an hvector.
- */
- mpi_code =
- MPI_Type_create_hindexed_block(blocks, block_len, block_disps, MPI_BYTE, &mem_type);
- if (mpi_code != MPI_SUCCESS)
- HMPI_GOTO_ERROR(FAIL, "MPI_Type_create_hindexed_block failed", mpi_code)
- }
- else {
- mpi_code = MPI_Type_create_hvector(blocks, block_len, 0, MPI_BYTE, &mem_type);
- if (mpi_code != MPI_SUCCESS)
- HMPI_GOTO_ERROR(FAIL, "MPI_Type_create_hvector failed", mpi_code)
- }
- }
- else {
- /*
- * Currently, different block lengths implies that there are partial
- * edge chunks and the "don't filter partial edge chunks" flag is set.
- */
+ if (chunk_fill_info->chunk_info[(blocks * mpi_size) + mpi_rank].unfiltered_partial_chunk) {
assert(partial_chunk_fill_buf);
- assert(block_lens);
- assert(block_disps);
-
- mpi_code = MPI_Type_create_hindexed(blocks, block_lens, chunk_disp_array, MPI_BYTE, &file_type);
- if (mpi_code != MPI_SUCCESS)
- HMPI_GOTO_ERROR(FAIL, "MPI_Type_create_hindexed failed", mpi_code)
-
- mpi_code = MPI_Type_create_hindexed(blocks, block_lens, block_disps, MPI_BYTE, &mem_type);
- if (mpi_code != MPI_SUCCESS)
- HMPI_GOTO_ERROR(FAIL, "MPI_Type_create_hindexed failed", mpi_code)
+ io_wbufs[blocks] = partial_chunk_fill_buf;
}
+ else
+ io_wbufs[blocks] = fill_buf;
- if (MPI_SUCCESS != (mpi_code = MPI_Type_commit(&file_type)))
- HMPI_GOTO_ERROR(FAIL, "MPI_Type_commit failed", mpi_code)
- if (MPI_SUCCESS != (mpi_code = MPI_Type_commit(&mem_type)))
- HMPI_GOTO_ERROR(FAIL, "MPI_Type_commit failed", mpi_code)
- } /* end if */
-
- /* Set MPI-IO VFD properties */
-
- /* Set MPI datatypes for operation */
- if (H5CX_set_mpi_coll_datatypes(mem_type, file_type) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, FAIL, "can't set MPI-I/O properties");
+ blocks++;
+ }
/* Get current transfer mode */
if (H5CX_get_io_xfer_mode(&prev_xfer_mode) < 0)
@@ -5763,31 +5707,24 @@ H5D__chunk_collective_fill(const H5D_t *dset, H5D_chunk_coll_fill_info_t *chunk_
if (H5CX_set_io_xfer_mode(H5FD_MPIO_COLLECTIVE) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, FAIL, "can't set transfer mode");
- /* Low-level write (collective) */
- if (H5F_shared_block_write(H5F_SHARED(dset->oloc.file), H5FD_MEM_DRAW, (haddr_t)0,
- (blocks) ? (size_t)1 : (size_t)0, fill_buf) < 0)
- HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "unable to write raw data to file");
-
/* Barrier so processes don't race ahead */
if (MPI_SUCCESS != (mpi_code = MPI_Barrier(mpi_comm)))
HMPI_GOTO_ERROR(FAIL, "MPI_Barrier failed", mpi_code)
+ /* Perform the selection vector I/O for the chunks */
+ if (H5F_shared_vector_write(H5F_SHARED(dset->oloc.file), (uint32_t)blocks, io_types, io_addrs,
+ all_same_block_len ? io_2sizes : io_sizes, io_wbufs) < 0)
+ HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "vector write call failed");
+
done:
if (have_xfer_mode)
- /* Set transfer mode */
+ /* Restore transfer mode */
if (H5CX_set_io_xfer_mode(prev_xfer_mode) < 0)
HDONE_ERROR(H5E_DATASET, H5E_CANTSET, FAIL, "can't set transfer mode");
- /* free things */
- if (MPI_BYTE != file_type)
- if (MPI_SUCCESS != (mpi_code = MPI_Type_free(&file_type)))
- HMPI_DONE_ERROR(FAIL, "MPI_Type_free failed", mpi_code)
- if (MPI_BYTE != mem_type)
- if (MPI_SUCCESS != (mpi_code = MPI_Type_free(&mem_type)))
- HMPI_DONE_ERROR(FAIL, "MPI_Type_free failed", mpi_code)
- H5MM_xfree(chunk_disp_array);
- H5MM_xfree(block_disps);
- H5MM_xfree(block_lens);
+ H5MM_xfree(io_addrs);
+ H5MM_xfree(io_wbufs);
+ H5MM_xfree(io_sizes);
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5D__chunk_collective_fill() */
@@ -5805,6 +5742,7 @@ H5D__chunk_cmp_coll_fill_info(const void *_entry1, const void *_entry2)
FUNC_LEAVE_NOAPI(H5_addr_cmp(entry1->addr, entry2->addr))
} /* end H5D__chunk_cmp_coll_fill_info() */
+
#endif /* H5_HAVE_PARALLEL */
/*-------------------------------------------------------------------------
diff --git a/src/H5Dmpio.c b/src/H5Dmpio.c
index 16243fa..b6976e6 100644
--- a/src/H5Dmpio.c
+++ b/src/H5Dmpio.c
@@ -911,7 +911,8 @@ H5D__mpio_get_no_coll_cause_strings(char *local_cause, size_t local_cause_len, c
case H5D_MPIO_COLLECTIVE:
case H5D_MPIO_NO_COLLECTIVE_MAX_CAUSE:
default:
- assert(0 && "invalid no collective cause reason");
+ cause_str = "invalid or unknown no collective cause reason";
+ assert(0 && "invalid or unknown no collective cause reason");
break;
}
@@ -3782,6 +3783,10 @@ H5D__mpio_redistribute_shared_chunks_int(H5D_filtered_collective_io_info_t *chun
counts_disps_array = H5MM_xfree(counts_disps_array);
}
+ /* No useful work to do - exit */
+ if (coll_chunk_list_num_entries == 0)
+ HGOTO_DONE(SUCCEED);
+
/*
* Phase 2 - Involved ranks now redistribute any shared chunks to new
* owners as necessary.
diff --git a/src/H5FDcore.c b/src/H5FDcore.c
index 08b714d..1aa8d4b 100644
--- a/src/H5FDcore.c
+++ b/src/H5FDcore.c
@@ -754,8 +754,10 @@ H5FD__core_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr
((file_image_info.buffer == NULL) && (file_image_info.size == 0)));
memset(&sb, 0, sizeof(sb));
if ((file_image_info.buffer != NULL) && !(H5F_ACC_CREAT & flags)) {
- if (HDopen(name, o_flags, H5_POSIX_CREATE_MODE_RW) >= 0)
+ if ((fd = HDopen(name, o_flags, H5_POSIX_CREATE_MODE_RW)) >= 0) {
+ HDclose(fd);
HGOTO_ERROR(H5E_FILE, H5E_FILEEXISTS, NULL, "file already exists");
+ }
/* If backing store is requested, create and stat the file
* Note: We are forcing the O_CREAT flag here, even though this is
diff --git a/src/H5FDcore.h b/src/H5FDcore.h
index 235d6fc..cd45c8d 100644
--- a/src/H5FDcore.h
+++ b/src/H5FDcore.h
@@ -11,17 +11,25 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
- * Purpose: The public header file for the core driver.
+ * Purpose: The public header file for the core virtual file driver (VFD)
*/
#ifndef H5FDcore_H
#define H5FDcore_H
-#define H5FD_CORE (H5FDperform_init(H5FD_core_init))
+/** Initializer for the core VFD */
+#define H5FD_CORE (H5FDperform_init(H5FD_core_init))
+
+/** Identifier for the core VFD */
#define H5FD_CORE_VALUE H5_VFD_CORE
#ifdef __cplusplus
extern "C" {
#endif
+
+/** @private
+ *
+ * \brief Private initializer for the core VFD
+ */
H5_DLL hid_t H5FD_core_init(void);
/**
diff --git a/src/H5FDdirect.h b/src/H5FDdirect.h
index e47ac37..1e60bb0 100644
--- a/src/H5FDdirect.h
+++ b/src/H5FDdirect.h
@@ -11,30 +11,47 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
- * Purpose: The public header file for the direct driver.
+ * Purpose: The public header file for the direct virtual file driver (VFD)
*/
#ifndef H5FDdirect_H
#define H5FDdirect_H
#ifdef H5_HAVE_DIRECT
-#define H5FD_DIRECT (H5FDperform_init(H5FD_direct_init))
+
+/** Initializer for the direct VFD */
+#define H5FD_DIRECT (H5FDperform_init(H5FD_direct_init))
+
+/** Identifier for the direct VFD */
#define H5FD_DIRECT_VALUE H5_VFD_DIRECT
+
#else
+
+/** Initializer for the direct VFD (disabled) */
#define H5FD_DIRECT (H5I_INVALID_HID)
+
+/** Identifier for the direct VFD (disabled) */
#define H5FD_DIRECT_VALUE H5_VFD_INVALID
+
#endif /* H5_HAVE_DIRECT */
+/** Default value for memory boundary */
+#define MBOUNDARY_DEF 4096
+
+/** Default value for file block size */
+#define FBSIZE_DEF 4096
+
+/** Default value for maximum copy buffer size */
+#define CBSIZE_DEF (16 * 1024 * 1024)
+
#ifdef H5_HAVE_DIRECT
#ifdef __cplusplus
extern "C" {
#endif
-/* Default values for memory boundary, file block size, and maximal copy buffer size.
- * Application can set these values through the function H5Pset_fapl_direct. */
-#define MBOUNDARY_DEF 4096
-#define FBSIZE_DEF 4096
-#define CBSIZE_DEF 16 * 1024 * 1024
-
+/** @private
+ *
+ * \brief Private initializer for the direct VFD
+ */
H5_DLL hid_t H5FD_direct_init(void);
/**
diff --git a/src/H5FDfamily.c b/src/H5FDfamily.c
index 94805a2..3f43ae9 100644
--- a/src/H5FDfamily.c
+++ b/src/H5FDfamily.c
@@ -1427,7 +1427,8 @@ H5FD__family_delete(const char *filename, hid_t fapl_id)
FUNC_ENTER_PACKAGE
- assert(filename);
+ if (!filename)
+ HGOTO_ERROR(H5E_VFL, H5E_BADVALUE, FAIL, "invalid filename pointer");
/* Get the driver info (for the member fapl)
* The family_open call accepts H5P_DEFAULT, so we'll accept that here, too.
diff --git a/src/H5FDfamily.h b/src/H5FDfamily.h
index 76020f0..32e885c 100644
--- a/src/H5FDfamily.h
+++ b/src/H5FDfamily.h
@@ -11,18 +11,25 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
- * Purpose: The public header file for the family driver.
+ * Purpose: The public header file for the family virtual file driver (VFD)
*/
#ifndef H5FDfamily_H
#define H5FDfamily_H
-#define H5FD_FAMILY (H5FDperform_init(H5FD_family_init))
+/** Initializer for the family VFD */
+#define H5FD_FAMILY (H5FDperform_init(H5FD_family_init))
+
+/** Identifier for the family VFD */
#define H5FD_FAMILY_VALUE H5_VFD_FAMILY
#ifdef __cplusplus
extern "C" {
#endif
+/** @private
+ *
+ * \brief Private initializer for the family VFD
+ */
H5_DLL hid_t H5FD_family_init(void);
/**
diff --git a/src/H5FDhdfs.h b/src/H5FDhdfs.h
index c8c2c37..e5f7173 100644
--- a/src/H5FDhdfs.h
+++ b/src/H5FDhdfs.h
@@ -11,18 +11,29 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
- * Purpose: The public header file for the hdfs driver.
+ * Purpose: The public header file for the Hadoop Distributed File System
+ * (hdfs) virtual file driver (VFD)
*/
#ifndef H5FDhdfs_H
#define H5FDhdfs_H
#ifdef H5_HAVE_LIBHDFS
-#define H5FD_HDFS (H5FDperform_init(H5FD_hdfs_init))
+
+/** Initializer for the hdfs VFD */
+#define H5FD_HDFS (H5FDperform_init(H5FD_hdfs_init))
+
+/** Identifier for the hdfs VFD */
#define H5FD_HDFS_VALUE H5_VFD_HDFS
-#else /* H5_HAVE_LIBHDFS */
+
+#else
+
+/** Initializer for the hdfs VFD (disabled) */
#define H5FD_HDFS (H5I_INVALID_HID)
+
+/** Identifier for the hdfs VFD (disabled) */
#define H5FD_HDFS_VALUE H5_VFD_INVALID
+
#endif /* H5_HAVE_LIBHDFS */
#ifdef H5_HAVE_LIBHDFS
@@ -104,6 +115,10 @@ typedef struct H5FD_hdfs_fapl_t {
int32_t stream_buffer_size;
} H5FD_hdfs_fapl_t;
+/** @private
+ *
+ * \brief Private initializer for the hdfs VFD
+ */
H5_DLL hid_t H5FD_hdfs_init(void);
/**
diff --git a/src/H5FDlog.c b/src/H5FDlog.c
index 8d43dc8..e35a6a6 100644
--- a/src/H5FDlog.c
+++ b/src/H5FDlog.c
@@ -545,7 +545,7 @@ H5FD__log_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr)
#endif /* H5_HAVE_WIN32_API */
/* Retain a copy of the name used to open the file, for possible error reporting */
- strncpy(file->filename, name, sizeof(file->filename));
+ strncpy(file->filename, name, sizeof(file->filename) - 1);
file->filename[sizeof(file->filename) - 1] = '\0';
/* Get the flags for logging */
diff --git a/src/H5FDlog.h b/src/H5FDlog.h
index ae4e2d0..b4af205 100644
--- a/src/H5FDlog.h
+++ b/src/H5FDlog.h
@@ -11,12 +11,15 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
- * Purpose: The public header file for the log driver.
+ * Purpose: The public header file for the log virtual file driver (VFD)
*/
#ifndef H5FDlog_H
#define H5FDlog_H
-#define H5FD_LOG (H5FDperform_init(H5FD_log_init))
+/** Initializer for the log VFD */
+#define H5FD_LOG (H5FDperform_init(H5FD_log_init))
+
+/** Identifier for the log VFD */
#define H5FD_LOG_VALUE H5_VFD_LOG
/* Flags for H5Pset_fapl_log() */
@@ -62,6 +65,10 @@
extern "C" {
#endif
+/** @private
+ *
+ * \brief Private initializer for the log VFD
+ */
H5_DLL hid_t H5FD_log_init(void);
/**
diff --git a/src/H5FDmirror.h b/src/H5FDmirror.h
index b196b2b..6c98e1a 100644
--- a/src/H5FDmirror.h
+++ b/src/H5FDmirror.h
@@ -11,7 +11,7 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
- * Purpose: Public, shared definitions for Mirror VFD & remote Writer.
+ * Purpose: The public header file for the mirror virtual file driver (VFD)
*/
#ifndef H5FDmirror_H
@@ -19,7 +19,10 @@
#ifdef H5_HAVE_MIRROR_VFD
-#define H5FD_MIRROR (H5FDperform_init(H5FD_mirror_init))
+/** Initializer for the mirror VFD */
+#define H5FD_MIRROR (H5FDperform_init(H5FD_mirror_init))
+
+/** Identifier for the mirror VFD */
#define H5FD_MIRROR_VALUE H5_VFD_MIRROR
#ifdef __cplusplus
@@ -62,6 +65,10 @@ typedef struct H5FD_mirror_fapl_t {
char remote_ip[H5FD_MIRROR_MAX_IP_LEN + 1];
} H5FD_mirror_fapl_t;
+/** @private
+ *
+ * \brief Private initializer for the mirror VFD
+ */
H5_DLL hid_t H5FD_mirror_init(void);
/**
diff --git a/src/H5FDmpi.c b/src/H5FDmpi.c
index 127740e..f247c34 100644
--- a/src/H5FDmpi.c
+++ b/src/H5FDmpi.c
@@ -104,13 +104,12 @@ done:
} /* end H5FD_mpi_get_size() */
/*-------------------------------------------------------------------------
- * Function: H5FD_mpi_get_comm
+ * Function: H5FD_mpi_get_comm
*
- * Purpose: Retrieves the file's communicator
+ * Purpose: Retrieves the file's MPI_Comm communicator object
*
- * Return: Success: The communicator (non-negative)
- *
- * Failure: Negative
+ * Return: Success: The communicator object
+ * Failure: MPI_COMM_NULL
*
*-------------------------------------------------------------------------
*/
@@ -144,6 +143,45 @@ done:
} /* end H5FD_mpi_get_comm() */
/*-------------------------------------------------------------------------
+ * Function: H5FD_mpi_get_info
+ *
+ * Purpose: Retrieves the file's MPI_Info info object
+ *
+ * Return: Success: The info object
+ * Failure: MPI_INFO_NULL
+ *
+ *-------------------------------------------------------------------------
+ */
+MPI_Info
+H5FD_mpi_get_info(H5FD_t *file)
+{
+ const H5FD_class_t *cls;
+ uint64_t flags = H5FD_CTL_FAIL_IF_UNKNOWN_FLAG | H5FD_CTL_ROUTE_TO_TERMINAL_VFD_FLAG;
+ MPI_Info info = MPI_INFO_NULL;
+ void *info_ptr = (void *)(&info);
+ MPI_Info ret_value;
+
+ FUNC_ENTER_NOAPI(MPI_INFO_NULL)
+
+ assert(file);
+ cls = (const H5FD_class_t *)(file->cls);
+ assert(cls);
+ assert(cls->ctl); /* All MPI drivers must implement this */
+
+ /* Dispatch to driver */
+ if ((cls->ctl)(file, H5FD_CTL_GET_MPI_INFO_OPCODE, flags, NULL, &info_ptr) < 0)
+ HGOTO_ERROR(H5E_VFL, H5E_CANTGET, MPI_INFO_NULL, "driver get_info request failed");
+
+ if (info == MPI_INFO_NULL)
+ HGOTO_ERROR(H5E_VFL, H5E_CANTGET, MPI_INFO_NULL, "driver get_info request failed -- bad info object");
+
+ ret_value = info;
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_mpi_get_info() */
+
+/*-------------------------------------------------------------------------
* Function: H5FD_mpi_MPIOff_to_haddr
*
* Purpose: Convert an MPI_Offset value to haddr_t.
diff --git a/src/H5FDmpio.c b/src/H5FDmpio.c
index 7141550..8aae79e 100644
--- a/src/H5FDmpio.c
+++ b/src/H5FDmpio.c
@@ -106,7 +106,7 @@ static herr_t H5FD__mpio_ctl(H5FD_t *_file, uint64_t op_code, uint64_t flags, co
/* Other functions */
static herr_t H5FD__mpio_vector_build_types(uint32_t count, H5FD_mem_t types[], haddr_t addrs[],
size_t sizes[], H5_flexible_const_ptr_t bufs[],
- haddr_t *s_addrs[], size_t *s_sizes[],
+ haddr_t *s_addrs[], size_t *s_sizes[], uint32_t *s_sizes_len,
H5_flexible_const_ptr_t *s_bufs[], bool *vector_was_sorted,
MPI_Offset *mpi_off, H5_flexible_const_ptr_t *mpi_bufs_base,
int *size_i, MPI_Datatype *buf_type, bool *buf_type_created,
@@ -906,7 +906,7 @@ H5FD__mpio_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t H5_ATTR
/* copy over each hint */
for (i = 0; i < nkeys; i++) {
- char key[MPI_MAX_INFO_KEY], value[MPI_MAX_INFO_VAL];
+ char key[MPI_MAX_INFO_KEY], value[MPI_MAX_INFO_VAL + 1];
int valuelen, flag;
/* retrieve the nth hint */
@@ -916,7 +916,7 @@ H5FD__mpio_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t H5_ATTR
if (MPI_SUCCESS != (mpi_code = MPI_Info_get_valuelen(info_used, key, &valuelen, &flag)))
HMPI_GOTO_ERROR(NULL, "MPI_Info_get_valuelen failed", mpi_code)
/* retrieve the value of nth hint */
- if (MPI_SUCCESS != (mpi_code = MPI_Info_get(info_used, key, valuelen + 1, value, &flag)))
+ if (MPI_SUCCESS != (mpi_code = MPI_Info_get(info_used, key, valuelen, value, &flag)))
HMPI_GOTO_ERROR(NULL, "MPI_Info_get failed", mpi_code)
/* copy the hint into info */
@@ -1675,7 +1675,8 @@ done:
static herr_t
H5FD__mpio_vector_build_types(uint32_t count, H5FD_mem_t types[], haddr_t addrs[], size_t sizes[],
H5_flexible_const_ptr_t bufs[], haddr_t *s_addrs[], size_t *s_sizes[],
- H5_flexible_const_ptr_t *s_bufs[], bool *vector_was_sorted, MPI_Offset *mpi_off,
+ uint32_t *s_sizes_len, H5_flexible_const_ptr_t *s_bufs[],
+ bool *vector_was_sorted, MPI_Offset *mpi_off,
H5_flexible_const_ptr_t *mpi_bufs_base, int *size_i, MPI_Datatype *buf_type,
bool *buf_type_created, MPI_Datatype *file_type, bool *file_type_created,
char *unused)
@@ -1716,6 +1717,10 @@ H5FD__mpio_vector_build_types(uint32_t count, H5FD_mem_t types[], haddr_t addrs[
/* Get bio I/O transition point (may be lower than 2G for testing) */
bigio_count = H5_mpi_get_bigio_count();
+ /* Start with s_sizes_len at count */
+ if (s_sizes_len)
+ *s_sizes_len = count;
+
if (count == 1) {
/* Single block. Just use a series of MPI_BYTEs for the file view.
*/
@@ -1808,8 +1813,13 @@ H5FD__mpio_vector_build_types(uint32_t count, H5FD_mem_t types[], haddr_t addrs[
if (!fixed_size) {
if ((*s_sizes)[i] == 0) {
assert(vector_was_sorted);
+ assert(i > 0);
fixed_size = true;
size = sizes[i - 1];
+
+ /* Return the used length of the s_sizes buffer */
+ if (s_sizes_len)
+ *s_sizes_len = (uint32_t)i;
}
else {
size = (*s_sizes)[i];
@@ -2098,7 +2108,7 @@ H5FD__mpio_read_vector(H5FD_t *_file, hid_t H5_ATTR_UNUSED dxpl_id, uint32_t cou
if (xfer_mode == H5FD_MPIO_COLLECTIVE) {
/* Build MPI types, etc. */
if (H5FD__mpio_vector_build_types(count, types, addrs, sizes, (H5_flexible_const_ptr_t *)bufs,
- &s_addrs, &s_sizes, (H5_flexible_const_ptr_t **)&s_bufs,
+ &s_addrs, &s_sizes, NULL, (H5_flexible_const_ptr_t **)&s_bufs,
&vector_was_sorted, &mpi_off,
(H5_flexible_const_ptr_t *)&mpi_bufs_base, &size_i, &buf_type,
&buf_type_created, &file_type, &file_type_created, &unused) < 0)
@@ -2464,17 +2474,21 @@ H5FD__mpio_write_vector(H5FD_t *_file, hid_t H5_ATTR_UNUSED dxpl_id, uint32_t co
HGOTO_ERROR(H5E_VFL, H5E_CANTGET, FAIL, "can't get MPI-I/O transfer mode");
if (xfer_mode == H5FD_MPIO_COLLECTIVE) {
+ uint32_t s_sizes_len;
+
/* Build MPI types, etc. */
if (H5FD__mpio_vector_build_types(count, types, addrs, sizes, (H5_flexible_const_ptr_t *)bufs,
- &s_addrs, &s_sizes, (H5_flexible_const_ptr_t **)&s_bufs,
- &vector_was_sorted, &mpi_off,
+ &s_addrs, &s_sizes, &s_sizes_len,
+ (H5_flexible_const_ptr_t **)&s_bufs, &vector_was_sorted, &mpi_off,
(H5_flexible_const_ptr_t *)&mpi_bufs_base, &size_i, &buf_type,
&buf_type_created, &file_type, &file_type_created, &unused) < 0)
HGOTO_ERROR(H5E_VFL, H5E_CANTGET, FAIL, "can't build MPI datatypes for I/O");
- /* Compute max address written to */
+ /* Compute max address written to. Note s_sizes is indexed according to the length of that array as
+ * reported by H5FD__mpio_vector_build_types(), which may be shorter if using the compressed arrays
+ * feature. */
if (count > 0)
- max_addr = s_addrs[count - 1] + (haddr_t)(s_sizes[count - 1]);
+ max_addr = s_addrs[count - 1] + (haddr_t)(s_sizes[s_sizes_len - 1]);
/* free sorted vectors if they exist */
if (!vector_was_sorted) {
@@ -3795,6 +3809,7 @@ done:
* At present, the supported op codes are:
*
* H5FD_CTL_GET_MPI_COMMUNICATOR_OPCODE
+ * H5FD_CTL_GET_MPI_INFO_OPCODE
* H5FD_CTL_GET_MPI_RANK_OPCODE
* H5FD_CTL_GET_MPI_SIZE_OPCODE
* H5FD_CTL_GET_MPI_FILE_SYNC_OPCODE
@@ -3827,6 +3842,12 @@ H5FD__mpio_ctl(H5FD_t *_file, uint64_t op_code, uint64_t flags, const void H5_AT
**((MPI_Comm **)output) = file->comm;
break;
+ case H5FD_CTL_GET_MPI_INFO_OPCODE:
+ assert(output);
+ assert(*output);
+ **((MPI_Info **)output) = file->info;
+ break;
+
case H5FD_CTL_GET_MPI_RANK_OPCODE:
assert(output);
assert(*output);
diff --git a/src/H5FDmpio.h b/src/H5FDmpio.h
index 60deec2..5e7ecf3 100644
--- a/src/H5FDmpio.h
+++ b/src/H5FDmpio.h
@@ -11,35 +11,42 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
- * Purpose: The public header file for the mpio driver.
+ * Purpose: The public header file for the MPI-I/O (mpio) virtual file driver (VFD)
*/
#ifndef H5FDmpio_H
#define H5FDmpio_H
-/* Macros */
-
#ifdef H5_HAVE_PARALLEL
+
+/** Initializer for the mpio VFD */
#define H5FD_MPIO (H5FDperform_init(H5FD_mpio_init))
+
#else
+
+/** Initializer for the mpio VFD (disabled) */
#define H5FD_MPIO (H5I_INVALID_HID)
-#endif /* H5_HAVE_PARALLEL */
+
+#endif
#ifdef H5_HAVE_PARALLEL
-/*Turn on H5FDmpio_debug if H5F_DEBUG is on */
-#ifdef H5F_DEBUG
-#ifndef H5FDmpio_DEBUG
+
+#if defined(H5F_DEBUG) && !defined(H5FDmpio_DEBUG)
+/** Turn mpio VFD debugging on (requires H5F_DEBUG) */
#define H5FDmpio_DEBUG
#endif
-#endif
/* Global var whose value comes from environment variable */
/* (Defined in H5FDmpio.c) */
H5_DLLVAR hbool_t H5FD_mpi_opt_types_g;
-/* Function prototypes */
#ifdef __cplusplus
extern "C" {
#endif
+
+/** @private
+ *
+ * \brief Private initializer for the mpio VFD
+ */
H5_DLL hid_t H5FD_mpio_init(void);
/**
diff --git a/src/H5FDmulti.h b/src/H5FDmulti.h
index a85f2df..d89a3e2 100644
--- a/src/H5FDmulti.h
+++ b/src/H5FDmulti.h
@@ -11,16 +11,22 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
- * Purpose: The public header file for the "multi" driver.
+ * Purpose: The public header file for the multi virtual file driver (VFD)
*/
#ifndef H5FDmulti_H
#define H5FDmulti_H
+/** Initializer for the multi VFD */
#define H5FD_MULTI (H5FDperform_init(H5FD_multi_init))
#ifdef __cplusplus
extern "C" {
#endif
+
+/** @private
+ *
+ * \brief Private initializer for the multi VFD
+ */
H5_DLL hid_t H5FD_multi_init(void);
/**
diff --git a/src/H5FDonion.h b/src/H5FDonion.h
index 09b290e..4aaab6d 100644
--- a/src/H5FDonion.h
+++ b/src/H5FDonion.h
@@ -11,19 +11,18 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
- * Onion Virtual File Driver (VFD)
- *
- * Purpose: The public header file for the Onion VFD.
+ * Purpose: The public header file for the onion virtual file driver (VFD)
*/
#ifndef H5FDonion_H
#define H5FDonion_H
-#define H5FD_ONION (H5FDperform_init(H5FD_onion_init))
+/** Initializer for the onion VFD */
+#define H5FD_ONION (H5FDperform_init(H5FD_onion_init))
+
+/** Identifier for the onion VFD */
#define H5FD_ONION_VALUE H5_VFD_ONION
-/**
- * Current version of the onion VFD fapl info struct.
- */
+/** Current version of the onion VFD fapl info struct */
#define H5FD_ONION_FAPL_INFO_VERSION_CURR 1
#define H5FD_ONION_FAPL_INFO_CREATE_FLAG_ENABLE_PAGE_ALIGNMENT \
@@ -114,6 +113,10 @@ typedef struct H5FD_onion_fapl_info_t {
extern "C" {
#endif
+/** @private
+ *
+ * \brief Private initializer for the onion VFD
+ */
H5_DLL hid_t H5FD_onion_init(void);
/**
diff --git a/src/H5FDprivate.h b/src/H5FDprivate.h
index 5330077..2fe54a5 100644
--- a/src/H5FDprivate.h
+++ b/src/H5FDprivate.h
@@ -214,6 +214,7 @@ H5_DLL herr_t H5FD_get_mpio_atomicity(H5FD_t *file, bool *flag);
H5_DLL int H5FD_mpi_get_rank(H5FD_t *file);
H5_DLL int H5FD_mpi_get_size(H5FD_t *file);
H5_DLL MPI_Comm H5FD_mpi_get_comm(H5FD_t *file);
+H5_DLL MPI_Info H5FD_mpi_get_info(H5FD_t *file);
H5_DLL herr_t H5FD_mpi_get_file_sync_required(H5FD_t *file, bool *file_sync_required);
#endif /* H5_HAVE_PARALLEL */
diff --git a/src/H5FDpublic.h b/src/H5FDpublic.h
index 5f40bff..d8d77d6 100644
--- a/src/H5FDpublic.h
+++ b/src/H5FDpublic.h
@@ -179,6 +179,7 @@
#define H5FD_CTL_INVALID_OPCODE 0
#define H5FD_CTL_TEST_OPCODE 1
#define H5FD_CTL_GET_MPI_COMMUNICATOR_OPCODE 2
+#define H5FD_CTL_GET_MPI_INFO_OPCODE 9
#define H5FD_CTL_GET_MPI_RANK_OPCODE 3
#define H5FD_CTL_GET_MPI_SIZE_OPCODE 4
#define H5FD_CTL_MEM_ALLOC 5
diff --git a/src/H5FDros3.h b/src/H5FDros3.h
index ecd2678..217af2d 100644
--- a/src/H5FDros3.h
+++ b/src/H5FDros3.h
@@ -11,20 +11,24 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
- * Read-Only S3 Virtual File Driver (VFD)
- *
- * Purpose: The public header file for the ros3 driver.
+ * Purpose: The public header file for the read-only S3 (ros3) virtual file driver (VFD)
*/
#ifndef H5FDros3_H
#define H5FDros3_H
#ifdef H5_HAVE_ROS3_VFD
-#define H5FD_ROS3 (H5FDperform_init(H5FD_ros3_init))
+/** Initializer for the ros3 VFD */
+#define H5FD_ROS3 (H5FDperform_init(H5FD_ros3_init))
+
+/** Identifier for the ros3 VFD */
#define H5FD_ROS3_VALUE H5_VFD_ROS3
#else
+/** Initializer for the ros3 VFD (disabled) */
#define H5FD_ROS3 (H5I_INVALID_HID)
+
+/** Identifier for the ros3 VFD (disabled) */
#define H5FD_ROS3_VALUE H5_VFD_INVALID
-#endif /* H5_HAVE_ROS3_VFD */
+#endif
#ifdef H5_HAVE_ROS3_VFD
@@ -139,9 +143,9 @@ typedef struct H5FD_ros3_fapl_t {
extern "C" {
#endif
-/**
- * \brief Internal routine to initialize #H5FD_ROS3 driver. Not meant to be
- * called directly by an HDF5 application.
+/** @private
+ *
+ * \brief Private initializer for the ros3 VFD
*/
H5_DLL hid_t H5FD_ros3_init(void);
diff --git a/src/H5FDsec2.c b/src/H5FDsec2.c
index 2961684..15accf7 100644
--- a/src/H5FDsec2.c
+++ b/src/H5FDsec2.c
@@ -368,7 +368,7 @@ H5FD__sec2_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr
}
/* Retain a copy of the name used to open the file, for possible error reporting */
- strncpy(file->filename, name, sizeof(file->filename));
+ strncpy(file->filename, name, sizeof(file->filename) - 1);
file->filename[sizeof(file->filename) - 1] = '\0';
/* Check for non-default FAPL */
diff --git a/src/H5FDsec2.h b/src/H5FDsec2.h
index a2590ae..dd0a4d8 100644
--- a/src/H5FDsec2.h
+++ b/src/H5FDsec2.h
@@ -11,18 +11,26 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
- * Purpose: The public header file for the sec2 driver
+ * Purpose: The public header file for the POSOX I/O (sec2 - "POSIX section 2")
+ * virtual file driver (VFD)
*/
#ifndef H5FDsec2_H
#define H5FDsec2_H
-#define H5FD_SEC2 (H5FDperform_init(H5FD_sec2_init))
+/** Initializer for the sec2 VFD */
+#define H5FD_SEC2 (H5FDperform_init(H5FD_sec2_init))
+
+/** Identifier for the sec2 VFD */
#define H5FD_SEC2_VALUE H5_VFD_SEC2
#ifdef __cplusplus
extern "C" {
#endif
+/** @private
+ *
+ * \brief Private initializer for the sec2 VFD
+ */
H5_DLL hid_t H5FD_sec2_init(void);
/**
@@ -38,7 +46,6 @@ H5_DLL hid_t H5FD_sec2_init(void);
* #H5FD_SEC2 driver.
*
* \since 1.4.0
- *
*/
H5_DLL herr_t H5Pset_fapl_sec2(hid_t fapl_id);
diff --git a/src/H5FDsplitter.h b/src/H5FDsplitter.h
index c8751c8..99a471e 100644
--- a/src/H5FDsplitter.h
+++ b/src/H5FDsplitter.h
@@ -11,96 +11,103 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
- * Purpose: The public header file for the "splitter" driver.
+ * Purpose: The public header file for the splitter virtual file driver (VFD)
*/
#ifndef H5FDsplitter_H
#define H5FDsplitter_H
-#define H5FD_SPLITTER (H5FDperform_init(H5FD_splitter_init))
+/** Initializer for the splitter VFD */
+#define H5FD_SPLITTER (H5FDperform_init(H5FD_splitter_init))
+
+/** Identifier for the splitter VFD */
#define H5FD_SPLITTER_VALUE H5_VFD_SPLITTER
-/* The version of the H5FD_splitter_vfd_config_t structure used */
+/** The version of the H5FD_splitter_vfd_config_t structure used */
#define H5FD_CURR_SPLITTER_VFD_CONFIG_VERSION 1
-/* Maximum length of a filename/path string in the Write-Only channel,
+/**
+ * Maximum length of a filename/path string in the Write-Only channel,
* including the NULL-terminator.
*/
#define H5FD_SPLITTER_PATH_MAX 4096
-/* Semi-unique constant used to help identify structure pointers */
+/** Semi-unique constant used to help identify structure pointers */
#define H5FD_SPLITTER_MAGIC 0x2B916880
-/* ----------------------------------------------------------------------------
- * Structure: H5FD_spliiter_vfd_config_t
- *
- * One-stop shopping for configuring a Splitter VFD (rather than many
- * parameters passed into H5Pset/get functions).
- *
- * magic (int32_t)
- * Semi-unique number, used to sanity-check that a given pointer is
- * likely (or not) to be this structure type. MUST be first.
- * If magic is not H5FD_SPLITTER_MAGIC, the structure (and/or pointer to)
- * must be considered invalid.
- *
- * version (unsigned int)
- * Version number of this structure -- informs component membership.
- * If not H5FD_CURR_SPLITTER_VFD_CONFIG_VERSION, the structure (and/or
- * pointer to) must be considered invalid.
- *
- * rw_fapl_id (hid_t)
- * Library-given identification number of the Read/Write channel driver
- * File Access Property List.
- * The driver must support read/write access.
- * Must be set to H5P_DEFAULT or a valid FAPL ID.
- *
- * wo_fapl_id (hid_t)
- * Library-given identification number of the Read/Write channel driver
- * File Access Property List.
- * The driver feature flags must include H5FD_FEAT_DEFAULT_VFD_COMPAITBLE.
- * Must be set to H5P_DEFAULT or a valid FAPL ID.
- *
- * wo_file_path (char[H5FD_SPLITTER_PATH_MAX + 1])
- * String buffer for the Write-Only channel target file.
- * Must be null-terminated, cannot be empty.
- *
- * log_file_path (char[H5FD_SPLITTER_PATH_MAX + 1])
- * String buffer for the Splitter VFD logging output.
- * Must be null-terminated.
- * If null, no logfile is created.
- *
- * ignore_wo_errors (hbool_t)
- * Toggle flag for how judiciously to respond to errors on the Write-Only
- * channel.
- *
- * ----------------------------------------------------------------------------
+//! <!-- [H5FD_splitter_vfd_config_t_snip] -->
+/**
+ * Configuration options for setting up the Splitter VFD
*/
typedef struct H5FD_splitter_vfd_config_t {
- int32_t magic;
- unsigned int version;
- hid_t rw_fapl_id;
- hid_t wo_fapl_id;
- char wo_path[H5FD_SPLITTER_PATH_MAX + 1];
- char log_file_path[H5FD_SPLITTER_PATH_MAX + 1];
- hbool_t ignore_wo_errs;
+ int32_t magic; /**< Magic number to identify this struct. Must be \p H5FD_SPLITTER_MAGIC. */
+ unsigned int version; /**< Version number of this struct. Currently must be \p
+ H5FD_CURR_SPLITTER_VFD_CONFIG_VERSION. */
+ hid_t rw_fapl_id; /**< File-access property list for setting up the read/write channel. Can be \p
+ H5P_DEFAULT. */
+ hid_t wo_fapl_id; /**< File-access property list for setting up the read-only channel. The selected VFD
+ must support the \p H5FD_FEAT_DEFAULT_VFD_COMPATIBLE flag. Can be \p H5P_DEFAULT. */
+ char wo_path[H5FD_SPLITTER_PATH_MAX + 1]; /**< Path to the write-only file */
+ char log_file_path[H5FD_SPLITTER_PATH_MAX + 1]; /**< Path to the log file, which will be created on HDF5
+ file open (existing files will be clobbered). Can be
+ NULL, in which case no logging output is generated. */
+ hbool_t ignore_wo_errs; /**< Whether to ignore errors on the write-only channel */
} H5FD_splitter_vfd_config_t;
+//! <!-- [H5FD_splitter_vfd_config_t_snip] -->
#ifdef __cplusplus
extern "C" {
#endif
+
+/** @private
+ *
+ * \brief Private initializer for the splitter VFD
+ */
H5_DLL hid_t H5FD_splitter_init(void);
/**
* \ingroup FAPL
*
- * \todo Add missing documentation
+ * \brief Sets the file access property list to use the splitter driver
+ *
+ * \fapl_id
+ * \param[in] config_ptr Configuration options for the VFD
+ * \returns \herr_t
+ *
+ * \details H5Pset_fapl_splitter() sets the file access property list identifier,
+ * \p fapl_id, to use the splitter driver.
+ *
+ * The splitter VFD echoes file manipulation (e.g. create, truncate)
+ * and write calls to a second, write-only file.
+ *
+ * \note The splitter VFD should not be confused with the split VFD,
+ * which is a simplification of the multi VFD and creates separate
+ * files for metadata and data.
+ *
+ * \since 1.10.7, 1.12.1
*/
H5_DLL herr_t H5Pset_fapl_splitter(hid_t fapl_id, H5FD_splitter_vfd_config_t *config_ptr);
/**
* \ingroup FAPL
*
- * \todo Add missing documentation
+ * \brief Gets splitter driver properties from the the file access property list
+ *
+ * \fapl_id
+ * \param[out] config_ptr Configuration options for the VFD
+ * \returns \herr_t
+ *
+ * \details H5Pset_fapl_splitter() sets the file access property list identifier,
+ * \p fapl_id, to use the splitter driver.
+ *
+ * The splitter VFD echoes file manipulation (e.g. create, truncate)
+ * and write calls to a second file.
+ *
+ * \note The splitter VFD should not be confused with the split VFD,
+ * which is a simplification of the multi VFD and creates separate
+ * files for metadata and data.
+ *
+ * \since 1.10.7, 1.12.1
*/
H5_DLL herr_t H5Pget_fapl_splitter(hid_t fapl_id, H5FD_splitter_vfd_config_t *config_ptr);
diff --git a/src/H5FDstdio.h b/src/H5FDstdio.h
index e2e05a7..794fe31 100644
--- a/src/H5FDstdio.h
+++ b/src/H5FDstdio.h
@@ -11,20 +11,26 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
- * Purpose: The public header file for the C stdio driver
+ * Purpose: The public header file for the C stdio virtual file driver (VFD)
*/
#ifndef H5FDstdio_H
#define H5FDstdio_H
#include "H5Ipublic.h"
+/** Initializer for the stdio VFD */
#define H5FD_STDIO (H5FDperform_init(H5FD_stdio_init))
#ifdef __cplusplus
extern "C" {
#endif
+/** @private
+ *
+ * \brief Private initializer for the stdio VFD
+ */
H5_DLL hid_t H5FD_stdio_init(void);
+
/**
* \ingroup FAPL
*
@@ -34,7 +40,11 @@ H5_DLL hid_t H5FD_stdio_init(void);
* \returns \herr_t
*
* \details H5Pset_fapl_stdio() modifies the file access property list to use
- * the standard I/O driver, H5FDstdio().
+ * the stdio VFD, which uses I/O calls from stdio.h.
+ *
+ * \note This VFD was designed to be a "demo" VFD that shows how to write
+ * your own VFD. Most applications should not use this VFD and should instead
+ * use the POSIX I/O VFD (sec2).
*
* \since 1.4.0
*
diff --git a/src/H5FDsubfiling/H5FDsubfiling.c b/src/H5FDsubfiling/H5FDsubfiling.c
index a2daba0..461fa16 100644
--- a/src/H5FDsubfiling/H5FDsubfiling.c
+++ b/src/H5FDsubfiling/H5FDsubfiling.c
@@ -2551,6 +2551,12 @@ H5FD__subfiling_ctl(H5FD_t *_file, uint64_t op_code, uint64_t flags, const void
**((MPI_Comm **)output) = file->ext_comm;
break;
+ case H5FD_CTL_GET_MPI_INFO_OPCODE:
+ assert(output);
+ assert(*output);
+ **((MPI_Info **)output) = file->info;
+ break;
+
case H5FD_CTL_GET_MPI_RANK_OPCODE:
assert(output);
assert(*output);
diff --git a/src/H5FDwindows.h b/src/H5FDwindows.h
index 14f6985..673d1c9 100644
--- a/src/H5FDwindows.h
+++ b/src/H5FDwindows.h
@@ -11,11 +11,16 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
- * Purpose: The public header file for the Windows driver
+ * Purpose: The public header file for the Windows virtual file driver (VFD)
+ *
+ * This VFD uses no Win32 API calls directly (though it may be
+ * rewritten to do so in the future). It is currently defined to
+ * be the sec2 VFD.
*/
#ifndef H5FDwindows_H
#define H5FDwindows_H
+/** Initializer for the Windows VFD */
#define H5FD_WINDOWS (H5FD_sec2_init())
#ifdef __cplusplus
diff --git a/src/H5Fint.c b/src/H5Fint.c
index 4093b4b..8738026 100644
--- a/src/H5Fint.c
+++ b/src/H5Fint.c
@@ -410,11 +410,11 @@ H5F_get_access_plist(H5F_t *f, bool app_ref)
if (H5P_set(new_plist, H5F_ACS_MPI_PARAMS_COMM_NAME, &mpi_comm) < 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTSET, H5I_INVALID_HID, "can't set MPI communicator");
- /* Retrieve and set MPI info object */
- if (H5P_get(old_plist, H5F_ACS_MPI_PARAMS_INFO_NAME, &mpi_info) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTGET, H5I_INVALID_HID, "can't get MPI info object");
+ /* Retrieve and set MPI info */
+ if (MPI_INFO_NULL == (mpi_info = H5F_mpi_get_info(f)))
+ HGOTO_ERROR(H5E_FILE, H5E_CANTGET, H5I_INVALID_HID, "can't get MPI info");
if (H5P_set(new_plist, H5F_ACS_MPI_PARAMS_INFO_NAME, &mpi_info) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTSET, H5I_INVALID_HID, "can't set MPI info object");
+ HGOTO_ERROR(H5E_FILE, H5E_CANTSET, H5I_INVALID_HID, "can't set MPI info");
}
#endif /* H5_HAVE_PARALLEL */
if (H5P_set(new_plist, H5F_ACS_META_CACHE_INIT_IMAGE_CONFIG_NAME, &(f->shared->mdc_initCacheImageCfg)) <
diff --git a/src/H5Fmpi.c b/src/H5Fmpi.c
index 8a8fdc1..7a535e9 100644
--- a/src/H5Fmpi.c
+++ b/src/H5Fmpi.c
@@ -97,11 +97,10 @@ done:
/*-------------------------------------------------------------------------
* Function: H5F_mpi_get_comm
*
- * Purpose: Retrieves the file's communicator
+ * Purpose: Retrieves the file's MPI_Comm communicator object
*
- * Return: Success: The communicator (non-negative)
- *
- * Failure: Negative
+ * Return: Success: The communicator object
+ * Failure: MPI_COMM_NULL
*
*-------------------------------------------------------------------------
*/
@@ -123,6 +122,33 @@ done:
} /* end H5F_mpi_get_comm() */
/*-------------------------------------------------------------------------
+ * Function: H5F_mpi_get_info
+ *
+ * Purpose: Retrieves the file's MPI_Info info object
+ *
+ * Return: Success: The info object
+ * Failure: MPI_INFO_NULL
+ *
+ *-------------------------------------------------------------------------
+ */
+MPI_Info
+H5F_mpi_get_info(const H5F_t *f)
+{
+ MPI_Info ret_value = MPI_INFO_NULL;
+
+ FUNC_ENTER_NOAPI(MPI_INFO_NULL)
+
+ assert(f && f->shared);
+
+ /* Dispatch to driver */
+ if ((ret_value = H5FD_mpi_get_info(f->shared->lf)) == MPI_INFO_NULL)
+ HGOTO_ERROR(H5E_FILE, H5E_CANTGET, MPI_INFO_NULL, "driver get_info request failed");
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5F_mpi_get_info() */
+
+/*-------------------------------------------------------------------------
* Function: H5F_shared_mpi_get_size
*
* Purpose: Retrieves the size of an MPI process.
diff --git a/src/H5Fprivate.h b/src/H5Fprivate.h
index 9adbf3a..682e938 100644
--- a/src/H5Fprivate.h
+++ b/src/H5Fprivate.h
@@ -640,6 +640,7 @@ H5_DLL herr_t H5F_eoa_dirty(H5F_t *f);
#ifdef H5_HAVE_PARALLEL
H5_DLL int H5F_mpi_get_rank(const H5F_t *f);
H5_DLL MPI_Comm H5F_mpi_get_comm(const H5F_t *f);
+H5_DLL MPI_Info H5F_mpi_get_info(const H5F_t *f);
H5_DLL int H5F_shared_mpi_get_size(const H5F_shared_t *f_sh);
H5_DLL int H5F_mpi_get_size(const H5F_t *f);
H5_DLL herr_t H5F_mpi_retrieve_comm(hid_t loc_id, hid_t acspl_id, MPI_Comm *mpi_comm);
diff --git a/src/H5Smpio.c b/src/H5Smpio.c
index 1e0fef5..46e6c33 100644
--- a/src/H5Smpio.c
+++ b/src/H5Smpio.c
@@ -989,7 +989,7 @@ H5S__mpio_span_hyper_type(const H5S_t *space, size_t elmt_size, MPI_Datatype *ne
&type_list, 0, op_gen) < 0)
HGOTO_ERROR(H5E_DATASPACE, H5E_BADTYPE, FAIL, "couldn't obtain MPI derived data type");
if (MPI_SUCCESS != (mpi_code = MPI_Type_dup(span_type, new_type)))
- HMPI_GOTO_ERROR(FAIL, "MPI_Type_commit failed", mpi_code)
+ HMPI_GOTO_ERROR(FAIL, "MPI_Type_dup failed", mpi_code)
if (MPI_SUCCESS != (mpi_code = MPI_Type_commit(new_type)))
HMPI_GOTO_ERROR(FAIL, "MPI_Type_commit failed", mpi_code)
diff --git a/src/H5T.c b/src/H5T.c
index 2627a01..4a5c7cf 100644
--- a/src/H5T.c
+++ b/src/H5T.c
@@ -2500,7 +2500,7 @@ H5T__register(H5T_pers_t pers, const char *name, H5T_t *src, H5T_t *dst, H5T_con
H5T_g.asoft = na;
H5T_g.soft = x;
} /* end if */
- strncpy(H5T_g.soft[H5T_g.nsoft].name, name, (size_t)H5T_NAMELEN);
+ strncpy(H5T_g.soft[H5T_g.nsoft].name, name, (size_t)H5T_NAMELEN - 1);
H5T_g.soft[H5T_g.nsoft].name[H5T_NAMELEN - 1] = '\0';
H5T_g.soft[H5T_g.nsoft].src = src->shared->type;
H5T_g.soft[H5T_g.nsoft].dst = dst->shared->type;
@@ -2549,7 +2549,7 @@ H5T__register(H5T_pers_t pers, const char *name, H5T_t *src, H5T_t *dst, H5T_con
/* Create a new conversion path */
if (NULL == (new_path = H5FL_CALLOC(H5T_path_t)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
- strncpy(new_path->name, name, (size_t)H5T_NAMELEN);
+ strncpy(new_path->name, name, (size_t)H5T_NAMELEN - 1);
new_path->name[H5T_NAMELEN - 1] = '\0';
if (NULL == (new_path->src = H5T_copy(old_path->src, H5T_COPY_ALL)) ||
NULL == (new_path->dst = H5T_copy(old_path->dst, H5T_COPY_ALL)))
@@ -4952,7 +4952,7 @@ H5T__path_find_real(const H5T_t *src, const H5T_t *dst, const char *name, H5T_co
if (NULL == (path = H5FL_CALLOC(H5T_path_t)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for type conversion path");
if (name && *name) {
- strncpy(path->name, name, (size_t)H5T_NAMELEN);
+ strncpy(path->name, name, (size_t)H5T_NAMELEN - 1);
path->name[H5T_NAMELEN - 1] = '\0';
} /* end if */
else
diff --git a/src/H5Tinit_float.c b/src/H5Tinit_float.c
index 3b9e127..02bb3ba 100644
--- a/src/H5Tinit_float.c
+++ b/src/H5Tinit_float.c
@@ -51,19 +51,23 @@
* Function: DETECT_F
*
* Purpose: This macro takes a floating point type like `double' and
- * a base name like `natd' and detects byte order, mantissa
- * location, exponent location, sign bit location, presence or
- * absence of implicit mantissa bit, and exponent bias and
- * initializes a detected_t structure with those properties.
+ * detects byte order, mantissa location, exponent location,
+ * sign bit location, presence or absence of implicit mantissa
+ * bit, and exponent bias and initializes a detected_t structure
+ * with those properties.
+ *
+ * Note that these operations can raise floating-point
+ * exceptions and building with some compiler options
+ * (especially Fortran) can cause problems.
*-------------------------------------------------------------------------
*/
-#define DETECT_F(TYPE, VAR, INFO) \
+#define DETECT_F(TYPE, INFO) \
do { \
- TYPE _v1, _v2, _v3; \
- unsigned char _buf1[sizeof(TYPE)], _buf3[sizeof(TYPE)]; \
- unsigned char _pad_mask[sizeof(TYPE)]; \
- unsigned char _byte_mask; \
- int _i, _j, _last = (-1); \
+ TYPE _v1, _v2, _v3; \
+ uint8_t _buf1[sizeof(TYPE)], _buf3[sizeof(TYPE)]; \
+ uint8_t _pad_mask[sizeof(TYPE)]; \
+ uint8_t _byte_mask; \
+ int _i, _j, _last = -1; \
\
memset(&INFO, 0, sizeof(INFO)); \
INFO.size = sizeof(TYPE); \
@@ -81,7 +85,7 @@
_v1 = (TYPE)4.0L; \
H5MM_memcpy(_buf1, (const void *)&_v1, sizeof(TYPE)); \
for (_i = 0; _i < (int)sizeof(TYPE); _i++) \
- for (_byte_mask = (unsigned char)1; _byte_mask; _byte_mask = (unsigned char)(_byte_mask << 1)) { \
+ for (_byte_mask = (uint8_t)1; _byte_mask; _byte_mask = (uint8_t)(_byte_mask << 1)) { \
_buf1[_i] ^= _byte_mask; \
H5MM_memcpy((void *)&_v2, (const void *)_buf1, sizeof(TYPE)); \
H5_GCC_CLANG_DIAG_OFF("float-equal") \
@@ -118,7 +122,7 @@
_v1 = (TYPE)1.0L; \
_v2 = (TYPE)-1.0L; \
if (H5T__bit_cmp(sizeof(TYPE), INFO.perm, &_v1, &_v2, _pad_mask, &(INFO.sign)) < 0) \
- HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "failed to detect byte order"); \
+ HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "failed to determine sign bit"); \
\
/* Mantissa */ \
INFO.mpos = 0; \
@@ -126,12 +130,11 @@
_v1 = (TYPE)1.0L; \
_v2 = (TYPE)1.5L; \
if (H5T__bit_cmp(sizeof(TYPE), INFO.perm, &_v1, &_v2, _pad_mask, &(INFO.msize)) < 0) \
- HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "failed to detect byte order"); \
+ HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "failed to determine mantissa"); \
INFO.msize += 1 + (unsigned)(INFO.imp ? 0 : 1) - INFO.mpos; \
\
/* Exponent */ \
- INFO.epos = INFO.mpos + INFO.msize; \
- \
+ INFO.epos = INFO.mpos + INFO.msize; \
INFO.esize = INFO.sign - INFO.epos; \
\
_v1 = (TYPE)1.0L; \
@@ -456,17 +459,24 @@ H5T__set_precision(H5T_fpoint_det_t *d)
herr_t H5_NO_UBSAN
H5T__init_native_float_types(void)
{
+ fenv_t saved_fenv;
H5T_fpoint_det_t det;
H5T_t *dt = NULL;
herr_t ret_value = SUCCEED;
FUNC_ENTER_PACKAGE
+ /* Turn off floating-point exceptions while initializing to avoid
+ * tripping over signaling NaNs while looking at "don't care" bits.
+ */
+ if (feholdexcept(&saved_fenv) != 0)
+ HSYS_GOTO_ERROR(H5E_DATATYPE, H5E_CANTSET, FAIL, "can't save floating-point environment");
+
/* H5T_NATIVE_FLOAT */
/* Get the type's characteristics */
memset(&det, 0, sizeof(H5T_fpoint_det_t));
- DETECT_F(float, FLOAT, det);
+ DETECT_F(float, det);
/* Allocate and fill type structure */
if (NULL == (dt = H5T__alloc()))
@@ -497,7 +507,7 @@ H5T__init_native_float_types(void)
/* Get the type's characteristics */
memset(&det, 0, sizeof(H5T_fpoint_det_t));
- DETECT_F(double, DOUBLE, det);
+ DETECT_F(double, det);
/* Allocate and fill type structure */
if (NULL == (dt = H5T__alloc()))
@@ -528,7 +538,7 @@ H5T__init_native_float_types(void)
/* Get the type's characteristics */
memset(&det, 0, sizeof(H5T_fpoint_det_t));
- DETECT_F(long double, LDOUBLE, det);
+ DETECT_F(long double, det);
/* Allocate and fill type structure */
if (NULL == (dt = H5T__alloc()))
@@ -561,6 +571,14 @@ H5T__init_native_float_types(void)
H5T_native_order_g = det.order;
done:
+ /* Clear any FE_INVALID exceptions from NaN handling */
+ if (feclearexcept(FE_INVALID) != 0)
+ HSYS_GOTO_ERROR(H5E_DATATYPE, H5E_CANTSET, FAIL, "can't clear floating-point exceptions");
+
+ /* Restore the original environment */
+ if (feupdateenv(&saved_fenv) != 0)
+ HSYS_GOTO_ERROR(H5E_DATATYPE, H5E_CANTSET, FAIL, "can't restore floating-point environment");
+
if (ret_value < 0) {
if (dt != NULL) {
dt->shared = H5FL_FREE(H5T_shared_t, dt->shared);
diff --git a/src/H5Tvlen.c b/src/H5Tvlen.c
index 68087a8..651ff8f 100644
--- a/src/H5Tvlen.c
+++ b/src/H5Tvlen.c
@@ -503,7 +503,7 @@ H5T__vlen_mem_seq_write(H5VL_object_t H5_ATTR_UNUSED *file, const H5T_vlen_alloc
if (seq_len) {
size_t len = seq_len * base_size; /* Sequence size */
- /* Use the user's memory allocation routine is one is defined */
+ /* Use the user's memory allocation routine if one is defined */
if (vl_alloc_info->alloc_func != NULL) {
if (NULL == (vl.p = (vl_alloc_info->alloc_func)(len, vl_alloc_info->alloc_info)))
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTALLOC, FAIL,
diff --git a/src/H5Z.c b/src/H5Z.c
index b514f62..720aa43 100644
--- a/src/H5Z.c
+++ b/src/H5Z.c
@@ -485,19 +485,30 @@ done:
*-------------------------------------------------------------------------
*/
static int
-H5Z__check_unregister_group_cb(void *obj_ptr, hid_t H5_ATTR_UNUSED obj_id, void *key)
+H5Z__check_unregister_group_cb(void H5_ATTR_UNUSED *obj_ptr, hid_t obj_id, void *key)
{
- hid_t ocpl_id = -1;
- H5Z_object_t *object = (H5Z_object_t *)key;
- htri_t filter_in_pline = false;
- int ret_value = false; /* Return value */
+ hid_t ocpl_id = -1;
+ H5Z_object_t *object = (H5Z_object_t *)key;
+ H5VL_object_t *vol_obj; /* Object for loc_id */
+ H5VL_group_get_args_t vol_cb_args; /* Arguments to VOL callback */
+ htri_t filter_in_pline = false;
+ int ret_value = false; /* Return value */
FUNC_ENTER_PACKAGE
- assert(obj_ptr);
-
/* Get the group creation property */
- if ((ocpl_id = H5G_get_create_plist((H5G_t *)obj_ptr)) < 0)
+ if (NULL == (vol_obj = (H5VL_object_t *)H5I_object_verify(obj_id, H5I_GROUP)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid group identifier");
+
+ /* Set up VOL callback arguments */
+ vol_cb_args.op_type = H5VL_GROUP_GET_GCPL;
+ vol_cb_args.args.get_gcpl.gcpl_id = H5I_INVALID_HID;
+
+ /* Get the group creation property list */
+ if (H5VL_group_get(vol_obj, &vol_cb_args, H5P_DATASET_XFER_DEFAULT, H5_REQUEST_NULL) < 0)
+ HGOTO_ERROR(H5E_PLINE, H5E_CANTGET, H5I_INVALID_HID, "unable to get group creation properties");
+
+ if ((ocpl_id = vol_cb_args.args.get_gcpl.gcpl_id) < 0)
HGOTO_ERROR(H5E_PLINE, H5E_CANTGET, FAIL, "can't get group creation property list");
/* Check if the filter is in the group creation property list */
@@ -535,19 +546,30 @@ done:
*-------------------------------------------------------------------------
*/
static int
-H5Z__check_unregister_dset_cb(void *obj_ptr, hid_t H5_ATTR_UNUSED obj_id, void *key)
+H5Z__check_unregister_dset_cb(void H5_ATTR_UNUSED *obj_ptr, hid_t obj_id, void *key)
{
- hid_t ocpl_id = -1;
- H5Z_object_t *object = (H5Z_object_t *)key;
- htri_t filter_in_pline = false;
- int ret_value = false; /* Return value */
+ hid_t ocpl_id = -1;
+ H5Z_object_t *object = (H5Z_object_t *)key;
+ H5VL_object_t *vol_obj; /* Object for loc_id */
+ H5VL_dataset_get_args_t vol_cb_args; /* Arguments to VOL callback */
+ htri_t filter_in_pline = false;
+ int ret_value = false; /* Return value */
FUNC_ENTER_PACKAGE
- assert(obj_ptr);
-
/* Get the dataset creation property */
- if ((ocpl_id = H5D_get_create_plist((H5D_t *)obj_ptr)) < 0)
+ if (NULL == (vol_obj = (H5VL_object_t *)H5I_object_verify(obj_id, H5I_DATASET)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid dataset identifier");
+
+ /* Set up VOL callback arguments */
+ vol_cb_args.op_type = H5VL_DATASET_GET_DCPL;
+ vol_cb_args.args.get_dcpl.dcpl_id = H5I_INVALID_HID;
+
+ /* Get the dataset creation property list */
+ if (H5VL_dataset_get(vol_obj, &vol_cb_args, H5P_DATASET_XFER_DEFAULT, H5_REQUEST_NULL) < 0)
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, H5I_INVALID_HID, "unable to get dataset creation properties");
+
+ if ((ocpl_id = vol_cb_args.args.get_dcpl.dcpl_id) < 0)
HGOTO_ERROR(H5E_PLINE, H5E_CANTGET, FAIL, "can't get dataset creation property list");
/* Check if the filter is in the dataset creation property list */
@@ -581,51 +603,83 @@ done:
*-------------------------------------------------------------------------
*/
static int
-H5Z__flush_file_cb(void *obj_ptr, hid_t H5_ATTR_UNUSED obj_id, void H5_ATTR_PARALLEL_USED *key)
+H5Z__flush_file_cb(void H5_ATTR_UNUSED *obj_ptr, hid_t obj_id, void H5_ATTR_PARALLEL_USED *key)
{
- H5F_t *f = (H5F_t *)obj_ptr; /* File object for operations */
+
#ifdef H5_HAVE_PARALLEL
H5Z_object_t *object = (H5Z_object_t *)key;
-#endif /* H5_HAVE_PARALLEL */
- int ret_value = false; /* Return value */
+#endif /* H5_HAVE_PARALLEL */
+ int ret_value = false; /* Return value */
+ H5VL_file_specific_args_t vol_cb_args_specific; /* Arguments to VOL callback */
+ H5VL_object_t *vol_obj; /* File for file_id */
+ H5VL_file_get_args_t vol_cb_args; /* Arguments to VOL callback */
+ bool is_native_vol_obj = true;
+ unsigned int intent = 0;
FUNC_ENTER_PACKAGE
/* Sanity checks */
- assert(obj_ptr);
assert(key);
+ /* Get the internal file structure */
+ if (NULL == (vol_obj = (H5VL_object_t *)H5I_object(obj_id)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid file identifier");
+
+ /* Get intent */
+ vol_cb_args.op_type = H5VL_FILE_GET_INTENT;
+ vol_cb_args.args.get_intent.flags = &intent;
+
+ /* Get the flags */
+ if (H5VL_file_get(vol_obj, &vol_cb_args, H5P_DATASET_XFER_DEFAULT, H5_REQUEST_NULL) < 0)
+ HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "unable to get file's intent flags");
+
+ if (H5VL_object_is_native(vol_obj, &is_native_vol_obj) < 0)
+ HGOTO_ERROR(H5E_OHDR, H5E_CANTGET, H5I_INVALID_HID,
+ "can't determine if VOL object is native connector object");
+
/* Do a global flush if the file is opened for write */
- if (H5F_ACC_RDWR & H5F_INTENT(f)) {
+ if (H5F_ACC_RDWR & intent) {
#ifdef H5_HAVE_PARALLEL
- /* Check if MPIO driver is used */
- if (H5F_HAS_FEATURE(f, H5FD_FEAT_HAS_MPI)) {
- /* Sanity check for collectively calling H5Zunregister, if requested */
- /* (Sanity check assumes that a barrier on one file's comm
- * is sufficient (i.e. that there aren't different comms for
- * different files). -QAK, 2018/02/14)
- */
- if (H5_coll_api_sanity_check_g && !object->sanity_checked) {
- MPI_Comm mpi_comm; /* File's communicator */
+ /* Checking MPI flag requires native VOL */
+ if (is_native_vol_obj) {
+ H5F_t *f = (H5F_t *)obj_ptr; /* File object for native VOL operation */
+
+ /* Check if MPIO driver is used */
+ if (H5F_HAS_FEATURE(f, H5FD_FEAT_HAS_MPI)) {
- /* Retrieve the file communicator */
- if (MPI_COMM_NULL == (mpi_comm = H5F_mpi_get_comm(f)))
- HGOTO_ERROR(H5E_PLINE, H5E_CANTGET, FAIL, "can't get MPI communicator");
+ /* Sanity check for collectively calling H5Zunregister, if requested */
+ /* (Sanity check assumes that a barrier on one file's comm
+ * is sufficient (i.e. that there aren't different comms for
+ * different files). -QAK, 2018/02/14)
+ */
+ if (H5_coll_api_sanity_check_g && !object->sanity_checked) {
+ MPI_Comm mpi_comm; /* File's communicator */
- /* Issue the barrier */
- if (mpi_comm != MPI_COMM_NULL)
- MPI_Barrier(mpi_comm);
+ /* Retrieve the file communicator */
+ if (H5F_mpi_retrieve_comm(obj_id, H5P_DEFAULT, &mpi_comm) < 0)
+ HGOTO_ERROR(H5E_PLINE, H5E_CANTGET, FAIL, "can't get MPI communicator");
- /* Set the "sanity checked" flag */
- object->sanity_checked = true;
- } /* end if */
- } /* end if */
-#endif /* H5_HAVE_PARALLEL */
+ /* Issue the barrier */
+ if (mpi_comm != MPI_COMM_NULL)
+ MPI_Barrier(mpi_comm);
+
+ /* Set the "sanity checked" flag */
+ object->sanity_checked = true;
+ } /* end if */
+ } /* end if */
+ }
+#endif /* H5_HAVE_PARALLEL */
/* Call the flush routine for mounted file hierarchies */
- if (H5F_flush_mounts((H5F_t *)obj_ptr) < 0)
- HGOTO_ERROR(H5E_PLINE, H5E_CANTFLUSH, FAIL, "unable to flush file hierarchy");
+ vol_cb_args_specific.op_type = H5VL_FILE_FLUSH;
+ vol_cb_args_specific.args.flush.obj_type = H5I_FILE;
+ vol_cb_args_specific.args.flush.scope = H5F_SCOPE_GLOBAL;
+
+ /* Flush the object */
+ if (H5VL_file_specific(vol_obj, &vol_cb_args_specific, H5P_DATASET_XFER_DEFAULT, NULL) < 0)
+ HGOTO_ERROR(H5E_FILE, H5E_CANTFLUSH, FAIL, "unable to flush file hierarchy");
+
} /* end if */
done:
diff --git a/src/H5mpi.c b/src/H5mpi.c
index 2725ec5..cf7e33d 100644
--- a/src/H5mpi.c
+++ b/src/H5mpi.c
@@ -380,9 +380,9 @@ H5_mpi_info_cmp(MPI_Info info1, MPI_Info info2, int *result)
/* Allocate buffers for iteration */
if (NULL == (key = (char *)H5MM_malloc(MPI_MAX_INFO_KEY * sizeof(char))))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
- if (NULL == (value1 = (char *)H5MM_malloc(MPI_MAX_INFO_VAL * sizeof(char))))
+ if (NULL == (value1 = (char *)H5MM_malloc((MPI_MAX_INFO_VAL + 1) * sizeof(char))))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
- if (NULL == (value2 = (char *)H5MM_malloc(MPI_MAX_INFO_VAL * sizeof(char))))
+ if (NULL == (value2 = (char *)H5MM_malloc((MPI_MAX_INFO_VAL + 1) * sizeof(char))))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
/* Iterate over the keys, comparing them */
diff --git a/src/H5private.h b/src/H5private.h
index 14a0ac3..3aaa0d5 100644
--- a/src/H5private.h
+++ b/src/H5private.h
@@ -26,6 +26,7 @@
#include <ctype.h>
#include <errno.h>
#include <fcntl.h>
+#include <fenv.h>
#include <float.h>
#include <math.h>
#include <setjmp.h>
diff --git a/src/H5system.c b/src/H5system.c
index 30a89a1..be886ae 100644
--- a/src/H5system.c
+++ b/src/H5system.c
@@ -807,13 +807,12 @@ H5_nanosleep(uint64_t nanosec)
#ifdef H5_HAVE_WIN32_API
DWORD dwMilliseconds = (DWORD)ceil(nanosec / 1.0e6);
- DWORD ignore;
/* Windows can't sleep at a ns resolution. Best we can do is ~1 ms. We
* don't care about the return value since the second parameter
* (bAlertable) is false, so it will always be zero.
*/
- ignore = SleepEx(dwMilliseconds, false);
+ SleepEx(dwMilliseconds, false);
#else
diff --git a/test/API/CMakeLists.txt b/test/API/CMakeLists.txt
index e90a4c8..a758f7e 100644
--- a/test/API/CMakeLists.txt
+++ b/test/API/CMakeLists.txt
@@ -21,8 +21,8 @@ if (HDF5_TEST_API_ENABLE_ASYNC)
endif ()
configure_file(
- ${CMAKE_CURRENT_SOURCE_DIR}/H5_api_test_config.h.in
- ${HDF5_TEST_BINARY_DIR}/H5_api_test_config.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/H5_api_test_config.h.in
+ ${HDF5_TEST_BINARY_DIR}/H5_api_test_config.h
)
#------------------------------------------------------------------------------
@@ -37,20 +37,20 @@ endif ()
#------------------------------------------------------------------------------
set (HDF5_API_TESTS
- attribute
- dataset
- datatype
- file
- group
- link
- misc
- object
+ attribute
+ dataset
+ datatype
+ file
+ group
+ link
+ misc
+ object
)
if (HDF5_TEST_API_ENABLE_ASYNC)
set (HDF5_API_TESTS
- ${HDF5_API_TESTS}
- async
+ ${HDF5_API_TESTS}
+ async
)
endif ()
@@ -105,26 +105,25 @@ set (HDF5_API_TESTS_FILES
#-----------------------------------------------------------------------------
foreach (api_test ${HDF5_API_TESTS})
set (HDF5_API_TEST_SRCS
- ${HDF5_API_TEST_SRCS}
- ${CMAKE_CURRENT_SOURCE_DIR}/H5_api_${api_test}_test.c
+ ${HDF5_API_TEST_SRCS}
+ ${CMAKE_CURRENT_SOURCE_DIR}/H5_api_${api_test}_test.c
)
endforeach ()
set (HDF5_API_TEST_SRCS
- ${HDF5_API_TEST_SRCS}
- ${CMAKE_CURRENT_SOURCE_DIR}/H5_api_test.c
- ${HDF5_TEST_API_SRC_DIR}/H5_api_test_util.c
+ ${HDF5_API_TEST_SRCS}
+ ${CMAKE_CURRENT_SOURCE_DIR}/H5_api_test.c
+ ${HDF5_TEST_API_SRC_DIR}/H5_api_test_util.c
)
add_executable (h5_api_test ${HDF5_API_TEST_SRCS})
-target_include_directories (
- h5_api_test
- PRIVATE
- "${HDF5_SRC_INCLUDE_DIRS}"
- "${HDF5_TEST_SRC_DIR}"
- "${HDF5_TEST_API_SRC_DIR}"
- "${HDF5_SRC_BINARY_DIR}"
- "${HDF5_TEST_BINARY_DIR}"
+target_include_directories (h5_api_test
+ PRIVATE
+ "${HDF5_SRC_INCLUDE_DIRS}"
+ "${HDF5_TEST_SRC_DIR}"
+ "${HDF5_TEST_API_SRC_DIR}"
+ "${HDF5_SRC_BINARY_DIR}"
+ "${HDF5_TEST_BINARY_DIR}"
)
target_compile_options (
h5_api_test
@@ -138,24 +137,12 @@ target_compile_definitions (
)
if (NOT BUILD_SHARED_LIBS)
TARGET_C_PROPERTIES (h5_api_test STATIC)
- target_link_libraries (
- h5_api_test
- PRIVATE
- ${HDF5_TEST_LIB_TARGET}
- )
+ target_link_libraries (h5_api_test PRIVATE ${HDF5_TEST_LIB_TARGET})
else ()
TARGET_C_PROPERTIES (h5_api_test SHARED)
- target_link_libraries (
- h5_api_test
- PRIVATE
- ${HDF5_TEST_LIBSH_TARGET}
- )
+ target_link_libraries (h5_api_test PRIVATE ${HDF5_TEST_LIBSH_TARGET})
endif ()
-set_target_properties (
- h5_api_test
- PROPERTIES
- FOLDER test/API
-)
+set_target_properties (h5_api_test PROPERTIES FOLDER test/API)
# Add Target to clang-format
if (HDF5_ENABLE_FORMATTERS)
clang_format (HDF5_TEST_h5_api_test_FORMAT h5_api_test)
@@ -284,27 +271,29 @@ if (HDF5_TEST_SERIAL)
endif ()
if (HDF5_TEST_API_CLIENT_HELPER)
set (HDF5_TEST_API_DRIVER_EXTRA_FLAGS ${HDF5_TEST_API_DRIVER_EXTRA_FLAGS}
- --client-helper ${HDF5_TEST_API_CLIENT_HELPER}
+ --client-helper ${HDF5_TEST_API_CLIENT_HELPER}
)
endif ()
if (HDF5_TEST_API_CLIENT_INIT)
set (HDF5_TEST_API_DRIVER_EXTRA_FLAGS ${HDF5_TEST_API_DRIVER_EXTRA_FLAGS}
- --client-init ${HDF5_TEST_API_CLIENT_INIT}
+ --client-init ${HDF5_TEST_API_CLIENT_INIT}
)
endif ()
set (last_api_test "")
foreach (api_test ${HDF5_API_TESTS})
add_test (
- NAME "h5_api_test_${api_test}"
- COMMAND $<TARGET_FILE:h5_api_test_driver>
- --server ${HDF5_TEST_API_SERVER}
- --client $<TARGET_FILE:h5_api_test> "${api_test}"
- --serial
- ${HDF5_TEST_API_DRIVER_EXTRA_FLAGS}
+ NAME h5_api_test_${api_test}
+ COMMAND $<TARGET_FILE:h5_api_test_driver>
+ --server ${HDF5_TEST_API_SERVER}
+ --client $<TARGET_FILE:h5_api_test> ${api_test}
+ --serial
+ ${HDF5_TEST_API_DRIVER_EXTRA_FLAGS}
)
-
- set_tests_properties ("h5_api_test_${api_test}" PROPERTIES DEPENDS "${last_api_test}")
+ if ("h5_api_test_${api_test}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (h5_api_test_${api_test} PROPERTIES DISABLED true)
+ endif ()
+ set_tests_properties (h5_api_test_${api_test} PROPERTIES DEPENDS ${last_api_test})
set (last_api_test "h5_api_test_${api_test}")
endforeach ()
@@ -323,13 +312,16 @@ if (HDF5_TEST_SERIAL)
# Hook external tests to same test suite
foreach (ext_api_test ${HDF5_API_EXT_SERIAL_TESTS})
add_test (
- NAME "h5_api_ext_test_${ext_api_test}"
- COMMAND $<TARGET_FILE:h5_api_test_driver>
- --server ${HDF5_TEST_API_SERVER}
- --client $<TARGET_FILE:${ext_api_test}>
- --serial
- ${HDF5_TEST_API_DRIVER_EXTRA_FLAGS}
+ NAME h5_api_ext_test_${ext_api_test}
+ COMMAND $<TARGET_FILE:h5_api_test_driver>
+ --server ${HDF5_TEST_API_SERVER}
+ --client $<TARGET_FILE:${ext_api_test}>
+ --serial
+ ${HDF5_TEST_API_DRIVER_EXTRA_FLAGS}
)
+ if ("h5_api_ext_test_${ext_api_test}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (h5_api_ext_test_${ext_api_test} PROPERTIES DISABLED true)
+ endif ()
endforeach ()
# Add tests for each external VOL connector that was built
@@ -422,11 +414,13 @@ if (HDF5_TEST_SERIAL)
set (last_api_test "")
foreach (api_test ${HDF5_API_TESTS})
add_test (
- NAME "h5_api_test_${api_test}"
- COMMAND $<TARGET_FILE:h5_api_test> "${api_test}"
+ NAME h5_api_test_${api_test}
+ COMMAND $<TARGET_FILE:h5_api_test> ${api_test}
)
-
- set_tests_properties ("h5_api_test_${api_test}" PROPERTIES DEPENDS "${last_api_test}")
+ if ("h5_api_test_${api_test}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (h5_api_test_${api_test} PROPERTIES DISABLED true)
+ endif ()
+ set_tests_properties (h5_api_test_${api_test} PROPERTIES DEPENDS ${last_api_test})
set (last_api_test "h5_api_test_${api_test}")
endforeach ()
@@ -436,6 +430,9 @@ if (HDF5_TEST_SERIAL)
NAME "h5_api_test_${hdf5_test}"
COMMAND $<TARGET_FILE:h5_api_test_${hdf5_test}>
)
+ if ("h5_api_ext_test_${ext_api_test}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (h5_api_ext_test_${ext_api_test} PROPERTIES DISABLED true)
+ endif ()
endforeach ()
# Add tests for each external VOL connector that was built
diff --git a/test/API/H5_api_test.c b/test/API/H5_api_test.c
index 654eb40..ff7ede3 100644
--- a/test/API/H5_api_test.c
+++ b/test/API/H5_api_test.c
@@ -136,15 +136,6 @@ main(int argc, char **argv)
}
}
-#ifdef H5_HAVE_PARALLEL
- /* If HDF5 was built with parallel enabled, go ahead and call MPI_Init before
- * running these tests. Even though these are meant to be serial tests, they will
- * likely be run using mpirun (or similar) and we cannot necessarily expect HDF5 or
- * an HDF5 VOL connector to call MPI_Init.
- */
- MPI_Init(&argc, &argv);
-#endif
-
H5open();
n_tests_run_g = 0;
@@ -304,9 +295,5 @@ done:
H5close();
-#ifdef H5_HAVE_PARALLEL
- MPI_Finalize();
-#endif
-
exit(((err_occurred || n_tests_failed_g > 0) ? EXIT_FAILURE : EXIT_SUCCESS));
}
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 246f1df..34e6f29 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -27,6 +27,15 @@ set (TEST_LIB_HEADERS
${HDF5_TEST_SOURCE_DIR}/swmr_common.h
)
+#################################################################################
+# Set private compile-time definitions added when
+# compiling test source files
+#################################################################################
+set (HDF5_TEST_COMPILE_DEFS_PRIVATE
+ "$<$<CONFIG:Developer>:${HDF5_DEVELOPER_DEFS}>"
+ "$<$<BOOL:HDF5_TEST_API>:H5_HAVE_TEST_API>"
+)
+
if (BUILD_STATIC_LIBS)
add_library (${HDF5_TEST_LIB_TARGET} STATIC ${TEST_LIB_SOURCES} ${TEST_LIB_HEADERS})
target_include_directories (${HDF5_TEST_LIB_TARGET}
@@ -37,7 +46,7 @@ if (BUILD_STATIC_LIBS)
target_compile_definitions(${HDF5_TEST_LIB_TARGET}
PRIVATE
"H5_TEST_EXPRESS_LEVEL_DEFAULT=${H5_TEST_EXPRESS_LEVEL_DEFAULT}"
- "$<$<CONFIG:Developer>:${HDF5_DEVELOPER_DEFS}>"
+ "${HDF5_TEST_COMPILE_DEFS_PRIVATE}"
)
TARGET_C_PROPERTIES (${HDF5_TEST_LIB_TARGET} STATIC)
target_link_libraries (${HDF5_TEST_LIB_TARGET}
@@ -54,10 +63,8 @@ if (BUILD_STATIC_LIBS)
INSTALL_TARGET_PDB (${HDF5_TEST_LIB_TARGET} ${HDF5_INSTALL_LIB_DIR} libraries)
install (
- TARGETS
- ${HDF5_TEST_LIB_TARGET}
- EXPORT
- ${HDF5_EXPORTED_TARGETS}
+ TARGETS ${HDF5_TEST_LIB_TARGET}
+ EXPORT ${HDF5_EXPORTED_TARGETS}
LIBRARY DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT libraries
ARCHIVE DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT libraries
RUNTIME DESTINATION ${HDF5_INSTALL_BIN_DIR} COMPONENT libraries
@@ -75,11 +82,10 @@ if (BUILD_SHARED_LIBS)
)
target_compile_options(${HDF5_TEST_LIBSH_TARGET} PRIVATE "${HDF5_CMAKE_C_FLAGS}")
target_compile_definitions(${HDF5_TEST_LIBSH_TARGET}
- PUBLIC
- "H5_BUILT_AS_DYNAMIC_LIB"
+ PUBLIC "H5_BUILT_AS_DYNAMIC_LIB"
PRIVATE
"H5_TEST_EXPRESS_LEVEL_DEFAULT=${H5_TEST_EXPRESS_LEVEL_DEFAULT}"
- "$<$<CONFIG:Developer>:${HDF5_DEVELOPER_DEFS}>"
+ "${HDF5_TEST_COMPILE_DEFS_PRIVATE}"
)
TARGET_C_PROPERTIES (${HDF5_TEST_LIBSH_TARGET} SHARED)
target_link_libraries (${HDF5_TEST_LIBSH_TARGET}
@@ -96,10 +102,8 @@ if (BUILD_SHARED_LIBS)
INSTALL_TARGET_PDB (${HDF5_TEST_LIBSH_TARGET} ${HDF5_INSTALL_BIN_DIR} libraries)
install (
- TARGETS
- ${HDF5_TEST_LIBSH_TARGET}
- EXPORT
- ${HDF5_EXPORTED_TARGETS}
+ TARGETS ${HDF5_TEST_LIBSH_TARGET}
+ EXPORT ${HDF5_EXPORTED_TARGETS}
LIBRARY DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT libraries
ARCHIVE DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT libraries
RUNTIME DESTINATION ${HDF5_INSTALL_BIN_DIR} COMPONENT libraries
@@ -141,9 +145,9 @@ if (BUILD_SHARED_LIBS)
)
foreach (plugin_name ${FILTER_PLUGINS_FOR_DIR1})
- set (HDF5_TEST_PLUGIN_CORENAME "${plugin_name}")
- set (HDF5_TEST_PLUGIN_NAME "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_TEST_PLUGIN_CORENAME}")
- set (HDF5_TEST_PLUGIN_TARGET ${HDF5_TEST_PLUGIN_CORENAME})
+ set (HDF5_TEST_PLUGIN_CORENAME "${plugin_name}")
+ set (HDF5_TEST_PLUGIN_NAME "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_TEST_PLUGIN_CORENAME}")
+ set (HDF5_TEST_PLUGIN_TARGET ${HDF5_TEST_PLUGIN_CORENAME})
add_library (${HDF5_TEST_PLUGIN_TARGET} SHARED ${HDF5_TEST_SOURCE_DIR}/${plugin_name}.c)
target_include_directories (${HDF5_TEST_PLUGIN_TARGET} PRIVATE "${HDF5_SRC_INCLUDE_DIRS};${HDF5_SRC_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>")
@@ -173,9 +177,9 @@ if (BUILD_SHARED_LIBS)
endforeach ()
foreach (plugin_name ${FILTER_PLUGINS_FOR_DIR2})
- set (HDF5_TEST_PLUGIN_CORENAME "${plugin_name}")
- set (HDF5_TEST_PLUGIN_NAME "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_TEST_PLUGIN_CORENAME}")
- set (HDF5_TEST_PLUGIN_TARGET ${HDF5_TEST_PLUGIN_CORENAME})
+ set (HDF5_TEST_PLUGIN_CORENAME "${plugin_name}")
+ set (HDF5_TEST_PLUGIN_NAME "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_TEST_PLUGIN_CORENAME}")
+ set (HDF5_TEST_PLUGIN_TARGET ${HDF5_TEST_PLUGIN_CORENAME})
add_library (${HDF5_TEST_PLUGIN_TARGET} SHARED ${HDF5_TEST_SOURCE_DIR}/${plugin_name}.c)
target_include_directories (${HDF5_TEST_PLUGIN_TARGET} PRIVATE "${HDF5_SRC_INCLUDE_DIRS};${HDF5_SRC_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>")
@@ -217,9 +221,9 @@ if (BUILD_SHARED_LIBS)
)
foreach (vfd_lib ${VFD_PLUGIN_LIBS})
- set (HDF5_VFD_PLUGIN_LIB_CORENAME "${vfd_lib}")
- set (HDF5_VFD_PLUGIN_LIB_NAME "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_VFD_PLUGIN_LIB_CORENAME}")
- set (HDF5_VFD_PLUGIN_LIB_TARGET ${HDF5_VFD_PLUGIN_LIB_CORENAME})
+ set (HDF5_VFD_PLUGIN_LIB_CORENAME "${vfd_lib}")
+ set (HDF5_VFD_PLUGIN_LIB_NAME "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_VFD_PLUGIN_LIB_CORENAME}")
+ set (HDF5_VFD_PLUGIN_LIB_TARGET ${HDF5_VFD_PLUGIN_LIB_CORENAME})
add_library (${HDF5_VFD_PLUGIN_LIB_TARGET} SHARED ${HDF5_TEST_SOURCE_DIR}/${vfd_lib}.c)
target_include_directories (${HDF5_VFD_PLUGIN_LIB_TARGET} PRIVATE "${HDF5_SRC_INCLUDE_DIRS};${HDF5_SRC_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>")
@@ -261,9 +265,9 @@ if (BUILD_SHARED_LIBS)
)
foreach (vol_lib ${VOL_PLUGIN_LIBS})
- set (HDF5_VOL_PLUGIN_LIB_CORENAME "${vol_lib}")
- set (HDF5_VOL_PLUGIN_LIB_NAME "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_VOL_PLUGIN_LIB_CORENAME}")
- set (HDF5_VOL_PLUGIN_LIB_TARGET ${HDF5_VOL_PLUGIN_LIB_CORENAME})
+ set (HDF5_VOL_PLUGIN_LIB_CORENAME "${vol_lib}")
+ set (HDF5_VOL_PLUGIN_LIB_NAME "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_VOL_PLUGIN_LIB_CORENAME}")
+ set (HDF5_VOL_PLUGIN_LIB_TARGET ${HDF5_VOL_PLUGIN_LIB_CORENAME})
add_library (${HDF5_VOL_PLUGIN_LIB_TARGET} SHARED ${HDF5_TEST_SOURCE_DIR}/${vol_lib}.c)
target_include_directories (${HDF5_VOL_PLUGIN_LIB_TARGET} PRIVATE "${HDF5_SRC_INCLUDE_DIRS};${HDF5_SRC_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>")
@@ -431,10 +435,7 @@ macro (ADD_H5_EXE file)
add_executable (${file} ${HDF5_TEST_SOURCE_DIR}/${file}.c)
target_include_directories (${file} PRIVATE "${HDF5_SRC_INCLUDE_DIRS};${HDF5_SRC_BINARY_DIR};${HDF5_TEST_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>")
target_compile_options(${file} PRIVATE "${HDF5_CMAKE_C_FLAGS}")
- target_compile_definitions(${file}
- PRIVATE
- "$<$<CONFIG:Developer>:${HDF5_DEVELOPER_DEFS}>"
- )
+ target_compile_definitions(${file} PRIVATE "${HDF5_TEST_COMPILE_DEFS_PRIVATE}")
if (NOT BUILD_SHARED_LIBS)
TARGET_C_PROPERTIES (${file} STATIC)
target_link_libraries (${file} PRIVATE ${HDF5_TEST_LIB_TARGET})
@@ -475,10 +476,7 @@ endforeach ()
#-- Adding test for chunk_info
add_executable (chunk_info ${HDF5_TEST_SOURCE_DIR}/chunk_info.c)
target_compile_options(chunk_info PRIVATE "${HDF5_CMAKE_C_FLAGS}")
-target_compile_definitions(chunk_info
- PRIVATE
- "$<$<CONFIG:Developer>:${HDF5_DEVELOPER_DEFS}>"
-)
+target_compile_definitions(chunk_info PRIVATE "${HDF5_TEST_COMPILE_DEFS_PRIVATE}")
target_include_directories (chunk_info PRIVATE "${HDF5_SRC_INCLUDE_DIRS};${HDF5_SRC_BINARY_DIR};${HDF5_TEST_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>")
if (NOT BUILD_SHARED_LIBS)
TARGET_C_PROPERTIES (chunk_info STATIC)
@@ -499,10 +497,7 @@ endif ()
#-- Adding test for direct_chunk
add_executable (direct_chunk ${HDF5_TEST_SOURCE_DIR}/direct_chunk.c)
target_compile_options(direct_chunk PRIVATE "${HDF5_CMAKE_C_FLAGS}")
-target_compile_definitions(direct_chunk
- PRIVATE
- "$<$<CONFIG:Developer>:${HDF5_DEVELOPER_DEFS}>"
-)
+target_compile_definitions(direct_chunk PRIVATE "${HDF5_TEST_COMPILE_DEFS_PRIVATE}")
target_include_directories (direct_chunk PRIVATE "${HDF5_SRC_INCLUDE_DIRS};${HDF5_SRC_BINARY_DIR};${HDF5_TEST_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>")
if (NOT BUILD_SHARED_LIBS)
TARGET_C_PROPERTIES (direct_chunk STATIC)
@@ -524,10 +519,7 @@ endif ()
#-- Adding test for testhdf5
add_executable (testhdf5 ${testhdf5_SOURCES})
target_compile_options(testhdf5 PRIVATE "${HDF5_CMAKE_C_FLAGS}")
-target_compile_definitions(testhdf5
- PRIVATE
- "$<$<CONFIG:Developer>:${HDF5_DEVELOPER_DEFS}>"
-)
+target_compile_definitions(testhdf5 PRIVATE "${HDF5_TEST_COMPILE_DEFS_PRIVATE}")
target_include_directories (testhdf5 PRIVATE "${HDF5_SRC_INCLUDE_DIRS};${HDF5_SRC_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>")
if (NOT BUILD_SHARED_LIBS)
TARGET_C_PROPERTIES (testhdf5 STATIC)
@@ -548,10 +540,7 @@ endif ()
#-- Adding test for cache_image
add_executable (cache_image ${cache_image_SOURCES})
target_compile_options(cache_image PRIVATE "${HDF5_CMAKE_C_FLAGS}")
-target_compile_definitions(cache_image
- PRIVATE
- "$<$<CONFIG:Developer>:${HDF5_DEVELOPER_DEFS}>"
-)
+target_compile_definitions(cache_image PRIVATE "${HDF5_TEST_COMPILE_DEFS_PRIVATE}")
target_include_directories (cache_image PRIVATE "${HDF5_SRC_INCLUDE_DIRS};${HDF5_SRC_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>")
if (NOT BUILD_SHARED_LIBS)
TARGET_C_PROPERTIES (cache_image STATIC)
@@ -572,18 +561,13 @@ endif ()
#-- Adding test for ttsafe
add_executable (ttsafe ${ttsafe_SOURCES})
target_compile_options(ttsafe PRIVATE "${HDF5_CMAKE_C_FLAGS}")
-target_compile_definitions(ttsafe
- PRIVATE
- "$<$<CONFIG:Developer>:${HDF5_DEVELOPER_DEFS}>"
-)
+target_compile_definitions(ttsafe PRIVATE "${HDF5_TEST_COMPILE_DEFS_PRIVATE}")
target_include_directories (ttsafe PRIVATE "${HDF5_SRC_INCLUDE_DIRS};${HDF5_SRC_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>")
if (NOT BUILD_SHARED_LIBS)
TARGET_C_PROPERTIES (ttsafe STATIC)
target_link_libraries (ttsafe PRIVATE ${HDF5_TEST_LIB_TARGET})
if (NOT WIN32)
- target_link_libraries (ttsafe
- PRIVATE "$<$<BOOL:${HDF5_ENABLE_THREADSAFE}>:Threads::Threads>"
- )
+ target_link_libraries (ttsafe PRIVATE "$<$<BOOL:${HDF5_ENABLE_THREADSAFE}>:Threads::Threads>")
endif ()
else ()
TARGET_C_PROPERTIES (ttsafe SHARED)
@@ -602,18 +586,13 @@ endif ()
#-- Adding test for thread_id
add_executable (thread_id ${HDF5_TEST_SOURCE_DIR}/thread_id.c)
target_compile_options(thread_id PRIVATE "${HDF5_CMAKE_C_FLAGS}")
-target_compile_definitions(thread_id
- PRIVATE
- "$<$<CONFIG:Developer>:${HDF5_DEVELOPER_DEFS}>"
-)
+target_compile_definitions(thread_id PRIVATE "${HDF5_TEST_COMPILE_DEFS_PRIVATE}")
target_include_directories (thread_id PRIVATE "${HDF5_SRC_INCLUDE_DIRS};${HDF5_SRC_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>")
if (NOT BUILD_SHARED_LIBS)
TARGET_C_PROPERTIES (thread_id STATIC)
target_link_libraries (thread_id PRIVATE ${HDF5_TEST_LIB_TARGET})
if (NOT WIN32)
- target_link_libraries (thread_id
- PRIVATE "$<$<BOOL:${HDF5_ENABLE_THREADSAFE}>:Threads::Threads>"
- )
+ target_link_libraries (thread_id PRIVATE "$<$<BOOL:${HDF5_ENABLE_THREADSAFE}>:Threads::Threads>")
endif ()
else ()
TARGET_C_PROPERTIES (thread_id SHARED)
@@ -672,8 +651,7 @@ endforeach ()
#-- Adding test for libinfo
set (GREP_RUNNER ${PROJECT_BINARY_DIR}/GrepRunner.cmake)
-file (WRITE ${GREP_RUNNER}
- "file (STRINGS \${TEST_PROGRAM} TEST_RESULT REGEX \"SUMMARY OF THE HDF5 CONFIGURATION\")
+file (WRITE ${GREP_RUNNER} "file (STRINGS \${TEST_PROGRAM} TEST_RESULT REGEX \"SUMMARY OF THE HDF5 CONFIGURATION\")
if (NOT TEST_RESULT)
message (FATAL_ERROR \"Failed: The output: \${TEST_RESULT} of \${TEST_PROGRAM} did not contain SUMMARY OF THE HDF5 CONFIGURATION\")
else ()
@@ -712,10 +690,7 @@ macro (ADD_H5_VDS_EXE file)
add_executable (${file} ${HDF5_TEST_SOURCE_DIR}/${file}.c ${HDF5_TEST_SOURCE_DIR}/vds_swmr.h)
target_include_directories (${file} PRIVATE "${HDF5_SRC_INCLUDE_DIRS};${HDF5_BINARY_DIR};${HDF5_TEST_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>")
target_compile_options(${file} PRIVATE "${HDF5_CMAKE_C_FLAGS}")
- target_compile_definitions(${file}
- PRIVATE
- "$<$<CONFIG:Developer>:${HDF5_DEVELOPER_DEFS}>"
- )
+ target_compile_definitions(${file} PRIVATE "${HDF5_TEST_COMPILE_DEFS_PRIVATE}")
if (NOT BUILD_SHARED_LIBS)
TARGET_C_PROPERTIES (${file} STATIC)
target_link_libraries (${file} PRIVATE ${HDF5_TEST_LIB_TARGET})
@@ -742,10 +717,7 @@ endforeach ()
# and it can't be renamed (i.e., no <foo>-shared).
add_executable (accum_swmr_reader ${HDF5_TEST_SOURCE_DIR}/accum_swmr_reader.c)
target_compile_options(accum_swmr_reader PRIVATE "${HDF5_CMAKE_C_FLAGS}")
-target_compile_definitions(accum_swmr_reader
- PRIVATE
- "$<$<CONFIG:Developer>:${HDF5_DEVELOPER_DEFS}>"
-)
+target_compile_definitions(accum_swmr_reader PRIVATE "${HDF5_TEST_COMPILE_DEFS_PRIVATE}")
target_include_directories (accum_swmr_reader PRIVATE "${HDF5_SRC_INCLUDE_DIRS};${HDF5_SRC_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>")
if (NOT BUILD_SHARED_LIBS)
TARGET_C_PROPERTIES (accum_swmr_reader STATIC)
@@ -816,10 +788,7 @@ endif ()
set (use_append_chunk_SOURCES ${HDF5_TEST_SOURCE_DIR}/use_append_chunk.c ${HDF5_TEST_SOURCE_DIR}/use_common.c ${HDF5_TEST_SOURCE_DIR}/use.h)
add_executable (use_append_chunk ${use_append_chunk_SOURCES})
target_compile_options(use_append_chunk PRIVATE "${HDF5_CMAKE_C_FLAGS}")
-target_compile_definitions(use_append_chunk
- PRIVATE
- "$<$<CONFIG:Developer>:${HDF5_DEVELOPER_DEFS}>"
-)
+target_compile_definitions(use_append_chunk PRIVATE "${HDF5_TEST_COMPILE_DEFS_PRIVATE}")
target_include_directories (use_append_chunk PRIVATE "${HDF5_SRC_INCLUDE_DIRS};${HDF5_SRC_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>")
if (NOT BUILD_SHARED_LIBS)
TARGET_C_PROPERTIES (use_append_chunk STATIC)
@@ -841,10 +810,7 @@ if (HDF5_BUILD_UTILS) # requires mirror server
set (use_append_chunk_mirror_SOURCES ${HDF5_TEST_SOURCE_DIR}/use_append_chunk_mirror.c ${HDF5_TEST_SOURCE_DIR}/use_common.c ${HDF5_TEST_SOURCE_DIR}/use.h)
add_executable (use_append_chunk_mirror ${use_append_chunk_mirror_SOURCES})
target_compile_options(use_append_chunk_mirror PRIVATE "${HDF5_CMAKE_C_FLAGS}")
- target_compile_definitions(use_append_chunk_mirror
- PRIVATE
- "$<$<CONFIG:Developer>:${HDF5_DEVELOPER_DEFS}>"
- )
+ target_compile_definitions(use_append_chunk_mirror PRIVATE "${HDF5_TEST_COMPILE_DEFS_PRIVATE}")
target_include_directories (use_append_chunk_mirror PRIVATE "${HDF5_SRC_INCLUDE_DIRS};${HDF5_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>")
if (NOT BUILD_SHARED_LIBS)
TARGET_C_PROPERTIES (use_append_chunk_mirror STATIC)
@@ -866,10 +832,7 @@ endif ()
set (use_append_mchunks_SOURCES ${HDF5_TEST_SOURCE_DIR}/use_append_mchunks.c ${HDF5_TEST_SOURCE_DIR}/use_common.c ${HDF5_TEST_SOURCE_DIR}/use.h)
add_executable (use_append_mchunks ${use_append_mchunks_SOURCES})
target_compile_options(use_append_mchunks PRIVATE "${HDF5_CMAKE_C_FLAGS}")
-target_compile_definitions(use_append_mchunks
- PRIVATE
- "$<$<CONFIG:Developer>:${HDF5_DEVELOPER_DEFS}>"
-)
+target_compile_definitions(use_append_mchunks PRIVATE "${HDF5_TEST_COMPILE_DEFS_PRIVATE}")
target_include_directories (use_append_mchunks PRIVATE "${HDF5_SRC_INCLUDE_DIRS};${HDF5_SRC_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>")
if (NOT BUILD_SHARED_LIBS)
TARGET_C_PROPERTIES (use_append_mchunks STATIC)
@@ -890,10 +853,7 @@ endif ()
set (use_disable_mdc_flushes_SOURCES ${HDF5_TEST_SOURCE_DIR}/use_disable_mdc_flushes.c)
add_executable (use_disable_mdc_flushes ${use_disable_mdc_flushes_SOURCES})
target_compile_options(use_disable_mdc_flushes PRIVATE "${HDF5_CMAKE_C_FLAGS}")
-target_compile_definitions(use_disable_mdc_flushes
- PRIVATE
- "$<$<CONFIG:Developer>:${HDF5_DEVELOPER_DEFS}>"
-)
+target_compile_definitions(use_disable_mdc_flushes PRIVATE "${HDF5_TEST_COMPILE_DEFS_PRIVATE}")
target_include_directories (use_disable_mdc_flushes PRIVATE "${HDF5_SRC_INCLUDE_DIRS};${HDF5_SRC_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>")
if (NOT BUILD_SHARED_LIBS)
TARGET_C_PROPERTIES (use_disable_mdc_flushes STATIC)
diff --git a/test/CMakePassthroughVOLTests.cmake b/test/CMakePassthroughVOLTests.cmake
index 853e4b3..fbff51a 100644
--- a/test/CMakePassthroughVOLTests.cmake
+++ b/test/CMakePassthroughVOLTests.cmake
@@ -107,10 +107,14 @@ add_custom_target(HDF5_VOLTEST_LIB_files ALL COMMENT "Copying files needed by HD
ENVIRONMENT "srcdir=${HDF5_TEST_BINARY_DIR}/${volname}"
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/${volname}
)
+ if ("VOL-${volname}-${voltest}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (VOL-${volname}-${voltest} PROPERTIES DISABLED true)
+ endif ()
else ()
add_test (NAME VOL-${volname}-${voltest}
COMMAND ${CMAKE_COMMAND} -E echo "SKIP VOL-${volname}-${voltest}"
)
+ set_tests_properties (VOL-${volname}-${voltest} PROPERTIES DISABLED true)
endif ()
else ()
add_test (NAME VOL-${volname}-${voltest}
@@ -128,6 +132,9 @@ add_custom_target(HDF5_VOLTEST_LIB_files ALL COMMENT "Copying files needed by HD
ENVIRONMENT "srcdir=${HDF5_TEST_BINARY_DIR}/${volname}"
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/${volname}
)
+ if ("VOL-${volname}-${voltest}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (VOL-${volname}-${voltest} PROPERTIES DISABLED true)
+ endif ()
endif ()
else ()
add_test (NAME VOL-${volname}-${voltest}
@@ -145,6 +152,9 @@ add_custom_target(HDF5_VOLTEST_LIB_files ALL COMMENT "Copying files needed by HD
ENVIRONMENT "srcdir=${HDF5_TEST_BINARY_DIR}/${volname}"
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/${volname}
)
+ if ("VOL-${volname}-${voltest}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (VOL-${volname}-${voltest} PROPERTIES DISABLED true)
+ endif ()
endif ()
endmacro ()
@@ -165,6 +175,9 @@ add_custom_target(HDF5_VOLTEST_LIB_files ALL COMMENT "Copying files needed by HD
ENVIRONMENT "srcdir=${HDF5_TEST_BINARY_DIR}/${volname}"
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/${volname}
)
+ if ("VOL-${volname}-${voltest}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (VOL-${volname}-${voltest} PROPERTIES DISABLED true)
+ endif ()
endmacro ()
macro (ADD_VOL_TEST volname volinfo resultcode)
@@ -202,6 +215,9 @@ add_custom_target(HDF5_VOLTEST_LIB_files ALL COMMENT "Copying files needed by HD
ENVIRONMENT "srcdir=${HDF5_TEST_BINARY_DIR}/${volname}"
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/${volname}
)
+ if ("VOL-${volname}-fheap" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (VOL-${volname}-fheap PROPERTIES DISABLED true)
+ endif ()
endif ()
endmacro ()
diff --git a/test/CMakeTests.cmake b/test/CMakeTests.cmake
index d2acc35..296d430 100644
--- a/test/CMakeTests.cmake
+++ b/test/CMakeTests.cmake
@@ -215,18 +215,27 @@ set_tests_properties (H5TEST-testhdf5-base PROPERTIES
ENVIRONMENT "HDF5_ALARM_SECONDS=3600;srcdir=${HDF5_TEST_BINARY_DIR}/H5TEST"
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/H5TEST
)
+if ("H5TEST-testhdf5-base" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5TEST-testhdf5-base PROPERTIES DISABLED true)
+endif ()
add_test (NAME H5TEST-testhdf5-file COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:testhdf5> -o file)
set_tests_properties (H5TEST-testhdf5-file PROPERTIES
FIXTURES_REQUIRED clear_testhdf5
ENVIRONMENT "HDF5_ALARM_SECONDS=3600;srcdir=${HDF5_TEST_BINARY_DIR}/H5TEST"
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/H5TEST
)
+if ("H5TEST-testhdf5-file" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5TEST-testhdf5-file PROPERTIES DISABLED true)
+endif ()
add_test (NAME H5TEST-testhdf5-select COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:testhdf5> -o select)
set_tests_properties (H5TEST-testhdf5-select PROPERTIES
FIXTURES_REQUIRED clear_testhdf5
ENVIRONMENT "HDF5_ALARM_SECONDS=3600;srcdir=${HDF5_TEST_BINARY_DIR}/H5TEST"
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/H5TEST
)
+if ("H5TEST-testhdf5-select" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5TEST-testhdf5-select PROPERTIES DISABLED true)
+endif ()
##############################################################################
##############################################################################
@@ -367,6 +376,9 @@ foreach (h5_test ${H5_TESTS})
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/H5TEST
)
endif ()
+ if ("H5TEST-${h5_test}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5TEST-${h5_test} PROPERTIES DISABLED true)
+ endif ()
endif ()
endforeach ()
@@ -412,6 +424,9 @@ if (NOT CYGWIN)
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/H5TEST
)
set_tests_properties (H5TEST-cache PROPERTIES TIMEOUT ${CTEST_VERY_LONG_TIMEOUT})
+ if ("H5TEST-cache" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5TEST-cache PROPERTIES DISABLED true)
+ endif ()
endif ()
if (TEST_CACHE_IMAGE)
@@ -428,12 +443,15 @@ if (TEST_CACHE_IMAGE)
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/H5TEST
)
set_tests_properties (H5TEST-cache_image-clean-objects PROPERTIES FIXTURES_CLEANUP clear_cache_image)
- add_test (NAME H5TEST_cache_image COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:cache_image>)
+ add_test (NAME H5TEST-cache_image COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:cache_image>)
set_tests_properties (H5TEST-cache_image PROPERTIES
FIXTURES_REQUIRED clear_cache_image
ENVIRONMENT "srcdir=${HDF5_TEST_BINARY_DIR}/H5TEST"
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/H5TEST
)
+ if ("H5TEST-cache_image" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5TEST-cache_image PROPERTIES DISABLED true)
+ endif ()
endif ()
#-- Adding test for external_env
@@ -481,6 +499,9 @@ set_tests_properties (H5TEST-external_env PROPERTIES
ENVIRONMENT "srcdir=${HDF5_TEST_BINARY_DIR}/H5TEST"
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/H5TEST
)
+if ("H5TEST-external_env" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5TEST-external_env PROPERTIES DISABLED true)
+endif ()
#-- Adding test for vds_env
add_test (
@@ -513,6 +534,9 @@ set_tests_properties (H5TEST-vds_env PROPERTIES
ENVIRONMENT "srcdir=${HDF5_TEST_BINARY_DIR}/H5TEST"
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/H5TEST
)
+if ("H5TEST-vds_env" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5TEST-vds_env PROPERTIES DISABLED true)
+endif ()
#-- Adding test for flush1/2
set (FLUSH_CLEANFILES
@@ -554,6 +578,9 @@ set_tests_properties (H5TEST-flush1 PROPERTIES
ENVIRONMENT "srcdir=${HDF5_TEST_BINARY_DIR}/H5TEST"
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/H5TEST
)
+if ("H5TEST-flush1" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5TEST-flush1 PROPERTIES DISABLED true)
+endif ()
if (HDF5_ENABLE_USING_MEMCHECKER)
add_test (NAME H5TEST-flush2 COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:flush2>)
else ()
@@ -572,6 +599,9 @@ set_tests_properties (H5TEST-flush2 PROPERTIES
FIXTURES_REQUIRED clear_flush
DEPENDS H5TEST-flush1
)
+if ("H5TEST-flush2" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5TEST-flush2 PROPERTIES DISABLED true)
+endif ()
#-- Adding test for tcheck_version
add_test (NAME H5TEST-tcheck_version-major COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:tcheck_version> "-tM")
@@ -579,16 +609,25 @@ set_tests_properties (H5TEST-tcheck_version-major PROPERTIES
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/H5TEST
WILL_FAIL "true"
)
+if ("H5TEST-tcheck_version-major" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5TEST-tcheck_version-major PROPERTIES DISABLED true)
+endif ()
add_test (NAME H5TEST-tcheck_version-minor COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:tcheck_version> "-tm")
set_tests_properties (H5TEST-tcheck_version-minor PROPERTIES
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/H5TEST
WILL_FAIL "true"
)
+if ("H5TEST-tcheck_version-minor" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5TEST-tcheck_version-minor PROPERTIES DISABLED true)
+endif ()
# release + 1 should pass on non-develop branches
add_test (NAME H5TEST-tcheck_version-release COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:tcheck_version> "-tr")
set_tests_properties (H5TEST-tcheck_version-release PROPERTIES
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/H5TEST
)
+if ("H5TEST-tcheck_version-release" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5TEST-tcheck_version-release PROPERTIES DISABLED true)
+endif ()
##############################################################################
##############################################################################
@@ -641,6 +680,9 @@ set_tests_properties (H5TEST-filenotclosed PROPERTIES
ENVIRONMENT "srcdir=${HDF5_TEST_BINARY_DIR}/H5TEST"
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/H5TEST
)
+if ("H5TEST-filenotclosed" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5TEST-filenotclosed PROPERTIES DISABLED true)
+endif ()
#-- Adding test for del_many_dense_attrs
add_test (
@@ -661,6 +703,9 @@ set_tests_properties (H5TEST-del_many_dense_attrs PROPERTIES
ENVIRONMENT "srcdir=${HDF5_TEST_BINARY_DIR}/H5TEST"
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/H5TEST
)
+if ("H5TEST-del_many_dense_attrs" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5TEST-del_many_dense_attrs PROPERTIES DISABLED true)
+endif ()
#-- Adding test for err_compat
if (HDF5_ENABLE_DEPRECATED_SYMBOLS AND NOT MINGW)
@@ -698,6 +743,9 @@ else ()
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/H5TEST
)
endif ()
+if ("H5TEST-err_compat" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5TEST-err_compat PROPERTIES DISABLED true)
+endif ()
#-- Adding test for error_test
if (DEFAULT_API_VERSION MATCHES "v16" OR MINGW)
@@ -743,6 +791,9 @@ else ()
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/H5TEST
)
endif ()
+if ("H5TEST-error_test" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5TEST-error_test PROPERTIES DISABLED true)
+endif ()
#-- Adding test for links_env
add_test (NAME H5TEST-links_env-clear-objects
@@ -784,6 +835,9 @@ set_tests_properties (H5TEST-links_env PROPERTIES
ENVIRONMENT "srcdir=${HDF5_TEST_BINARY_DIR}/H5TEST;HDF5_EXT_PREFIX=.:tmp_links_env"
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/H5TEST
)
+if ("H5TEST-links_env" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5TEST-links_env PROPERTIES DISABLED true)
+endif ()
if (NOT BUILD_SHARED_LIBS)
#-- Adding test for libinfo
@@ -798,6 +852,9 @@ else ()
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/H5TEST
)
endif ()
+if ("H5TEST-testlibinfo" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5TEST-testlibinfo PROPERTIES DISABLED true)
+endif ()
##############################################################################
### F I L T E R P L U G I N T E S T S
@@ -816,6 +873,9 @@ if (BUILD_SHARED_LIBS)
ENVIRONMENT "HDF5_PLUGIN_PATH=${CMAKE_BINARY_DIR}/filter_plugin_dir1${CMAKE_SEP}${CMAKE_BINARY_DIR}/filter_plugin_dir2;srcdir=${HDF5_TEST_BINARY_DIR}"
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}
)
+ if ("H5PLUGIN-filter_plugin" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5PLUGIN-filter_plugin PROPERTIES DISABLED true)
+ endif ()
endif ()
option (TEST_SHELL_SCRIPTS "Enable shell script tests" ON)
@@ -871,6 +931,9 @@ if (ENABLE_EXTENDED_TESTS)
ENVIRONMENT "srcdir=${HDF5_TEST_BINARY_DIR}/H5TEST/flushrefresh_test"
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/H5TEST/flushrefresh_test
)
+ if ("H5TEST-testflushrefresh" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5TEST-testflushrefresh PROPERTIES DISABLED true)
+ endif ()
else ()
message (STATUS "Cannot execute TEST flushrefresh - perl not found")
endif ()
@@ -909,6 +972,9 @@ if (BUILD_SHARED_LIBS)
ENVIRONMENT "HDF5_PLUGIN_PATH=${CMAKE_BINARY_DIR}/null_vol_plugin_dir;srcdir=${HDF5_TEST_BINARY_DIR}"
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}
)
+ if ("H5PLUGIN-vol_plugin" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5PLUGIN-vol_plugin PROPERTIES DISABLED true)
+ endif ()
endif ()
if (HDF5_TEST_PASSTHROUGH_VOL)
diff --git a/test/CMakeVFDTests.cmake b/test/CMakeVFDTests.cmake
index ed7bd86..f2466ba 100644
--- a/test/CMakeVFDTests.cmake
+++ b/test/CMakeVFDTests.cmake
@@ -125,10 +125,14 @@ add_custom_target(HDF5_VFDTEST_LIB_files ALL COMMENT "Copying files needed by HD
ENVIRONMENT "srcdir=${HDF5_TEST_BINARY_DIR}/${vfdname}"
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/${vfdname}
)
+ if ("VFD-${vfdname}-${vfdtest}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (VFD-${vfdname}-${vfdtest} PROPERTIES DISABLED true)
+ endif ()
else ()
add_test (NAME VFD-${vfdname}-${vfdtest}
COMMAND ${CMAKE_COMMAND} -E echo "SKIP VFD-${vfdname}-${vfdtest}"
)
+ set_tests_properties (VFD-${vfdname}-${vfdtest} PROPERTIES DISABLED true)
endif ()
else ()
add_test (NAME VFD-${vfdname}-${vfdtest}
@@ -146,6 +150,9 @@ add_custom_target(HDF5_VFDTEST_LIB_files ALL COMMENT "Copying files needed by HD
ENVIRONMENT "srcdir=${HDF5_TEST_BINARY_DIR}/${vfdname}"
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/${vfdname}
)
+ if ("VFD-${vfdname}-${vfdtest}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (VFD-${vfdname}-${vfdtest} PROPERTIES DISABLED true)
+ endif ()
endif ()
else ()
add_test (NAME VFD-${vfdname}-${vfdtest}
@@ -163,6 +170,9 @@ add_custom_target(HDF5_VFDTEST_LIB_files ALL COMMENT "Copying files needed by HD
ENVIRONMENT "srcdir=${HDF5_TEST_BINARY_DIR}/${vfdname}"
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/${vfdname}
)
+ if ("VFD-${vfdname}-${vfdtest}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (VFD-${vfdname}-${vfdtest} PROPERTIES DISABLED true)
+ endif ()
endif ()
endmacro ()
@@ -183,6 +193,9 @@ add_custom_target(HDF5_VFDTEST_LIB_files ALL COMMENT "Copying files needed by HD
ENVIRONMENT "srcdir=${HDF5_TEST_BINARY_DIR}/${vfdname}"
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/${vfdname}
)
+ if ("VFD-${vfdname}-${vfdtest}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (VFD-${vfdname}-${vfdtest} PROPERTIES DISABLED true)
+ endif ()
endif ()
endmacro ()
@@ -228,6 +241,9 @@ add_custom_target(HDF5_VFDTEST_LIB_files ALL COMMENT "Copying files needed by HD
ENVIRONMENT "srcdir=${HDF5_TEST_BINARY_DIR}/${vfdname}"
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/${vfdname}
)
+ if ("VFD-${vfdname}-fheap" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (VFD-${vfdname}-fheap PROPERTIES DISABLED true)
+ endif ()
endif ()
endmacro ()
@@ -253,4 +269,7 @@ add_custom_target(HDF5_VFDTEST_LIB_files ALL COMMENT "Copying files needed by HD
ENVIRONMENT "HDF5_PLUGIN_PATH=${CMAKE_BINARY_DIR}/null_vfd_plugin_dir;srcdir=${HDF5_TEST_BINARY_DIR}"
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}
)
+ if ("H5PLUGIN-vfd_plugin" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5PLUGIN-vfd_plugin PROPERTIES DISABLED true)
+ endif ()
endif ()
diff --git a/test/ShellTests.cmake b/test/ShellTests.cmake
index 140da6f..118f301 100644
--- a/test/ShellTests.cmake
+++ b/test/ShellTests.cmake
@@ -104,20 +104,32 @@ elseif (UNIX)
ENVIRONMENT "LD_LIBRARY_PATH=$ENV{LD_LIBRARY_PATH}:${CMAKE_RUNTIME_OUTPUT_DIRECTORY}"
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/H5TEST
)
+ if ("H5SHELL-test_flush_refresh" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5SHELL-test_flush_refresh PROPERTIES DISABLED true)
+ endif ()
add_test (H5SHELL-test_use_cases ${SH_PROGRAM} ${HDF5_TEST_BINARY_DIR}/H5TEST/test_use_cases.sh)
set_tests_properties (H5SHELL-test_use_cases PROPERTIES
ENVIRONMENT "LD_LIBRARY_PATH=$ENV{LD_LIBRARY_PATH}:${CMAKE_RUNTIME_OUTPUT_DIRECTORY}"
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/H5TEST
)
+ if ("H5SHELL-test_use_cases" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5SHELL-test_use_cases PROPERTIES DISABLED true)
+ endif ()
add_test (H5SHELL-test_swmr ${SH_PROGRAM} ${HDF5_TEST_BINARY_DIR}/H5TEST/test_swmr.sh)
set_tests_properties (H5SHELL-test_swmr PROPERTIES
ENVIRONMENT "LD_LIBRARY_PATH=$ENV{LD_LIBRARY_PATH}:${CMAKE_RUNTIME_OUTPUT_DIRECTORY}"
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/H5TEST
)
+ if ("H5SHELL-test_swmr" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5SHELL-test_swmr PROPERTIES DISABLED true)
+ endif ()
add_test (H5SHELL-test_vds_swmr ${SH_PROGRAM} ${HDF5_TEST_BINARY_DIR}/H5TEST/test_vds_swmr.sh)
set_tests_properties (H5SHELL-test_vds_swmr PROPERTIES
ENVIRONMENT "LD_LIBRARY_PATH=$ENV{LD_LIBRARY_PATH}:${CMAKE_RUNTIME_OUTPUT_DIRECTORY}"
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/H5TEST
)
+ if ("H5SHELL-test_vds_swmr" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5SHELL-test_vds_swmr PROPERTIES DISABLED true)
+ endif ()
endif ()
endif ()
diff --git a/test/accum.c b/test/accum.c
index 5a19efe..9876998 100644
--- a/test/accum.c
+++ b/test/accum.c
@@ -2194,7 +2194,7 @@ test_swmr_write_big(bool newest_format)
ZeroMemory(&pi, sizeof(pi));
if (0 == CreateProcess(NULL, SWMR_READER, NULL, NULL, false, 0, NULL, NULL, &si, &pi)) {
- printf("CreateProcess failed (%d).\n", GetLastError());
+ printf("CreateProcess failed (%lu).\n", GetLastError());
FAIL_STACK_ERROR;
}
diff --git a/test/h5test.c b/test/h5test.c
index 0482088..824a9fe 100644
--- a/test/h5test.c
+++ b/test/h5test.c
@@ -456,7 +456,7 @@ h5_fixname_real(const char *base_name, hid_t fapl, const char *_suffix, char *fu
const char *suffix = _suffix;
size_t i, j;
hid_t driver = H5I_INVALID_HID;
- int isppdriver = 0; /* if the driver is MPI parallel */
+ bool isppdriver = false; /* if the driver is MPI parallel */
if (!base_name || !fullname || size < 1)
return NULL;
@@ -515,10 +515,8 @@ h5_fixname_real(const char *base_name, hid_t fapl, const char *_suffix, char *fu
}
}
- /* Must first check fapl is not H5P_DEFAULT (-1) because H5FD_XXX
- * could be of value -1 if it is not defined.
- */
- isppdriver = ((H5P_DEFAULT != fapl) || driver_env_var) && (H5FD_MPIO == driver);
+ if (h5_using_parallel_driver(fapl, &isppdriver) < 0)
+ return NULL;
/* Check HDF5_NOCLEANUP environment setting.
* (The #ifdef is needed to prevent compile failure in case MPI is not
@@ -863,22 +861,23 @@ h5_show_hostname(void)
WSADATA wsaData;
int err;
#endif
+#ifdef H5_HAVE_PARALLEL
+ int mpi_rank, mpi_initialized, mpi_finalized;
+#endif
/* try show the process or thread id in multiple processes cases*/
#ifdef H5_HAVE_PARALLEL
- {
- int mpi_rank, mpi_initialized, mpi_finalized;
-
- MPI_Initialized(&mpi_initialized);
- MPI_Finalized(&mpi_finalized);
+ MPI_Initialized(&mpi_initialized);
+ MPI_Finalized(&mpi_finalized);
- if (mpi_initialized && !mpi_finalized) {
- MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
- printf("MPI-process %d.", mpi_rank);
- }
- else
- printf("thread 0.");
+ if (mpi_initialized && !mpi_finalized) {
+ /* Prevent output here from getting mixed with later output */
+ MPI_Barrier(MPI_COMM_WORLD);
+ MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+ printf("MPI-process %d.", mpi_rank);
}
+ else
+ printf("thread 0.");
#else
printf("thread %" PRIu64 ".", H5TS_thread_id());
#endif
@@ -914,6 +913,11 @@ h5_show_hostname(void)
#ifdef H5_HAVE_WIN32_API
WSACleanup();
#endif
+#ifdef H5_HAVE_PARALLEL
+ /* Prevent output here from getting mixed with later output */
+ if (mpi_initialized && !mpi_finalized)
+ MPI_Barrier(MPI_COMM_WORLD);
+#endif
}
#ifdef H5_HAVE_PARALLEL
diff --git a/test/testframe.c b/test/testframe.c
index 2b65027..5cb25ed 100644
--- a/test/testframe.c
+++ b/test/testframe.c
@@ -155,35 +155,37 @@ TestUsage(void)
{
unsigned i;
- print_func("Usage: %s [-v[erbose] (l[ow]|m[edium]|h[igh]|0-9)] %s\n", TestProgName,
- (TestPrivateUsage ? "<extra options>" : ""));
- print_func(" [-[e]x[clude] name]+ \n");
- print_func(" [-o[nly] name]+ \n");
- print_func(" [-b[egin] name] \n");
- print_func(" [-s[ummary]] \n");
- print_func(" [-c[leanoff]] \n");
- print_func(" [-h[elp]] \n");
- print_func("\n\n");
- print_func("verbose controls the amount of information displayed\n");
- print_func("exclude to exclude tests by name\n");
- print_func("only to name tests which should be run\n");
- print_func("begin start at the name of the test given\n");
- print_func("summary prints a summary of test results at the end\n");
- print_func("cleanoff does not delete *.hdf files after execution of tests\n");
- print_func("help print out this information\n");
- if (TestPrivateUsage) {
- print_func("\nExtra options\n");
- TestPrivateUsage();
- }
- print_func("\n\n");
- print_func("This program currently tests the following: \n\n");
- print_func("%16s %s\n", "Name", "Description");
- print_func("%16s %s\n", "----", "-----------");
+ if (mpi_rank_framework_g == 0) {
+ print_func("Usage: %s [-v[erbose] (l[ow]|m[edium]|h[igh]|0-9)] %s\n", TestProgName,
+ (TestPrivateUsage ? "<extra options>" : ""));
+ print_func(" [-[e]x[clude] name]+ \n");
+ print_func(" [-o[nly] name]+ \n");
+ print_func(" [-b[egin] name] \n");
+ print_func(" [-s[ummary]] \n");
+ print_func(" [-c[leanoff]] \n");
+ print_func(" [-h[elp]] \n");
+ print_func("\n\n");
+ print_func("verbose controls the amount of information displayed\n");
+ print_func("exclude to exclude tests by name\n");
+ print_func("only to name tests which should be run\n");
+ print_func("begin start at the name of the test given\n");
+ print_func("summary prints a summary of test results at the end\n");
+ print_func("cleanoff does not delete *.hdf files after execution of tests\n");
+ print_func("help print out this information\n");
+ if (TestPrivateUsage) {
+ print_func("\nExtra options\n");
+ TestPrivateUsage();
+ }
+ print_func("\n\n");
+ print_func("This program currently tests the following: \n\n");
+ print_func("%16s %s\n", "Name", "Description");
+ print_func("%16s %s\n", "----", "-----------");
- for (i = 0; i < Index; i++)
- print_func("%16s %s\n", Test[i].Name, Test[i].Description);
+ for (i = 0; i < Index; i++)
+ print_func("%16s %s\n", Test[i].Name, Test[i].Description);
- print_func("\n\n");
+ print_func("\n\n");
+ }
}
/*
@@ -192,12 +194,14 @@ TestUsage(void)
void
TestInfo(const char *ProgName)
{
- unsigned major, minor, release;
+ if (mpi_rank_framework_g == 0) {
+ unsigned major, minor, release;
- H5get_libversion(&major, &minor, &release);
+ H5get_libversion(&major, &minor, &release);
- print_func("\nFor help use: %s -help\n", ProgName);
- print_func("Linked with hdf5 version %u.%u release %u\n", major, minor, release);
+ print_func("\nFor help use: %s -help\n", ProgName);
+ print_func("Linked with hdf5 version %u.%u release %u\n", major, minor, release);
+ }
}
/*
@@ -301,20 +305,24 @@ PerformTests(void)
for (Loop = 0; Loop < Index; Loop++)
if (Test[Loop].SkipFlag) {
- MESSAGE(2, ("Skipping -- %s (%s) \n", Test[Loop].Description, Test[Loop].Name));
+ if (mpi_rank_framework_g == 0)
+ MESSAGE(2, ("Skipping -- %s (%s) \n", Test[Loop].Description, Test[Loop].Name));
}
else {
if (mpi_rank_framework_g == 0)
MESSAGE(2, ("Testing -- %s (%s) \n", Test[Loop].Description, Test[Loop].Name));
- MESSAGE(5, ("===============================================\n"));
+ if (mpi_rank_framework_g == 0)
+ MESSAGE(5, ("===============================================\n"));
Test[Loop].NumErrors = num_errs;
Test_parameters = Test[Loop].Parameters;
TestAlarmOn();
Test[Loop].Call();
TestAlarmOff();
Test[Loop].NumErrors = num_errs - Test[Loop].NumErrors;
- MESSAGE(5, ("===============================================\n"));
- MESSAGE(5, ("There were %d errors detected.\n\n", (int)Test[Loop].NumErrors));
+ if (mpi_rank_framework_g == 0) {
+ MESSAGE(5, ("===============================================\n"));
+ MESSAGE(5, ("There were %d errors detected.\n\n", (int)Test[Loop].NumErrors));
+ }
}
Test_parameters = NULL; /* clear it. */
@@ -358,7 +366,8 @@ TestCleanup(void)
{
unsigned Loop;
- MESSAGE(2, ("\nCleaning Up temp files...\n\n"));
+ if (mpi_rank_framework_g == 0)
+ MESSAGE(2, ("\nCleaning Up temp files...\n\n"));
/* call individual cleanup routines in each source module */
for (Loop = 0; Loop < Index; Loop++)
@@ -619,7 +628,8 @@ SetTest(const char *testname, int action)
break;
default:
/* error */
- printf("*** ERROR: Unknown action (%d) for SetTest\n", action);
+ if (mpi_rank_framework_g == 0)
+ printf("*** ERROR: Unknown action (%d) for SetTest\n", action);
break;
}
}
diff --git a/testpar/API/CMakeLists.txt b/testpar/API/CMakeLists.txt
index 869a925..e9c7edd 100644
--- a/testpar/API/CMakeLists.txt
+++ b/testpar/API/CMakeLists.txt
@@ -94,7 +94,7 @@ target_compile_options (
target_compile_definitions (
h5_api_test_parallel
PRIVATE
- "$<$<CONFIG:Developer>:${HDF5_DEVELOPER_DEFS}>"
+ "${HDF5_TESTPAR_COMPILE_DEFS_PRIVATE}"
)
if (NOT BUILD_SHARED_LIBS)
TARGET_C_PROPERTIES (h5_api_test_parallel STATIC)
diff --git a/testpar/CMakeLists.txt b/testpar/CMakeLists.txt
index 7894cff..106f79e 100644
--- a/testpar/CMakeLists.txt
+++ b/testpar/CMakeLists.txt
@@ -21,13 +21,19 @@ set (testphdf5_SOURCES
${HDF5_TEST_PAR_SOURCE_DIR}/t_oflush.c
)
+#################################################################################
+# Set private compile-time definitions added when
+# compiling test source files
+#################################################################################
+set (HDF5_TESTPAR_COMPILE_DEFS_PRIVATE
+ "$<$<CONFIG:Developer>:${HDF5_DEVELOPER_DEFS}>"
+ "$<$<BOOL:HDF5_TEST_API>:H5_HAVE_TEST_API>"
+)
+
#-- Adding test for testhdf5
add_executable (testphdf5 ${testphdf5_SOURCES})
target_compile_options(testphdf5 PRIVATE "${HDF5_CMAKE_C_FLAGS}")
-target_compile_definitions(testphdf5
- PRIVATE
- "$<$<CONFIG:Developer>:${HDF5_DEVELOPER_DEFS}>"
-)
+target_compile_definitions(testphdf5 PRIVATE "${HDF5_TESTPAR_COMPILE_DEFS_PRIVATE}")
target_include_directories (testphdf5
PRIVATE "${HDF5_SRC_INCLUDE_DIRS};${HDF5_SRC_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>"
)
@@ -54,10 +60,7 @@ endif ()
macro (ADD_H5P_EXE file)
add_executable (${file} ${HDF5_TEST_PAR_SOURCE_DIR}/${file}.c)
target_compile_options(${file} PRIVATE "${HDF5_CMAKE_C_FLAGS}")
- target_compile_definitions(${file}
- PRIVATE
- "$<$<CONFIG:Developer>:${HDF5_DEVELOPER_DEFS}>"
- )
+ target_compile_definitions(${file} PRIVATE "${HDF5_TESTPAR_COMPILE_DEFS_PRIVATE}")
target_include_directories (${file}
PRIVATE "${HDF5_SRC_INCLUDE_DIRS};${HDF5_SRC_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>"
)
diff --git a/testpar/CMakeTests.cmake b/testpar/CMakeTests.cmake
index dfdde59..36a97ee 100644
--- a/testpar/CMakeTests.cmake
+++ b/testpar/CMakeTests.cmake
@@ -55,6 +55,9 @@ set_tests_properties (MPI_TEST_testphdf5 PROPERTIES
ENVIRONMENT "HDF5_ALARM_SECONDS=3600;srcdir=${HDF5_TEST_PAR_BINARY_DIR}"
WORKING_DIRECTORY ${HDF5_TEST_PAR_BINARY_DIR}
)
+if ("MPI_TEST_testphdf5" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (MPI_TEST_testphdf5 PROPERTIES DISABLED true)
+endif ()
if (last_test)
set_tests_properties (MPI_TEST_testphdf5 PROPERTIES DEPENDS ${last_test})
endif ()
@@ -68,6 +71,9 @@ foreach (skiptest ${SKIP_tests})
ENVIRONMENT "HDF5_ALARM_SECONDS=3600;srcdir=${HDF5_TEST_PAR_BINARY_DIR}"
WORKING_DIRECTORY ${HDF5_TEST_PAR_BINARY_DIR}
)
+ if ("MPI_TEST_testphdf5_${skiptest}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (MPI_TEST_testphdf5_${skiptest} PROPERTIES DISABLED true)
+ endif ()
if (last_test)
set_tests_properties (MPI_TEST_testphdf5_${skiptest} PROPERTIES DEPENDS ${last_test})
endif ()
@@ -131,6 +137,9 @@ foreach (h5_testp ${H5P_TESTS})
ENVIRONMENT "HDF5_ALARM_SECONDS=3600;srcdir=${HDF5_TEST_PAR_BINARY_DIR}"
WORKING_DIRECTORY ${HDF5_TEST_PAR_BINARY_DIR}
)
+ if ("MPI_TEST_${h5_testp}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (MPI_TEST_${h5_testp} PROPERTIES DISABLED true)
+ endif ()
if (last_test)
set_tests_properties (MPI_TEST_${h5_testp} PROPERTIES DEPENDS ${last_test})
endif ()
diff --git a/testpar/CMakeVFDTests.cmake b/testpar/CMakeVFDTests.cmake
index d630015..cdec5f7 100644
--- a/testpar/CMakeVFDTests.cmake
+++ b/testpar/CMakeVFDTests.cmake
@@ -47,6 +47,9 @@ macro (ADD_VFD_TEST vfdname resultcode)
ENVIRONMENT "srcdir=${HDF5_TEST_PAR_BINARY_DIR}/${vfdname}"
WORKING_DIRECTORY ${HDF5_TEST_PAR_BINARY_DIR}/${vfdname}
)
+ if ("MPI_TEST_VFD-${vfdname}-${h5_test}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (MPI_TEST_VFD-${vfdname}-${h5_test} PROPERTIES DISABLED true)
+ endif ()
endif ()
endforeach ()
if (NOT "t_pflush1" IN_LIST H5P_VFD_${vfdname}_TESTS_SKIP)
diff --git a/testpar/t_2Gio.c b/testpar/t_2Gio.c
index c2aac77..48abf8e 100644
--- a/testpar/t_2Gio.c
+++ b/testpar/t_2Gio.c
@@ -4291,9 +4291,10 @@ main(int argc, char **argv)
printf("2 GByte IO TESTS START\n");
printf("2 MPI ranks will run the tests...\n");
printf("===================================\n");
- h5_show_hostname();
}
+ h5_show_hostname();
+
if (H5dont_atexit() < 0) {
printf("Failed to turn off atexit processing. Continue.\n");
};
@@ -4345,8 +4346,7 @@ main(int argc, char **argv)
#endif /* H5_HAVE_FILTER_DEFLATE */
/* Display testing information */
- if (MAINPROCESS)
- TestInfo(argv[0]);
+ TestInfo(argv[0]);
/* setup file access property list */
fapl = H5Pcreate(H5P_FILE_ACCESS);
diff --git a/testpar/t_bigio.c b/testpar/t_bigio.c
index 2726f91..151cdad 100644
--- a/testpar/t_bigio.c
+++ b/testpar/t_bigio.c
@@ -1855,6 +1855,11 @@ main(int argc, char **argv)
hsize_t newsize = 1048576;
/* Set the bigio processing limit to be 'newsize' bytes */
hsize_t oldsize = H5_mpi_set_bigio_count(newsize);
+#ifdef H5_HAVE_TEST_API
+ int required = MPI_THREAD_MULTIPLE;
+ int provided;
+#endif
+ int mpi_code;
/* Having set the bigio handling to a size that is manageable,
* we'll set our 'bigcount' variable to be 2X that limit so
@@ -1864,9 +1869,37 @@ main(int argc, char **argv)
if (newsize != oldsize)
bigcount = newsize * 2;
- MPI_Init(&argc, &argv);
- MPI_Comm_size(MPI_COMM_WORLD, &mpi_size_g);
- MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank_g);
+#ifdef H5_HAVE_TEST_API
+ /* Attempt to initialize with MPI_THREAD_MULTIPLE if possible */
+ if (MPI_SUCCESS != (mpi_code = MPI_Init_thread(&argc, &argv, required, &provided))) {
+ printf("MPI_Init_thread failed with error code %d\n", mpi_code);
+ return -1;
+ }
+#else
+ if (MPI_SUCCESS != (mpi_code = MPI_Init(&argc, &argv))) {
+ printf("MPI_Init failed with error code %d\n", mpi_code);
+ return -1;
+ }
+#endif
+
+ if (MPI_SUCCESS != (mpi_code = MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank_g))) {
+ printf("MPI_Comm_rank failed with error code %d\n", mpi_code);
+ MPI_Finalize();
+ return -1;
+ }
+
+#ifdef H5_HAVE_TEST_API
+ /* Warn about missing MPI_THREAD_MULTIPLE support */
+ if ((provided < required) && MAIN_PROCESS)
+ printf("** MPI doesn't support MPI_Init_thread with MPI_THREAD_MULTIPLE **\n");
+#endif
+
+ if (MPI_SUCCESS != (mpi_code = MPI_Comm_size(MPI_COMM_WORLD, &mpi_size_g))) {
+ if (MAIN_PROCESS)
+ printf("MPI_Comm_size failed with error code %d\n", mpi_code);
+ MPI_Finalize();
+ return -1;
+ }
/* Attempt to turn off atexit post processing so that in case errors
* happen during the test and the process is aborted, it will not get
diff --git a/testpar/t_file.c b/testpar/t_file.c
index 700ccc2..8f8b291 100644
--- a/testpar/t_file.c
+++ b/testpar/t_file.c
@@ -1119,3 +1119,105 @@ test_evict_on_close_parallel_unsupp(void)
ret = H5Pclose(fapl_id);
VRFY((SUCCEED == ret), "H5Pclose");
}
+
+/*
+ * Verify that MPI I/O hints are preserved after closing the file access property list
+ * as described in issue #3025
+ * This is a test program from the user.
+ */
+void
+test_fapl_preserve_hints(void)
+{
+ const char *filename;
+ const char *key = "hdf_info_fapl";
+ const char *value = "xyz";
+ MPI_Info info_used = MPI_INFO_NULL;
+ MPI_Info info = MPI_INFO_NULL;
+ hid_t fid = H5I_INVALID_HID; /* HDF5 file ID */
+ hid_t fapl_id = H5I_INVALID_HID; /* File access plist */
+ char key_used[MPI_MAX_INFO_KEY + 1];
+ char *value_used = NULL;
+ bool same = false;
+ int flag = -1;
+ int nkeys_used;
+ int i;
+ int mpi_ret; /* MPI return value */
+ herr_t ret; /* Generic return value */
+
+ filename = (const char *)GetTestParameters();
+
+ value_used = malloc(MPI_MAX_INFO_VAL + 1);
+ VRFY(value_used, "malloc succeeded");
+
+ /* set up MPI parameters */
+ mpi_ret = MPI_Info_create(&info);
+ VRFY((mpi_ret >= 0), "MPI_Info_create succeeded");
+
+ mpi_ret = MPI_Info_set(info, key, value);
+ VRFY((mpi_ret == MPI_SUCCESS), "MPI_Info_set succeeded");
+
+ fapl_id = H5Pcreate(H5P_FILE_ACCESS);
+ VRFY((fapl_id != H5I_INVALID_HID), "H5Pcreate");
+
+ ret = H5Pset_fapl_mpio(fapl_id, MPI_COMM_WORLD, info);
+ VRFY((ret >= 0), "H5Pset_fapl_mpio");
+
+ fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
+ VRFY((fid != H5I_INVALID_HID), "H5Fcreate succeeded");
+
+ ret = H5Pclose(fapl_id);
+ VRFY((ret >= 0), "H5Pclose succeeded");
+
+ fapl_id = H5Fget_access_plist(fid);
+ VRFY((fapl_id != H5I_INVALID_HID), "H5Fget_access_plist succeeded");
+
+ ret = H5Pget_fapl_mpio(fapl_id, NULL, &info_used);
+ VRFY((ret >= 0), "H5Pget_fapl_mpio succeeded");
+
+ VRFY((info_used != MPI_INFO_NULL), "H5Pget_fapl_mpio");
+
+ mpi_ret = MPI_Info_get_nkeys(info_used, &nkeys_used);
+ VRFY((mpi_ret == MPI_SUCCESS), "MPI_Info_get_nkeys succeeded");
+
+ /* Loop over the # of keys */
+ for (i = 0; i < nkeys_used; i++) {
+
+ /* Memset the buffers to zero */
+ memset(key_used, 0, MPI_MAX_INFO_KEY + 1);
+ memset(value_used, 0, MPI_MAX_INFO_VAL + 1);
+
+ /* Get the nth key */
+ mpi_ret = MPI_Info_get_nthkey(info_used, i, key_used);
+ VRFY((mpi_ret == MPI_SUCCESS), "MPI_Info_get_nthkey succeeded");
+
+ if (!strcmp(key_used, key)) {
+ mpi_ret = MPI_Info_get(info_used, key_used, MPI_MAX_INFO_VAL, value_used, &flag);
+ VRFY((mpi_ret == MPI_SUCCESS), "MPI_Info_get succeeded");
+
+ if (!strcmp(value_used, value)) {
+
+ /* Both key_used and value_used are the same */
+ same = true;
+ break;
+ }
+ }
+ } /* end for */
+
+ VRFY((same == true), "key_used and value_used are the same");
+
+ ret = H5Pclose(fapl_id);
+ VRFY((ret >= 0), "H5Pclose succeeded");
+
+ ret = H5Fclose(fid);
+ VRFY((ret >= 0), "H5Fclose succeeded");
+
+ /* Free the MPI info object */
+ mpi_ret = MPI_Info_free(&info);
+ VRFY((mpi_ret >= 0), "MPI_Info_free succeeded");
+
+ mpi_ret = MPI_Info_free(&info_used);
+ VRFY((mpi_ret >= 0), "MPI_Info_free succeeded");
+
+ free(value_used);
+
+} /* end test_fapl_preserve_hints() */
diff --git a/testpar/t_filters_parallel.c b/testpar/t_filters_parallel.c
index 6c05408..f60431b 100644
--- a/testpar/t_filters_parallel.c
+++ b/testpar/t_filters_parallel.c
@@ -547,8 +547,9 @@ verify_chunk_opt_status(size_t num_dsets, test_mode_t test_mode, bool any_io, bo
/* Verify selection I/O mode on rank 0 */
if (mpi_rank == 0) {
- /* No actual I/O performed, only reported I/O will be from allocation, even if "no" datasets were
- * involved (num_dsets == 0 implies the call was expected to fail, but it fails after allocation).
+ /* No actual I/O performed, the only reported I/O will be from allocation which is vector I/O,
+ * even if "no" datasets were involved (num_dsets == 0 implies the call was expected to fail,
+ * but it fails after allocation).
* Also if the test mode is mixed filtered and unfiltered and the call did not fail, then there
* will always be an I/O callback made with raw data. This is because unfiltered datasets fall
* back to scalar I/O when mixed with filtered, and scalar I/O reports an I/O call was made even
@@ -557,9 +558,18 @@ verify_chunk_opt_status(size_t num_dsets, test_mode_t test_mode, bool any_io, bo
* filtered dataset with no selection. Vector I/O does report an I/O call was made if passed a raw
* data element of size 0, so this is consistent. */
if (!any_io) {
- if (did_alloc || (num_dsets > 0 && test_mode == USE_MULTIPLE_DATASETS_MIXED_FILTERED))
+ if (did_alloc && (num_dsets > 0 && test_mode == USE_MULTIPLE_DATASETS_MIXED_FILTERED)) {
+ VRFY((H5D_VECTOR_IO | H5D_SCALAR_IO) == actual_sel_io_mode_reduced,
+ "verified actual selection I/O mode was vector and scalar I/O");
+ }
+ else if (did_alloc) {
+ VRFY(H5D_VECTOR_IO == actual_sel_io_mode_reduced,
+ "verified actual selection I/O mode was vector I/O");
+ }
+ else if (num_dsets > 0 && test_mode == USE_MULTIPLE_DATASETS_MIXED_FILTERED) {
VRFY(H5D_SCALAR_IO == actual_sel_io_mode_reduced,
"verified actual selection I/O mode was scalar I/O");
+ }
else
VRFY(0 == actual_sel_io_mode_reduced,
"verified actual selection I/O mode was 0 (no I/O)");
@@ -588,19 +598,18 @@ verify_chunk_opt_status(size_t num_dsets, test_mode_t test_mode, bool any_io, bo
switch (test_mode) {
case USE_SINGLE_DATASET:
case USE_MULTIPLE_DATASETS:
- /* Collective case with only filtered datasets. If we performed allocation then there
- * should be scalar I/O for allocation in addition to vector I/O for the actual data.
- * If we're reading from an unallocated dataset then there should be no actual I/O.
- * Otherwise there should only be vector I/O. */
- if (did_alloc)
- VRFY((H5D_SCALAR_IO | H5D_VECTOR_IO) == actual_sel_io_mode_reduced,
- "verified actual selection I/O mode was scalar and vector I/O");
- else if (unalloc_read)
+ /* Collective case with only filtered datasets.
+ * If we're reading from an unallocated dataset then there
+ * should be no actual I/O.
+ * Otherwise, only vector I/O is reported whether or not
+ * allocation happened. */
+ if (unalloc_read)
VRFY(0 == actual_sel_io_mode_reduced,
"verified actual selection I/O mode was 0 (no I/O)");
- else
+ else { /* did_alloc || !unalloc_read */
VRFY(H5D_VECTOR_IO == actual_sel_io_mode_reduced,
"verified actual selection I/O mode was vector I/O");
+ }
break;
case USE_MULTIPLE_DATASETS_MIXED_FILTERED:
diff --git a/testpar/t_mpi.c b/testpar/t_mpi.c
index eff39d0..0f1e27b 100644
--- a/testpar/t_mpi.c
+++ b/testpar/t_mpi.c
@@ -53,14 +53,14 @@ test_mpio_overlap_writes(char *filename)
MPI_Offset mpi_off;
MPI_Status mpi_stat;
- if (VERBOSE_MED)
- printf("MPIO independent overlapping writes test on file %s\n", filename);
-
nerrs = 0;
/* set up MPI parameters */
MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+ if (VERBOSE_MED && MAINPROCESS)
+ printf("MPIO independent overlapping writes test on file %s\n", filename);
+
/* Need at least 2 processes */
if (mpi_size < 2) {
if (MAINPROCESS)
@@ -211,7 +211,7 @@ test_mpio_gb_file(char *filename)
MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
- if (VERBOSE_MED)
+ if (VERBOSE_MED && MAINPROCESS)
printf("MPI_Offset range test\n");
/* figure out the signness and sizeof MPI_Offset */
@@ -274,12 +274,13 @@ test_mpio_gb_file(char *filename)
/*
* Verify if we can write to a file of multiple GB sizes.
*/
- if (VERBOSE_MED)
+ if (VERBOSE_MED && MAINPROCESS)
printf("MPIO GB file test %s\n", filename);
if (sizeof_mpi_offset <= 4) {
- printf("Skipped GB file range test "
- "because MPI_Offset cannot support it\n");
+ if (MAINPROCESS)
+ printf("Skipped GB file range test "
+ "because MPI_Offset cannot support it\n");
}
else {
buf = (char *)malloc(MB);
@@ -294,7 +295,8 @@ test_mpio_gb_file(char *filename)
mrc = MPI_File_open(MPI_COMM_WORLD, filename, MPI_MODE_CREATE | MPI_MODE_RDWR, info, &fh);
VRFY((mrc == MPI_SUCCESS), "MPI_FILE_OPEN");
- printf("MPIO GB file write test %s\n", filename);
+ if (MAINPROCESS)
+ printf("MPIO GB file write test %s\n", filename);
/* instead of writing every bytes of the file, we will just write
* some data around the 2 and 4 GB boundaries. That should cover
@@ -333,7 +335,8 @@ test_mpio_gb_file(char *filename)
*/
/* open it again to verify the data written */
/* but only if there was no write errors */
- printf("MPIO GB file read test %s\n", filename);
+ if (MAINPROCESS)
+ printf("MPIO GB file read test %s\n", filename);
if (errors_sum(writerrs) > 0) {
printf("proc %d: Skip read test due to previous write errors\n", mpi_rank);
goto finish;
@@ -377,7 +380,8 @@ test_mpio_gb_file(char *filename)
mrc = MPI_Barrier(MPI_COMM_WORLD);
VRFY((mrc == MPI_SUCCESS), "Sync before leaving test");
- printf("Test if MPI_File_get_size works correctly with %s\n", filename);
+ if (MAINPROCESS)
+ printf("Test if MPI_File_get_size works correctly with %s\n", filename);
mrc = MPI_File_open(MPI_COMM_WORLD, filename, MPI_MODE_RDONLY, info, &fh);
VRFY((mrc == MPI_SUCCESS), "");
@@ -432,7 +436,6 @@ finish:
static int
test_mpio_1wMr(char *filename, int special_request)
{
- char hostname[128];
int mpi_size, mpi_rank;
MPI_File fh;
char mpi_err_str[MPI_MAX_ERROR_STRING];
@@ -456,19 +459,8 @@ test_mpio_1wMr(char *filename, int special_request)
}
/* show the hostname so that we can tell where the processes are running */
- if (VERBOSE_DEF) {
-#ifdef H5_HAVE_GETHOSTNAME
- if (gethostname(hostname, sizeof(hostname)) < 0) {
- printf("gethostname failed\n");
- hostname[0] = '\0';
- }
-#else
- printf("gethostname unavailable\n");
- hostname[0] = '\0';
-#endif
- PRINTID;
- printf("hostname=%s\n", hostname);
- }
+ if (VERBOSE_DEF)
+ h5_show_hostname();
/* Delete any old file in order to start anew. */
/* Must delete because MPI_File_open does not have a Truncate mode. */
@@ -1005,6 +997,10 @@ test_mpio_special_collective(char *filename)
static int
parse_options(int argc, char **argv)
{
+ int mpi_rank;
+
+ MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+
while (--argc) {
if (**(++argv) != '-') {
break;
@@ -1053,7 +1049,7 @@ parse_options(int argc, char **argv)
return (1);
}
H5Pclose(plist);
- if (VERBOSE_MED) {
+ if (VERBOSE_MED && MAINPROCESS) {
printf("Test filenames are:\n");
for (i = 0; i < n; i++)
printf(" %s\n", filenames[i]);
diff --git a/testpar/t_pflush2.c b/testpar/t_pflush2.c
index 95ad125..e1dce1b 100644
--- a/testpar/t_pflush2.c
+++ b/testpar/t_pflush2.c
@@ -20,7 +20,8 @@
#include "h5test.h"
-static const char *FILENAME[] = {"flush", "noflush", NULL};
+static const char *FLUSH_FILENAME[] = {"flush", NULL};
+static const char *NOFLUSH_FILENAME[] = {"noflush", NULL};
static int *data_g = NULL;
@@ -173,7 +174,7 @@ main(int argc, char *argv[])
goto error;
/* Check the case where the file was flushed */
- h5_fixname(FILENAME[0], fapl_id1, name, sizeof(name));
+ h5_fixname(FLUSH_FILENAME[0], fapl_id1, name, sizeof(name));
if (check_test_file(name, sizeof(name), fapl_id1)) {
H5_FAILED();
goto error;
@@ -190,7 +191,7 @@ main(int argc, char *argv[])
H5Eget_auto2(H5E_DEFAULT, &func, NULL);
H5Eset_auto2(H5E_DEFAULT, NULL, NULL);
- h5_fixname(FILENAME[1], fapl_id2, name, sizeof(name));
+ h5_fixname(NOFLUSH_FILENAME[0], fapl_id2, name, sizeof(name));
if (check_test_file(name, sizeof(name), fapl_id2)) {
if (mpi_rank == 0)
PASSED();
@@ -202,8 +203,8 @@ main(int argc, char *argv[])
H5Eset_auto2(H5E_DEFAULT, func, NULL);
- h5_clean_files(&FILENAME[0], fapl_id1);
- h5_clean_files(&FILENAME[1], fapl_id2);
+ h5_clean_files(FLUSH_FILENAME, fapl_id1);
+ h5_clean_files(NOFLUSH_FILENAME, fapl_id2);
if (data_g) {
free(data_g);
diff --git a/testpar/t_ph5basic.c b/testpar/t_ph5basic.c
index b627b7c..7fdefeb 100644
--- a/testpar/t_ph5basic.c
+++ b/testpar/t_ph5basic.c
@@ -177,3 +177,139 @@ test_fapl_mpio_dup(void)
VRFY((mrc == MPI_SUCCESS), "MPI_Info_free");
}
} /* end test_fapl_mpio_dup() */
+
+/*-------------------------------------------------------------------------
+ * Function: test_get_dxpl_mpio
+ *
+ * Purpose: Test that H5Pget_dxpl_mpio will properly return the data
+ * transfer mode of collective and independent I/O access
+ * after setting it and writing some data.
+ *
+ * Return: Success: None
+ * Failure: Abort
+ *-------------------------------------------------------------------------
+ */
+void
+test_get_dxpl_mpio(void)
+{
+ hid_t fid = H5I_INVALID_HID;
+ hid_t sid = H5I_INVALID_HID;
+ hid_t did = H5I_INVALID_HID;
+ hid_t fapl = H5I_INVALID_HID;
+ hid_t dxpl = H5I_INVALID_HID;
+ H5FD_mpio_xfer_t xfer_mode;
+ hsize_t dims[2] = {100, 100};
+ hsize_t i, j;
+ int *data = NULL;
+ int mpi_rank, mpi_size;
+ const char *filename;
+ herr_t ret;
+
+ if (VERBOSE_MED)
+ printf("Verify get_dxpl_mpio correctly gets the data transfer mode"
+ "set in the data transfer property list after a write\n");
+
+ /* Set up MPI for VRFY macro */
+ MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+ MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
+
+ /* Initialize data array */
+ data = malloc(100 * 100 * sizeof(*data));
+ VRFY((data != NULL), "Data buffer initialized properly");
+
+ /* Create parallel fapl */
+ fapl = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, FACC_MPIO);
+ VRFY((fapl >= 0), "Fapl creation succeeded");
+
+ /* Create a file */
+ filename = (const char *)GetTestParameters();
+ fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+ VRFY((fid >= 0), "H5Fcreate succeeded");
+
+ /* Create a dataset */
+ sid = H5Screate_simple(2, dims, NULL);
+ VRFY((sid >= 0), "H5Screate succeeded");
+ did = H5Dcreate2(fid, "dset", H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+ VRFY((did >= 0), "H5Dcreate2 succeeded");
+
+ /* Use collective I/O access */
+ dxpl = H5Pcreate(H5P_DATASET_XFER);
+ VRFY((dxpl >= 0), "H5Pcreate succeeded");
+ ret = H5Pset_dxpl_mpio(dxpl, H5FD_MPIO_COLLECTIVE);
+ VRFY((ret >= 0), "H5Pset_dxpl_mpio set to collective succeeded");
+
+ /* Write some data */
+ for (i = 0; i < dims[0]; i++)
+ for (j = 0; j < dims[1]; j++)
+ data[(i * 100) + j] = (int)(i + (i * j) + j);
+
+ ret = H5Dwrite(did, H5T_NATIVE_INT, sid, sid, dxpl, data);
+ VRFY((ret >= 0), "H5Dwrite succeeded");
+
+ /* Check to make sure the property is still correct */
+ ret = H5Pget_dxpl_mpio(dxpl, &xfer_mode);
+ VRFY((ret >= 0), "H5Pget_dxpl_mpio succeeded");
+ VRFY((xfer_mode == H5FD_MPIO_COLLECTIVE), "Xfer_mode retrieved"
+ " successfully");
+
+ /* Read the data */
+ ret = H5Dread(did, H5T_NATIVE_INT, sid, sid, dxpl, data);
+ VRFY((ret >= 0), "H5Dread succeeded");
+
+ /* Check to make sure the property is still correct */
+ ret = H5Pget_dxpl_mpio(dxpl, &xfer_mode);
+ VRFY((ret >= 0), "H5Pget_dxpl_mpio succeeded");
+ VRFY((xfer_mode == H5FD_MPIO_COLLECTIVE), "Xfer_mode retrieved"
+ " successfully");
+
+ /* Check it does nothing on receiving NULL */
+ ret = H5Pget_dxpl_mpio(dxpl, NULL);
+ VRFY((ret >= 0), "H5Pget_dxpl_mpio succeeded on NULL input");
+
+ /* Use independent I/O access */
+ ret = H5Pset_dxpl_mpio(dxpl, H5FD_MPIO_INDEPENDENT);
+ VRFY((ret >= 0), "H5Pset_dxpl_mpio set to independent succeeded");
+
+ /* Write some data */
+ for (i = 0; i < dims[0]; i++)
+ for (j = 0; j < dims[1]; j++)
+ data[(i * 100) + j] = (int)(i + (j * j) + i);
+
+ ret = H5Dwrite(did, H5T_NATIVE_INT, sid, sid, dxpl, data);
+ VRFY((ret >= 0), "H5Dwrite succeeded");
+
+ /* Check to make sure the property is still correct */
+ ret = H5Pget_dxpl_mpio(dxpl, &xfer_mode);
+ VRFY((ret >= 0), "H5Pget_dxpl_mpio succeeded");
+ VRFY((xfer_mode == H5FD_MPIO_INDEPENDENT), "Xfer_mode retrieved"
+ " successfully");
+
+ /* Read the data */
+ ret = H5Dread(did, H5T_NATIVE_INT, sid, sid, dxpl, data);
+ VRFY((ret >= 0), "H5Dread succeeded");
+
+ /* Check to make sure the property is still correct */
+ ret = H5Pget_dxpl_mpio(dxpl, &xfer_mode);
+ VRFY((ret >= 0), "H5Pget_dxpl_mpio succeeded");
+ VRFY((xfer_mode == H5FD_MPIO_INDEPENDENT), "Xfer_mode retrieved"
+ " successfully");
+
+ /* Close everything */
+ free(data);
+
+ ret = H5Pclose(fapl);
+ VRFY((ret >= 0), "H5Pclose succeeded");
+
+ ret = H5Pclose(dxpl);
+ VRFY((ret >= 0), "H5Pclose succeeded");
+
+ ret = H5Dclose(did);
+ VRFY((ret >= 0), "H5Dclose succeeded");
+
+ ret = H5Sclose(sid);
+ VRFY((ret >= 0), "H5Sclose succeeded");
+
+ ret = H5Fclose(fid);
+ VRFY((ret >= 0), "H5Fclose succeeded");
+
+} /* end test_get_dxpl_mpio() */
diff --git a/testpar/t_pshutdown.c b/testpar/t_pshutdown.c
index b0b5da7..5293d35 100644
--- a/testpar/t_pshutdown.c
+++ b/testpar/t_pshutdown.c
@@ -41,10 +41,43 @@ main(int argc, char **argv)
hsize_t stride[RANK];
hsize_t block[RANK];
DATATYPE *data_array = NULL; /* data buffer */
+ int mpi_code;
+#ifdef H5_HAVE_TEST_API
+ int required = MPI_THREAD_MULTIPLE;
+ int provided;
+#endif
+
+#ifdef H5_HAVE_TEST_API
+ /* Attempt to initialize with MPI_THREAD_MULTIPLE if possible */
+ if (MPI_SUCCESS != (mpi_code = MPI_Init_thread(&argc, &argv, required, &provided))) {
+ printf("MPI_Init_thread failed with error code %d\n", mpi_code);
+ return -1;
+ }
+#else
+ if (MPI_SUCCESS != (mpi_code = MPI_Init(&argc, &argv))) {
+ printf("MPI_Init failed with error code %d\n", mpi_code);
+ return -1;
+ }
+#endif
- MPI_Init(&argc, &argv);
- MPI_Comm_size(comm, &mpi_size);
- MPI_Comm_rank(comm, &mpi_rank);
+ if (MPI_SUCCESS != (mpi_code = MPI_Comm_rank(comm, &mpi_rank))) {
+ printf("MPI_Comm_rank failed with error code %d\n", mpi_code);
+ MPI_Finalize();
+ return -1;
+ }
+
+#ifdef H5_HAVE_TEST_API
+ /* Warn about missing MPI_THREAD_MULTIPLE support */
+ if ((provided < required) && MAINPROCESS)
+ printf("** MPI doesn't support MPI_Init_thread with MPI_THREAD_MULTIPLE **\n");
+#endif
+
+ if (MPI_SUCCESS != (mpi_code = MPI_Comm_size(comm, &mpi_size))) {
+ if (MAINPROCESS)
+ printf("MPI_Comm_size failed with error code %d\n", mpi_code);
+ MPI_Finalize();
+ return -1;
+ }
if (MAINPROCESS)
TESTING("proper shutdown of HDF5 library");
diff --git a/testpar/t_shapesame.c b/testpar/t_shapesame.c
index 98e3077..e2112d5 100644
--- a/testpar/t_shapesame.c
+++ b/testpar/t_shapesame.c
@@ -4089,7 +4089,8 @@ parse_options(int argc, char **argv)
case 'h': /* print help message--return with nerrors set */
return (1);
default:
- printf("Illegal option(%s)\n", *argv);
+ if (MAINPROCESS)
+ printf("Illegal option(%s)\n", *argv);
nerrors++;
return (1);
}
@@ -4098,12 +4099,14 @@ parse_options(int argc, char **argv)
/* check validity of dimension and chunk sizes */
if (dim0 <= 0 || dim1 <= 0) {
- printf("Illegal dim sizes (%d, %d)\n", dim0, dim1);
+ if (MAINPROCESS)
+ printf("Illegal dim sizes (%d, %d)\n", dim0, dim1);
nerrors++;
return (1);
}
if (chunkdim0 <= 0 || chunkdim1 <= 0) {
- printf("Illegal chunkdim sizes (%d, %d)\n", chunkdim0, chunkdim1);
+ if (MAINPROCESS)
+ printf("Illegal chunkdim sizes (%d, %d)\n", chunkdim0, chunkdim1);
nerrors++;
return (1);
}
@@ -4128,9 +4131,11 @@ parse_options(int argc, char **argv)
nerrors++;
return (1);
}
- printf("Test filenames are:\n");
- for (i = 0; i < n; i++)
- printf(" %s\n", filenames[i]);
+ if (MAINPROCESS) {
+ printf("Test filenames are:\n");
+ for (i = 0; i < n; i++)
+ printf(" %s\n", filenames[i]);
+ }
}
return (0);
@@ -4249,6 +4254,11 @@ int
main(int argc, char **argv)
{
int mpi_size, mpi_rank; /* mpi variables */
+ int mpi_code;
+#ifdef H5_HAVE_TEST_API
+ int required = MPI_THREAD_MULTIPLE;
+ int provided;
+#endif
#ifndef H5_HAVE_WIN32_API
/* Un-buffer the stdout and stderr */
@@ -4256,9 +4266,37 @@ main(int argc, char **argv)
HDsetbuf(stdout, NULL);
#endif
- MPI_Init(&argc, &argv);
- MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
- MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+#ifdef H5_HAVE_TEST_API
+ /* Attempt to initialize with MPI_THREAD_MULTIPLE if possible */
+ if (MPI_SUCCESS != (mpi_code = MPI_Init_thread(&argc, &argv, required, &provided))) {
+ printf("MPI_Init_thread failed with error code %d\n", mpi_code);
+ return -1;
+ }
+#else
+ if (MPI_SUCCESS != (mpi_code = MPI_Init(&argc, &argv))) {
+ printf("MPI_Init failed with error code %d\n", mpi_code);
+ return -1;
+ }
+#endif
+
+ if (MPI_SUCCESS != (mpi_code = MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank))) {
+ printf("MPI_Comm_rank failed with error code %d\n", mpi_code);
+ MPI_Finalize();
+ return -1;
+ }
+
+#ifdef H5_HAVE_TEST_API
+ /* Warn about missing MPI_THREAD_MULTIPLE support */
+ if ((provided < required) && MAINPROCESS)
+ printf("** MPI doesn't support MPI_Init_thread with MPI_THREAD_MULTIPLE **\n");
+#endif
+
+ if (MPI_SUCCESS != (mpi_code = MPI_Comm_size(MPI_COMM_WORLD, &mpi_size))) {
+ if (MAINPROCESS)
+ printf("MPI_Comm_size failed with error code %d\n", mpi_code);
+ MPI_Finalize();
+ return -1;
+ }
mpi_rank_framework_g = mpi_rank;
diff --git a/testpar/t_subfiling_vfd.c b/testpar/t_subfiling_vfd.c
index 7c56599..45cb363 100644
--- a/testpar/t_subfiling_vfd.c
+++ b/testpar/t_subfiling_vfd.c
@@ -40,6 +40,8 @@
#define PATH_MAX 4096
#endif
+#define DEFAULT_DEFLATE_LEVEL 9
+
#define ARRAY_SIZE(a) sizeof(a) / sizeof(a[0])
#define CHECK_PASSED() \
@@ -82,12 +84,15 @@ static char *config_dir = NULL;
int nerrors = 0;
int curr_nerrors = 0;
+bool enable_compression = false;
+
/* Function pointer typedef for test functions */
typedef void (*test_func)(void);
/* Utility functions */
static hid_t create_subfiling_ioc_fapl(MPI_Comm comm, MPI_Info info, bool custom_config,
H5FD_subfiling_params_t *custom_cfg, int32_t thread_pool_size);
+static hid_t create_dcpl_id(int rank, const hsize_t dims[], hid_t dxpl_id);
/* Test functions */
static void test_create_and_close(void);
@@ -182,7 +187,47 @@ error:
return H5I_INVALID_HID;
}
+/* ---------------------------------------------------------------------------
+ * Function: create_dcpl_id
+ *
+ * Purpose: Creates dataset creation property list identifier with
+ * chunking and compression, and enforces the
+ * required collective IO.
+ *
+ * Return: Success: HID Dataset creation property list identifier,
+ * a non-negative value.
+ * Failure: H5I_INVALID_HID, a negative value.
+ * ---------------------------------------------------------------------------
+ */
+static hid_t
+create_dcpl_id(int rank, const hsize_t dset_dims[], hid_t dxpl_id)
+{
+ hsize_t chunk_dims[1];
+ hid_t ret_value = H5I_INVALID_HID;
+
+ if ((ret_value = H5Pcreate(H5P_DATASET_CREATE)) < 0)
+ TEST_ERROR;
+
+ if (enable_compression) {
+ if (H5Pset_dxpl_mpio(dxpl_id, H5FD_MPIO_COLLECTIVE) < 0)
+ TEST_ERROR;
+ chunk_dims[0] = dset_dims[0] / 2;
+ if (H5Pset_chunk(ret_value, rank, chunk_dims) < 0)
+ TEST_ERROR;
+ if (H5Pset_deflate(ret_value, DEFAULT_DEFLATE_LEVEL) < 0)
+ TEST_ERROR;
+ }
+
+ return ret_value;
+error:
+ if ((H5I_INVALID_HID != ret_value) && (H5Pclose(ret_value) < 0)) {
+ H5_FAILED();
+ AT();
+ }
+
+ return H5I_INVALID_HID;
+}
/*
* A simple test that creates and closes a file with the
* subfiling VFD
@@ -1060,6 +1105,7 @@ test_read_different_stripe_size(void)
hid_t fapl_id = H5I_INVALID_HID;
hid_t dset_id = H5I_INVALID_HID;
hid_t dxpl_id = H5I_INVALID_HID;
+ hid_t dcpl_id = H5I_INVALID_HID;
hid_t fspace_id = H5I_INVALID_HID;
char *tmp_filename = NULL;
void *buf = NULL;
@@ -1106,7 +1152,10 @@ test_read_different_stripe_size(void)
fspace_id = H5Screate_simple(1, dset_dims, NULL);
VRFY((fspace_id >= 0), "H5Screate_simple succeeded");
- dset_id = H5Dcreate2(file_id, "DSET", SUBF_HDF5_TYPE, fspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+ dcpl_id = create_dcpl_id(1, dset_dims, dxpl_id);
+ VRFY((dcpl_id >= 0), "DCPL creation succeeded");
+
+ dset_id = H5Dcreate2(file_id, "DSET", SUBF_HDF5_TYPE, fspace_id, H5P_DEFAULT, dcpl_id, H5P_DEFAULT);
VRFY((dset_id >= 0), "Dataset creation succeeded");
/* Select hyperslab */
@@ -1129,6 +1178,7 @@ test_read_different_stripe_size(void)
VRFY((H5Sclose(fspace_id) >= 0), "File dataspace close succeeded");
VRFY((H5Dclose(dset_id) >= 0), "Dataset close succeeded");
+ VRFY((H5Pclose(dcpl_id) >= 0), "DCPL close succeeded");
VRFY((H5Fclose(file_id) >= 0), "File close succeeded");
/* Ensure all the subfiles are present */
@@ -1153,10 +1203,12 @@ test_read_different_stripe_size(void)
VRFY((fclose(subfile_ptr) >= 0), "fclose on subfile succeeded");
/* Check file size */
- VRFY((HDstat(tmp_filename, &subfile_info) >= 0), "HDstat succeeded");
- subfile_size = (h5_stat_size_t)subfile_info.st_size;
+ if (!enable_compression) {
+ VRFY((HDstat(tmp_filename, &subfile_info) >= 0), "HDstat succeeded");
+ subfile_size = (h5_stat_size_t)subfile_info.st_size;
- VRFY((subfile_size >= cfg.stripe_size), "File size verification succeeded");
+ VRFY((subfile_size >= cfg.stripe_size), "File size verification succeeded");
+ }
}
}
@@ -1376,10 +1428,12 @@ test_subfiling_precreate_rank_0(void)
VRFY((fclose(subfile_ptr) >= 0), "fclose on subfile succeeded");
/* Check file size */
- VRFY((HDstat(tmp_filename, &subfile_info) >= 0), "HDstat succeeded");
- file_size = (h5_stat_size_t)subfile_info.st_size;
+ if (!enable_compression) {
+ VRFY((HDstat(tmp_filename, &subfile_info) >= 0), "HDstat succeeded");
+ file_size = (h5_stat_size_t)subfile_info.st_size;
- VRFY((file_size >= cfg.stripe_size), "File size verification succeeded");
+ VRFY((file_size >= cfg.stripe_size), "File size verification succeeded");
+ }
}
/* Verify that there aren't too many subfiles */
@@ -1470,6 +1524,7 @@ test_subfiling_write_many_read_one(void)
hid_t fapl_id = H5I_INVALID_HID;
hid_t dset_id = H5I_INVALID_HID;
hid_t dxpl_id = H5I_INVALID_HID;
+ hid_t dcpl_id = H5I_INVALID_HID;
hid_t fspace_id = H5I_INVALID_HID;
void *buf = NULL;
@@ -1517,7 +1572,10 @@ test_subfiling_write_many_read_one(void)
fspace_id = H5Screate_simple(1, dset_dims, NULL);
VRFY((fspace_id >= 0), "H5Screate_simple succeeded");
- dset_id = H5Dcreate2(file_id, "DSET", SUBF_HDF5_TYPE, fspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+ dcpl_id = create_dcpl_id(1, dset_dims, dxpl_id);
+ VRFY((dcpl_id >= 0), "DCPL creation succeeded");
+
+ dset_id = H5Dcreate2(file_id, "DSET", SUBF_HDF5_TYPE, fspace_id, H5P_DEFAULT, dcpl_id, H5P_DEFAULT);
VRFY((dset_id >= 0), "Dataset creation succeeded");
/* Select hyperslab */
@@ -1539,6 +1597,7 @@ test_subfiling_write_many_read_one(void)
buf = NULL;
VRFY((H5Dclose(dset_id) >= 0), "Dataset close succeeded");
+ VRFY((H5Pclose(dcpl_id) >= 0), "DCPL close succeeded");
VRFY((H5Fclose(file_id) >= 0), "File close succeeded");
mpi_code_g = MPI_Barrier(comm_g);
@@ -1616,6 +1675,7 @@ test_subfiling_write_many_read_few(void)
hid_t fapl_id = H5I_INVALID_HID;
hid_t dset_id = H5I_INVALID_HID;
hid_t dxpl_id = H5I_INVALID_HID;
+ hid_t dcpl_id = H5I_INVALID_HID;
hid_t fspace_id = H5I_INVALID_HID;
void *buf = NULL;
@@ -1673,7 +1733,10 @@ test_subfiling_write_many_read_few(void)
fspace_id = H5Screate_simple(1, dset_dims, NULL);
VRFY((fspace_id >= 0), "H5Screate_simple succeeded");
- dset_id = H5Dcreate2(file_id, "DSET", SUBF_HDF5_TYPE, fspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+ dcpl_id = create_dcpl_id(1, dset_dims, dxpl_id);
+ VRFY((dcpl_id >= 0), "DCPL creation succeeded");
+
+ dset_id = H5Dcreate2(file_id, "DSET", SUBF_HDF5_TYPE, fspace_id, H5P_DEFAULT, dcpl_id, H5P_DEFAULT);
VRFY((dset_id >= 0), "Dataset creation succeeded");
/* Select hyperslab */
@@ -1695,6 +1758,7 @@ test_subfiling_write_many_read_few(void)
buf = NULL;
VRFY((H5Dclose(dset_id) >= 0), "Dataset close succeeded");
+ VRFY((H5Pclose(dcpl_id) >= 0), "DCPL close succeeded");
VRFY((H5Fclose(file_id) >= 0), "File close succeeded");
/*
@@ -1808,6 +1872,7 @@ test_subfiling_h5fuse(void)
hid_t fapl_id = H5I_INVALID_HID;
hid_t dset_id = H5I_INVALID_HID;
hid_t dxpl_id = H5I_INVALID_HID;
+ hid_t dcpl_id = H5I_INVALID_HID;
hid_t fspace_id = H5I_INVALID_HID;
void *buf = NULL;
int skip_test = 0;
@@ -1833,7 +1898,7 @@ test_subfiling_h5fuse(void)
if (MAINPROCESS) {
FILE *h5fuse_script;
- h5fuse_script = fopen("h5fuse.sh", "r");
+ h5fuse_script = fopen("h5fuse", "r");
if (h5fuse_script)
fclose(h5fuse_script);
else
@@ -1898,7 +1963,10 @@ test_subfiling_h5fuse(void)
fspace_id = H5Screate_simple(1, dset_dims, NULL);
VRFY((fspace_id >= 0), "H5Screate_simple succeeded");
- dset_id = H5Dcreate2(file_id, "DSET", SUBF_HDF5_TYPE, fspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+ dcpl_id = create_dcpl_id(1, dset_dims, dxpl_id);
+ VRFY((dcpl_id >= 0), "DCPL creation succeeded");
+
+ dset_id = H5Dcreate2(file_id, "DSET", SUBF_HDF5_TYPE, fspace_id, H5P_DEFAULT, dcpl_id, H5P_DEFAULT);
VRFY((dset_id >= 0), "Dataset creation succeeded");
/* Select hyperslab */
@@ -1919,8 +1987,11 @@ test_subfiling_h5fuse(void)
free(buf);
buf = NULL;
+ VRFY((H5Pset_dxpl_mpio(dxpl_id, H5FD_MPIO_INDEPENDENT) >= 0), "H5Pset_dxpl_mpio succeeded");
+
VRFY((H5Sclose(fspace_id) >= 0), "File dataspace close succeeded");
VRFY((H5Dclose(dset_id) >= 0), "Dataset close succeeded");
+ VRFY((H5Pclose(dcpl_id) >= 0), "DCPL close succeeded");
VRFY((H5Fclose(file_id) >= 0), "File close succeeded");
if (MAINPROCESS) {
@@ -1943,7 +2014,7 @@ test_subfiling_h5fuse(void)
SUBF_FILENAME, file_inode);
args[0] = strdup("env");
- args[1] = strdup("./h5fuse.sh");
+ args[1] = strdup("./h5fuse");
args[2] = strdup("-q");
args[3] = strdup("-f");
args[4] = tmp_filename;
@@ -1973,8 +2044,10 @@ test_subfiling_h5fuse(void)
}
/* Verify the size of the fused file */
- VRFY((HDstat(SUBF_FILENAME, &file_info) >= 0), "HDstat succeeded");
- VRFY(((size_t)file_info.st_size >= target_size), "File size verification succeeded");
+ if (!enable_compression) {
+ VRFY((HDstat(SUBF_FILENAME, &file_info) >= 0), "HDstat succeeded");
+ VRFY(((size_t)file_info.st_size >= target_size), "File size verification succeeded");
+ }
/* Re-open file with sec2 driver and verify the data */
file_id = H5Fopen(SUBF_FILENAME, H5F_ACC_RDONLY, H5P_DEFAULT);
@@ -2414,9 +2487,28 @@ main(int argc, char **argv)
if (num_iocs_g > mpi_size)
num_iocs_g = mpi_size;
- if (MAINPROCESS) {
- printf("Re-running tests with environment variables set\n");
+ if (MAINPROCESS)
+ printf(" Re-running tests with compression enabled\n");
+
+#ifdef H5_HAVE_FILTER_DEFLATE
+ enable_compression = true;
+ for (size_t i = 0; i < ARRAY_SIZE(tests); i++) {
+ if (MPI_SUCCESS == (mpi_code_g = MPI_Barrier(comm_g))) {
+ (*tests[i])();
+ }
+ else {
+ if (MAINPROCESS)
+ MESG("MPI_Barrier failed");
+ nerrors++;
+ }
}
+ enable_compression = false;
+#else
+ if (MAINPROCESS)
+ SKIPPED();
+#endif
+ if (MAINPROCESS)
+ printf("\nRe-running tests with environment variables set\n");
for (size_t i = 0; i < ARRAY_SIZE(tests); i++) {
if (MPI_SUCCESS == (mpi_code_g = MPI_Barrier(comm_g))) {
@@ -2430,13 +2522,29 @@ main(int argc, char **argv)
}
if (MAINPROCESS)
- puts("");
-
+ printf("\n Re-running tests with compression enabled\n");
+#ifdef H5_HAVE_FILTER_DEFLATE
+ enable_compression = true;
+ for (size_t i = 0; i < ARRAY_SIZE(tests); i++) {
+ if (MPI_SUCCESS == (mpi_code_g = MPI_Barrier(comm_g))) {
+ (*tests[i])();
+ }
+ else {
+ if (MAINPROCESS)
+ MESG("MPI_Barrier failed");
+ nerrors++;
+ }
+ }
+ enable_compression = false;
+#else
+ if (MAINPROCESS)
+ SKIPPED();
+#endif
if (nerrors)
goto exit;
if (MAINPROCESS)
- puts("All Subfiling VFD tests passed\n");
+ puts("\nAll Subfiling VFD tests passed\n");
exit:
if (must_unset_stripe_size_env)
diff --git a/testpar/t_vfd.c b/testpar/t_vfd.c
index ac524ac..79b7e01 100644
--- a/testpar/t_vfd.c
+++ b/testpar/t_vfd.c
@@ -40,13 +40,14 @@ const char *FILENAMES[] = {"mpio_vfd_test_file_0", /*0*/
"mpio_vfd_test_file_4", /*4*/
"mpio_vfd_test_file_5", /*5*/
"mpio_vfd_test_file_6", /*6*/
- "subfiling_vfd_test_file_0", /*7*/
- "subfiling_vfd_test_file_1", /*8*/
- "subfiling_vfd_test_file_2", /*9*/
- "subfiling_vfd_test_file_3", /*10*/
- "subfiling_vfd_test_file_4", /*11*/
- "subfiling_vfd_test_file_5", /*12*/
- "subfiling_vfd_test_file_6", /*13*/
+ "mpio_vfd_test_file_7", /*7*/
+ "subfiling_vfd_test_file_0", /*8*/
+ "subfiling_vfd_test_file_1", /*9*/
+ "subfiling_vfd_test_file_2", /*10*/
+ "subfiling_vfd_test_file_3", /*11*/
+ "subfiling_vfd_test_file_4", /*12*/
+ "subfiling_vfd_test_file_5", /*13*/
+ "subfiling_vfd_test_file_6", /*14*/
NULL};
/* File Test Images
@@ -100,6 +101,8 @@ static unsigned vector_write_test_6(int file_name_id, int mpi_rank, int mpi_size
H5FD_mpio_collective_opt_t coll_opt_mode, const char *vfd_name);
static unsigned vector_write_test_7(int file_name_id, int mpi_rank, int mpi_size, H5FD_mpio_xfer_t xfer_mode,
H5FD_mpio_collective_opt_t coll_opt_mode, const char *vfd_name);
+static unsigned vector_write_test_8(int file_name_id, int mpi_rank, int mpi_size, H5FD_mpio_xfer_t xfer_mode,
+ H5FD_mpio_collective_opt_t coll_opt_mode, const char *vfd_name);
/*
* Tests for selection I/O:
* They are derived from test_selection_io() in test/vfd.c and modified for parallel testing.
@@ -4159,6 +4162,280 @@ vector_write_test_7(int file_name_id, int mpi_rank, int mpi_size, H5FD_mpio_xfer
} /* vector_write_test_7() */
+/*-------------------------------------------------------------------------
+ * Function: vector_write_test_8()
+ *
+ * Purpose: This test is to verify the fix for the following problem
+ * in H5FD__mpio_write_vector when calculating max_addr:
+ * --illegal reference occurs when referencing the s_sizes array
+ * with <count - 1> due to <count> exceeding the length of the
+ * size array which uses the compressed feature.
+ *
+ * 1) Open the test file with the specified VFD, and set
+ * the eoa.
+ *
+ * 2) Set the test file in a known state by writing zeros
+ * to all bytes in the test file. Since we have already
+ * tested this, do this via a vector write of zero_fi_buf.
+ *
+ * 3) Barrier
+ *
+ * 4) For each rank, define base_index equal to:
+ *
+ * mpi_rank * INTS_PER_RANK
+ *
+ * and define base_addr equal to
+ *
+ * base_index * sizeof(int32_t).
+ *
+ * Setup a vector of length INTS_PER_RANK - 1.
+ * Set up the size array with the compressed feature:
+ * --The first element has size (2 * sizeof(int32_t))
+ * --The second and third elements are of size sizeof(int32_t)
+ * --The fourth element is zero.
+ * Set up addrs and bufs accordingly.
+ *
+ * Write the vector.
+ *
+ * 5) Barrier
+ *
+ * 6) On each rank, read the entire file into the read_fi_buf,
+ * and compare against increasing_fi_buf.
+ * Report failure if any differences are detected.
+ *
+ * 7) Close the test file. On rank 0, delete the test file.
+ *
+ * Return: false on success, true if any errors are detected.
+ *
+ *-------------------------------------------------------------------------
+ */
+static unsigned
+vector_write_test_8(int file_name_id, int mpi_rank, int mpi_size, H5FD_mpio_xfer_t xfer_mode,
+ H5FD_mpio_collective_opt_t coll_opt_mode, const char *vfd_name)
+{
+ const char *fcn_name = "vector_write_test_8()";
+ char test_title[120];
+ char filename[512];
+ haddr_t eoa;
+ haddr_t base_addr;
+ bool show_progress = false;
+ hid_t fapl_id = H5I_INVALID_HID; /* file access property list ID */
+ hid_t dxpl_id = H5I_INVALID_HID; /* data access property list ID */
+ H5FD_t *lf = NULL; /* VFD struct ptr */
+ int cp = 0;
+ int i;
+ int base_index;
+ uint32_t count = 0;
+ size_t sizes[4];
+ H5FD_mem_t types[2];
+
+ haddr_t *tt_addrs = NULL; /* For storing addrs */
+ const void **tt_bufs = NULL; /* For storing buf pointers */
+
+ pass = true;
+
+ if (mpi_rank == 0) {
+
+ if (xfer_mode == H5FD_MPIO_INDEPENDENT) {
+
+ snprintf(test_title, sizeof(test_title), "parallel vector write test 8 -- %s / independent",
+ vfd_name);
+ }
+ else if (coll_opt_mode == H5FD_MPIO_INDIVIDUAL_IO) {
+
+ snprintf(test_title, sizeof(test_title), "parallel vector write test 8 -- %s / col op / ind I/O",
+ vfd_name);
+ }
+ else {
+
+ assert(coll_opt_mode == H5FD_MPIO_COLLECTIVE_IO);
+
+ snprintf(test_title, sizeof(test_title), "parallel vector write test 8 -- %s / col op / col I/O",
+ vfd_name);
+ }
+
+ TESTING(test_title);
+ }
+
+ show_progress = ((show_progress) && (mpi_rank == 0));
+
+ if (show_progress)
+ fprintf(stdout, "\n%s: cp = %d, pass = %d.\n", fcn_name, cp++, pass);
+
+ /* 1) Allocate local buffers for addrs and bufs,
+ open the test file with the specified VFD, set the eoa, and setup the dxpl */
+ if (pass) {
+
+ tt_addrs = (haddr_t *)malloc((INTS_PER_RANK) * sizeof(haddr_t *));
+ tt_bufs = (const void **)malloc((INTS_PER_RANK) * sizeof(void *));
+
+ if (tt_addrs == NULL || tt_bufs == NULL) {
+ pass = false;
+ failure_mssg = "Can't allocate local addrs and bufs buffers.";
+ }
+
+ if (pass) {
+ eoa = (haddr_t)mpi_size * (haddr_t)INTS_PER_RANK * (haddr_t)(sizeof(int32_t));
+
+ setup_vfd_test_file(file_name_id, filename, mpi_size, xfer_mode, coll_opt_mode, vfd_name, eoa,
+ &lf, &fapl_id, &dxpl_id);
+ }
+ }
+
+ if (show_progress)
+ fprintf(stdout, "%s: cp = %d, pass = %d.\n", fcn_name, cp++, pass);
+
+ /* 2) Using rank zero, write the entire negative_fi_buf to
+ * the file.
+ */
+ if (pass) {
+
+ size_t image_size = (size_t)mpi_size * (size_t)INTS_PER_RANK * sizeof(int32_t);
+
+ if (mpi_rank == 0) {
+
+ if (H5FDwrite(lf, H5FD_MEM_DRAW, H5P_DEFAULT, (haddr_t)0, image_size, (void *)zero_fi_buf) < 0) {
+
+ pass = false;
+ failure_mssg = "H5FDwrite() on rank 0 failed.\n";
+ }
+ }
+ }
+
+ /* 3) Barrier */
+ MPI_Barrier(comm);
+
+ if (show_progress)
+ fprintf(stdout, "%s: cp = %d, pass = %d.\n", fcn_name, cp++, pass);
+
+ /* 4) For each rank, define base_index equal to:
+ *
+ * mpi_rank * INTS_PER_RANK
+ *
+ * and define base_addr equal to
+ *
+ * base_index * sizeof(int32_t).
+ *
+ * Set up the array of sizes and types with the compressed feature
+ * as described in the routine header description.
+ */
+ if (pass) {
+
+ base_index = (mpi_rank * INTS_PER_RANK);
+ base_addr = (haddr_t)base_index * (haddr_t)sizeof(int32_t);
+
+ count = INTS_PER_RANK - 1;
+
+ types[0] = H5FD_MEM_DRAW;
+ types[1] = H5FD_MEM_NOLIST;
+
+ sizes[0] = 2 * sizeof(int32_t);
+ sizes[1] = sizeof(int32_t);
+ sizes[2] = sizeof(int32_t);
+ sizes[3] = 0;
+
+ tt_addrs[0] = base_addr;
+ tt_bufs[0] = (const void *)(&(increasing_fi_buf[base_index]));
+
+ tt_addrs[0] = base_addr;
+ base_index += 2;
+ base_addr = (haddr_t)base_index * (haddr_t)sizeof(int32_t);
+
+ for (i = 1; i < (INTS_PER_RANK - 1); i++) {
+
+ tt_addrs[i] = base_addr + ((haddr_t)(i - 1) * (haddr_t)sizeof(int32_t));
+ tt_bufs[i] = (const void *)(&(increasing_fi_buf[base_index + (i - 1)]));
+ }
+
+ if (H5FDwrite_vector(lf, dxpl_id, count, types, tt_addrs, sizes, tt_bufs) < 0) {
+
+ pass = false;
+ failure_mssg = "H5FDwrite_vector() failed (1).\n";
+ }
+ }
+
+ if (show_progress)
+ fprintf(stdout, "%s: cp = %d, pass = %d.\n", fcn_name, cp++, pass);
+
+ /* 5) Barrier */
+ MPI_Barrier(comm);
+
+ if (show_progress)
+ fprintf(stdout, "%s: cp = %d, pass = %d.\n", fcn_name, cp++, pass);
+
+ /* 6) On each rank, read the entire file into the read_fi_buf,
+ * and compare against increasing_fi_buf
+ * Report failure if any differences are detected.
+ */
+ if (pass) {
+
+ size_t image_size = (size_t)mpi_size * (size_t)INTS_PER_RANK * sizeof(int32_t);
+
+ if (H5FDread(lf, H5FD_MEM_DRAW, H5P_DEFAULT, (haddr_t)0, image_size, (void *)read_fi_buf) < 0) {
+
+ pass = false;
+ failure_mssg = "H5FDread() failed.\n";
+ }
+
+ for (i = 0; ((pass) && (i < mpi_size * INTS_PER_RANK)); i++) {
+
+ if (read_fi_buf[i] != increasing_fi_buf[i]) {
+
+ pass = false;
+ failure_mssg = "unexpected data read from file (1)";
+ }
+ }
+ } /* end if */
+
+ if (show_progress)
+ fprintf(stdout, "%s: cp = %d, pass = %d.\n", fcn_name, cp++, pass);
+
+ /* 7) Barrier */
+ MPI_Barrier(comm);
+
+ if (show_progress)
+ fprintf(stdout, "%s: cp = %d, pass = %d.\n", fcn_name, cp++, pass);
+
+ /* 8) Close the test file and delete it (on rank 0 only).
+ * Close FAPL and DXPL.
+ */
+ takedown_vfd_test_file(mpi_rank, filename, &lf, &fapl_id, &dxpl_id);
+
+ /* Free the local buffers */
+ if (tt_addrs) {
+ free(tt_addrs);
+ tt_addrs = NULL;
+ }
+
+ if (tt_bufs) {
+ free(tt_bufs);
+ tt_bufs = NULL;
+ }
+
+ if (show_progress)
+ fprintf(stdout, "%s: cp = %d, pass = %d.\n", fcn_name, cp++, pass);
+
+ /* report results */
+ if (mpi_rank == 0) {
+
+ if (pass) {
+
+ PASSED();
+ }
+ else {
+
+ H5_FAILED();
+
+ if ((disp_failure_mssgs) || (show_progress)) {
+ fprintf(stdout, "%s: failure_mssg = \"%s\"\n", fcn_name, failure_mssg);
+ }
+ }
+ }
+
+ return (!pass);
+
+} /* vector_write_test_8() */
+
static void
test_vector_io(int mpi_rank, int mpi_size)
{
@@ -4249,6 +4526,13 @@ test_vector_io(int mpi_rank, int mpi_size)
nerrs +=
vector_write_test_7(6, mpi_rank, mpi_size, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_COLLECTIVE_IO, "mpio");
+ nerrs +=
+ vector_write_test_8(7, mpi_rank, mpi_size, H5FD_MPIO_INDEPENDENT, H5FD_MPIO_INDIVIDUAL_IO, "mpio");
+ nerrs +=
+ vector_write_test_8(7, mpi_rank, mpi_size, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_INDIVIDUAL_IO, "mpio");
+ nerrs +=
+ vector_write_test_8(7, mpi_rank, mpi_size, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_COLLECTIVE_IO, "mpio");
+
MPI_Barrier(comm);
#ifdef H5_HAVE_SUBFILING_VFD
diff --git a/testpar/testphdf5.c b/testpar/testphdf5.c
index 2428c71..831b9de 100644
--- a/testpar/testphdf5.c
+++ b/testpar/testphdf5.c
@@ -301,10 +301,15 @@ int
main(int argc, char **argv)
{
int mpi_size, mpi_rank; /* mpi variables */
+ int mpi_code;
H5Ptest_param_t ndsets_params, ngroups_params;
H5Ptest_param_t collngroups_params;
H5Ptest_param_t io_mode_confusion_params;
H5Ptest_param_t rr_obj_flush_confusion_params;
+#ifdef H5_HAVE_TEST_API
+ int required = MPI_THREAD_MULTIPLE;
+ int provided;
+#endif
#ifndef H5_HAVE_WIN32_API
/* Un-buffer the stdout and stderr */
@@ -312,9 +317,37 @@ main(int argc, char **argv)
HDsetbuf(stdout, NULL);
#endif
- MPI_Init(&argc, &argv);
- MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
- MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+#ifdef H5_HAVE_TEST_API
+ /* Attempt to initialize with MPI_THREAD_MULTIPLE if possible */
+ if (MPI_SUCCESS != (mpi_code = MPI_Init_thread(&argc, &argv, required, &provided))) {
+ printf("MPI_Init_thread failed with error code %d\n", mpi_code);
+ return -1;
+ }
+#else
+ if (MPI_SUCCESS != (mpi_code = MPI_Init(&argc, &argv))) {
+ printf("MPI_Init failed with error code %d\n", mpi_code);
+ return -1;
+ }
+#endif
+
+ if (MPI_SUCCESS != (mpi_code = MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank))) {
+ printf("MPI_Comm_rank failed with error code %d\n", mpi_code);
+ MPI_Finalize();
+ return -1;
+ }
+
+#ifdef H5_HAVE_TEST_API
+ /* Warn about missing MPI_THREAD_MULTIPLE support */
+ if ((provided < required) && MAINPROCESS)
+ printf("** MPI doesn't support MPI_Init_thread with MPI_THREAD_MULTIPLE **\n");
+#endif
+
+ if (MPI_SUCCESS != (mpi_code = MPI_Comm_size(MPI_COMM_WORLD, &mpi_size))) {
+ if (MAINPROCESS)
+ printf("MPI_Comm_size failed with error code %d\n", mpi_code);
+ MPI_Finalize();
+ return -1;
+ }
mpi_rank_framework_g = mpi_rank;
@@ -351,6 +384,7 @@ main(int argc, char **argv)
/* Tests are generally arranged from least to most complexity... */
AddTest("mpiodup", test_fapl_mpio_dup, NULL, "fapl_mpio duplicate", NULL);
+ AddTest("getdxplmpio", test_get_dxpl_mpio, NULL, "dxpl_mpio get", PARATESTFILE);
AddTest("split", test_split_comm_access, NULL, "dataset using split communicators", PARATESTFILE);
AddTest("h5oflusherror", test_oflush, NULL, "H5Oflush failure", PARATESTFILE);
@@ -368,6 +402,8 @@ main(int argc, char **argv)
AddTest("evictparassert", test_evict_on_close_parallel_unsupp, NULL, "Evict on close in parallel failure",
PARATESTFILE);
+ AddTest("fapl_preserve", test_fapl_preserve_hints, NULL, "preserve MPI I/O hints after fapl closed",
+ PARATESTFILE);
AddTest("idsetw", dataset_writeInd, NULL, "dataset independent write", PARATESTFILE);
AddTest("idsetr", dataset_readInd, NULL, "dataset independent read", PARATESTFILE);
diff --git a/testpar/testphdf5.h b/testpar/testphdf5.h
index 6bbdb0d..31b7c69 100644
--- a/testpar/testphdf5.h
+++ b/testpar/testphdf5.h
@@ -234,6 +234,7 @@ void test_file_properties(void);
void test_delete(void);
void test_invalid_libver_bounds_file_close_assert(void);
void test_evict_on_close_parallel_unsupp(void);
+void test_fapl_preserve_hints(void);
void multiple_dset_write(void);
void multiple_group_write(void);
void multiple_group_read(void);
@@ -241,6 +242,7 @@ void collective_group_write_independent_group_read(void);
void collective_group_write(void);
void independent_group_read(void);
void test_fapl_mpio_dup(void);
+void test_get_dxpl_mpio(void);
void test_split_comm_access(void);
void test_page_buffer_access(void);
void dataset_atomicity(void);
diff --git a/tools/libtest/CMakeTests.cmake b/tools/libtest/CMakeTests.cmake
index 79810c4..b8d63d3 100644
--- a/tools/libtest/CMakeTests.cmake
+++ b/tools/libtest/CMakeTests.cmake
@@ -28,6 +28,9 @@
if (NOT "${resultcode}" STREQUAL "0")
set_tests_properties (H5LIBTEST-${resultfile} PROPERTIES WILL_FAIL "true")
endif ()
+ if ("H5LIBTEST-${resultfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5LIBTEST-${resultfile} PROPERTIES DISABLED true)
+ endif ()
endmacro ()
##############################################################################
diff --git a/tools/libtest/Makefile.am b/tools/libtest/Makefile.am
index 45b3f47..8a503d0 100644
--- a/tools/libtest/Makefile.am
+++ b/tools/libtest/Makefile.am
@@ -27,7 +27,7 @@ LDADD=$(LIBH5TOOLS) $(LIBH5TEST) $(LIBHDF5)
# main target
-bin_PROGRAMS=h5tools_test_utils
+noinst_PROGRAMS=h5tools_test_utils
# check_PROGRAMS=$(TEST_PROG)
diff --git a/tools/src/h5dump/h5dump.c b/tools/src/h5dump/h5dump.c
index a1a6de0..8f2c406 100644
--- a/tools/src/h5dump/h5dump.c
+++ b/tools/src/h5dump/h5dump.c
@@ -1089,7 +1089,7 @@ parse_start:
* for subsetting: "--start", "--stride", "--count", and "--block"
* which can come in any order. If we run out of parameters (EOF)
* or run into one which isn't a subsetting parameter (NOT s, S,
- * c, or K), then we exit the do-while look, set the subset_info
+ * c, or K), then we exit the do-while loop, set the subset_info
* to the structure we've been filling. If we've reached the end
* of the options, we exit the parsing (goto parse_end) otherwise,
* since we've "read" the next option, we need to parse it. So we
@@ -1234,7 +1234,7 @@ end_collect:
}
/* If the file uses the onion VFD, get the revision number */
- if (vfd_info_g.u.name && !strcmp(vfd_info_g.u.name, "onion")) {
+ if (vfd_info_g.type == VFD_BY_NAME && vfd_info_g.u.name && !strcmp(vfd_info_g.u.name, "onion")) {
if (vfd_info_g.info) {
if (!strcmp(vfd_info_g.info, "revision_count"))
@@ -1357,7 +1357,7 @@ main(int argc, char *argv[])
goto done;
}
- /* enable error reporting if command line option */
+ /* Enable error reporting if --enable-error-stack command line option is specified */
h5tools_error_report();
/* Initialize indexing options */
diff --git a/tools/src/misc/h5repart.c b/tools/src/misc/h5repart.c
index feb447f..12b2932 100644
--- a/tools/src/misc/h5repart.c
+++ b/tools/src/misc/h5repart.c
@@ -227,6 +227,10 @@ main(int argc, char *argv[])
if (argno >= argc)
usage(prog_name);
src_gen_name = argv[argno++];
+ if (!src_gen_name) {
+ fprintf(stderr, "invalid source file name pointer");
+ exit(EXIT_FAILURE);
+ }
snprintf(src_name, NAMELEN, src_gen_name, src_membno);
src_is_family = strcmp(src_name, src_gen_name);
@@ -249,6 +253,10 @@ main(int argc, char *argv[])
if (argno >= argc)
usage(prog_name);
dst_gen_name = argv[argno++];
+ if (!dst_gen_name) {
+ fprintf(stderr, "invalid destination file name pointer");
+ exit(EXIT_FAILURE);
+ }
snprintf(dst_name, NAMELEN, dst_gen_name, dst_membno);
dst_is_family = strcmp(dst_name, dst_gen_name);
diff --git a/tools/test/h5copy/CMakeTests.cmake b/tools/test/h5copy/CMakeTests.cmake
index e443827..fb02d81 100644
--- a/tools/test/h5copy/CMakeTests.cmake
+++ b/tools/test/h5copy/CMakeTests.cmake
@@ -71,6 +71,9 @@
COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5copy${tgt_file_ext}> -f ${fparam} -i ./testfiles/${infile} -o ./testfiles/${testname}.out.h5 ${vparam} ${sparam} ${srcname} ${dparam} ${dstname} ${ARGN}
)
set_tests_properties (H5COPY_F-${testname} PROPERTIES DEPENDS H5COPY_F-${testname}-clear-objects)
+ if ("H5COPY_F-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5COPY_F-${testname} PROPERTIES DISABLED true)
+ endif ()
# resultcode=2 will cause the test to skip the diff test
if (NOT "${resultcode}" STREQUAL "2")
@@ -82,6 +85,9 @@
if ("${resultcode}" STREQUAL "1")
set_tests_properties (H5COPY_F-${testname}-DIFF PROPERTIES WILL_FAIL "true")
endif ()
+ if ("H5COPY_F-${testname}-DIFF" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5COPY_F-${testname}-DIFF PROPERTIES DISABLED true)
+ endif ()
endif ()
add_test (
NAME H5COPY_F-${testname}-clean-objects
@@ -106,6 +112,9 @@
COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5copy${tgt_file_ext}> -i ./testfiles/${infile} -o ./testfiles/${testname}.out.h5 ${vparam} ${sparam} ${srcname} ${dparam} ${dstname} ${ARGN}
)
set_tests_properties (H5COPY-${testname} PROPERTIES DEPENDS H5COPY-${testname}-clear-objects)
+ if ("H5COPY-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5COPY-${testname} PROPERTIES DISABLED true)
+ endif ()
# resultcode=2 will cause the test to skip the diff test
if (NOT "${resultcode}" STREQUAL "2")
@@ -117,6 +126,9 @@
if ("${resultcode}" STREQUAL "1")
set_tests_properties (H5COPY-${testname}-DIFF PROPERTIES WILL_FAIL "true")
endif ()
+ if ("H5COPY-${testname}-DIFF" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5COPY-${testname}-DIFF PROPERTIES DISABLED true)
+ endif ()
endif ()
add_test (
NAME H5COPY-${testname}-clean-objects
@@ -135,7 +147,7 @@
NAME H5COPY-${testname}-${skipresultfile}
COMMAND ${CMAKE_COMMAND} -E echo "SKIP ${testname}-${skipresultfile} ${ARGN}"
)
- set_property(TEST H5COPY-${testname}-${skipresultfile} PROPERTY DISABLED)
+ set_property(TEST H5COPY-${testname}-${skipresultfile} PROPERTY DISABLED true)
endif ()
endmacro ()
@@ -151,12 +163,18 @@
COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5copy${tgt_file_ext}> -i ./testfiles/${infile} -o ./testfiles/${testname}.out.h5 -v -s ${psparam} -d ${pdparam}
)
set_tests_properties (H5COPY-${testname}-prefill PROPERTIES DEPENDS H5COPY-${testname}-clear-objects)
+ if ("" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties ( PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5COPY-${testname}
COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5copy${tgt_file_ext}> -i ./testfiles/${infile} -o ./testfiles/${testname}.out.h5 ${vparam} ${sparam} ${srcname} ${dparam} ${dstname} ${ARGN}
)
set_tests_properties (H5COPY-${testname} PROPERTIES DEPENDS H5COPY-${testname}-prefill)
+ if ("H5COPY-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5COPY-${testname} PROPERTIES DISABLED true)
+ endif ()
# resultcode=2 will cause the test to skip the diff test
if (NOT "${resultcode}" STREQUAL "2")
add_test (
@@ -167,6 +185,9 @@
if ("${resultcode}" STREQUAL "1")
set_tests_properties (H5COPY-${testname}-DIFF PROPERTIES WILL_FAIL "true")
endif ()
+ if ("H5COPY-${testname}-DIFF" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5COPY-${testname}-DIFF PROPERTIES DISABLED true)
+ endif ()
endif ()
add_test (
NAME H5COPY-${testname}-clean-objects
@@ -191,12 +212,18 @@
COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5copy${tgt_file_ext}> -i ./testfiles/${pfile} -o ./testfiles/${testname}.out.h5 -v -s ${psparam} -d ${pdparam}
)
set_tests_properties (H5COPY_SAME-${testname}-prefill PROPERTIES DEPENDS H5COPY_SAME-${testname}-clear-objects)
+ if ("H5COPY_SAME-${testname}-prefill" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5COPY_SAME-${testname}-prefill PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5COPY_SAME-${testname}
COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5copy${tgt_file_ext}> -i ./testfiles/${testname}.out.h5 -o ./testfiles/${testname}.out.h5 ${vparam} ${sparam} ${srcname} ${dparam} ${dstname} ${ARGN}
)
set_tests_properties (H5COPY_SAME-${testname} PROPERTIES DEPENDS H5COPY_SAME-${testname}-prefill)
+ if ("H5COPY_SAME-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5COPY_SAME-${testname} PROPERTIES DISABLED true)
+ endif ()
# resultcode=2 will cause the test to skip the diff test
if (NOT "${resultcode}" STREQUAL "2")
add_test (
@@ -207,6 +234,9 @@
if ("${resultcode}" STREQUAL "1")
set_tests_properties (H5COPY_SAME-${testname}-DIFF PROPERTIES WILL_FAIL "true")
endif ()
+ if ("H5COPY_SAME-${testname}-DIFF" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5COPY_SAME-${testname}-DIFF PROPERTIES DISABLED true)
+ endif ()
endif ()
add_test (
NAME H5COPY_SAME-${testname}-clean-objects
@@ -235,7 +265,6 @@
if ("${resultcode}" STREQUAL "1")
set_tests_properties (H5COPY-CMP-${testname} PROPERTIES WILL_FAIL "true")
endif ()
- set_tests_properties (H5COPY-CMP-${testname} PROPERTIES DEPENDS H5COPY-CMP-${testname}-clear-objects)
else ()
add_test (
NAME H5COPY-CMP-${testname}
@@ -251,7 +280,10 @@
-D "TEST_MASK=true"
-P "${HDF_RESOURCES_DIR}/runTest.cmake"
)
- set_tests_properties (H5COPY-CMP-${testname} PROPERTIES DEPENDS H5COPY-CMP-${testname}-clear-objects)
+ endif ()
+ set_tests_properties (H5COPY-CMP-${testname} PROPERTIES DEPENDS H5COPY-CMP-${testname}-clear-objects)
+ if ("H5COPY-CMP-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5COPY-CMP-${testname} PROPERTIES DISABLED true)
endif ()
add_test (
NAME H5COPY-CMP-${testname}-clean-objects
@@ -303,6 +335,9 @@
)
endif ()
set_tests_properties (H5COPY_UD-${testname} PROPERTIES DEPENDS H5COPY_UD-${testname}-clear-objects)
+ if ("H5COPY_UD-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5COPY_UD-${testname} PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5COPY_UD-${testname}-DIFF
COMMAND "${CMAKE_COMMAND}"
@@ -320,6 +355,9 @@
-P "${HDF_RESOURCES_DIR}/runTest.cmake"
)
set_tests_properties (H5COPY_UD-${testname}-DIFF PROPERTIES DEPENDS H5COPY_UD-${testname})
+ if ("H5COPY_UD-${testname}-DIFF" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5COPY_UD-${testname}-DIFF PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5COPY_UD-${testname}-clean-objects
COMMAND ${CMAKE_COMMAND} -E remove testfiles/${testname}.out.h5
@@ -373,6 +411,9 @@
)
endif ()
set_tests_properties (H5COPY_UD_ERR-${testname} PROPERTIES DEPENDS H5COPY_UD_ERR-${testname}-clear-objects)
+ if ("H5COPY_UD_ERR-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5COPY_UD_ERR-${testname} PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5COPY_UD_ERR-${testname}-DIFF
COMMAND "${CMAKE_COMMAND}"
@@ -390,6 +431,9 @@
-P "${HDF_RESOURCES_DIR}/runTest.cmake"
)
set_tests_properties (H5COPY_UD_ERR-${testname}-DIFF PROPERTIES DEPENDS H5COPY_UD_ERR-${testname})
+ if ("H5COPY_UD_ERR-${testname}-DIFF" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5COPY_UD_ERR-${testname}-DIFF PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5COPY_UD_ERR-${testname}-clean-objects
COMMAND ${CMAKE_COMMAND} -E remove testfiles/${testname}_ERR.out.h5
@@ -422,6 +466,9 @@
set_tests_properties (H5COPY-${resultfile} PROPERTIES
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}"
)
+ if ("H5COPY-${resultfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5COPY-${resultfile} PROPERTIES DISABLED true)
+ endif ()
endmacro ()
##############################################################################
diff --git a/tools/test/h5diff/CMakeTests.cmake b/tools/test/h5diff/CMakeTests.cmake
index d89df46..f993f4b 100644
--- a/tools/test/h5diff/CMakeTests.cmake
+++ b/tools/test/h5diff/CMakeTests.cmake
@@ -437,6 +437,9 @@
set_tests_properties (H5DIFF-${resultfile} PROPERTIES
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles"
)
+ if ("H5DIFF-${resultfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5DIFF-${resultfile} PROPERTIES DISABLED true)
+ endif ()
endmacro ()
macro (ADD_PH5_TEST resultfile resultcode)
@@ -469,6 +472,9 @@
set_tests_properties (MPI_TEST_H5DIFF-${resultfile} PROPERTIES
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/PAR/testfiles"
)
+ if ("MPI_TEST_H5DIFF-${resultfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (MPI_TEST_H5DIFF-${resultfile} PROPERTIES DISABLED true)
+ endif ()
endmacro ()
macro (ADD_H5_UD_TEST testname resultcode resultfile)
@@ -508,6 +514,9 @@
-P "${HDF_RESOURCES_DIR}/runTest.cmake"
)
endif ()
+ if ("H5DIFF_UD-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5DIFF_UD-${testname} PROPERTIES DISABLED true)
+ endif ()
endif ()
endmacro ()
diff --git a/tools/test/h5dump/CMakeTests.cmake b/tools/test/h5dump/CMakeTests.cmake
index 7ed021f..e997aa8 100644
--- a/tools/test/h5dump/CMakeTests.cmake
+++ b/tools/test/h5dump/CMakeTests.cmake
@@ -460,6 +460,9 @@
set_tests_properties (H5DUMP-${testname} PROPERTIES
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles/std"
)
+ if ("H5DUMP-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5DUMP-${testname} PROPERTIES DISABLED true)
+ endif ()
endmacro ()
macro (ADD_SKIP_H5_TEST skipresultfile skipresultcode testtype)
@@ -469,7 +472,7 @@
NAME H5DUMP-${skipresultfile}
COMMAND ${CMAKE_COMMAND} -E echo "SKIP ${skipresultfile} ${ARGN}"
)
- set_property(TEST H5DUMP-${skipresultfile} PROPERTY DISABLED)
+ set_property(TEST H5DUMP-${skipresultfile} PROPERTY DISABLED true)
endif ()
else ()
ADD_H5_TEST (${skipresultfile} ${skipresultcode} ${ARGN})
@@ -503,6 +506,9 @@
set_tests_properties (H5DUMP-${resultfile} PROPERTIES
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles/std"
)
+ if ("H5DUMP-${resultfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5DUMP-${resultfile} PROPERTIES DISABLED true)
+ endif ()
endmacro ()
macro (ADD_H5_TEST_N resultfile resultcode)
@@ -521,7 +527,6 @@
set_tests_properties (H5DUMP-N-${resultfile} PROPERTIES WILL_FAIL "true")
endif ()
set_tests_properties (H5DUMP-N-${resultfile} PROPERTIES
- DEPENDS H5DUMP-N-${resultfile}-clear-objects
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles/std"
)
else ()
@@ -541,6 +546,9 @@
set_tests_properties (H5DUMP-N-${resultfile} PROPERTIES
DEPENDS H5DUMP-N-${resultfile}-clear-objects
)
+ if ("H5DUMP-N-${resultfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5DUMP-N-${resultfile} PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5DUMP-N-${resultfile}-clean-objects
COMMAND ${CMAKE_COMMAND} -E remove
@@ -568,7 +576,6 @@
set_tests_properties (H5DUMP-${resultfile} PROPERTIES WILL_FAIL "true")
endif ()
set_tests_properties (H5DUMP-${resultfile} PROPERTIES
- DEPENDS H5DUMP-${resultfile}-clear-objects
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles/std"
)
else ()
@@ -587,6 +594,9 @@
set_tests_properties (H5DUMP-${resultfile} PROPERTIES
DEPENDS H5DUMP-${resultfile}-clear-objects
)
+ if ("H5DUMP-${resultfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5DUMP-${resultfile} PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5DUMP-${resultfile}-output-cmp
COMMAND ${CMAKE_COMMAND} -E compare_files --ignore-eol ${resultfile}.txt ${resultfile}.exp
@@ -596,6 +606,9 @@
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles/std"
)
set_tests_properties (H5DUMP-${resultfile}-output-cmp PROPERTIES DEPENDS H5DUMP-${resultfile})
+ if ("H5DUMP-${resultfile}-output-cmp" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5DUMP-${resultfile}-output-cmp PROPERTIES DISABLED true)
+ endif ()
endif ()
add_test (
NAME H5DUMP-${resultfile}-clean-objects
@@ -652,6 +665,9 @@
DEPENDS H5DUMP-${resultfile}-clear-objects
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles/std"
)
+ if ("H5DUMP-${resultfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5DUMP-${resultfile} PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5DUMP-${resultfile}-output-cmp
COMMAND ${CMAKE_COMMAND} -E compare_files --ignore-eol ${resultfile}.txt ${resultfile}.exp
@@ -668,6 +684,9 @@
DEPENDS H5DUMP-${resultfile}-output-cmp
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles/std"
)
+ if ("H5DUMP-${resultfile}-output-cmp-ddl" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5DUMP-${resultfile}-output-cmp-ddl PROPERTIES DISABLED true)
+ endif ()
endif ()
add_test (
NAME H5DUMP-${resultfile}-clean-objects
@@ -706,6 +725,9 @@
DEPENDS H5DUMP-output-${resultfile}-clear-objects
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles/std"
)
+ if ("H5DUMP-output-${resultfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5DUMP-output-${resultfile} PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5DUMP-output-cmp-${resultfile}
COMMAND ${CMAKE_COMMAND} -E compare_files --ignore-eol ${resultfile}.txt ${resultfile}.exp
@@ -714,6 +736,9 @@
DEPENDS H5DUMP-output-${resultfile}
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles/std"
)
+ if ("H5DUMP-output-cmp-${resultfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5DUMP-output-cmp-${resultfile} PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5DUMP-output-${resultfile}-clean-objects
COMMAND ${CMAKE_COMMAND} -E remove
@@ -744,6 +769,9 @@
set_tests_properties (H5DUMP-${resultfile} PROPERTIES
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles/std"
)
+ if ("H5DUMP-${resultfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5DUMP-${resultfile} PROPERTIES DISABLED true)
+ endif ()
endif ()
endmacro ()
@@ -764,6 +792,9 @@
set_tests_properties (H5DUMP-${resultfile} PROPERTIES
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles/std"
)
+ if ("H5DUMP-${resultfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5DUMP-${resultfile} PROPERTIES DISABLED true)
+ endif ()
endif ()
endmacro ()
@@ -785,6 +816,9 @@
set_tests_properties (H5DUMP-${resultfile} PROPERTIES
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles/std"
)
+ if ("H5DUMP-${resultfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5DUMP-${resultfile} PROPERTIES DISABLED true)
+ endif ()
endif ()
endmacro ()
@@ -808,6 +842,9 @@
set_tests_properties (H5DUMP-${resultfile} PROPERTIES
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles/std"
)
+ if ("H5DUMP-${resultfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5DUMP-${resultfile} PROPERTIES DISABLED true)
+ endif ()
endif ()
endmacro ()
@@ -836,6 +873,9 @@
set_tests_properties (H5DUMP-BIN_EXPORT-${conffile} PROPERTIES
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles/std"
)
+ if ("H5DUMP-BIN_EXPORT-${conffile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5DUMP-BIN_EXPORT-${conffile} PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5DUMP-BIN_EXPORT-${conffile}-clean-objects
COMMAND ${CMAKE_COMMAND} -E remove
@@ -876,16 +916,25 @@
DEPENDS H5DUMP-IMPORT-${resultfile}-clear-objects
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles/std"
)
+ if ("H5DUMP-IMPORT-${resultfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5DUMP-IMPORT-${resultfile} PROPERTIES DISABLED true)
+ endif ()
add_test (NAME H5DUMP-IMPORT-h5import-${resultfile} COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5import${tgt_file_ext}> ${resultfile}.bin -c ${conffile}.out -o ${resultfile}.h5)
set_tests_properties (H5DUMP-IMPORT-h5import-${resultfile} PROPERTIES
DEPENDS H5DUMP-IMPORT-${resultfile}
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles/std"
)
+ if ("H5DUMP-IMPORT-h5import-${resultfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5DUMP-IMPORT-h5import-${resultfile} PROPERTIES DISABLED true)
+ endif ()
add_test (NAME H5DUMP-IMPORT-h5diff-${resultfile} COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5diff${tgt_file_ext}> ${testfile} ${resultfile}.h5 /integer /integer)
set_tests_properties (H5DUMP-IMPORT-h5diff-${resultfile} PROPERTIES
DEPENDS H5DUMP-IMPORT-h5import-${resultfile}
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles/std"
)
+ if ("H5DUMP-IMPORT-h5diff-${resultfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5DUMP-IMPORT-h5diff-${resultfile} PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5DUMP-IMPORT-${resultfile}-clean-objects
COMMAND ${CMAKE_COMMAND} -E remove
@@ -919,6 +968,9 @@
set_tests_properties (H5DUMP_UD-${testname}-${resultfile} PROPERTIES
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles/std"
)
+ if ("H5DUMP_UD-${testname}-${resultfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5DUMP_UD-${testname}-${resultfile} PROPERTIES DISABLED true)
+ endif ()
endif ()
endmacro ()
@@ -1027,7 +1079,7 @@
ADD_H5_TEST (tbitnopaque_le 0 --enable-error-stack tbitnopaque.h5)
endif ()
- #test for the nested compound type
+ # test for the nested compound type
ADD_H5_TEST (tnestcomp-1 0 --enable-error-stack tnestedcomp.h5)
ADD_H5_TEST (tnestedcmpddt 0 --enable-error-stack tnestedcmpddt.h5)
@@ -1056,7 +1108,7 @@
ADD_H5_TEST (tvldtypes4 0 --enable-error-stack tvldtypes4.h5)
ADD_H5_TEST (tvldtypes5 0 --enable-error-stack tvldtypes5.h5)
- #test for file with variable length string data
+ # test for file with variable length string data
ADD_H5_TEST (tvlstr 0 --enable-error-stack tvlstr.h5)
ADD_H5_TEST (tvlenstr_array 0 --enable-error-stack tvlenstr_array.h5)
diff --git a/tools/test/h5dump/CMakeTestsPBITS.cmake b/tools/test/h5dump/CMakeTestsPBITS.cmake
index 118b314..3104846 100644
--- a/tools/test/h5dump/CMakeTestsPBITS.cmake
+++ b/tools/test/h5dump/CMakeTestsPBITS.cmake
@@ -139,6 +139,9 @@
set_tests_properties (H5DUMP-${resultfile} PROPERTIES
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles/pbits"
)
+ if ("H5DUMP-${resultfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5DUMP-${resultfile} PROPERTIES DISABLED true)
+ endif ()
endmacro ()
##############################################################################
diff --git a/tools/test/h5dump/CMakeTestsVDS.cmake b/tools/test/h5dump/CMakeTestsVDS.cmake
index c910acd..1589e70 100644
--- a/tools/test/h5dump/CMakeTestsVDS.cmake
+++ b/tools/test/h5dump/CMakeTestsVDS.cmake
@@ -130,6 +130,9 @@
set_tests_properties (H5DUMP-${resultfile} PROPERTIES
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles/vds"
)
+ if ("H5DUMP-${resultfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5DUMP-${resultfile} PROPERTIES DISABLED true)
+ endif ()
endmacro ()
macro (ADD_H5_VDS_PREFIX_TEST resultfile resultcode)
@@ -162,6 +165,9 @@
-P "${HDF_RESOURCES_DIR}/runTest.cmake"
)
endif ()
+ if ("H5DUMP_PREFIX-${resultfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5DUMP_PREFIX-${resultfile} PROPERTIES DISABLED true)
+ endif ()
endmacro ()
macro (ADD_H5_VDS_LAYOUT resultfile resultcode)
@@ -189,6 +195,9 @@
-P "${HDF_RESOURCES_DIR}/runTest.cmake"
)
endif ()
+ if ("H5DUMP-${resultfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5DUMP-${resultfile} PROPERTIES DISABLED true)
+ endif ()
endmacro ()
##############################################################################
diff --git a/tools/test/h5dump/CMakeTestsXML.cmake b/tools/test/h5dump/CMakeTestsXML.cmake
index d78e738..ae7cd8f 100644
--- a/tools/test/h5dump/CMakeTestsXML.cmake
+++ b/tools/test/h5dump/CMakeTestsXML.cmake
@@ -172,7 +172,7 @@
NAME H5DUMP_XML-${skipresultfile}
COMMAND ${CMAKE_COMMAND} -E echo "SKIP ${skipresultfile}.xml --xml ${ARGN}"
)
- set_property(TEST H5DUMP_XML-${skipresultfile} PROPERTY DISABLED)
+ set_property(TEST H5DUMP_XML-${skipresultfile} PROPERTY DISABLED true)
endif ()
else ()
ADD_XML_H5_TEST (${skipresultfile} ${skipresultcode} ${ARGN})
@@ -202,6 +202,9 @@
set_tests_properties (H5DUMP_XML-${resultfile} PROPERTIES
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles/xml"
)
+ if ("H5DUMP_XML-${resultfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5DUMP_XML-${resultfile} PROPERTIES DISABLED true)
+ endif ()
endmacro ()
##############################################################################
diff --git a/tools/test/h5dump/CMakeVFDTests.cmake b/tools/test/h5dump/CMakeVFDTests.cmake
index b303032..0118725 100644
--- a/tools/test/h5dump/CMakeVFDTests.cmake
+++ b/tools/test/h5dump/CMakeVFDTests.cmake
@@ -55,6 +55,9 @@ macro (ADD_VFD_H5DUMP_TEST vfdname resultfile resultcode)
-P "${HDF_RESOURCES_DIR}/vfdTest.cmake"
)
set_tests_properties (H5DUMP_VFD-${vfdname}-${resultfile}-h5dump PROPERTIES TIMEOUT ${CTEST_SHORT_TIMEOUT})
+ if ("H5DUMP_VFD-${vfdname}-${resultfile}-h5dump" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5DUMP_VFD-${vfdname}-${resultfile}-h5dump PROPERTIES DISABLED true)
+ endif ()
endif ()
endmacro ()
diff --git a/tools/test/h5format_convert/CMakeTests.cmake b/tools/test/h5format_convert/CMakeTests.cmake
index ab14a8c..ecf16bf 100644
--- a/tools/test/h5format_convert/CMakeTests.cmake
+++ b/tools/test/h5format_convert/CMakeTests.cmake
@@ -105,46 +105,52 @@
COMMAND ${CMAKE_COMMAND} -E remove ./testfiles/${testname}-tmp.h5
)
if (${testfile})
- add_test (
- NAME H5FC-${testname}-${testfile}-tmpfile
- COMMAND ${CMAKE_COMMAND} -E copy_if_different ${HDF5_TOOLS_TEST_H5FC_SOURCE_DIR}/testfiles/${testfile} ./testfiles/${testname}-tmp.h5
- )
- set_tests_properties (H5FC-${testname}-${testfile}-tmpfile PROPERTIES
- DEPENDS H5FC-${testname}-${testfile}-clear-objects
- )
- add_test (
- NAME H5FC-${testname}-${testfile}
- COMMAND "${CMAKE_COMMAND}"
- -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}"
- -D "TEST_PROGRAM=$<TARGET_FILE:h5format_convert${tgt_file_ext}>"
- -D "TEST_ARGS=${ARGN};${testname}-tmp.h5"
- -D "TEST_FOLDER=${PROJECT_BINARY_DIR}/testfiles"
- -D "TEST_OUTPUT=${testname}-${testfile}.out"
- -D "TEST_EXPECT=${resultcode}"
- -D "TEST_REFERENCE=${resultfile}"
- -D "TEST_ERRREF=${resultfile}.err"
- -P "${HDF_RESOURCES_DIR}/runTest.cmake"
- )
- set_tests_properties (H5FC-${testname}-${testfile} PROPERTIES
- DEPENDS H5FC-${testname}-${testfile}-tmpfile
- )
- set (last_test "H5FC-${testname}-${testfile}")
+ add_test (
+ NAME H5FC-${testname}-${testfile}-tmpfile
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different ${HDF5_TOOLS_TEST_H5FC_SOURCE_DIR}/testfiles/${testfile} ./testfiles/${testname}-tmp.h5
+ )
+ set_tests_properties (H5FC-${testname}-${testfile}-tmpfile PROPERTIES
+ DEPENDS H5FC-${testname}-${testfile}-clear-objects
+ )
+ add_test (
+ NAME H5FC-${testname}-${testfile}
+ COMMAND "${CMAKE_COMMAND}"
+ -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}"
+ -D "TEST_PROGRAM=$<TARGET_FILE:h5format_convert${tgt_file_ext}>"
+ -D "TEST_ARGS=${ARGN};${testname}-tmp.h5"
+ -D "TEST_FOLDER=${PROJECT_BINARY_DIR}/testfiles"
+ -D "TEST_OUTPUT=${testname}-${testfile}.out"
+ -D "TEST_EXPECT=${resultcode}"
+ -D "TEST_REFERENCE=${resultfile}"
+ -D "TEST_ERRREF=${resultfile}.err"
+ -P "${HDF_RESOURCES_DIR}/runTest.cmake"
+ )
+ set_tests_properties (H5FC-${testname}-${testfile} PROPERTIES
+ DEPENDS H5FC-${testname}-${testfile}-tmpfile
+ )
+ if ("H5FC-${testname}-${testfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5FC-${testname}-${testfile} PROPERTIES DISABLED true)
+ endif ()
+ set (last_test "H5FC-${testname}-${testfile}")
else ()
- add_test (
- NAME H5FC-${testname}-${testfile}-NA
- COMMAND "${CMAKE_COMMAND}"
- -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}"
- -D "TEST_PROGRAM=$<TARGET_FILE:h5format_convert${tgt_file_ext}>"
- -D "TEST_ARGS=${ARGN}"
- -D "TEST_FOLDER=${PROJECT_BINARY_DIR}/testfiles"
- -D "TEST_OUTPUT=${testname}-${testfile}.out"
- -D "TEST_EXPECT=${resultcode}"
- -D "TEST_REFERENCE=${resultfile}"
- -P "${HDF_RESOURCES_DIR}/runTest.cmake"
- )
- set_tests_properties (H5FC-${testname}-${testfile}-NA PROPERTIES
- DEPENDS H5FC-${testname}-${testfile}-tmpfile
- )
+ add_test (
+ NAME H5FC-${testname}-${testfile}-NA
+ COMMAND "${CMAKE_COMMAND}"
+ -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}"
+ -D "TEST_PROGRAM=$<TARGET_FILE:h5format_convert${tgt_file_ext}>"
+ -D "TEST_ARGS=${ARGN}"
+ -D "TEST_FOLDER=${PROJECT_BINARY_DIR}/testfiles"
+ -D "TEST_OUTPUT=${testname}-${testfile}.out"
+ -D "TEST_EXPECT=${resultcode}"
+ -D "TEST_REFERENCE=${resultfile}"
+ -P "${HDF_RESOURCES_DIR}/runTest.cmake"
+ )
+ set_tests_properties (H5FC-${testname}-${testfile}-NA PROPERTIES
+ DEPENDS H5FC-${testname}-${testfile}-tmpfile
+ )
+ if ("H5FC-${testname}-${testfile}-NA" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5FC-${testname}-${testfile}-NA PROPERTIES DISABLED true)
+ endif ()
endif ()
add_test (
NAME H5FC-${testname}-${testfile}-clean-objects
@@ -185,6 +191,9 @@
set_tests_properties (H5FC-${testname}-${testfile} PROPERTIES
DEPENDS H5FC-${testname}-${testfile}-tmpfile
)
+ if ("H5FC-${testname}-${testfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5FC-${testname}-${testfile} PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5FC-${testname}-${testfile}-clean-objects
COMMAND ${CMAKE_COMMAND} -E remove ./testfiles/${testname}-tmp.h5
@@ -225,6 +234,9 @@
set_tests_properties (H5FC-${testname}-${testfile} PROPERTIES
DEPENDS H5FC-${testname}-${testfile}-tmpfile
)
+ if ("H5FC-${testname}-${testfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5FC-${testname}-${testfile} PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5FC-${testname}-${testfile}-clean-objects
COMMAND ${CMAKE_COMMAND} -E remove ./testfiles/${testname}-tmp.h5
@@ -278,6 +290,9 @@
DEPENDS "H5FC-${testname}-tmpfile"
FIXTURES_REQUIRED clear_H5FC-${testname}
)
+ if ("H5FC-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5FC-${testname} PROPERTIES DISABLED true)
+ endif ()
endif ()
endmacro ()
@@ -292,6 +307,9 @@
DEPENDS "H5FC-${dependtest}"
FIXTURES_REQUIRED clear_H5FC-${dependtest}
)
+ if ("H5FC_CHECK_IDX-${dependtest}-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5FC_CHECK_IDX-${dependtest}-${testname} PROPERTIES DISABLED true)
+ endif ()
endif ()
endmacro ()
@@ -325,6 +343,9 @@
set_tests_properties (H5FC_TEST_CHECK_IDX-${testname} PROPERTIES
DEPENDS "H5FC_TEST_CHECK_IDX-${testname}-tmpfile"
)
+ if ("H5FC_TEST_CHECK_IDX-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5FC_TEST_CHECK_IDX-${testname} PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5FC_TEST_CHECK_IDX-${testname}-check
COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5fc_chk_idx> ./testfiles/${testname}-tmp.h5 ${ARGN}
@@ -332,6 +353,9 @@
set_tests_properties (H5FC_TEST_CHECK_IDX-${testname}-check PROPERTIES
DEPENDS "H5FC_TEST_CHECK_IDX-${testname}"
)
+ if ("H5FC_TEST_CHECK_IDX-${testname}-check" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5FC_TEST_CHECK_IDX-${testname}-check PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5FC_TEST_CHECK_IDX-${testname}-clean-objects
COMMAND ${CMAKE_COMMAND} -E remove
@@ -373,6 +397,9 @@
set_tests_properties (H5FC_H5DUMP_CHECK-${testname} PROPERTIES
DEPENDS "H5FC_H5DUMP_CHECK-${testname}-tmpfile"
)
+ if ("H5FC_H5DUMP_CHECK-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5FC_H5DUMP_CHECK-${testname} PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5FC_H5DUMP_CHECK-${testname}-dump
COMMAND "${CMAKE_COMMAND}"
@@ -388,6 +415,9 @@
set_tests_properties (H5FC_H5DUMP_CHECK-${testname}-dump PROPERTIES
DEPENDS "H5FC_H5DUMP_CHECK-${testname}"
)
+ if ("H5FC_H5DUMP_CHECK-${testname}-dump" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5FC_H5DUMP_CHECK-${testname}-dump PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5FC_H5DUMP_CHECK-${testname}-clean-objects
COMMAND ${CMAKE_COMMAND} -E remove
diff --git a/tools/test/h5import/CMakeTests.cmake b/tools/test/h5import/CMakeTests.cmake
index c3bbd79..71c0421 100644
--- a/tools/test/h5import/CMakeTests.cmake
+++ b/tools/test/h5import/CMakeTests.cmake
@@ -118,6 +118,9 @@
DEPENDS H5IMPORT-${testname}-clear-objects
FIXTURES_REQUIRED set_h5importtest
)
+ if ("H5IMPORT-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5IMPORT-${testname} PROPERTIES DISABLED true)
+ endif ()
# If using memchecker skip macro based tests
if (NOT HDF5_ENABLE_USING_MEMCHECKER)
add_test (
@@ -138,6 +141,9 @@
DEPENDS H5IMPORT-${testname}
FIXTURES_REQUIRED set_h5importtest
)
+ if ("H5IMPORT-${testname}-H5DMP" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5IMPORT-${testname}-H5DMP PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5IMPORT-${testname}-H5DMP_CMP
COMMAND "${CMAKE_COMMAND}"
@@ -155,6 +161,9 @@
DEPENDS H5IMPORT-${testname}-H5DMP
FIXTURES_REQUIRED set_h5importtest
)
+ if ("H5IMPORT-${testname}-H5DMP_CMP" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5IMPORT-${testname}-H5DMP_CMP PROPERTIES DISABLED true)
+ endif ()
endif ()
add_test (
@@ -217,6 +226,9 @@
DEPENDS "H5IMPORT-DUMP-${testname}-clear-objects"
FIXTURES_REQUIRED set_h5importtest
)
+ if ("H5IMPORT-DUMP-${testname}-H5DMP" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5IMPORT-DUMP-${testname}-H5DMP PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5IMPORT-DUMP-${testname}
@@ -234,6 +246,9 @@
DEPENDS "H5IMPORT-DUMP-${testname}-H5DMP"
FIXTURES_REQUIRED set_h5importtest
)
+ if ("H5IMPORT-DUMP-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5IMPORT-DUMP-${testname} PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5IMPORT-DUMP-${testname}-H5DFF
@@ -252,6 +267,9 @@
DEPENDS "H5IMPORT-DUMP-${testname}"
FIXTURES_REQUIRED set_h5importtest
)
+ if ("H5IMPORT-DUMP-${testname}-H5DFF" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5IMPORT-DUMP-${testname}-H5DFF PROPERTIES DISABLED true)
+ endif ()
endif ()
add_test (
@@ -298,6 +316,9 @@
DEPENDS "H5IMPORT_SUB-DUMP-${testname}-clear-objects"
FIXTURES_REQUIRED set_h5importtest
)
+ if ("H5IMPORT_SUB-DUMP-${testname}-H5DMP" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5IMPORT_SUB-DUMP-${testname}-H5DMP PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5IMPORT_SUB-DUMP-${testname}-H5IMP
@@ -315,6 +336,9 @@
DEPENDS "H5IMPORT_SUB-DUMP-${testname}-H5DMP"
FIXTURES_REQUIRED set_h5importtest
)
+ if ("H5IMPORT_SUB-DUMP-${testname}-H5IMP" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5IMPORT_SUB-DUMP-${testname}-H5IMP PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5IMPORT_SUB-DUMP-${testname}-CMP
COMMAND "${CMAKE_COMMAND}"
@@ -331,6 +355,9 @@
DEPENDS "H5IMPORT_SUB-DUMP-${testname}-H5IMP"
FIXTURES_REQUIRED set_h5importtest
)
+ if ("H5IMPORT_SUB-DUMP-${testname}-CMP" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5IMPORT_SUB-DUMP-${testname}-CMP PROPERTIES DISABLED true)
+ endif ()
endif ()
add_test (
@@ -352,7 +379,7 @@
NAME H5IMPORT-DUMP-${testname}
COMMAND ${CMAKE_COMMAND} -E echo "SKIP ${testname} ${datasetname} ${testfile} --- DEFLATE filter not available"
)
- set_property(TEST H5IMPORT-DUMP-${testname} PROPERTY DISABLED)
+ set_property(TEST H5IMPORT-DUMP-${testname} PROPERTY DISABLED true)
endif ()
endmacro ()
diff --git a/tools/test/h5jam/CMakeTests.cmake b/tools/test/h5jam/CMakeTests.cmake
index eb6070e..d87899a 100644
--- a/tools/test/h5jam/CMakeTests.cmake
+++ b/tools/test/h5jam/CMakeTests.cmake
@@ -74,6 +74,9 @@
-P "${HDF_RESOURCES_DIR}/runTest.cmake"
)
endif ()
+ if ("H5JAM-${expectfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5JAM-${expectfile} PROPERTIES DISABLED true)
+ endif ()
endmacro ()
# ============================================================
@@ -101,6 +104,9 @@
-P "${HDF_RESOURCES_DIR}/runTest.cmake"
)
endif ()
+ if ("H5JAM-UNJAM-${expectfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5JAM-UNJAM-${expectfile} PROPERTIES DISABLED true)
+ endif ()
endmacro ()
macro (CHECKFILE testname testdepends expected actual)
@@ -119,6 +125,9 @@
-D "TEST_SKIP_COMPARE=TRUE"
-P "${HDF_RESOURCES_DIR}/runTest.cmake"
)
+ if ("H5JAM-${testname}-CHECKFILE-H5DMP" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5JAM-${testname}-CHECKFILE-H5DMP PROPERTIES DISABLED true)
+ endif ()
set_tests_properties (H5JAM-${testname}-CHECKFILE-H5DMP PROPERTIES DEPENDS ${testdepends})
add_test (
NAME H5JAM-${testname}-CHECKFILE-H5DMP_CMP
@@ -133,6 +142,9 @@
-D "TEST_REFERENCE=${actual}.new"
-P "${HDF_RESOURCES_DIR}/runTest.cmake"
)
+ if ("H5JAM-${testname}-CHECKFILE-H5DMP_CMP" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5JAM-${testname}-CHECKFILE-H5DMP_CMP PROPERTIES DISABLED true)
+ endif ()
set_tests_properties (H5JAM-${testname}-CHECKFILE-H5DMP_CMP PROPERTIES DEPENDS H5JAM-${testname}-CHECKFILE-H5DMP)
endif ()
endmacro()
@@ -184,6 +196,9 @@
set (compare_test "")
endif ()
endif ()
+ if ("H5JAM-${testname}-UNJAM" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5JAM-${testname}-UNJAM PROPERTIES DISABLED true)
+ endif ()
if (${compare_test})
add_test (
NAME H5JAM-${testname}-UNJAM-CHECK_UB_1-clear-objects
@@ -208,6 +223,9 @@
-P "${HDF_RESOURCES_DIR}/userblockTest.cmake"
)
set_tests_properties (H5JAM-${testname}-UNJAM-CHECK_UB_1 PROPERTIES DEPENDS H5JAM-${testname}-UNJAM-CHECK_UB_1-clear-objects)
+ if ("H5JAM-${testname}-UNJAM-CHECK_UB_1" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5JAM-${testname}-UNJAM-CHECK_UB_1 PROPERTIES DISABLED true)
+ endif ()
endif ()
add_test (
@@ -229,6 +247,9 @@
else ()
set_tests_properties (H5JAM-${testname}-UNJAM-CHECK_NOUB PROPERTIES DEPENDS H5JAM-${testname}-UNJAM)
endif ()
+ if ("H5JAM-${testname}-UNJAM-CHECK_NOUB" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5JAM-${testname}-UNJAM-CHECK_NOUB PROPERTIES DISABLED true)
+ endif ()
CHECKFILE (${testname} "H5JAM-${testname}-UNJAM-CHECK_NOUB" ${chkfile} ${outfile})
endif ()
@@ -242,6 +263,9 @@
)
endif ()
add_test (NAME H5JAM-${testname} COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5jam${tgt_file_ext}> -u testfiles/${jamfile} -i testfiles/${infile} -o ${outfile} ${ARGN})
+ if ("H5JAM-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5JAM-${testname} PROPERTIES DISABLED true)
+ endif ()
if (NOT HDF5_ENABLE_USING_MEMCHECKER)
set_tests_properties (H5JAM-${testname} PROPERTIES DEPENDS H5JAM-${testname}-clear-objects)
set (compare_test ${outfile})
@@ -273,6 +297,9 @@
-P "${HDF_RESOURCES_DIR}/userblockTest.cmake"
)
set_tests_properties (H5JAM-${testname}-CHECK_UB_1 PROPERTIES DEPENDS H5JAM-${testname}-CHECK_UB_1-clear-objects)
+ if ("H5JAM-${testname}-CHECK_UB_1" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5JAM-${testname}-CHECK_UB_1 PROPERTIES DISABLED true)
+ endif ()
CHECKFILE (${testname} "H5JAM-${testname}-CHECK_UB_1" ${chkfile} ${outfile})
endif ()
endmacro ()
@@ -295,9 +322,15 @@
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${chkfile} ${chkfile}.cpy.h5
)
set_tests_properties (H5JAM-${testname}_NONE_COPY PROPERTIES DEPENDS H5JAM-${testname}_NONE-SETUP)
+ if ("H5JAM-${testname}_NONE_COPY" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5JAM-${testname}_NONE_COPY PROPERTIES DISABLED true)
+ endif ()
add_test (NAME H5JAM-${testname}_NONE COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5jam${tgt_file_ext}> -u testfiles/${jamfile} -i ${chkfile} ${ARGN})
set_tests_properties (H5JAM-${testname}_NONE PROPERTIES DEPENDS H5JAM-${testname}_NONE_COPY)
+ if ("H5JAM-${testname}_NONE" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5JAM-${testname}_NONE PROPERTIES DISABLED true)
+ endif ()
set (compare_test ${chkfile})
set (compare_orig ${chkfile}.cpy.h5)
@@ -328,6 +361,9 @@
-P "${HDF_RESOURCES_DIR}/userblockTest.cmake"
)
set_tests_properties (H5JAM-${testname}_NONE-CHECK_UB_1 PROPERTIES DEPENDS H5JAM-${testname}_NONE-CHECK_UB_1-clear-objects)
+ if ("H5JAM-${testname}_NONE-CHECK_UB_1" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5JAM-${testname}_NONE-CHECK_UB_1 PROPERTIES DISABLED true)
+ endif ()
CHECKFILE (${testname} "H5JAM-${testname}_NONE-CHECK_UB_1" ${infile} ${chkfile})
endif ()
endmacro ()
diff --git a/tools/test/h5ls/CMakeTests.cmake b/tools/test/h5ls/CMakeTests.cmake
index 14a7e5d..629f324 100644
--- a/tools/test/h5ls/CMakeTests.cmake
+++ b/tools/test/h5ls/CMakeTests.cmake
@@ -169,6 +169,9 @@
set_tests_properties (H5LS-${resultfile} PROPERTIES
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles"
)
+ if ("H5LS-${resultfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5LS-${resultfile} PROPERTIES DISABLED true)
+ endif ()
endmacro ()
macro (ADD_H5_ERR_TEST resultfile resultcode)
@@ -197,6 +200,9 @@
set_tests_properties (H5LS-${resultfile} PROPERTIES
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles"
)
+ if ("H5LS-${resultfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5LS-${resultfile} PROPERTIES DISABLED true)
+ endif ()
endmacro ()
macro (ADD_H5_UD_TEST testname resultcode resultfile)
@@ -219,6 +225,9 @@
set_tests_properties (H5LS_UD-${testname}-${resultfile} PROPERTIES
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles"
)
+ if ("H5LS_UD-${testname}-${resultfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5LS_UD-${testname}-${resultfile} PROPERTIES DISABLED true)
+ endif ()
endif ()
endmacro ()
diff --git a/tools/test/h5ls/CMakeTestsVDS.cmake b/tools/test/h5ls/CMakeTestsVDS.cmake
index 3718f64..9bf4042 100644
--- a/tools/test/h5ls/CMakeTestsVDS.cmake
+++ b/tools/test/h5ls/CMakeTestsVDS.cmake
@@ -103,6 +103,9 @@
-P "${HDF_RESOURCES_DIR}/runTest.cmake"
)
endif ()
+ if ("H5LS-${resultfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5LS-${resultfile} PROPERTIES DISABLED true)
+ endif ()
endmacro ()
macro (ADD_H5_VDS_PREFIX_TEST resultfile resultcode)
@@ -132,6 +135,9 @@
-P "${HDF_RESOURCES_DIR}/runTest.cmake"
)
endif ()
+ if ("H5LS_PREFIX-${resultfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5LS_PREFIX-${resultfile} PROPERTIES DISABLED true)
+ endif ()
endmacro ()
##############################################################################
diff --git a/tools/test/h5repack/CMakeTests.cmake b/tools/test/h5repack/CMakeTests.cmake
index 5c41254..3fb5d56 100644
--- a/tools/test/h5repack/CMakeTests.cmake
+++ b/tools/test/h5repack/CMakeTests.cmake
@@ -267,6 +267,9 @@
set_tests_properties (H5REPACK-h5repack-${testname} PROPERTIES
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles"
)
+ if ("H5REPACK-h5repack-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPACK-h5repack-${testname} PROPERTIES DISABLED true)
+ endif ()
endmacro ()
macro (ADD_H5_TEST_OLD testname testtype testfile)
@@ -276,7 +279,7 @@
NAME H5REPACK_OLD-${testname}
COMMAND ${CMAKE_COMMAND} -E echo "SKIP ${ARGN} -i ${PROJECT_BINARY_DIR}/testfiles/${testfile} -o ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${testfile}"
)
- set_property(TEST H5REPACK_OLD-${testname} PROPERTY DISABLED)
+ set_property(TEST H5REPACK_OLD-${testname} PROPERTY DISABLED true)
else ()
add_test (
NAME H5REPACK_OLD-${testname}-clear-objects
@@ -289,6 +292,9 @@
set_tests_properties (H5REPACK_OLD-${testname} PROPERTIES
DEPENDS H5REPACK_OLD-${testname}-clear-objects
)
+ if ("H5REPACK_OLD-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPACK_OLD-${testname} PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5REPACK_OLD-${testname}_DFF
COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5diff${tgt_file_ext}> ${PROJECT_BINARY_DIR}/testfiles/${testfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${testfile}
@@ -296,6 +302,9 @@
set_tests_properties (H5REPACK_OLD-${testname}_DFF PROPERTIES
DEPENDS H5REPACK_OLD-${testname}
)
+ if ("H5REPACK_OLD-${testname}_DFF" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPACK_OLD-${testname}_DFF PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5REPACK_OLD-${testname}-clean-objects
COMMAND ${CMAKE_COMMAND} -E remove testfiles/out-${testname}.${testfile}
@@ -314,7 +323,7 @@
NAME H5REPACK-${testname}
COMMAND ${CMAKE_COMMAND} -E echo "SKIP ${ARGN} ${PROJECT_BINARY_DIR}/testfiles/${testfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${testfile}"
)
- set_property(TEST H5REPACK-${testname} PROPERTY DISABLED)
+ set_property(TEST H5REPACK-${testname} PROPERTY DISABLED true)
endif ()
else ()
add_test (
@@ -328,6 +337,9 @@
set_tests_properties (H5REPACK-${testname} PROPERTIES
DEPENDS H5REPACK-${testname}-clear-objects
)
+ if ("H5REPACK-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPACK-${testname} PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5REPACK-${testname}_DFF
COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5diff${tgt_file_ext}> --enable-error-stack ${PROJECT_BINARY_DIR}/testfiles/${testfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${testfile}
@@ -335,6 +347,9 @@
set_tests_properties (H5REPACK-${testname}_DFF PROPERTIES
DEPENDS H5REPACK-${testname}
)
+ if ("H5REPACK-${testname}_DFF" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPACK-${testname}_DFF PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5REPACK-${testname}-clean-objects
COMMAND ${CMAKE_COMMAND} -E remove testfiles/out-${testname}.${testfile}
@@ -352,7 +367,7 @@
NAME H5REPACK_CMP-${testname}
COMMAND ${CMAKE_COMMAND} -E echo "SKIP ${ARGN} ${PROJECT_BINARY_DIR}/testfiles/${resultfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${resultfile}"
)
- set_property(TEST H5REPACK_CMP-${testname} PROPERTY DISABLED)
+ set_property(TEST H5REPACK_CMP-${testname} PROPERTY DISABLED true)
endif ()
else ()
add_test (
@@ -385,6 +400,9 @@
set_tests_properties (H5REPACK_CMP-${testname} PROPERTIES
DEPENDS H5REPACK_CMP-${testname}-clear-objects
)
+ if ("H5REPACK_CMP-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPACK_CMP-${testname} PROPERTIES DISABLED true)
+ endif ()
endif ()
add_test (
NAME H5REPACK_CMP-${testname}-clean-objects
@@ -403,7 +421,7 @@
NAME H5REPACK_MASK-${testname}
COMMAND ${CMAKE_COMMAND} -E echo "SKIP ${ARGN} ${PROJECT_BINARY_DIR}/testfiles/${resultfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${resultfile}"
)
- set_property(TEST H5REPACK_MASK-${testname} PROPERTY DISABLED)
+ set_property(TEST H5REPACK_MASK-${testname} PROPERTY DISABLED true)
endif ()
else ()
add_test (
@@ -435,6 +453,9 @@
set_tests_properties (H5REPACK_MASK-${testname} PROPERTIES
DEPENDS H5REPACK_MASK-${testname}-clear-objects
)
+ if ("H5REPACK_MASK-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPACK_MASK-${testname} PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5REPACK_MASK-${testname}-clean-objects
COMMAND ${CMAKE_COMMAND} -E remove testfiles/out-${testname}.${resultfile}
@@ -452,7 +473,7 @@
NAME H5REPACK_DMP-${testname}
COMMAND ${CMAKE_COMMAND} -E echo "SKIP ${ARGN} ${PROJECT_BINARY_DIR}/testfiles/${resultfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${resultfile}"
)
- set_property(TEST H5REPACK_DMP-${testname} PROPERTY DISABLED)
+ set_property(TEST H5REPACK_DMP-${testname} PROPERTY DISABLED true)
endif ()
else ()
add_test (
@@ -466,6 +487,9 @@
set_tests_properties (H5REPACK_DMP-${testname} PROPERTIES
DEPENDS H5REPACK_DMP-${testname}-clear-objects
)
+ if ("H5REPACK_DMP-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPACK_DMP-${testname} PROPERTIES DISABLED true)
+ endif ()
if (NOT HDF5_ENABLE_USING_MEMCHECKER)
add_test (
NAME H5REPACK_DMP-h5dump-${testname}
@@ -482,6 +506,9 @@
set_tests_properties (H5REPACK_DMP-h5dump-${testname} PROPERTIES
DEPENDS H5REPACK_DMP-${testname}
)
+ if ("H5REPACK_DMP-h5dump-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPACK_DMP-h5dump-${testname} PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5REPACK_DMP-${testname}-clean-objects
COMMAND ${CMAKE_COMMAND} -E remove testfiles/out-${testname}.${resultfile}
@@ -508,7 +535,7 @@
NAME H5REPACK_DMP-${testname}
COMMAND ${CMAKE_COMMAND} -E echo "SKIP ${ARGN} ${PROJECT_BINARY_DIR}/testfiles/${resultfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${resultfile}"
)
- set_property(TEST H5REPACK_DMP-${testname} PROPERTY DISABLED)
+ set_property(TEST H5REPACK_DMP-${testname} PROPERTY DISABLED true)
endif ()
else ()
add_test (
@@ -525,6 +552,9 @@
set_tests_properties (H5REPACK_DMP-${testname} PROPERTIES
DEPENDS H5REPACK_DMP-${testname}-clear-objects
)
+ if ("H5REPACK_DMP-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPACK_DMP-${testname} PROPERTIES DISABLED true)
+ endif ()
if (NOT HDF5_ENABLE_USING_MEMCHECKER)
add_test (
NAME H5REPACK_DMP-h5dump-${testname}
@@ -541,6 +571,9 @@
set_tests_properties (H5REPACK_DMP-h5dump-${testname} PROPERTIES
DEPENDS "H5REPACK_DMP-${testname}"
)
+ if ("H5REPACK_DMP-h5dump-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPACK_DMP-h5dump-${testname} PROPERTIES DISABLED true)
+ endif ()
endif ()
endif ()
endmacro ()
@@ -552,7 +585,7 @@
NAME H5REPACK_DIFF-${testname}
COMMAND ${CMAKE_COMMAND} -E echo "SKIP ${ARGN} ${PROJECT_BINARY_DIR}/testfiles/${testfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${testfile}"
)
- set_property(TEST H5REPACK_DIFF-${testname} PROPERTY DISABLED)
+ set_property(TEST H5REPACK_DIFF-${testname} PROPERTY DISABLED true)
endif ()
else ()
add_test (
@@ -566,6 +599,9 @@
set_tests_properties (H5REPACK_DIFF-${testname} PROPERTIES
DEPENDS H5REPACK_DIFF-${testname}-clear-objects
)
+ if ("H5REPACK_DIFF-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPACK_DIFF-${testname} PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5REPACK_DIFF-${testname}_DFF
COMMAND "${CMAKE_COMMAND}"
@@ -581,6 +617,9 @@
set_tests_properties (H5REPACK_DIFF-${testname}_DFF PROPERTIES
DEPENDS H5REPACK_DIFF-${testname}
)
+ if ("H5REPACK_DIFF-${testname}_DFF" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPACK_DIFF-${testname}_DFF PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5REPACK_DIFF-${testname}-clean-objects
COMMAND ${CMAKE_COMMAND} -E remove testfiles/out-${testname}.${testfile}
@@ -598,7 +637,7 @@
NAME H5REPACK_STAT-${testname}
COMMAND ${CMAKE_COMMAND} -E echo "SKIP ${ARGN} ${PROJECT_BINARY_DIR}/testfiles/${resultfile} ${PROJECT_BINARY_DIR}/testfiles/out-${statarg}.${resultfile}"
)
- set_property(TEST H5REPACK_STAT-${testname} PROPERTY DISABLED)
+ set_property(TEST H5REPACK_STAT-${testname} PROPERTY DISABLED true)
endif ()
else ()
add_test (
@@ -612,6 +651,9 @@
set_tests_properties (H5REPACK_STAT-${testname} PROPERTIES
DEPENDS H5REPACK_STAT-${testname}-clear-objects
)
+ if ("H5REPACK_STAT-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPACK_STAT-${testname} PROPERTIES DISABLED true)
+ endif ()
if (NOT HDF5_ENABLE_USING_MEMCHECKER)
add_test (
NAME H5REPACK_STAT-h5stat-${testname}
@@ -628,6 +670,9 @@
set_tests_properties (H5REPACK_STAT-h5stat-${testname} PROPERTIES
DEPENDS H5REPACK_STAT-${testname}
)
+ if ("H5REPACK_STAT-h5stat-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPACK_STAT-h5stat-${testname} PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5REPACK_STAT-${testname}-clean-objects
COMMAND ${CMAKE_COMMAND} -E remove testfiles/out-${statarg}.${resultfile}
@@ -654,7 +699,7 @@
NAME H5REPACK_VERIFY_LAYOUT-${testname}
COMMAND ${CMAKE_COMMAND} -E echo "SKIP -d ${testdset} -pH ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${resultfile}"
)
- set_property(TEST H5REPACK_VERIFY_LAYOUT-${testname} PROPERTY DISABLED)
+ set_property(TEST H5REPACK_VERIFY_LAYOUT-${testname} PROPERTY DISABLED true)
endif ()
else ()
if (NOT HDF5_ENABLE_USING_MEMCHECKER)
@@ -669,6 +714,9 @@
set_tests_properties (H5REPACK_VERIFY_LAYOUT-${testname} PROPERTIES
DEPENDS H5REPACK_VERIFY_LAYOUT-${testname}-clear-objects
)
+ if ("H5REPACK_VERIFY_LAYOUT-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPACK_VERIFY_LAYOUT-${testname} PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5REPACK_VERIFY_LAYOUT-${testname}_DFF
COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5diff${tgt_file_ext}> ${PROJECT_BINARY_DIR}/testfiles/${testfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${testfile}
@@ -676,6 +724,9 @@
set_tests_properties (H5REPACK_VERIFY_LAYOUT-${testname}_DFF PROPERTIES
DEPENDS H5REPACK_VERIFY_LAYOUT-${testname}
)
+ if ("H5REPACK_VERIFY_LAYOUT-${testname}_DFF" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPACK_VERIFY_LAYOUT-${testname}_DFF PROPERTIES DISABLED true)
+ endif ()
if (NOT ${resultcode})
add_test (
NAME H5REPACK_VERIFY_LAYOUT-${testname}_DMP
@@ -720,6 +771,9 @@
DEPENDS H5REPACK_VERIFY_LAYOUT-${testname}_DFF
)
endif ()
+ if ("H5REPACK_VERIFY_LAYOUT-${testname}_DMP" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPACK_VERIFY_LAYOUT-${testname}_DMP PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5REPACK_VERIFY_LAYOUT-${testname}-clean-objects
COMMAND ${CMAKE_COMMAND} -E remove testfiles/out-${testname}.${testfile}
@@ -738,7 +792,7 @@
NAME H5REPACK_VERIFY_LAYOUT_VDS-${testname}
COMMAND ${CMAKE_COMMAND} -E echo "SKIP -d ${testdset} -pH ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${resultfile}"
)
- set_property(TEST H5REPACK_VERIFY_LAYOUT_VDS-${testname} PROPERTY DISABLED)
+ set_property(TEST H5REPACK_VERIFY_LAYOUT_VDS-${testname} PROPERTY DISABLED true)
endif ()
else ()
if (NOT HDF5_ENABLE_USING_MEMCHECKER)
@@ -755,6 +809,9 @@
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles"
DEPENDS H5REPACK_VERIFY_LAYOUT_VDS-${testname}-clear-objects
)
+ if ("H5REPACK_VERIFY_LAYOUT_VDS-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPACK_VERIFY_LAYOUT_VDS-${testname} PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5REPACK_VERIFY_LAYOUT_VDS-${testname}_DMP
COMMAND "${CMAKE_COMMAND}"
@@ -771,6 +828,9 @@
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles"
DEPENDS H5REPACK_VERIFY_LAYOUT_VDS-${testname}
)
+ if ("H5REPACK_VERIFY_LAYOUT_VDS-${testname}_DMP" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPACK_VERIFY_LAYOUT_VDS-${testname}_DMP PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5REPACK_VERIFY_LAYOUT_VDS-${testname}-clean-objects
COMMAND ${CMAKE_COMMAND} -E remove testfiles/out-${testname}.${testfile}
@@ -796,6 +856,9 @@
set_tests_properties (H5REPACK_VERIFY_SUPERBLOCK-${testname} PROPERTIES
DEPENDS H5REPACK_VERIFY_SUPERBLOCK-${testname}-clear-objects
)
+ if ("H5REPACK_VERIFY_SUPERBLOCK-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPACK_VERIFY_SUPERBLOCK-${testname} PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5REPACK_VERIFY_SUPERBLOCK-${testname}_DMP
COMMAND "${CMAKE_COMMAND}"
@@ -812,6 +875,9 @@
set_tests_properties (H5REPACK_VERIFY_SUPERBLOCK-${testname}_DMP PROPERTIES
DEPENDS H5REPACK_VERIFY_SUPERBLOCK-${testname}
)
+ if ("H5REPACK_VERIFY_SUPERBLOCK-${testname}_DMP" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPACK_VERIFY_SUPERBLOCK-${testname}_DMP PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5REPACK_VERIFY_SUPERBLOCK-${testname}-clean-objects
COMMAND ${CMAKE_COMMAND} -E remove testfiles/out-${testname}.${testfile}
@@ -835,6 +901,9 @@
DEPENDS ADD_H5_VERIFY_INVALIDBOUNDS-h5repack-${testname}-clear-objects
WILL_FAIL "true"
)
+ if ("ADD_H5_VERIFY_INVALIDBOUNDS-h5repack-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (ADD_H5_VERIFY_INVALIDBOUNDS-h5repack-${testname} PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME ADD_H5_VERIFY_INVALIDBOUNDS-h5repack-${testname}-clean-objects
COMMAND ${CMAKE_COMMAND} -E remove testfiles/out-${testname}.${testfile}
@@ -859,6 +928,9 @@
set_tests_properties (H5REPACK_META-${testname}_N PROPERTIES
DEPENDS H5REPACK_META-${testname}-clear-objects
)
+ if ("H5REPACK_META-${testname}_N" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPACK_META-${testname}_N PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5REPACK_META-${testname}_N_DFF
COMMAND "${CMAKE_COMMAND}"
@@ -874,6 +946,9 @@
set_tests_properties (H5REPACK_META-${testname}_N_DFF PROPERTIES
DEPENDS H5REPACK_META-${testname}_N
)
+ if ("H5REPACK_META-${testname}_N_DFF" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPACK_META-${testname}_N_DFF PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5REPACK_META-${testname}_M
COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5repack${tgt_file_ext}> ${ARGN} ${PROJECT_BINARY_DIR}/testfiles/${testfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}_M.${testname}.h5
@@ -881,6 +956,9 @@
set_tests_properties (H5REPACK_META-${testname}_M PROPERTIES
DEPENDS H5REPACK_META-${testname}_N_DFF
)
+ if ("H5REPACK_META-${testname}_M" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPACK_META-${testname}_M PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5REPACK_META-${testname}_M_DFF
COMMAND "${CMAKE_COMMAND}"
@@ -896,6 +974,9 @@
set_tests_properties (H5REPACK_META-${testname}_M_DFF PROPERTIES
DEPENDS H5REPACK_META-${testname}_M
)
+ if ("H5REPACK_META-${testname}_M_DFF" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPACK_META-${testname}_M_DFF PROPERTIES DISABLED true)
+ endif ()
add_test (NAME H5REPACK_META-${testname}
COMMAND "${CMAKE_COMMAND}"
-D "TEST_FOLDER=${PROJECT_BINARY_DIR}/testfiles"
@@ -907,6 +988,9 @@
set_tests_properties (H5REPACK_META-${testname} PROPERTIES
DEPENDS H5REPACK_META-${testname}_M_DFF
)
+ if ("H5REPACK_META-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPACK_META-${testname} PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5REPACK_META-${testname}-clean-objects
COMMAND ${CMAKE_COMMAND} -E remove
@@ -944,6 +1028,9 @@
set_tests_properties (H5REPACK_UD-${testname} PROPERTIES
DEPENDS H5REPACK_UD-${testname}-clear-objects
)
+ if ("H5REPACK_UD-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPACK_UD-${testname} PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5REPACK_UD-${testname}-h5dump
COMMAND "${CMAKE_COMMAND}"
@@ -962,6 +1049,9 @@
set_tests_properties (H5REPACK_UD-${testname}-h5dump PROPERTIES
DEPENDS H5REPACK_UD-${testname}
)
+ if ("H5REPACK_UD-${testname}-h5dump" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPACK_UD-${testname}-h5dump PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5REPACK_UD-${testname}-clean-objects
COMMAND ${CMAKE_COMMAND} -E remove testfiles/out-${testname}.${resultfile}
@@ -983,7 +1073,7 @@
NAME H5REPACK_EXTERNAL-${testname}
COMMAND ${CMAKE_COMMAND} -E echo "SKIP ${ARGN} ${PROJECT_BINARY_DIR}/testfiles/${testfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${testfile}"
)
- set_property(TEST H5REPACK_EXTERNAL-${testname} PROPERTY DISABLED)
+ set_property(TEST H5REPACK_EXTERNAL-${testname} PROPERTY DISABLED true)
else ()
add_test (
NAME H5REPACK_EXTERNAL-${testname}-clear-objects
@@ -1002,6 +1092,9 @@
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles"
DEPENDS H5REPACK_EXTERNAL-${testname}-clear-objects
)
+ if ("H5REPACK_EXTERNAL-${testname}_CPY" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPACK_EXTERNAL-${testname}_CPY PROPERTIES DISABLED true)
+ endif ()
# comparison of known files
add_test (
NAME H5REPACK_EXTERNAL-${testname}_DFF1
@@ -1011,6 +1104,9 @@
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles"
DEPENDS H5REPACK_EXTERNAL-${testname}_CPY
)
+ if ("H5REPACK_EXTERNAL-${testname}_DFF1" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPACK_EXTERNAL-${testname}_DFF1 PROPERTIES DISABLED true)
+ endif ()
# repack the external file to the repacked file
add_test (
NAME H5REPACK_EXTERNAL-${testname}
@@ -1020,6 +1116,9 @@
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles"
DEPENDS H5REPACK_EXTERNAL-${testname}_DFF1
)
+ if ("H5REPACK_EXTERNAL-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPACK_EXTERNAL-${testname} PROPERTIES DISABLED true)
+ endif ()
# comparison of repacked file to known files
add_test (
NAME H5REPACK_EXTERNAL-${testname}_DFF2
@@ -1029,6 +1128,9 @@
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles"
DEPENDS H5REPACK_EXTERNAL-${testname}
)
+ if ("H5REPACK_EXTERNAL-${testname}_DFF2" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPACK_EXTERNAL-${testname}_DFF2 PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5REPACK_EXTERNAL-${testname}_DFF3
COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5diff${tgt_file_ext}> --enable-error-stack ${PROJECT_BINARY_DIR}/testfiles/h5repack_${testfile}_rp.h5 ${PROJECT_BINARY_DIR}/testfiles/h5repack_${testfile}_ex.h5
@@ -1037,6 +1139,9 @@
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles"
DEPENDS H5REPACK_EXTERNAL-${testname}_DFF2
)
+ if ("H5REPACK_EXTERNAL-${testname}_DFF3" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPACK_EXTERNAL-${testname}_DFF3 PROPERTIES DISABLED true)
+ endif ()
# invalidate external file by removing its first data file
add_test (
NAME H5REPACK_EXTERNAL-${testname}_DATA_RMV
@@ -1046,6 +1151,9 @@
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles"
DEPENDS H5REPACK_EXTERNAL-${testname}_DFF3
)
+ if ("H5REPACK_EXTERNAL-${testname}_DATA_RMV" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPACK_EXTERNAL-${testname}_DATA_RMV PROPERTIES DISABLED true)
+ endif ()
# verify comparison of repacked file to known file
add_test (
NAME H5REPACK_EXTERNAL-${testname}_DFF4
@@ -1055,6 +1163,9 @@
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles"
DEPENDS H5REPACK_EXTERNAL-${testname}_DATA_RMV
)
+ if ("H5REPACK_EXTERNAL-${testname}_DFF4" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPACK_EXTERNAL-${testname}_DFF4 PROPERTIES DISABLED true)
+ endif ()
# verify comparison of repacked file to known external file fails
add_test (
NAME H5REPACK_EXTERNAL-${testname}_DFF_FAIL
@@ -1065,6 +1176,9 @@
DEPENDS H5REPACK_EXTERNAL-${testname}_DFF4
WILL_FAIL "true"
)
+ if ("H5REPACK_EXTERNAL-${testname}_DFF_FAIL" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPACK_EXTERNAL-${testname}_DFF_FAIL PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5REPACK_EXTERNAL-${testname}-clean-objects
COMMAND ${CMAKE_COMMAND} -E remove h5repack_${testfile}_rp.h5
diff --git a/tools/test/h5repack/CMakeVFDTests.cmake b/tools/test/h5repack/CMakeVFDTests.cmake
index b746d88..e992029 100644
--- a/tools/test/h5repack/CMakeVFDTests.cmake
+++ b/tools/test/h5repack/CMakeVFDTests.cmake
@@ -83,6 +83,9 @@ macro (ADD_VFD_TEST vfdname resultcode)
DEPENDS H5REPACK_VFD-${vfdname}-h5repacktest-clear-objects
TIMEOUT ${CTEST_SHORT_TIMEOUT}
)
+ if ("H5REPACK_VFD-${vfdname}-h5repacktest" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPACK_VFD-${vfdname}-h5repacktest PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5REPACK_VFD-${vfdname}-h5repacktest-clean-objects
COMMAND ${CMAKE_COMMAND} -E remove
diff --git a/tools/test/h5stat/CMakeTests.cmake b/tools/test/h5stat/CMakeTests.cmake
index 9035eaf..2b47cd0 100644
--- a/tools/test/h5stat/CMakeTests.cmake
+++ b/tools/test/h5stat/CMakeTests.cmake
@@ -117,6 +117,9 @@
set_tests_properties (H5STAT-${resultfile} PROPERTIES
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}"
)
+ if ("H5STAT-${resultfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5STAT-${resultfile} PROPERTIES DISABLED true)
+ endif ()
endmacro ()
macro (ADD_H5_ERR_TEST resultfile resultcode)
@@ -144,6 +147,9 @@
set_tests_properties (H5STAT-${resultfile} PROPERTIES
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}"
)
+ if ("H5STAT-${resultfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5STAT-${resultfile} PROPERTIES DISABLED true)
+ endif ()
endmacro ()
##############################################################################
diff --git a/tools/test/misc/CMakeTestsClear.cmake b/tools/test/misc/CMakeTestsClear.cmake
index 2f3c62f..cfe237d 100644
--- a/tools/test/misc/CMakeTestsClear.cmake
+++ b/tools/test/misc/CMakeTestsClear.cmake
@@ -102,6 +102,9 @@
-D "TEST_REFERENCE=${resultfile}.ddl"
-P "${HDF_RESOURCES_DIR}/runTest.cmake"
)
+ if ("H5CLEAR_CMP-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5CLEAR_CMP-${testname} PROPERTIES DISABLED true)
+ endif ()
if (last_test)
set_tests_properties (H5CLEAR_CMP-${testname} PROPERTIES DEPENDS ${last_test})
endif ()
@@ -124,6 +127,9 @@
-D "TEST_ERRREF=${resultfile}.err"
-P "${HDF_RESOURCES_DIR}/runTest.cmake"
)
+ if ("H5CLEAR_CMP-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5CLEAR_CMP-${testname} PROPERTIES DISABLED true)
+ endif ()
if (last_test)
set_tests_properties (H5CLEAR_CMP-${testname} PROPERTIES DEPENDS ${last_test})
endif ()
@@ -160,6 +166,9 @@
set_tests_properties (H5CLEAR_CMP-${testname} PROPERTIES
DEPENDS H5CLEAR_CMP-copy_${testname}
)
+ if ("H5CLEAR_CMP-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5CLEAR_CMP-${testname} PROPERTIES DISABLED true)
+ endif ()
endif ()
endmacro ()
@@ -193,6 +202,9 @@
set_tests_properties (H5CLEAR_CMP-${testname} PROPERTIES
DEPENDS H5CLEAR_CMP-copy_${testname}
)
+ if ("H5CLEAR_CMP-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5CLEAR_CMP-${testname} PROPERTIES DISABLED true)
+ endif ()
endif ()
endmacro ()
@@ -206,6 +218,9 @@
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles"
WILL_FAIL "${resultcode}"
)
+ if ("H5CLEAR_RET-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5CLEAR_RET-${testname} PROPERTIES DISABLED true)
+ endif ()
endif ()
endmacro ()
@@ -238,6 +253,9 @@
set_tests_properties (H5CLEAR_FILESIZE_CMP-${testname}_before_size PROPERTIES
DEPENDS H5CLEAR_FILESIZE_TEST-copy_${testname}
)
+ if ("H5CLEAR_FILESIZE_CMP-${testname}_before_size" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5CLEAR_FILESIZE_CMP-${testname}_before_size PROPERTIES DISABLED true)
+ endif ()
if (NOT ${incr_size} MATCHES "NONE")
add_test (
NAME H5CLEAR_FILESIZE_INCR-${testname}
@@ -254,6 +272,9 @@
WILL_FAIL "${resultcode}"
DEPENDS H5CLEAR_FILESIZE_CMP-${testname}_before_size
)
+ if ("H5CLEAR_FILESIZE_INCR-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5CLEAR_FILESIZE_INCR-${testname} PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5CLEAR_FILESIZE_CMP-${testname}_after_size
COMMAND "${CMAKE_COMMAND}"
@@ -269,6 +290,9 @@
set_tests_properties (H5CLEAR_FILESIZE_CMP-${testname}_after_size PROPERTIES
DEPENDS H5CLEAR_FILESIZE_INCR-${testname}
)
+ if ("H5CLEAR_FILESIZE_CMP-${testname}_after_size" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5CLEAR_FILESIZE_CMP-${testname}_after_size PROPERTIES DISABLED true)
+ endif ()
endif ()
endmacro ()
@@ -286,6 +310,9 @@
set_tests_properties (H5CLEAR_FILESIZE_FAIL_TEST-copy_${testname} PROPERTIES
DEPENDS H5CLEAR_FILESIZE_FAIL_TEST-${testname}-clear-objects
)
+ if ("H5CLEAR_FILESIZE_FAIL_TEST-copy_${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5CLEAR_FILESIZE_FAIL_TEST-copy_${testname} PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5CLEAR_FILESIZE_FAIL_CMP-${testname}_before_size
COMMAND "${CMAKE_COMMAND}"
@@ -301,6 +328,9 @@
set_tests_properties (H5CLEAR_FILESIZE_FAIL_CMP-${testname}_before_size PROPERTIES
DEPENDS H5CLEAR_FILESIZE_FAIL_TEST-copy_${testname}
)
+ if ("H5CLEAR_FILESIZE_FAIL_CMP-${testname}_before_size" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5CLEAR_FILESIZE_FAIL_CMP-${testname}_before_size PROPERTIES DISABLED true)
+ endif ()
if (NOT ${incr_size} MATCHES "NONE")
add_test (
NAME H5CLEAR_FILESIZE_FAIL_INCR-${testname}
@@ -316,6 +346,9 @@
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles"
DEPENDS H5CLEAR_FILESIZE_FAIL_CMP-${testname}_before_size
)
+ if ("H5CLEAR_FILESIZE_FAIL_INCR-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5CLEAR_FILESIZE_FAIL_INCR-${testname} PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5CLEAR_FILESIZE_FAIL_CMP-${testname}_after_size
COMMAND "${CMAKE_COMMAND}"
@@ -331,6 +364,9 @@
set_tests_properties (H5CLEAR_FILESIZE_FAIL_CMP-${testname}_after_size PROPERTIES
DEPENDS H5CLEAR_FILESIZE_FAIL_INCR-${testname}
)
+ if ("H5CLEAR_FILESIZE_FAIL_CMP-${testname}_after_size" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5CLEAR_FILESIZE_FAIL_CMP-${testname}_after_size PROPERTIES DISABLED true)
+ endif ()
endif ()
endmacro ()
@@ -353,6 +389,9 @@
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles"
DEPENDS H5CLEAR-clr_open_chk-copy_${testname}.h5
)
+ if ("H5CLEAR-clr_open_chk-${testname}_${resultcode}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5CLEAR-clr_open_chk-${testname}_${resultcode} PROPERTIES DISABLED true)
+ endif ()
# After "h5clear" the file, the subsequent file open succeeds
add_test (
@@ -363,6 +402,9 @@
DEPENDS H5CLEAR-clr_open_chk-${testname}_${resultcode}
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles"
)
+ if ("H5CLEAR-h5clr-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5CLEAR-h5clr-${testname} PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5CLEAR-clr_open_chk-${testname}
COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:clear_open_chk> ${testfile}.h5
@@ -371,6 +413,9 @@
DEPENDS H5CLEAR-h5clr-${testname}
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles"
)
+ if ("H5CLEAR-clr_open_chk-${testname}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5CLEAR-clr_open_chk-${testname} PROPERTIES DISABLED true)
+ endif ()
endif ()
endmacro ()
diff --git a/tools/test/misc/CMakeTestsMkgrp.cmake b/tools/test/misc/CMakeTestsMkgrp.cmake
index 9e4f739..e583b7f 100644
--- a/tools/test/misc/CMakeTestsMkgrp.cmake
+++ b/tools/test/misc/CMakeTestsMkgrp.cmake
@@ -60,6 +60,9 @@
NAME H5MKGRP-${resultfile}
COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5mkgrp${tgt_file_ext}> ${resultoption} ${resultfile}.h5 ${ARGN}
)
+ if ("H5MKGRP-${resultfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5MKGRP-${resultfile} PROPERTIES DISABLED true)
+ endif ()
else ()
add_test (
NAME H5MKGRP-${resultfile}-clear-objects
@@ -76,6 +79,9 @@
DEPENDS H5MKGRP-${resultfile}-clear-objects
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles"
)
+ if ("H5MKGRP-${resultfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5MKGRP-${resultfile} PROPERTIES DISABLED true)
+ endif ()
add_test (
NAME H5MKGRP-${resultfile}-h5ls
COMMAND "${CMAKE_COMMAND}"
@@ -90,6 +96,9 @@
-P "${HDF_RESOURCES_DIR}/runTest.cmake"
)
set_tests_properties (H5MKGRP-${resultfile}-h5ls PROPERTIES DEPENDS H5MKGRP-${resultfile})
+ if ("H5MKGRP-${resultfile}-h5ls" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5MKGRP-${resultfile}-h5ls PROPERTIES DISABLED true)
+ endif ()
endif ()
endmacro ()
@@ -119,6 +128,9 @@
set_tests_properties (H5MKGRP_CMP-${resultfile} PROPERTIES
DEPENDS H5MKGRP_CMP-${resultfile}-clear-objects
)
+ if ("H5MKGRP_CMP-${resultfile}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5MKGRP_CMP-${resultfile} PROPERTIES DISABLED true)
+ endif ()
endif ()
endmacro ()
diff --git a/tools/test/misc/CMakeTestsRepart.cmake b/tools/test/misc/CMakeTestsRepart.cmake
index 764778e..81e8cc6 100644
--- a/tools/test/misc/CMakeTestsRepart.cmake
+++ b/tools/test/misc/CMakeTestsRepart.cmake
@@ -94,6 +94,9 @@
set_tests_properties (H5REPART-h5repart_20K PROPERTIES
FIXTURES_REQUIRED clear_testrepart
)
+ if ("H5REPART-h5repart_20K" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPART-h5repart_20K PROPERTIES DISABLED true)
+ endif ()
# repartition family member size to 5 KB.
add_test (
@@ -103,6 +106,9 @@
set_tests_properties (H5REPART-h5repart_5K PROPERTIES
FIXTURES_REQUIRED clear_testrepart
)
+ if ("H5REPART-h5repart_5K" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPART-h5repart_5K PROPERTIES DISABLED true)
+ endif ()
# convert family file to sec2 file of 20,000 bytes
add_test (
@@ -112,6 +118,9 @@
set_tests_properties (H5REPART-h5repart_single PROPERTIES
FIXTURES_REQUIRED clear_testrepart
)
+ if ("H5REPART-h5repart_single" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPART-h5repart_single PROPERTIES DISABLED true)
+ endif ()
# convert family file to sec2 file of 20,000 bytes (old argument)
add_test (
@@ -121,6 +130,9 @@
set_tests_properties (H5REPART-h5repart_sec2 PROPERTIES
FIXTURES_REQUIRED clear_testrepart
)
+ if ("H5REPART-h5repart_sec2" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPART-h5repart_sec2 PROPERTIES DISABLED true)
+ endif ()
# test the output files repartitioned above.
add_test (
@@ -131,6 +143,9 @@
DEPENDS "H5REPART-h5repart_20K;H5REPART-h5repart_5K;H5REPART-h5repart_single;H5REPART-h5repart_sec2"
FIXTURES_REQUIRED clear_testrepart
)
+ if ("H5REPART-h5repart_test" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (H5REPART-h5repart_test PROPERTIES DISABLED true)
+ endif ()
set (H5_DEP_EXECUTABLES ${H5_DEP_EXECUTABLES}
h5repart_test
diff --git a/tools/test/perform/CMakeTests.cmake b/tools/test/perform/CMakeTests.cmake
index 2dea619..714713e 100644
--- a/tools/test/perform/CMakeTests.cmake
+++ b/tools/test/perform/CMakeTests.cmake
@@ -69,6 +69,9 @@ if (HDF5_TEST_SERIAL)
TIMEOUT ${CTEST_VERY_LONG_TIMEOUT}
FIXTURES_REQUIRED clear_perform
)
+ if ("PERFORM_h5perf_serial" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (PERFORM_h5perf_serial PROPERTIES DISABLED true)
+ endif ()
if (HDF5_ENABLE_USING_MEMCHECKER)
add_test (NAME PERFORM_chunk COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:chunk>)
@@ -88,6 +91,9 @@ if (HDF5_TEST_SERIAL)
set_tests_properties (PERFORM_chunk PROPERTIES
FIXTURES_REQUIRED clear_perform
)
+ if ("PERFORM_chunk" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (PERFORM_chunk PROPERTIES DISABLED true)
+ endif ()
if (HDF5_ENABLE_USING_MEMCHECKER)
add_test (NAME PERFORM_iopipe COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:iopipe>)
@@ -107,6 +113,9 @@ if (HDF5_TEST_SERIAL)
set_tests_properties (PERFORM_iopipe PROPERTIES
FIXTURES_REQUIRED clear_perform
)
+ if ("PERFORM_iopipe" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (PERFORM_iopipe PROPERTIES DISABLED true)
+ endif ()
if (HDF5_ENABLE_USING_MEMCHECKER)
add_test (NAME PERFORM_overhead COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:overhead>)
@@ -126,6 +135,9 @@ if (HDF5_TEST_SERIAL)
set_tests_properties (PERFORM_overhead PROPERTIES
FIXTURES_REQUIRED clear_perform
)
+ if ("PERFORM_overhead" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (PERFORM_overhead PROPERTIES DISABLED true)
+ endif ()
if (HDF5_ENABLE_USING_MEMCHECKER)
add_test (NAME PERFORM_perf_meta COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:perf_meta>)
@@ -145,6 +157,9 @@ if (HDF5_TEST_SERIAL)
set_tests_properties (PERFORM_perf_meta PROPERTIES
FIXTURES_REQUIRED clear_perform
)
+ if ("PERFORM_perf_meta" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (PERFORM_perf_meta PROPERTIES DISABLED true)
+ endif ()
if (HDF5_ENABLE_USING_MEMCHECKER)
add_test (NAME PERFORM_zip_perf_help COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:zip_perf> "-h")
@@ -164,6 +179,9 @@ if (HDF5_TEST_SERIAL)
set_tests_properties (PERFORM_zip_perf_help PROPERTIES
FIXTURES_REQUIRED clear_perform
)
+ if ("PERFORM_zip_perf_help" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (PERFORM_zip_perf_help PROPERTIES DISABLED true)
+ endif ()
if (HDF5_ENABLE_USING_MEMCHECKER)
add_test (NAME PERFORM_zip_perf COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:zip_perf> tfilters.h5)
@@ -184,6 +202,9 @@ if (HDF5_TEST_SERIAL)
DEPENDS "PERFORM_zip_perf_help"
FIXTURES_REQUIRED clear_perform
)
+ if ("PERFORM_zip_perf" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
+ set_tests_properties (PERFORM_zip_perf PROPERTIES DISABLED true)
+ endif ()
endif ()
if (H5_HAVE_PARALLEL AND HDF5_TEST_PARALLEL)
diff --git a/utils/Makefile.am b/utils/Makefile.am
index 229712e..740f5c3 100644
--- a/utils/Makefile.am
+++ b/utils/Makefile.am
@@ -41,6 +41,6 @@ endif
# All subdirectories
SUBDIRS=$(MIRROR_VFD_DIR) $(TESTUTIL_DIR) $(TOOLS_DIR)
-bin_SCRIPTS = subfiling_vfd/h5fuse.sh
+bin_SCRIPTS = subfiling_vfd/h5fuse
include $(top_srcdir)/config/conclude.am
diff --git a/utils/mirror_vfd/CMakeLists.txt b/utils/mirror_vfd/CMakeLists.txt
index 51d4694..a123c02 100644
--- a/utils/mirror_vfd/CMakeLists.txt
+++ b/utils/mirror_vfd/CMakeLists.txt
@@ -6,10 +6,10 @@ project (HDF5_UTILS_MIRRORVFD C)
#-----------------------------------------------------------------------------
set (mirror_server_SOURCES
- ${HDF5_UTILS_MIRRORVFD_SOURCE_DIR}/mirror_remote.c
- ${HDF5_UTILS_MIRRORVFD_SOURCE_DIR}/mirror_server.c
- ${HDF5_UTILS_MIRRORVFD_SOURCE_DIR}/mirror_writer.c
- ${HDF5_UTILS_MIRRORVFD_SOURCE_DIR}/mirror_remote.h
+ ${HDF5_UTILS_MIRRORVFD_SOURCE_DIR}/mirror_remote.c
+ ${HDF5_UTILS_MIRRORVFD_SOURCE_DIR}/mirror_server.c
+ ${HDF5_UTILS_MIRRORVFD_SOURCE_DIR}/mirror_writer.c
+ ${HDF5_UTILS_MIRRORVFD_SOURCE_DIR}/mirror_remote.h
)
add_executable (mirror_server ${mirror_server_SOURCES})
target_include_directories (mirror_server PRIVATE "${HDF5_UTILS_DIR};${HDF5_SRC_INCLUDE_DIRS};${HDF5_SRC_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>")
@@ -71,10 +71,8 @@ if (HDF5_EXPORTED_TARGETS)
endforeach ()
install (
- TARGETS
- ${H5_DEP_EXECUTABLES}
- EXPORT
- ${HDF5_EXPORTED_TARGETS}
+ TARGETS ${H5_DEP_EXECUTABLES}
+ EXPORT ${HDF5_EXPORTED_TARGETS}
RUNTIME DESTINATION ${HDF5_INSTALL_BIN_DIR} COMPONENT utilsapplications
)
endif ()
diff --git a/utils/subfiling_vfd/CMakeLists.txt b/utils/subfiling_vfd/CMakeLists.txt
index 3acdc6b..db59710 100644
--- a/utils/subfiling_vfd/CMakeLists.txt
+++ b/utils/subfiling_vfd/CMakeLists.txt
@@ -1,20 +1,17 @@
cmake_minimum_required (VERSION 3.18)
project (HDF5_UTILS_SUBFILINGVFD C)
-configure_file (${HDF5_UTILS_SUBFILINGVFD_SOURCE_DIR}/h5fuse.sh.in ${HDF5_UTILS_SUBFILINGVFD_BINARY_DIR}/h5fuse.sh @ONLY)
+configure_file (${HDF5_UTILS_SUBFILINGVFD_SOURCE_DIR}/h5fuse.in ${HDF5_UTILS_SUBFILINGVFD_BINARY_DIR}/h5fuse @ONLY)
-# Copy h5fuse.sh to testpar directory for subfiling tests
+# Copy h5fuse to testpar directory for subfiling tests
if (HDF5_ENABLE_PARALLEL AND HDF5_TEST_PARALLEL)
- file (
- COPY
- ${HDF5_UTILS_SUBFILINGVFD_BINARY_DIR}/h5fuse.sh
- DESTINATION
- ${HDF5_TEST_PAR_BINARY_DIR}
+ file (COPY ${HDF5_UTILS_SUBFILINGVFD_BINARY_DIR}/h5fuse
+ DESTINATION ${HDF5_TEST_PAR_BINARY_DIR}
)
endif ()
install (
- FILES ${HDF5_UTILS_SUBFILINGVFD_BINARY_DIR}/h5fuse.sh
+ FILES ${HDF5_UTILS_SUBFILINGVFD_BINARY_DIR}/h5fuse
DESTINATION ${HDF5_INSTALL_BIN_DIR}
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
COMPONENT utilsapplications
diff --git a/utils/subfiling_vfd/h5fuse.sh.in b/utils/subfiling_vfd/h5fuse.in
index 6f4bf61..a4c6a05 100755
--- a/utils/subfiling_vfd/h5fuse.sh.in
+++ b/utils/subfiling_vfd/h5fuse.in
@@ -26,11 +26,11 @@ function usage {
configuration file either as a command-line argument or the script will
search for the *.config file in the current directory."
echo ""
- echo "usage: h5fuse.sh [-f filename] [-h] [-p] [-q] [-r] [-v] "
+ echo "usage: h5fuse [-f filename] [-h] [-p] [-q] [-r] [-v] "
echo "-f filename Subfile configuration file."
echo "-h Print this help."
echo "-q Quiet all output. [no]"
- echo "-p h5fuse.sh is being run in parallel, with more than one rank. [no]"
+ echo "-p h5fuse is being run in parallel, with more than one rank. [no]"
echo "-r Remove subfiles after being processed. [no]"
echo "-v Verbose output. [no]"
echo ""