summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt6
-rw-r--r--bin/batch/knl_H5detect.sl.in.cmake20
-rwxr-xr-xbin/checkposix6
-rw-r--r--config/cmake/libhdf5.settings.cmake.in32
-rw-r--r--configure.ac24
-rw-r--r--release_docs/INSTALL_CMake.txt9
-rw-r--r--release_docs/README_HPC19
-rw-r--r--release_docs/RELEASE.txt18
-rw-r--r--src/CMakeLists.txt187
-rw-r--r--src/H5.c8
-rw-r--r--src/H5T.c19
-rw-r--r--src/H5Tinit_float.c572
-rw-r--r--src/H5Tmodule.h13
-rw-r--r--src/H5Tpkg.h2
-rw-r--r--src/H5Tpublic.h3
-rw-r--r--src/H5build_settings.autotools.c.in119
-rw-r--r--src/H5build_settings.cmake.c.in117
-rw-r--r--src/H5build_settings.off.c.in13
-rw-r--r--src/H5detect.c904
-rw-r--r--src/H5make_libsettings.c300
-rw-r--r--src/H5private.h5
-rw-r--r--src/Makefile.am42
-rw-r--r--src/libhdf5.settings.in4
23 files changed, 911 insertions, 1531 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 29ac320..26914b0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1218,10 +1218,4 @@ endif ()
#-----------------------------------------------------------------------------
configure_file (${HDF_RESOURCES_DIR}/H5pubconf.h.in ${HDF5_SRC_BINARY_DIR}/H5pubconf.h @ONLY)
-#-----------------------------------------------------------------------------
-# Options for use by cross compiling and toolchains
-#-----------------------------------------------------------------------------
-option (HDF5_USE_PREGEN "Use pre-generated Files" OFF)
-option (HDF5_BATCH_H5DETECT "Use a batch command for running h5detect" OFF)
-
include (CMakeInstallation.cmake)
diff --git a/bin/batch/knl_H5detect.sl.in.cmake b/bin/batch/knl_H5detect.sl.in.cmake
deleted file mode 100644
index 39a3ef3..0000000
--- a/bin/batch/knl_H5detect.sl.in.cmake
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/bin/bash
-
-#SBATCH -p knl -C quad
-#SBATCH --nodes=1
-#SBATCH -t 00:10:00
-#SBATCH --mail-type=BEGIN,END,FAIL
-#SBATCH --mail-user=<username>@sandia.gov
-#SBATCH --export=ALL
-#SBATCH --job-name=knl_h5detect
-
-
-# Inputs: Build directory, output file name, executable file name (username/email if available).
-PROGNAME=H5detect
-OUTPUT=H5Tinit.c
-
-CMD="@HDF5_BINARY_DIR@/bin/${PROGNAME} @HDF5_GENERATED_SOURCE_DIR@/${OUTPUT}"
-echo "Run $CMD"
-srun -n 1 $CMD
-echo "Done running $CMD"
-
diff --git a/bin/checkposix b/bin/checkposix
index bb6b81b..4daa0e0 100755
--- a/bin/checkposix
+++ b/bin/checkposix
@@ -37,17 +37,13 @@ foreach $arg (@ARGV) {
# Skip files that don't include H5private.h
# H5system. has to be inspected by hand since it wraps POSIX files
#
- # H5detect and H5make_libsettings are created before the library exists
- # so calls that link to function replacements won't work. We'll ignore
- # it here.
- #
# If a user specifies one file, process it no matter what so people
# can inspect files we normally skip (like H5system.c).
$ignore = 0;
# Ignored files in src/
- if($#ARGV gt 0 and $filename =~ /H5FDmulti|H5FDstdio|H5VLpassthru|H5system|H5detect|H5make_libsettings/) {
+ if($#ARGV gt 0 and $filename =~ /H5FDmulti|H5FDstdio|H5VLpassthru|H5system/) {
$ignore = 1;
}
# Ignored atomic test files in test/
diff --git a/config/cmake/libhdf5.settings.cmake.in b/config/cmake/libhdf5.settings.cmake.in
index 00ae980..f60f0de 100644
--- a/config/cmake/libhdf5.settings.cmake.in
+++ b/config/cmake/libhdf5.settings.cmake.in
@@ -28,6 +28,7 @@ Linking Options:
AM_LDFLAGS: @AM_LDFLAGS@
Extra libraries: @LINK_LIBS@
Archiver: @CMAKE_AR@
+ AR_FLAGS:
Ranlib: @CMAKE_RANLIB@
Languages:
@@ -44,24 +45,24 @@ Languages:
Static C Library: @H5_ENABLE_STATIC_LIB@
Fortran: @HDF5_BUILD_FORTRAN@
-@BUILD_FORTRAN_CONDITIONAL_TRUE@ Fortran Compiler: @CMAKE_Fortran_COMPILER@ @CMAKE_Fortran_COMPILER_VERSION@
-@BUILD_FORTRAN_CONDITIONAL_TRUE@ Fortran Flags: @CMAKE_Fortran_FLAGS@
-@BUILD_FORTRAN_CONDITIONAL_TRUE@ H5 Fortran Flags: @HDF5_CMAKE_Fortran_FLAGS@
-@BUILD_FORTRAN_CONDITIONAL_TRUE@ AM Fortran Flags: @AM_FCFLAGS@
-@BUILD_FORTRAN_CONDITIONAL_TRUE@ Shared Fortran Library: @H5_ENABLE_SHARED_LIB@
-@BUILD_FORTRAN_CONDITIONAL_TRUE@ Static Fortran Library: @H5_ENABLE_STATIC_LIB@
-@BUILD_FORTRAN_CONDITIONAL_TRUE@ Module Directory: @CMAKE_Fortran_MODULE_DIRECTORY@
+ Fortran Compiler: @CMAKE_Fortran_COMPILER@ @CMAKE_Fortran_COMPILER_VERSION@
+ Fortran Flags: @CMAKE_Fortran_FLAGS@
+ H5 Fortran Flags: @HDF5_CMAKE_Fortran_FLAGS@
+ AM Fortran Flags: @AM_FCFLAGS@
+ Shared Fortran Library: @H5_ENABLE_SHARED_LIB@
+ Static Fortran Library: @H5_ENABLE_STATIC_LIB@
+ Module Directory: @CMAKE_Fortran_MODULE_DIRECTORY@
C++: @HDF5_BUILD_CPP_LIB@
-@BUILD_CXX_CONDITIONAL_TRUE@ C++ Compiler: @CMAKE_CXX_COMPILER@ @CMAKE_CXX_COMPILER_VERSION@
-@BUILD_CXX_CONDITIONAL_TRUE@ C++ Flags: @CMAKE_CXX_FLAGS@
-@BUILD_CXX_CONDITIONAL_TRUE@ H5 C++ Flags: @HDF5_CMAKE_CXX_FLAGS@
-@BUILD_CXX_CONDITIONAL_TRUE@ AM C++ Flags: @AM_CXXFLAGS@
-@BUILD_CXX_CONDITIONAL_TRUE@ Shared C++ Library: @H5_ENABLE_SHARED_LIB@
-@BUILD_CXX_CONDITIONAL_TRUE@ Static C++ Library: @H5_ENABLE_STATIC_LIB@
+ C++ Compiler: @CMAKE_CXX_COMPILER@ @CMAKE_CXX_COMPILER_VERSION@
+ C++ Flags: @CMAKE_CXX_FLAGS@
+ H5 C++ Flags: @HDF5_CMAKE_CXX_FLAGS@
+ AM C++ Flags: @AM_CXXFLAGS@
+ Shared C++ Library: @H5_ENABLE_SHARED_LIB@
+ Static C++ Library: @H5_ENABLE_STATIC_LIB@
- JAVA: @HDF5_BUILD_JAVA@
-@BUILD_JAVA_CONDITIONAL_TRUE@ JAVA Compiler: @CMAKE_Java_COMPILER@ @Java_VERSION@
+ JAVA: @HDF5_BUILD_JAVA@
+ JAVA Compiler: @CMAKE_Java_COMPILER@ @Java_VERSION@
Features:
---------
@@ -77,6 +78,7 @@ Dimension scales w/ new references: @DIMENSION_SCALES_WITH_NEW_REF@
Default API mapping: @DEFAULT_API_VERSION@
With deprecated public symbols: @HDF5_ENABLE_DEPRECATED_SYMBOLS@
I/O filters (external): @EXTERNAL_FILTERS@
+ Map (H5M) API: @H5_HAVE_MAP_API@
Direct VFD: @H5_HAVE_DIRECT@
Mirror VFD: @H5_HAVE_MIRROR_VFD@
Subfiling VFD: @H5_HAVE_SUBFILING_VFD@
diff --git a/configure.ac b/configure.ac
index fc438d4..ae5dffd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -81,14 +81,21 @@ AM_MAINTAINER_MODE([enable])
## This allows multiple src-dir builds within one host.
AC_PREFIX_DEFAULT([`pwd`/hdf5])
-## Run post processing on files created by configure.
+## Run post processing on files created by configure
+##
## src/H5pubconf.h:
## Generate src/H5pubconf.h from src/H5config.h by prepending H5_ to all
## macro names. This avoid name conflict between HDF5 macro names and those
## generated by another software package that uses the HDF5 library.
+##
## src/libhdf5.settings:
-## Remove all lines begun with "#" which are generated by CONDITIONAL's of
-## configure.
+## Remove all lines beginning with "#" which are generated by CONDITIONAL's
+## of configure.
+##
+## src/H5build_settings.c
+## Remove all lines beginning with "#" which are generated by CONDITIONAL's
+## of configure. This uses a check for whitespace after the pound sign
+## to avoid clobbering include statements.
AC_CONFIG_COMMANDS([pubconf], [
echo "creating src/H5pubconf.h"
sed 's/#define /#define H5_/' <src/H5config.h |\
@@ -105,6 +112,10 @@ AC_CONFIG_COMMANDS([pubconf], [
sed '/^#/d' < src/libhdf5.settings > libhdf5.settings.TMP
cp libhdf5.settings.TMP src/libhdf5.settings
rm -f libhdf5.settings.TMP
+ echo "Post process src/H5build_settings.c"
+ sed '/^# /d' < src/H5build_settings.c > H5build_settings.TMP
+ cp H5build_settings.TMP src/H5build_settings.c
+ rm -f H5build_settings.TMP
])
## It's possible to configure for a host other than the one on which
@@ -3725,9 +3736,11 @@ AC_ARG_ENABLE([embedded-libinfo],
if test "${enable_embedded_libinfo}" = "yes"; then
AC_MSG_RESULT([yes])
+ BUILD_SETTINGS_FILE="src/H5build_settings.autotools.c.in"
AC_DEFINE([HAVE_EMBEDDED_LIBINFO], [1],
[Define if library information should be embedded in the executables])
else
+ BUILD_SETTINGS_FILE="src/H5build_settings.off.c.in"
AC_MSG_RESULT([no])
fi
@@ -3860,10 +3873,11 @@ fi
##
AM_CONDITIONAL([HAVE_SHARED_CONDITIONAL], [test "X$enable_shared" = "Xyes"])
-AC_CONFIG_FILES([src/libhdf5.settings
- Makefile
+AC_CONFIG_FILES([Makefile
doxygen/Doxyfile
src/Makefile
+ src/libhdf5.settings
+ src/H5build_settings.c:${BUILD_SETTINGS_FILE}
test/Makefile
test/H5srcdir_str.h
test/test_abort_fail.sh
diff --git a/release_docs/INSTALL_CMake.txt b/release_docs/INSTALL_CMake.txt
index 4212f51..5a011e7 100644
--- a/release_docs/INSTALL_CMake.txt
+++ b/release_docs/INSTALL_CMake.txt
@@ -1030,15 +1030,6 @@ References:
https://stackoverflow.com/questions/54539682/how-to-set-up-cmake-to-cross-compile-with-clang-for-arm-embedded-on-windows?rq=1
https://developer.android.com/ndk/guides/cmake
-Predefine H5Tinit.c file
--------------------------------
-The one file that needs to be pre-generated is the H5Tinit.c file. The variables
-indicated in the error log (see above) are the variables that need to match the target system.
-
-The HDF5 CMake variables;
- HDF5_USE_PREGEN: set this to true
- HDF5_USE_PREGEN_DIR: set this path to the preset H5Tinit.c file
-
========================================================================
X: Using CMakePresets.json for compiling
diff --git a/release_docs/README_HPC b/release_docs/README_HPC
index 27dc32c..576e019 100644
--- a/release_docs/README_HPC
+++ b/release_docs/README_HPC
@@ -9,7 +9,6 @@ Section II: Obtain HDF5 source
Section III: Using ctest command to build and test
Section IV: Cross compiling
Section V: Manual alternatives
-Section VI: Other cross compiling options
************************************************************************
@@ -184,21 +183,3 @@ or
for parallel builds.
Tests on machines using LSF will typically use "bsub ctestS.lsf", etc.
-
-========================================================================
-VI. Other cross compiling options
-========================================================================
-Settings for two other cross-compiling options are also in the config/toolchain
-files which do not seem to be necessary with the Cray PrgEnv-* modules
-
-1. HDF5_USE_PREGEN. This option, along with the HDF5_USE_PREGEN_DIR CMake
- variable would allow the use of an appropriate H5Tinit.c file with type
- information generated on a compute node to be used when cross compiling
- for those compute nodes. The use of the variables in lines 110 and 111
- of HDF5options.cmake file seem to preclude needing this option with the
- available Cray modules and CMake option.
-
-2. HDF5_BATCH_H5DETECT and associated CMake variables. This option when
- properly configured will run H5detect in a batch job on a compute node
- at the beginning of the CMake build process. It was also found to be
- unnecessary with the available Cray modules and CMake options.
diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt
index 4ad3d47..6167e51 100644
--- a/release_docs/RELEASE.txt
+++ b/release_docs/RELEASE.txt
@@ -47,6 +47,24 @@ New Features
Configuration:
-------------
+ - Removed CMake cross-compiling variables
+
+ * HDF5_USE_PREGEN
+ * HDF5_BATCH_H5DETECT
+
+ These were used to work around H5detect and H5make_libsettings and
+ are no longer required.
+
+ - Running H5make_libsettings is no longer required for cross-compiling
+
+ The functionality of H5make_libsettings is now handled via template files,
+ so H5make_libsettings has been removed.
+
+ - Running H5detect is no longer required for cross-compiling
+
+ The functionality of H5detect is now exercised at library startup,
+ so H5detect has been removed.
+
- Removed long double work-around symbols and configure options
Several options and public symbols that were provided to paper over
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 70c8cc3..cf23f1f 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -6,6 +6,7 @@ project (HDF5_SRC C)
#-----------------------------------------------------------------------------
set (H5_SOURCES
${HDF5_SRC_DIR}/H5.c
+ ${HDF5_SRC_BINARY_DIR}/H5build_settings.c
${HDF5_SRC_DIR}/H5checksum.c
${HDF5_SRC_DIR}/H5dbg.c
${HDF5_SRC_DIR}/H5mpi.c
@@ -638,6 +639,7 @@ set (H5T_SOURCES
${HDF5_SRC_DIR}/H5Tfields.c
${HDF5_SRC_DIR}/H5Tfixed.c
${HDF5_SRC_DIR}/H5Tfloat.c
+ ${HDF5_SRC_DIR}/H5Tinit_float.c
${HDF5_SRC_DIR}/H5Tnative.c
${HDF5_SRC_DIR}/H5Toffset.c
${HDF5_SRC_DIR}/H5Toh.c
@@ -1036,14 +1038,9 @@ if (HDF5_GENERATE_HEADERS)
endif ()
#-----------------------------------------------------------------------------
-# Setup the H5detect utility which generates H5Tinit with platform
-# specific type checks inside
+# Generate the H5build_settings.c file
#-----------------------------------------------------------------------------
-if (HDF5_USE_PREGEN)
- set (HDF5_GENERATED_SOURCE_DIR ${HDF5_USE_PREGEN_DIR})
-else ()
- set (HDF5_GENERATED_SOURCE_DIR ${HDF5_SRC_BINARY_DIR})
-endif ()
+configure_file (${HDF5_SOURCE_DIR}/src/H5build_settings.cmake.c.in ${HDF5_SRC_BINARY_DIR}/H5build_settings.c @ONLY)
if (BUILD_SHARED_LIBS)
file (MAKE_DIRECTORY "${HDF5_SRC_BINARY_DIR}/shared")
@@ -1078,159 +1075,11 @@ if (LOCAL_BATCH_TEST)
endif ()
endif ()
-#### make the H5detect program
-set (lib_prog_deps)
-add_executable (H5detect ${HDF5_SRC_DIR}/H5detect.c)
-target_include_directories (H5detect PRIVATE "${HDF5_SRC_INCLUDE_DIRS};${HDF5_SRC_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>")
-target_compile_definitions(H5detect PUBLIC ${HDF_EXTRA_C_FLAGS} ${HDF_EXTRA_FLAGS})
-TARGET_C_PROPERTIES (H5detect STATIC)
-target_link_libraries (H5detect
- PRIVATE "$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:MPI::MPI_C>" $<$<OR:$<PLATFORM_ID:Windows>,$<PLATFORM_ID:MinGW>>:ws2_32.lib>
-)
-target_compile_options(H5detect
- PRIVATE "$<$<PLATFORM_ID:Emscripten>:-O0>"
-)
-set (lib_prog_deps ${lib_prog_deps} H5detect)
-
-# check if a pregenerated H5Tinit.c file is present
-if (NOT EXISTS "${HDF5_GENERATED_SOURCE_DIR}/H5Tinit.c")
- # execute the H5detect program
- if (HDF5_BATCH_H5DETECT)
- configure_file (
- ${HDF5_SOURCE_DIR}/bin/batch/${HDF5_BATCH_H5DETECT_SCRIPT}.in.cmake
- ${HDF5_BINARY_DIR}/${HDF5_BATCH_H5DETECT_SCRIPT} ESCAPE_QUOTES @ONLY
- )
- add_custom_command (
- OUTPUT gen_SRCS.stamp1
- BYPRODUCTS H5Tinit.c
- COMMAND ${HDF5_BATCH_CMD}
- ARGS ${HDF5_BINARY_DIR}/${HDF5_BATCH_H5DETECT_SCRIPT}
- COMMAND ${CMAKE_COMMAND}
- ARGS -E echo "Executed batch command to create H5Tinit.c"
- COMMAND ${CMAKE_COMMAND}
- ARGS -E touch gen_SRCS.stamp1
- DEPENDS H5detect
- WORKING_DIRECTORY ${HDF5_GENERATED_SOURCE_DIR}
- )
- add_custom_target (gen_H5Tinit
- COMMAND ${CMAKE_COMMAND} -P ${HDF5_SOURCE_DIR}/config/cmake/wait_H5Tinit.cmake
- )
- else ()
- add_custom_command (
- OUTPUT gen_SRCS.stamp1
- BYPRODUCTS H5Tinit.c
- COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:H5detect>
- ARGS H5Tinit.c
- COMMAND ${CMAKE_COMMAND}
- ARGS -E touch gen_SRCS.stamp1
- DEPENDS H5detect
- WORKING_DIRECTORY ${HDF5_GENERATED_SOURCE_DIR}
- COMMENT "Create H5Tinit.c"
- )
- if (BUILD_SHARED_LIBS)
- add_custom_command (
- OUTPUT shared/shared_gen_SRCS.stamp1
- BYPRODUCTS shared/H5Tinit.c
- COMMAND ${CMAKE_COMMAND}
- ARGS -E copy_if_different H5Tinit.c shared/H5Tinit.c
- COMMAND ${CMAKE_COMMAND}
- ARGS -E touch shared/shared_gen_SRCS.stamp1
- DEPENDS H5detect gen_SRCS.stamp1
- WORKING_DIRECTORY ${HDF5_GENERATED_SOURCE_DIR}
- COMMENT "Copy H5Tinit.c to shared folder"
- )
- endif ()
- endif ()
-else ()
- add_custom_command (
- OUTPUT gen_SRCS.stamp1
- COMMAND ${CMAKE_COMMAND}
- ARGS -E touch gen_SRCS.stamp1
- DEPENDS H5Tinit.c
- WORKING_DIRECTORY ${HDF5_GENERATED_SOURCE_DIR}
- COMMENT "Touch existing H5Tinit.c"
- )
- set_source_files_properties (${HDF5_GENERATED_SOURCE_DIR}/H5Tinit.c PROPERTIES GENERATED TRUE)
- if (BUILD_SHARED_LIBS)
- add_custom_command (
- OUTPUT shared/shared_gen_SRCS.stamp1
- BYPRODUCTS shared/H5Tinit.c
- COMMAND ${CMAKE_COMMAND}
- ARGS -E copy_if_different H5Tinit.c shared/H5Tinit.c
- COMMAND ${CMAKE_COMMAND}
- ARGS -E touch shared/shared_gen_SRCS.stamp1
- DEPENDS H5Tinit.c gen_SRCS.stamp1
- WORKING_DIRECTORY ${HDF5_GENERATED_SOURCE_DIR}
- COMMENT "Copy existing H5Tinit.c to shared folder"
- )
- endif ()
-endif ()
-
-#-----------------------------------------------------------------------------
-# Add Target to clang-format
-#-----------------------------------------------------------------------------
-if (HDF5_ENABLE_FORMATTERS)
- clang_format (HDF5_SRC_DETECT_FORMAT ${HDF5_SRC_DIR}/H5detect.c)
-endif ()
-
-# make the H5make_libsettings program
-add_executable (H5make_libsettings ${HDF5_SRC_DIR}/H5make_libsettings.c)
-target_include_directories (H5make_libsettings PRIVATE "${HDF5_SRC_INCLUDE_DIRS};${HDF5_SRC_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>")
-target_compile_definitions(H5make_libsettings PUBLIC ${HDF_EXTRA_C_FLAGS} ${HDF_EXTRA_FLAGS})
-TARGET_C_PROPERTIES (H5make_libsettings STATIC)
-target_link_libraries (H5make_libsettings
- PRIVATE "$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:MPI::MPI_C>" $<$<OR:$<PLATFORM_ID:Windows>,$<PLATFORM_ID:MinGW>>:ws2_32.lib>
-)
-target_compile_options(H5make_libsettings
- PRIVATE "$<$<PLATFORM_ID:Emscripten>:-O0>"
-)
-set (lib_prog_deps ${lib_prog_deps} H5make_libsettings)
-
-#-----------------------------------------------------------------------------
-# Add Target to clang-format
-#-----------------------------------------------------------------------------
-if (HDF5_ENABLE_FORMATTERS)
- clang_format (HDF5_SRC_LIBSETTINGS_FORMAT H5make_libsettings)
-endif ()
-
-# execute the H5make_libsettings program
-add_custom_command (
- OUTPUT gen_SRCS.stamp2
- BYPRODUCTS H5lib_settings.c
- COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:H5make_libsettings>
- ARGS H5lib_settings.c
- COMMAND ${CMAKE_COMMAND}
- ARGS -E touch gen_SRCS.stamp2
- DEPENDS H5make_libsettings
- WORKING_DIRECTORY ${HDF5_SRC_BINARY_DIR}
- COMMENT "Create H5lib_settings.c"
-)
-set_source_files_properties (${HDF5_SRC_BINARY_DIR}/H5lib_settings.c PROPERTIES GENERATED TRUE)
-if (BUILD_SHARED_LIBS)
- add_custom_command (
- OUTPUT shared/shared_gen_SRCS.stamp2
- BYPRODUCTS shared/H5lib_settings.c
- COMMAND ${CMAKE_COMMAND}
- ARGS -E copy_if_different H5lib_settings.c shared/H5lib_settings.c
- COMMAND ${CMAKE_COMMAND}
- ARGS -E touch shared/shared_gen_SRCS.stamp2
- DEPENDS H5make_libsettings gen_SRCS.stamp2
- WORKING_DIRECTORY ${HDF5_SRC_BINARY_DIR}
- COMMENT "Copy H5lib_settings.c to shared folder"
- )
-endif ()
-
#-----------------------------------------------------------------------------
-# Add H5Tinit source to build - generated by H5detect/CMake at configure time
+# Set up library builds
#-----------------------------------------------------------------------------
if (BUILD_STATIC_LIBS)
- set (gen_SRCS ${HDF5_GENERATED_SOURCE_DIR}/H5Tinit.c ${HDF5_SRC_BINARY_DIR}/H5lib_settings.c)
- add_custom_target (gen_${HDF5_LIB_TARGET} ALL
- DEPENDS ${lib_prog_deps} ${HDF5_GENERATED_SOURCE_DIR}/gen_SRCS.stamp1 ${HDF5_SRC_BINARY_DIR}/gen_SRCS.stamp2
- COMMENT "Generation target files"
- )
-
- add_library (${HDF5_LIB_TARGET} STATIC ${common_SRCS} ${gen_SRCS} ${H5_PUBLIC_HEADERS} ${H5_PRIVATE_HEADERS} ${H5_GENERATED_HEADERS} ${H5_MODULE_HEADERS})
+ add_library (${HDF5_LIB_TARGET} STATIC ${common_SRCS} H5build_settings.c ${H5_PUBLIC_HEADERS} ${H5_PRIVATE_HEADERS} ${H5_GENERATED_HEADERS} ${H5_MODULE_HEADERS})
target_include_directories (${HDF5_LIB_TARGET}
PRIVATE "${HDF5_SRC_INCLUDE_DIRS};${HDF5_SRC_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>"
INTERFACE "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include>;$<BUILD_INTERFACE:${HDF5_SRC_INCLUDE_DIRS};${HDF5_SRC_BINARY_DIR}>"
@@ -1258,19 +1107,12 @@ if (BUILD_STATIC_LIBS)
set_global_variable (HDF5_LIBRARIES_TO_EXPORT ${HDF5_LIB_TARGET})
H5_SET_LIB_OPTIONS (${HDF5_LIB_TARGET} ${HDF5_LIB_NAME} STATIC 0)
set_target_properties (${HDF5_LIB_TARGET} PROPERTIES FOLDER libraries)
- add_dependencies (${HDF5_LIB_TARGET} gen_${HDF5_LIB_TARGET})
set (install_targets ${HDF5_LIB_TARGET})
endif ()
if (BUILD_SHARED_LIBS)
- set (shared_gen_SRCS ${HDF5_GENERATED_SOURCE_DIR}/shared/H5Tinit.c ${HDF5_SRC_BINARY_DIR}/shared/H5lib_settings.c)
- add_custom_target (gen_${HDF5_LIBSH_TARGET} ALL
- DEPENDS ${lib_prog_deps} ${HDF5_GENERATED_SOURCE_DIR}/shared/shared_gen_SRCS.stamp1 ${HDF5_SRC_BINARY_DIR}/shared/shared_gen_SRCS.stamp2
- COMMENT "Shared generation target files"
- )
-
- add_library (${HDF5_LIBSH_TARGET} SHARED ${common_SRCS} ${shared_gen_SRCS} ${H5_PUBLIC_HEADERS} ${H5_PRIVATE_HEADERS} ${H5_GENERATED_HEADERS} ${H5_MODULE_HEADERS})
+ add_library (${HDF5_LIBSH_TARGET} SHARED ${common_SRCS} H5build_settings.c ${H5_PUBLIC_HEADERS} ${H5_PRIVATE_HEADERS} ${H5_GENERATED_HEADERS} ${H5_MODULE_HEADERS})
target_include_directories (${HDF5_LIBSH_TARGET}
PRIVATE "${HDF5_SRC_INCLUDE_DIRS};${HDF5_SRC_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>"
PUBLIC "$<$<BOOL:${HDF5_ENABLE_HDFS}>:${HDFS_INCLUDE_DIR}>"
@@ -1297,7 +1139,6 @@ if (BUILD_SHARED_LIBS)
set_global_variable (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF5_LIBSH_TARGET}")
H5_SET_LIB_OPTIONS (${HDF5_LIBSH_TARGET} ${HDF5_LIB_NAME} SHARED "LIB")
set_target_properties (${HDF5_LIBSH_TARGET} PROPERTIES FOLDER libraries)
- add_dependencies (${HDF5_LIBSH_TARGET} gen_${HDF5_LIBSH_TARGET})
set (install_targets ${install_targets} ${HDF5_LIBSH_TARGET})
endif ()
@@ -1435,21 +1276,11 @@ endif ()
# Option to build documentation
#-----------------------------------------------------------------------------
if (DOXYGEN_FOUND)
-# This cmake function requires that the non-default doxyfile settings are provided with set (DOXYGEN_xxx) commands
-# In addition the doxyfile aliases @INCLUDE option is not supported and would need to be provided in a set (DOXYGEN_ALIASES) command.
-# doxygen_add_docs (hdf5lib_doc
-## ${common_SRCS} ${shared_gen_SRCS} ${H5_PUBLIC_HEADERS} ${H5_PRIVATE_HEADERS} ${H5_GENERATED_HEADERS} ${HDF5_DOXYGEN_DIR}/dox
-# ${DOXYGEN_INPUT_DIRECTORY}
-# ALL
-# WORKING_DIRECTORY ${HDF5_SRC_DIR}
-# COMMENT "Generating HDF5 library Source Documentation"
-# )
-
-# This custom target and doxygen/configure work together
+ # This custom target and doxygen/configure work together
# Replace variables inside @@ with the current values
add_custom_target (hdf5lib_doc ALL
COMMAND ${DOXYGEN_EXECUTABLE} ${HDF5_BINARY_DIR}/Doxyfile
- DEPENDS ${HDF5_GENERATED_SOURCE_DIR}/H5Tinit.c ${HDF5_SRC_BINARY_DIR}/H5lib_settings.c
+ DEPENDS ${HDF5_SRC_BINARY_DIR}/H5build_settings.c
WORKING_DIRECTORY ${HDF5_SRC_DIR}
COMMENT "Generating HDF5 library Source API documentation with Doxygen"
VERBATIM )
diff --git a/src/H5.c b/src/H5.c
index e0db6b9..daaaf66 100644
--- a/src/H5.c
+++ b/src/H5.c
@@ -903,8 +903,8 @@ H5check_version(unsigned majnum, unsigned minnum, unsigned relnum)
/* Mention the versions we are referring to */
HDfprintf(stderr, "Headers are %u.%u.%u, library is %u.%u.%u\n", majnum, minnum, relnum,
(unsigned)H5_VERS_MAJOR, (unsigned)H5_VERS_MINOR, (unsigned)H5_VERS_RELEASE);
- /* Show library settings if available */
- HDfprintf(stderr, "%s", H5libhdf5_settings);
+ /* Show library build settings if available */
+ HDfprintf(stderr, "%s", H5build_settings);
/* Bail out now. */
HDfputs("Bye...\n", stderr);
@@ -920,8 +920,8 @@ H5check_version(unsigned majnum, unsigned minnum, unsigned relnum)
/* Mention the versions we are referring to */
HDfprintf(stderr, "Headers are %u.%u.%u, library is %u.%u.%u\n", majnum, minnum, relnum,
(unsigned)H5_VERS_MAJOR, (unsigned)H5_VERS_MINOR, (unsigned)H5_VERS_RELEASE);
- /* Show library settings if available */
- HDfprintf(stderr, "%s", H5libhdf5_settings);
+ /* Show library build settings if available */
+ HDfprintf(stderr, "%s", H5build_settings);
break;
default:
/* 2 or higher: continue silently */
diff --git a/src/H5T.c b/src/H5T.c
index edcbc80..6475164 100644
--- a/src/H5T.c
+++ b/src/H5T.c
@@ -368,8 +368,7 @@ H5T_order_t H5T_native_order_g = H5T_ORDER_ERROR;
/*********************/
/*
- * Predefined data types. These are initialized at runtime in H5Tinit.c and
- * by H5T_init() in this source file.
+ * Predefined data types. These are initialized at runtime by H5T_init().
*
* If more of these are added, the new ones must be added to the list of
* types to reset in H5T_term_package().
@@ -501,11 +500,7 @@ size_t H5T_NATIVE_FLOAT_ALIGN_g = 0;
size_t H5T_NATIVE_DOUBLE_ALIGN_g = 0;
size_t H5T_NATIVE_LDOUBLE_ALIGN_g = 0;
-/*
- * Alignment constraints for C9x types. These are initialized at run time in
- * H5Tinit.c if the types are provided by the system. Otherwise we set their
- * values to 0 here (no alignment calculated).
- */
+/* Alignment constraints for C99 types */
size_t H5T_NATIVE_INT8_ALIGN_g = 0;
size_t H5T_NATIVE_UINT8_ALIGN_g = 0;
size_t H5T_NATIVE_INT_LEAST8_ALIGN_g = 0;
@@ -756,13 +751,11 @@ H5T_init(void)
/* Only 16 (numbered 0-15) are supported in the current file format */
HDcompile_assert(H5T_NCLASSES < 16);
- /*
- * Initialize pre-defined native datatypes from code generated during
- * the library configuration by H5detect.
- */
- if (H5T__init_native() < 0)
- HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to initialize interface")
+ /* Initialize native floating-point datatypes */
+ if (H5T__init_native_float_types() < 0)
+ HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to initialize floating-point types")
+ /* Initialize all other native types */
if (H5T__init_native_internal() < 0)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to initialize integers")
diff --git a/src/H5Tinit_float.c b/src/H5Tinit_float.c
new file mode 100644
index 0000000..5b2b83d
--- /dev/null
+++ b/src/H5Tinit_float.c
@@ -0,0 +1,572 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group. *
+ * All rights reserved. *
+ * *
+ * This file is part of HDF5. The full HDF5 copyright notice, including *
+ * terms governing use, modification, and redistribution, is contained in *
+ * the COPYING file, which can be found at the root of the source code *
+ * distribution tree, or in https://www.hdfgroup.org/licenses. *
+ * If you do not have access to either file, you may request a copy from *
+ * help@hdfgroup.org. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Purpose: Initialize native floating-point datatypes
+ */
+
+/****************/
+/* Module Setup */
+/****************/
+
+#include "H5Tmodule.h" /* This source code file is part of the H5T module */
+
+/***********/
+/* Headers */
+/***********/
+#include "H5private.h" /* Generic Functions */
+#include "H5Eprivate.h" /* Error handling */
+#include "H5FLprivate.h" /* Free Lists */
+#include "H5Iprivate.h" /* IDs */
+#include "H5Tpkg.h" /* Datatypes */
+
+/****************/
+/* Local Macros */
+/****************/
+
+/* This could also go in H5private.h, but this is the only place we
+ * need to turn off the sanitizers and we don't want to encourage
+ * this.
+ */
+#if defined(__has_attribute)
+#if __has_attribute(no_sanitize)
+#define H5_NO_UBSAN __attribute__((no_sanitize("undefined")))
+#else
+#define H5_NO_UBSAN
+#endif
+#else
+#define H5_NO_UBSAN
+#endif
+
+/*-------------------------------------------------------------------------
+ * 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.
+ *-------------------------------------------------------------------------
+ */
+#define DETECT_F(TYPE, VAR, INFO) \
+ { \
+ 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); \
+ \
+ memset(&INFO, 0, sizeof(INFO)); \
+ INFO.size = sizeof(TYPE); \
+ \
+ /* Initialize padding mask */ \
+ memset(_pad_mask, 0, sizeof(_pad_mask)); \
+ \
+ /* Padding bits. Set a variable to 4.0, then flip each bit and see if \
+ * the modified variable is equal ("==") to the original. Build a \
+ * padding bitmask to indicate which bits in the type are padding (i.e. \
+ * have no effect on the value and should be ignored by subsequent \
+ * steps). This is necessary because padding bits can change arbitrarily \
+ * and interfere with detection of the various properties below unless we \
+ * know to ignore them. */ \
+ _v1 = (TYPE)4.0L; \
+ 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)) { \
+ _buf1[_i] ^= _byte_mask; \
+ memcpy((void *)&_v2, (const void *)_buf1, sizeof(TYPE)); \
+ H5_GCC_CLANG_DIAG_OFF("float-equal") \
+ if (_v1 != _v2) \
+ _pad_mask[_i] |= _byte_mask; \
+ H5_GCC_CLANG_DIAG_ON("float-equal") \
+ _buf1[_i] ^= _byte_mask; \
+ } \
+ \
+ /* Byte Order */ \
+ for (_i = 0, _v1 = (TYPE)0.0L, _v2 = (TYPE)1.0L; _i < (int)sizeof(TYPE); _i++) { \
+ _v3 = _v1; \
+ _v1 += _v2; \
+ _v2 /= (TYPE)256.0L; \
+ memcpy(_buf1, (const void *)&_v1, sizeof(TYPE)); \
+ memcpy(_buf3, (const void *)&_v3, sizeof(TYPE)); \
+ _j = H5T__byte_cmp(sizeof(TYPE), _buf3, _buf1, _pad_mask); \
+ if (_j >= 0) { \
+ INFO.perm[_i] = _j; \
+ _last = _i; \
+ } \
+ } \
+ if (H5T__fix_order(sizeof(TYPE), _last, INFO.perm, &INFO.order) < 0) \
+ HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "failed to detect byte order") \
+ \
+ /* Implicit mantissa bit */ \
+ _v1 = (TYPE)0.5L; \
+ _v2 = (TYPE)1.0L; \
+ if (H5T__imp_bit(sizeof(TYPE), INFO.perm, &_v1, &_v2, _pad_mask, &(INFO.imp)) < 0) \
+ HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "failed to determine implicit bit") \
+ INFO.norm = INFO.imp ? H5T_NORM_IMPLIED : H5T_NORM_NONE; \
+ \
+ /* Sign bit */ \
+ _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") \
+ \
+ /* Mantissa */ \
+ INFO.mpos = 0; \
+ \
+ _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") \
+ INFO.msize += 1 + (unsigned)(INFO.imp ? 0 : 1) - INFO.mpos; \
+ \
+ /* Exponent */ \
+ INFO.epos = INFO.mpos + INFO.msize; \
+ \
+ INFO.esize = INFO.sign - INFO.epos; \
+ \
+ _v1 = (TYPE)1.0L; \
+ INFO.ebias = H5T__find_bias(INFO.epos, INFO.esize, INFO.perm, &_v1); \
+ H5T__set_precision(&(INFO)); \
+ COMP_ALIGNMENT(TYPE, INFO.comp_align); \
+ }
+
+/* Detect alignment for C structure */
+#define COMP_ALIGNMENT(TYPE, COMP_ALIGN) \
+ { \
+ struct { \
+ char c; \
+ TYPE x; \
+ } s; \
+ \
+ COMP_ALIGN = (unsigned)((char *)(&(s.x)) - (char *)(&s)); \
+ }
+
+/******************/
+/* Local Typedefs */
+/******************/
+
+/* Holds detected information about a native floating-point type */
+typedef struct H5T_fpoint_det_t {
+ unsigned size; /* Total byte size */
+ unsigned prec; /* Meaningful bits */
+ unsigned offset; /* Bit offset to meaningful bits */
+ int perm[32]; /* For detection of byte order */
+ H5T_order_t order; /* byte order */
+ unsigned sign; /* Location of sign bit */
+ unsigned mpos, msize, imp; /* Information about mantissa */
+ H5T_norm_t norm; /* Information about mantissa */
+ unsigned epos, esize; /* Information about exponent */
+ unsigned long ebias; /* Exponent bias for floating point */
+ unsigned comp_align; /* Alignment for structure */
+} H5T_fpoint_det_t;
+
+/********************/
+/* Package Typedefs */
+/********************/
+
+/********************/
+/* Local Prototypes */
+/********************/
+
+/********************/
+/* Public Variables */
+/********************/
+
+/*****************************/
+/* Library Private Variables */
+/*****************************/
+
+/*********************/
+/* Package Variables */
+/*********************/
+
+/*******************/
+/* Local Variables */
+/*******************/
+
+/* Functions used in the DETECT_F() macro */
+static int H5T__byte_cmp(int, const void *, const void *, const unsigned char *);
+static herr_t H5T__bit_cmp(unsigned, int *, void *, void *, const unsigned char *, unsigned *);
+static herr_t H5T__fix_order(int, int, int *, H5T_order_t *);
+static herr_t H5T__imp_bit(unsigned, int *, void *, void *, const unsigned char *, unsigned *);
+static unsigned H5T__find_bias(unsigned, unsigned, int *, void *);
+static void H5T__set_precision(H5T_fpoint_det_t *);
+
+/*-------------------------------------------------------------------------
+ * Function: H5T__byte_cmp
+ *
+ * Purpose: Compares two chunks of memory A and B and returns the
+ * byte index into those arrays of the first byte that
+ * differs between A and B. Ignores differences where the
+ * corresponding bit in pad_mask is set to 0.
+ *
+ * Return: Success: Index of differing byte.
+ * Failure: -1 if all bytes are the same.
+ *-------------------------------------------------------------------------
+ */
+static int
+H5T__byte_cmp(int n, const void *_a, const void *_b, const unsigned char *pad_mask)
+{
+ const unsigned char *a = (const unsigned char *)_a;
+ const unsigned char *b = (const unsigned char *)_b;
+ int ret_value = -1;
+
+ FUNC_ENTER_PACKAGE_NOERR
+
+ for (int i = 0; i < n; i++)
+ if ((a[i] & pad_mask[i]) != (b[i] & pad_mask[i]))
+ HGOTO_DONE(i);
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value);
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5T__bit_cmp
+ *
+ * Purpose: Compares two bit vectors and returns the index for the
+ * first bit that differs between the two vectors. The
+ * size of the vector is NBYTES. PERM is a mapping from
+ * actual order to little endian. Ignores differences where
+ * the corresponding bit in pad_mask is set to 0.
+ *
+ * Sets `first` to the index of the first differing bit
+ *
+ * Return: SUCCEED/FAIL
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5T__bit_cmp(unsigned nbytes, int *perm, void *_a, void *_b, const unsigned char *pad_mask, unsigned *first)
+{
+ unsigned char *a = (unsigned char *)_a;
+ unsigned char *b = (unsigned char *)_b;
+ unsigned char aa, bb;
+ herr_t ret_value = SUCCEED;
+
+ FUNC_ENTER_PACKAGE
+
+ *first = 0;
+
+ for (unsigned i = 0; i < nbytes; i++) {
+ if (perm[i] >= (int)nbytes)
+ HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "failure in bit comparison")
+ if ((aa = (unsigned char)(a[perm[i]] & pad_mask[perm[i]])) !=
+ (bb = (unsigned char)(b[perm[i]] & pad_mask[perm[i]]))) {
+
+ for (unsigned j = 0; j < 8; j++, aa >>= 1, bb >>= 1) {
+ if ((aa & 1) != (bb & 1)) {
+ *first = i * 8 + j;
+ HGOTO_DONE(SUCCEED);
+ }
+ }
+ }
+ }
+
+ /* If we got here and didn't set a value, error out */
+ HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "didn't find a value for `first`")
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value);
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5T__fix_order
+ *
+ * Purpose: Given an array PERM with elements FIRST through LAST
+ * initialized with zero origin byte numbers, this function
+ * creates a permutation vector that maps the actual order
+ * of a floating point number to little-endian.
+ *
+ * This function assumes that the mantissa byte ordering
+ * implies the total ordering.
+ *
+ * Return: SUCCEED/FAIL
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5T__fix_order(int n, int last, int *perm, H5T_order_t *order)
+{
+ herr_t ret_value = SUCCEED;
+
+ FUNC_ENTER_PACKAGE
+
+ if (last <= 0)
+ HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "failed to detect byte order")
+
+ /* We have at least three points to consider */
+ if (perm[last] < perm[last - 1] && perm[last - 1] < perm[last - 2]) {
+ /* Little endian */
+ *order = H5T_ORDER_LE;
+ for (int i = 0; i < n; i++)
+ perm[i] = i;
+ }
+ else if (perm[last] > perm[last - 1] && perm[last - 1] > perm[last - 2]) {
+ /* Big endian */
+ *order = H5T_ORDER_BE;
+ for (int i = 0; i < n; i++)
+ perm[i] = (n - 1) - i;
+ }
+ else {
+ /* Undetermined endianness - defaults to 'VAX' for historical
+ * reasons, but there are other mixed-endian systems (like ARM
+ * in rare cases)
+ */
+ if (0 != n % 2)
+ HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "n is not a power of 2")
+
+ *order = H5T_ORDER_VAX;
+ for (int i = 0; i < n; i += 2) {
+ perm[i] = (n - 2) - i;
+ perm[i + 1] = (n - 1) - i;
+ }
+ }
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value);
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5T__imp_bit
+ *
+ * Purpose: Looks for an implicit bit in the mantissa. The value
+ * of _A should be 1.0 and the value of _B should be 0.5.
+ * Some floating-point formats discard the most significant
+ * bit of the mantissa after normalizing since it will always
+ * be a one (except for 0.0). If this is true for the native
+ * floating point values stored in _A and _B then the function
+ * returns non-zero.
+ *
+ * This function assumes that the exponent occupies higher
+ * order bits than the mantissa and that the most significant
+ * bit of the mantissa is next to the least significant bit
+ * of the exponent.
+ *
+ *
+ * Return: imp_bit will be set to 1 if the most significant bit
+ * of the mantissa is discarded (ie, the mantissa has an
+ * implicit `one' as the most significant bit). Otherwise,
+ * imp_bit will be set to zero zero.
+ *
+ * SUCCEED/FAIL
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5T__imp_bit(unsigned n, int *perm, void *_a, void *_b, const unsigned char *pad_mask, unsigned *imp_bit)
+{
+ unsigned char *a = (unsigned char *)_a;
+ unsigned char *b = (unsigned char *)_b;
+ unsigned changed;
+ unsigned major;
+ unsigned minor;
+ unsigned msmb; /* Most significant mantissa bit */
+ herr_t ret_value = SUCCEED;
+
+ FUNC_ENTER_PACKAGE
+
+ /* Look for the least significant bit that has changed between
+ * A and B. This is the least significant bit of the exponent.
+ */
+ if (H5T__bit_cmp(n, perm, a, b, pad_mask, &changed) < 0)
+ HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "couldn't find LSB")
+
+ /* The bit to the right (less significant) of the changed bit should
+ * be the most significant bit of the mantissa. If it is non-zero
+ * then the format does not remove the leading `1' of the mantissa.
+ */
+ msmb = changed - 1;
+ major = msmb / 8;
+ minor = msmb % 8;
+
+ *imp_bit = (a[perm[major]] >> minor) & 0x01 ? 0 : 1;
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+}
+
+/*-------------------------------------------------------------------------
+ * Function: find_bias
+ *
+ * Purpose: Determines the bias of the exponent. This function should
+ * be called with _A having a value of `1'.
+ *
+ * Return: The exponent bias
+ *-------------------------------------------------------------------------
+ */
+H5_ATTR_PURE static unsigned
+H5T__find_bias(unsigned epos, unsigned esize, int *perm, void *_a)
+{
+ unsigned char *a = (unsigned char *)_a;
+ unsigned char mask;
+ unsigned b, shift = 0, nbits, bias = 0;
+
+ FUNC_ENTER_PACKAGE_NOERR
+
+ while (esize > 0) {
+ nbits = MIN(esize, (8 - epos % 8));
+ mask = (unsigned char)((1 << nbits) - 1);
+ b = (unsigned)(a[perm[epos / 8]] >> (epos % 8)) & mask;
+ bias |= b << shift;
+
+ shift += nbits;
+ esize -= nbits;
+ epos += nbits;
+ }
+
+ FUNC_LEAVE_NOAPI(bias);
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5T__set_precision
+ *
+ * Purpose: Determine the precision and offset
+ *
+ * Return: void
+ *-------------------------------------------------------------------------
+ */
+static void
+H5T__set_precision(H5T_fpoint_det_t *d)
+{
+ FUNC_ENTER_PACKAGE_NOERR
+
+ d->offset = MIN3(d->mpos, d->epos, d->sign);
+ d->prec = d->msize + d->esize + 1;
+
+ FUNC_LEAVE_NOAPI_VOID
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5T__init_native_float_types
+ *
+ * Purpose: Initialize native floating-point datatypes
+ *
+ * Return: Success: non-negative
+ * Failure: negative
+ *-------------------------------------------------------------------------
+ */
+herr_t H5_NO_UBSAN
+H5T__init_native_float_types(void)
+{
+ H5T_fpoint_det_t det;
+ H5T_t *dt = NULL;
+ herr_t ret_value = SUCCEED;
+
+ FUNC_ENTER_PACKAGE
+
+ /* H5T_NATIVE_FLOAT */
+
+ /* Get the type's characteristics */
+ memset(&det, 0, sizeof(H5T_fpoint_det_t));
+ DETECT_F(float, FLOAT, det);
+
+ /* Allocate and fill type structure */
+ if (NULL == (dt = H5T__alloc()))
+ HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+ dt->shared->state = H5T_STATE_IMMUTABLE;
+ dt->shared->type = H5T_FLOAT;
+ dt->shared->size = det.size;
+ dt->shared->u.atomic.order = det.order;
+ dt->shared->u.atomic.offset = det.offset;
+ dt->shared->u.atomic.prec = det.prec;
+ dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+ dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+ dt->shared->u.atomic.u.f.sign = det.sign;
+ dt->shared->u.atomic.u.f.epos = det.epos;
+ dt->shared->u.atomic.u.f.esize = det.esize;
+ dt->shared->u.atomic.u.f.ebias = det.ebias;
+ dt->shared->u.atomic.u.f.mpos = det.mpos;
+ dt->shared->u.atomic.u.f.msize = det.msize;
+ dt->shared->u.atomic.u.f.norm = det.norm;
+ dt->shared->u.atomic.u.f.pad = H5T_PAD_ZERO;
+
+ /* Register the type and set global variables */
+ if ((H5T_NATIVE_FLOAT_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+ HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+ H5T_NATIVE_FLOAT_ALIGN_g = det.comp_align;
+
+ /* H5T_NATIVE_DOUBLE */
+
+ /* Get the type's characteristics */
+ memset(&det, 0, sizeof(H5T_fpoint_det_t));
+ DETECT_F(double, DOUBLE, det);
+
+ /* Allocate and fill type structure */
+ if (NULL == (dt = H5T__alloc()))
+ HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+ dt->shared->state = H5T_STATE_IMMUTABLE;
+ dt->shared->type = H5T_FLOAT;
+ dt->shared->size = det.size;
+ dt->shared->u.atomic.order = det.order;
+ dt->shared->u.atomic.offset = det.offset;
+ dt->shared->u.atomic.prec = det.prec;
+ dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+ dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+ dt->shared->u.atomic.u.f.sign = det.sign;
+ dt->shared->u.atomic.u.f.epos = det.epos;
+ dt->shared->u.atomic.u.f.esize = det.esize;
+ dt->shared->u.atomic.u.f.ebias = det.ebias;
+ dt->shared->u.atomic.u.f.mpos = det.mpos;
+ dt->shared->u.atomic.u.f.msize = det.msize;
+ dt->shared->u.atomic.u.f.norm = det.norm;
+ dt->shared->u.atomic.u.f.pad = H5T_PAD_ZERO;
+
+ /* Register the type and set global variables */
+ if ((H5T_NATIVE_DOUBLE_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+ HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+ H5T_NATIVE_DOUBLE_ALIGN_g = det.comp_align;
+
+ /* H5T_NATIVE_LDOUBLE */
+
+ /* Get the type's characteristics */
+ memset(&det, 0, sizeof(H5T_fpoint_det_t));
+ DETECT_F(long double, LDOUBLE, det);
+
+ /* Allocate and fill type structure */
+ if (NULL == (dt = H5T__alloc()))
+ HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+ dt->shared->state = H5T_STATE_IMMUTABLE;
+ dt->shared->type = H5T_FLOAT;
+ dt->shared->size = det.size;
+ dt->shared->u.atomic.order = det.order;
+ dt->shared->u.atomic.offset = det.offset;
+ dt->shared->u.atomic.prec = det.prec;
+ dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+ dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+ dt->shared->u.atomic.u.f.sign = det.sign;
+ dt->shared->u.atomic.u.f.epos = det.epos;
+ dt->shared->u.atomic.u.f.esize = det.esize;
+ dt->shared->u.atomic.u.f.ebias = det.ebias;
+ dt->shared->u.atomic.u.f.mpos = det.mpos;
+ dt->shared->u.atomic.u.f.msize = det.msize;
+ dt->shared->u.atomic.u.f.norm = det.norm;
+ dt->shared->u.atomic.u.f.pad = H5T_PAD_ZERO;
+
+ /* Register the type and set global variables */
+ if ((H5T_NATIVE_LDOUBLE_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+ HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+ H5T_NATIVE_LDOUBLE_ALIGN_g = det.comp_align;
+
+ /* Set the platform's alignment (assumes long double's order
+ * is true for all types)
+ */
+ H5T_native_order_g = det.order;
+
+done:
+ if (ret_value < 0) {
+ if (dt != NULL) {
+ dt->shared = H5FL_FREE(H5T_shared_t, dt->shared);
+ dt = H5FL_FREE(H5T_t, dt);
+ }
+ }
+
+ FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5T__init_native_float_types() */
diff --git a/src/H5Tmodule.h b/src/H5Tmodule.h
index c059d6e..805198f 100644
--- a/src/H5Tmodule.h
+++ b/src/H5Tmodule.h
@@ -408,11 +408,9 @@
* NATIVE
* </td>
* <td span='3'>
- * This architecture contains C-like datatypes for the machine on which
- * the library was compiled. The types were actually defined by running
- * the H5detect program when the library was compiled. In order to be
- * portable, applications should almost always use this architecture
- * to describe things in memory.
+ * This architecture contains C-like datatypes for the machine for which
+ * the library was compiled. In order to be portable, applications should
+ * almost always use this architecture to describe things in memory.
* </td>
* </tr>
* <tr>
@@ -3921,9 +3919,8 @@ filled according to the value of this property. The padding can be:
*
* \defgroup PDTNAT Native Datatypes
* \ingroup PDT
- * \details These are the datatypes detected during library \Emph{compilation}
- * by \c H5detect(). Their names differ from other HDF5 datatype names
- * as follows:
+ * \details These are the C-like datatypes for the platform. Their names differ
+ * from other HDF5 datatype names as follows:
* \li Instead of a class name, precision and byte order as the last
* component, they have a C-like type name.
* \li If the type begins with \c U then it is the unsigned version of
diff --git a/src/H5Tpkg.h b/src/H5Tpkg.h
index ae71c7d..df16413 100644
--- a/src/H5Tpkg.h
+++ b/src/H5Tpkg.h
@@ -433,7 +433,7 @@ H5FL_EXTERN(H5T_t);
H5FL_EXTERN(H5T_shared_t);
/* Common functions */
-H5_DLL herr_t H5T__init_native(void);
+H5_DLL herr_t H5T__init_native_float_types(void);
H5_DLL herr_t H5T__init_native_internal(void);
H5_DLL H5T_t *H5T__create(H5T_class_t type, size_t size);
H5_DLL H5T_t *H5T__alloc(void);
diff --git a/src/H5Tpublic.h b/src/H5Tpublic.h
index c28266a..e813c2f 100644
--- a/src/H5Tpublic.h
+++ b/src/H5Tpublic.h
@@ -728,8 +728,7 @@ H5_DLLVAR hid_t H5T_VAX_F32_g;
H5_DLLVAR hid_t H5T_VAX_F64_g;
/*
- * The predefined native types. These are the types detected by H5detect and
- * they violate the naming scheme a little. Instead of a class name,
+ * The predefined native types for this platform. Instead of a class name,
* precision and byte order as the last component, they have a C-like type
* name. If the type begins with `U' then it is the unsigned version of the
* integer type; other integer types are signed. The type LLONG corresponds
diff --git a/src/H5build_settings.autotools.c.in b/src/H5build_settings.autotools.c.in
new file mode 100644
index 0000000..abdc53a
--- /dev/null
+++ b/src/H5build_settings.autotools.c.in
@@ -0,0 +1,119 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group. *
+ * All rights reserved. *
+ * *
+ * This file is part of HDF5. The full HDF5 copyright notice, including *
+ * terms governing use, modification, and redistribution, is contained in *
+ * the COPYING file, which can be found at the root of the source code *
+ * distribution tree, or in https://www.hdfgroup.org/licenses. *
+ * If you do not have access to either file, you may request a copy from *
+ * help@hdfgroup.org. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "H5private.h"
+
+H5_GCC_DIAG_OFF("larger-than=")
+H5_CLANG_DIAG_OFF("overlength-strings")
+
+/* clang-format off */
+const char H5build_settings[]=
+ " SUMMARY OF THE HDF5 CONFIGURATION\n"
+ " =================================\n"
+ "\n"
+ "General Information:\n"
+ "-------------------\n"
+ " HDF5 Version: @H5_VERSION@\n"
+ " Configured on: @CONFIG_DATE@\n"
+ " Configured by: @CONFIG_USER@\n"
+ " Host system: @host_cpu@-@host_vendor@-@host_os@\n"
+ " Uname information: @UNAME_INFO@\n"
+ " Byte sex: @BYTESEX@\n"
+ " Installation point: @prefix@\n"
+ "\n"
+ "Compiling Options:\n"
+ "------------------\n"
+ " Build Mode: @BUILD_MODE@\n"
+ " Debugging Symbols: @SYMBOLS@\n"
+ " Asserts: @ASSERTS@\n"
+ " Profiling: @PROFILING@\n"
+ " Optimization Level: @OPTIMIZATION@\n"
+ "\n"
+ "Linking Options:\n"
+ "----------------\n"
+ " Libraries: @STATIC_SHARED@\n"
+ " Statically Linked Executables: @LT_STATIC_EXEC@\n"
+ " LDFLAGS: @LDFLAGS@\n"
+ " H5_LDFLAGS: @H5_LDFLAGS@\n"
+ " AM_LDFLAGS: @AM_LDFLAGS@\n"
+ " Extra libraries: @LIBS@\n"
+ " Archiver: @AR@\n"
+ " AR_FLAGS: @AR_FLAGS@\n"
+ " Ranlib: @RANLIB@\n"
+ "\n"
+ "Languages:\n"
+ "----------\n"
+ " C: yes\n"
+ " C Compiler: @CC_VERSION@\n"
+ " CPPFLAGS: @CPPFLAGS@\n"
+ " H5_CPPFLAGS: @H5_CPPFLAGS@\n"
+ " AM_CPPFLAGS: @AM_CPPFLAGS@\n"
+ " C Flags: @CFLAGS@\n"
+ " H5 C Flags: @H5_CFLAGS@\n"
+ " AM C Flags: @AM_CFLAGS@\n"
+ " Shared C Library: @enable_shared@\n"
+ " Static C Library: @enable_static@\n"
+ "\n"
+ "\n"
+ " Fortran: @HDF_FORTRAN@\n"
+@BUILD_FORTRAN_CONDITIONAL_TRUE@ " Fortran Compiler: @FC_VERSION@\n"
+@BUILD_FORTRAN_CONDITIONAL_TRUE@ " Fortran Flags: @FCFLAGS@\n"
+@BUILD_FORTRAN_CONDITIONAL_TRUE@ " H5 Fortran Flags: @H5_FCFLAGS@\n"
+@BUILD_FORTRAN_CONDITIONAL_TRUE@ " AM Fortran Flags: @AM_FCFLAGS@\n"
+@BUILD_FORTRAN_CONDITIONAL_TRUE@ " Shared Fortran Library: @H5_FORTRAN_SHARED@\n"
+@BUILD_FORTRAN_CONDITIONAL_TRUE@ " Static Fortran Library: @enable_static@\n"
+@BUILD_FORTRAN_CONDITIONAL_TRUE@ " Module Directory: @fmoddir@\n"
+ "\n"
+ " C++: @HDF_CXX@\n"
+@BUILD_CXX_CONDITIONAL_TRUE@ " C++ Compiler: @CXX_VERSION@\n"
+@BUILD_CXX_CONDITIONAL_TRUE@ " C++ Flags: @CXXFLAGS@\n"
+@BUILD_CXX_CONDITIONAL_TRUE@ " H5 C++ Flags: @H5_CXXFLAGS@\n"
+@BUILD_CXX_CONDITIONAL_TRUE@ " AM C++ Flags: @AM_CXXFLAGS@\n"
+@BUILD_CXX_CONDITIONAL_TRUE@ " Shared C++ Library: @enable_shared@\n"
+@BUILD_CXX_CONDITIONAL_TRUE@ " Static C++ Library: @enable_static@\n"
+ "\n"
+ " Java: @HDF_JAVA@\n"
+@BUILD_JAVA_CONDITIONAL_TRUE@ " Java Compiler: @JAVA_VERSION@\n"
+ "\n"
+ "\n"
+ "Features:\n"
+ "---------\n"
+ " Parallel HDF5: @PARALLEL@\n"
+ " Parallel Filtered Dataset Writes: @PARALLEL_FILTERED_WRITES@\n"
+ " Large Parallel I/O: @LARGE_PARALLEL_IO@\n"
+ " High-level library: @HDF5_HL@\n"
+ "Dimension scales w/ new references: @DIMENSION_SCALES_WITH_NEW_REF@\n"
+ " Build HDF5 Tests: @HDF5_TESTS@\n"
+ " Build HDF5 Tools: @HDF5_TOOLS@\n"
+ " Build GIF Tools: @HDF5_HL_GIF_TOOLS@\n"
+ " Threadsafety: @THREADSAFE@\n"
+ " Default API mapping: @DEFAULT_API_VERSION@\n"
+ " With deprecated public symbols: @DEPRECATED_SYMBOLS@\n"
+ " I/O filters (external): @EXTERNAL_FILTERS@\n"
+ " Map (H5M) API: @MAP_API@\n"
+ " Direct VFD: @DIRECT_VFD@\n"
+ " Mirror VFD: @MIRROR_VFD@\n"
+ " Subfiling VFD: @SUBFILING_VFD@\n"
+ " (Read-Only) S3 VFD: @ROS3_VFD@\n"
+ " (Read-Only) HDFS VFD: @HAVE_LIBHDFS@\n"
+ " Packages w/ extra debug output: @INTERNAL_DEBUG_OUTPUT@\n"
+ " API tracing: @TRACE_API@\n"
+ " Using memory checker: @USINGMEMCHECKER@\n"
+ " Function stack tracing: @CODESTACK@\n"
+ " Use file locking: @DESIRED_FILE_LOCKING@\n"
+ " Strict file format checks: @STRICT_FORMAT_CHECKS@\n"
+ " Optimization instrumentation: @INSTRUMENT_LIBRARY@\n"
+;
+/* clang-format on */
+
+H5_GCC_DIAG_ON("larger-than=")
+H5_CLANG_DIAG_OFF("overlength-strings")
diff --git a/src/H5build_settings.cmake.c.in b/src/H5build_settings.cmake.c.in
new file mode 100644
index 0000000..67ebec7
--- /dev/null
+++ b/src/H5build_settings.cmake.c.in
@@ -0,0 +1,117 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group. *
+ * All rights reserved. *
+ * *
+ * This file is part of HDF5. The full HDF5 copyright notice, including *
+ * terms governing use, modification, and redistribution, is contained in *
+ * the COPYING file, which can be found at the root of the source code *
+ * distribution tree, or in https://www.hdfgroup.org/licenses. *
+ * If you do not have access to either file, you may request a copy from *
+ * help@hdfgroup.org. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "H5private.h"
+
+H5_GCC_DIAG_OFF("larger-than=")
+H5_CLANG_DIAG_OFF("overlength-strings")
+
+const char H5build_settings[]=
+ " SUMMARY OF THE HDF5 CONFIGURATION\n"
+ " =================================\n"
+ "\n"
+ "General Information:\n"
+ "-------------------\n"
+ " HDF5 Version: @HDF5_PACKAGE_VERSION_STRING@\n"
+ " Configured on: @CONFIG_DATE@\n"
+ " Configured by: @CMAKE_GENERATOR@\n"
+ " Host system: @CMAKE_HOST_SYSTEM@\n"
+ " Uname information: @CMAKE_SYSTEM_NAME@\n"
+ " Byte sex: @BYTESEX@\n"
+ " Installation point: @CMAKE_INSTALL_PREFIX@\n"
+ "\n"
+ "Compiling Options:\n"
+ "------------------\n"
+ " Build Mode: @HDF_CFG_NAME@\n"
+ " Debugging Symbols: @HDF5_ENABLE_SYMBOLS@\n"
+ " Asserts: @HDF5_ENABLE_ASSERTS@\n"
+ " Profiling: @HDF5_ENABLE_PROFILING@\n"
+ " Optimization Level: @HDF5_ENABLE_OPTIMIZATION@\n"
+ "\n"
+ "Linking Options:\n"
+ "----------------\n"
+ " Libraries: @BUILD_NAME_EXT@\n"
+ " Statically Linked Executables: @BUILD_STATIC_EXECS@\n"
+ " LDFLAGS: @CMAKE_SHARED_LINKER_FLAGS@\n"
+ " H5_LDFLAGS: @H5_LDFLAGS@\n"
+ " AM_LDFLAGS: @AM_LDFLAGS@\n"
+ " Extra libraries: @LINK_LIBS@\n"
+ " Archiver: @CMAKE_AR@\n"
+ " AR_FLAGS: \n"
+ " Ranlib: @CMAKE_RANLIB@\n"
+ "\n"
+ "Languages:\n"
+ "----------\n"
+ " C: YES\n"
+ " C Compiler: @CMAKE_C_COMPILER@ @CMAKE_C_COMPILER_VERSION@\n"
+ " CPPFLAGS: @CPPFLAGS@\n"
+ " H5_CPPFLAGS: @H5_CPPFLAGS@\n"
+ " AM_CPPFLAGS: @AM_CPPFLAGS@\n"
+ " C Flags: @CMAKE_C_FLAGS@\n"
+ " H5 C Flags: @HDF5_CMAKE_C_FLAGS@\n"
+ " AM C Flags: @AM_CFLAGS@\n"
+ " Shared C Library: @H5_ENABLE_SHARED_LIB@\n"
+ " Static C Library: @H5_ENABLE_STATIC_LIB@\n"
+ "\n"
+ "\n"
+ " Fortran: @HDF5_BUILD_FORTRAN@\n"
+ " Fortran Compiler: @CMAKE_Fortran_COMPILER@ @CMAKE_Fortran_COMPILER_VERSION@\n"
+ " Fortran Flags: @CMAKE_Fortran_FLAGS@\n"
+ " H5 Fortran Flags: @HDF5_CMAKE_Fortran_FLAGS@\n"
+ " AM Fortran Flags: @AM_FCFLAGS@\n"
+ " Shared Fortran Library: @H5_ENABLE_SHARED_LIB@\n"
+ " Static Fortran Library: @H5_ENABLE_STATIC_LIB@\n"
+ " Module Directory: @CMAKE_Fortran_MODULE_DIRECTORY@\n"
+ "\n"
+ " C++: @HDF5_BUILD_CPP_LIB@\n"
+ " C++ Compiler: @CMAKE_CXX_COMPILER@ @CMAKE_CXX_COMPILER_VERSION@\n"
+ " C++ Flags: @CMAKE_CXX_FLAGS@\n"
+ " H5 C++ Flags: @HDF5_CMAKE_CXX_FLAGS@\n"
+ " AM C++ Flags: @AM_CXXFLAGS@\n"
+ " Shared C++ Library: @H5_ENABLE_SHARED_LIB@\n"
+ " Static C++ Library: @H5_ENABLE_STATIC_LIB@\n"
+ "\n"
+ " Java: @HDF5_BUILD_JAVA@\n"
+ " Java Compiler: @CMAKE_Java_COMPILER@ @Java_VERSION@\n"
+ "\n"
+ "\n"
+ "Features:\n"
+ "---------\n"
+ " Parallel HDF5: @HDF5_ENABLE_PARALLEL@\n"
+ " Parallel Filtered Dataset Writes: @PARALLEL_FILTERED_WRITES@\n"
+ " Large Parallel I/O: @LARGE_PARALLEL_IO@\n"
+ " High-level library: @HDF5_BUILD_HL_LIB@\n"
+ "Dimension scales w/ new references: @DIMENSION_SCALES_WITH_NEW_REF@\n"
+ " Build HDF5 Tests: @BUILD_TESTING@\n"
+ " Build HDF5 Tools: @HDF5_BUILD_TOOLS@\n"
+ " Build GIF Tools: @HDF5_BUILD_HL_GIF_TOOLS@\n"
+ " Threadsafety: @HDF5_ENABLE_THREADSAFE@\n"
+ " Default API mapping: @DEFAULT_API_VERSION@\n"
+ " With deprecated public symbols: @HDF5_ENABLE_DEPRECATED_SYMBOLS@\n"
+ " I/O filters (external): @EXTERNAL_FILTERS@\n"
+ " Map (H5M) API: @H5_HAVE_MAP_API@\n"
+ " Direct VFD: @H5_HAVE_DIRECT@\n"
+ " Mirror VFD: @H5_HAVE_MIRROR_VFD@\n"
+ " Subfiling VFD: @H5_HAVE_SUBFILING_VFD@\n"
+ " (Read-Only) S3 VFD: @H5_HAVE_ROS3_VFD@\n"
+ " (Read-Only) HDFS VFD: @H5_HAVE_LIBHDFS@\n"
+ " Packages w/ extra debug output: @INTERNAL_DEBUG_OUTPUT@\n"
+ " API tracing: @HDF5_ENABLE_TRACE@\n"
+ " Using memory checker: @HDF5_ENABLE_USING_MEMCHECKER@\n"
+ " Function stack tracing: @HDF5_ENABLE_CODESTACK@\n"
+ " Use file locking: @HDF5_FILE_LOCKING_SETTING@\n"
+ " Strict file format checks: @HDF5_STRICT_FORMAT_CHECKS@\n"
+ " Optimization instrumentation: @HDF5_Enable_Instrument@\n"
+;
+
+H5_GCC_DIAG_ON("larger-than=")
+H5_CLANG_DIAG_OFF("overlength-strings")
diff --git a/src/H5build_settings.off.c.in b/src/H5build_settings.off.c.in
new file mode 100644
index 0000000..2464e9f
--- /dev/null
+++ b/src/H5build_settings.off.c.in
@@ -0,0 +1,13 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group. *
+ * All rights reserved. *
+ * *
+ * This file is part of HDF5. The full HDF5 copyright notice, including *
+ * terms governing use, modification, and redistribution, is contained in *
+ * the COPYING file, which can be found at the root of the source code *
+ * distribution tree, or in https://www.hdfgroup.org/licenses. *
+ * If you do not have access to either file, you may request a copy from *
+ * help@hdfgroup.org. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+const char H5build_settings[]="";
diff --git a/src/H5detect.c b/src/H5detect.c
deleted file mode 100644
index 8fb3887..0000000
--- a/src/H5detect.c
+++ /dev/null
@@ -1,904 +0,0 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Copyright by The HDF Group. *
- * All rights reserved. *
- * *
- * This file is part of HDF5. The full HDF5 copyright notice, including *
- * terms governing use, modification, and redistribution, is contained in *
- * the COPYING file, which can be found at the root of the source code *
- * distribution tree, or in https://www.hdfgroup.org/licenses. *
- * If you do not have access to either file, you may request a copy from *
- * help@hdfgroup.org. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/* Keep this declaration near the top of this file */
-static const char *FileHeader = "\n\
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\
- * Copyright by The HDF Group. *\n\
- * All rights reserved. *\n\
- * *\n\
- * This file is part of HDF5. The full HDF5 copyright notice, including *\n\
- * terms governing use, modification, and redistribution, is contained in *\n\
- * the COPYING file, which can be found at the root of the source code *\n\
- * distribution tree, or in https://www.hdfgroup.org/licenses. *\n\
- * If you do not have access to either file, you may request a copy from *\n\
- * help@hdfgroup.org. *\n\
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n";
-/*
- * Purpose: This code was borrowed heavily from the `detect.c'
- * program in the AIO distribution from Lawrence
- * Livermore National Laboratory.
- *
- * Detects machine byte order and floating point
- * format and generates a C source file (H5Tinit.c)
- * to describe those parameters.
- *
- * Assumptions: We have an ANSI compiler. We're on a Unix like
- * system or configure has detected those Unix
- * features which aren't available. We're not
- * running on a Vax or other machine with mixed
- * endianness.
- *-------------------------------------------------------------------------
- */
-#undef NDEBUG
-#include "H5private.h"
-#include "H5Tpublic.h"
-#include "H5Rpublic.h"
-
-#if defined(__has_attribute)
-#if __has_attribute(no_sanitize)
-#define HDF_NO_UBSAN __attribute__((no_sanitize("undefined")))
-#else
-#define HDF_NO_UBSAN
-#endif
-#else
-#define HDF_NO_UBSAN
-#endif
-
-#define MAXDETECT 64
-
-/* This structure holds information about a type that was detected */
-typedef struct detected_t {
- const char *varname;
- unsigned int size; /* total byte size */
- unsigned int precision; /* meaningful bits */
- unsigned int offset; /* bit offset to meaningful bits */
- int perm[32]; /* for detection of byte order */
- hbool_t is_vax; /* for vax (float & double) only */
- unsigned int sign; /* location of sign bit */
- unsigned int mpos, msize, imp; /* information about mantissa */
- unsigned int epos, esize; /* information about exponent */
- unsigned long bias; /* exponent bias for floating pt */
- unsigned int comp_align; /* alignment for structure */
-} detected_t;
-
-FILE *rawoutstream = NULL;
-
-/* Global variables types detection code */
-H5_GCC_DIAG_OFF("larger-than=")
-static detected_t d_g[MAXDETECT];
-H5_GCC_DIAG_ON("larger-than=")
-static volatile int nd_g = 0;
-
-static void print_results(int nd, detected_t *d);
-static void iprint(detected_t *);
-static int byte_cmp(int, const void *, const void *, const unsigned char *);
-static unsigned int bit_cmp(unsigned int, int *, void *, void *, const unsigned char *);
-static void fix_order(int, int, int *, const char **);
-static unsigned int imp_bit(unsigned int, int *, void *, void *, const unsigned char *);
-static unsigned int find_bias(unsigned int, unsigned int, int *, void *);
-static void precision(detected_t *);
-static void print_header(void);
-static void detect_C89_floats(void);
-static void detect_C99_floats(void);
-
-/*-------------------------------------------------------------------------
- * Function: precision
- *
- * Purpose: Determine the precision and offset
- *
- * Return: void
- *-------------------------------------------------------------------------
- */
-static void
-precision(detected_t *d)
-{
- /* A floating point */
- d->offset = MIN3(d->mpos, d->epos, d->sign);
- d->precision = d->msize + d->esize + 1;
-}
-
-/*-------------------------------------------------------------------------
- * 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.
- *-------------------------------------------------------------------------
- */
-#define DETECT_F(TYPE, VAR, INFO) \
- { \
- 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); \
- const char *_mesg; \
- \
- memset(&INFO, 0, sizeof(INFO)); \
- INFO.varname = #VAR; \
- INFO.size = sizeof(TYPE); \
- \
- /* Initialize padding mask */ \
- memset(_pad_mask, 0, sizeof(_pad_mask)); \
- \
- /* Padding bits. Set a variable to 4.0, then flip each bit and see if \
- * the modified variable is equal ("==") to the original. Build a \
- * padding bitmask to indicate which bits in the type are padding (i.e. \
- * have no effect on the value and should be ignored by subsequent \
- * steps). This is necessary because padding bits can change arbitrarily \
- * and interfere with detection of the various properties below unless we \
- * know to ignore them. */ \
- _v1 = (TYPE)4.0L; \
- 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)) { \
- _buf1[_i] ^= _byte_mask; \
- memcpy((void *)&_v2, (const void *)_buf1, sizeof(TYPE)); \
- H5_GCC_CLANG_DIAG_OFF("float-equal") \
- if (_v1 != _v2) \
- _pad_mask[_i] |= _byte_mask; \
- H5_GCC_CLANG_DIAG_ON("float-equal") \
- _buf1[_i] ^= _byte_mask; \
- } \
- \
- /* Byte Order */ \
- for (_i = 0, _v1 = (TYPE)0.0L, _v2 = (TYPE)1.0L; _i < (int)sizeof(TYPE); _i++) { \
- _v3 = _v1; \
- _v1 += _v2; \
- _v2 /= (TYPE)256.0L; \
- memcpy(_buf1, (const void *)&_v1, sizeof(TYPE)); \
- memcpy(_buf3, (const void *)&_v3, sizeof(TYPE)); \
- _j = byte_cmp(sizeof(TYPE), _buf3, _buf1, _pad_mask); \
- if (_j >= 0) { \
- INFO.perm[_i] = _j; \
- _last = _i; \
- } \
- } \
- fix_order(sizeof(TYPE), _last, INFO.perm, (const char **)&_mesg); \
- \
- if (!strcmp(_mesg, "VAX")) \
- INFO.is_vax = TRUE; \
- \
- /* Implicit mantissa bit */ \
- _v1 = (TYPE)0.5L; \
- _v2 = (TYPE)1.0L; \
- INFO.imp = imp_bit(sizeof(TYPE), INFO.perm, &_v1, &_v2, _pad_mask); \
- \
- /* Sign bit */ \
- _v1 = (TYPE)1.0L; \
- _v2 = (TYPE)-1.0L; \
- INFO.sign = bit_cmp(sizeof(TYPE), INFO.perm, &_v1, &_v2, _pad_mask); \
- \
- /* Mantissa */ \
- INFO.mpos = 0; \
- \
- _v1 = (TYPE)1.0L; \
- _v2 = (TYPE)1.5L; \
- INFO.msize = bit_cmp(sizeof(TYPE), INFO.perm, &_v1, &_v2, _pad_mask); \
- INFO.msize += 1 + (unsigned int)(INFO.imp ? 0 : 1) - INFO.mpos; \
- \
- /* Exponent */ \
- INFO.epos = INFO.mpos + INFO.msize; \
- \
- INFO.esize = INFO.sign - INFO.epos; \
- \
- _v1 = (TYPE)1.0L; \
- INFO.bias = find_bias(INFO.epos, INFO.esize, INFO.perm, &_v1); \
- precision(&(INFO)); \
- if (!strcmp(INFO.varname, "FLOAT") || !strcmp(INFO.varname, "DOUBLE") || \
- !strcmp(INFO.varname, "LDOUBLE")) { \
- COMP_ALIGNMENT(TYPE, INFO.comp_align); \
- } \
- }
-
-/* Detect alignment for C structure */
-#define COMP_ALIGNMENT(TYPE, COMP_ALIGN) \
- { \
- struct { \
- char c; \
- TYPE x; \
- } s; \
- \
- COMP_ALIGN = (unsigned int)((char *)(&(s.x)) - (char *)(&s)); \
- }
-
-/*-------------------------------------------------------------------------
- * Function: print_results
- *
- * Purpose: Prints information about the detected data types.
- *
- * Return: void
- *-------------------------------------------------------------------------
- */
-static void
-print_results(int nd, detected_t *d)
-{
- int byte_order = 0; /* byte order of data types */
- int i, j;
-
- /* Include files */
- fprintf(rawoutstream, "\
-/****************/\n\
-/* Module Setup */\n\
-/****************/\n\
-\n\
-#include \"H5Tmodule.h\" /* This source code file is part of the H5T module */\n\
-\n\
-\n\
-/***********/\n\
-/* Headers */\n\
-/***********/\n\
-#include \"H5private.h\" /* Generic Functions */\n\
-#include \"H5Eprivate.h\" /* Error handling */\n\
-#include \"H5FLprivate.h\" /* Free Lists */\n\
-#include \"H5Iprivate.h\" /* IDs */\n\
-#include \"H5Tpkg.h\" /* Datatypes */\n\
-\n\
-\n\
-/****************/\n\
-/* Local Macros */\n\
-/****************/\n\
-\n\
-\n\
-/******************/\n\
-/* Local Typedefs */\n\
-/******************/\n\
-\n\
-\n\
-/********************/\n\
-/* Package Typedefs */\n\
-/********************/\n\
-\n\
-\n\
-/********************/\n\
-/* Local Prototypes */\n\
-/********************/\n\
-\n\
-\n\
-/********************/\n\
-/* Public Variables */\n\
-/********************/\n\
-\n\
-\n\
-/*****************************/\n\
-/* Library Private Variables */\n\
-/*****************************/\n\
-\n\
-\n\
-/*********************/\n\
-/* Package Variables */\n\
-/*********************/\n\
-\n\
-\n");
- fprintf(rawoutstream, "\n\
-/*******************/\n\
-/* Local Variables */\n\
-/*******************/\n\
-\n");
-
- /* The interface initialization function */
- fprintf(rawoutstream, "\n\
-\n\
-/*-------------------------------------------------------------------------\n\
- * Function: H5T__init_native\n\
- *\n\
- * Purpose: Initialize pre-defined native datatypes from code generated\n\
- * during the library configuration by H5detect\n\
- *\n\
- * Return: Success: non-negative\n\
- * Failure: negative\n\
- *-------------------------------------------------------------------------\n\
- */\n\
-herr_t\n\
-H5T__init_native(void)\n\
-{\n\
- H5T_t *dt = NULL;\n\
- herr_t ret_value = SUCCEED;\n\
-\n\
- FUNC_ENTER_PACKAGE\n");
-
- for (i = 0; i < nd; i++) {
- /* The native endianness of this machine */
- /* The INFO.perm now contains `-1' for bytes that aren't used and
- * are always zero. This happens on the Cray for `short' where
- * sizeof(short) is 8, but only the low-order 4 bytes are ever used.
- */
- if (d[i].is_vax) /* The type is a VAX floating number */
- byte_order = -1;
- else {
- for (j = 0; j < 32; j++) {
- /* Find the 1st containing valid data */
- if (d[i].perm[j] > -1) {
- byte_order = d[i].perm[j];
- break;
- }
- }
- }
-
- /* Print a comment to describe this section of definitions. */
- fprintf(rawoutstream, "\n /*\n");
- iprint(d + i);
- fprintf(rawoutstream, " */\n");
-
- /* The part common to fixed and floating types */
- fprintf(rawoutstream, "\
- if(NULL == (dt = H5T__alloc()))\n\
- HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, \"datatype allocation failed\")\n\
- dt->shared->state = H5T_STATE_IMMUTABLE;\n\
- dt->shared->type = H5T_FLOAT;\n\
- dt->shared->size = %d;\n",
- d[i].size); /* Size */
-
- if (byte_order == -1)
- fprintf(rawoutstream, "\
- dt->shared->u.atomic.order = H5T_ORDER_VAX;\n");
- else if (byte_order == 0)
- fprintf(rawoutstream, "\
- dt->shared->u.atomic.order = H5T_ORDER_LE;\n");
- else
- fprintf(rawoutstream, "\
- dt->shared->u.atomic.order = H5T_ORDER_BE;\n");
-
- fprintf(rawoutstream, "\
- dt->shared->u.atomic.offset = %d;\n\
- dt->shared->u.atomic.prec = %d;\n\
- dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;\n\
- dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;\n",
- d[i].offset, /* Offset */
- d[i].precision); /* Precision */
-
- /* The part unique to floating point types */
- fprintf(rawoutstream, "\
- dt->shared->u.atomic.u.f.sign = %d;\n\
- dt->shared->u.atomic.u.f.epos = %d;\n\
- dt->shared->u.atomic.u.f.esize = %d;\n\
- dt->shared->u.atomic.u.f.ebias = 0x%08lx;\n\
- dt->shared->u.atomic.u.f.mpos = %d;\n\
- dt->shared->u.atomic.u.f.msize = %d;\n\
- dt->shared->u.atomic.u.f.norm = H5T_NORM_%s;\n\
- dt->shared->u.atomic.u.f.pad = H5T_PAD_ZERO;\n",
- d[i].sign, /* Sign location */
- d[i].epos, /* Exponent loc */
- d[i].esize, /* Exponent size */
- (unsigned long)(d[i].bias), /* Exponent bias */
- d[i].mpos, /* Mantissa loc */
- d[i].msize, /* Mantissa size */
- d[i].imp ? "IMPLIED" : "NONE"); /* Normalization */
-
- /* Register the type */
- fprintf(rawoutstream, "\
- if((H5T_NATIVE_%s_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)\n\
- HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, \"can't register ID for built-in datatype\")\n",
- d[i].varname);
-
- /* Variables for alignment of compound datatype */
- if (!strcmp(d[i].varname, "SCHAR") || !strcmp(d[i].varname, "SHORT") ||
- !strcmp(d[i].varname, "INT") || !strcmp(d[i].varname, "LONG") || !strcmp(d[i].varname, "LLONG") ||
- !strcmp(d[i].varname, "FLOAT") || !strcmp(d[i].varname, "DOUBLE") ||
- !strcmp(d[i].varname, "LDOUBLE")) {
- fprintf(rawoutstream, " H5T_NATIVE_%s_ALIGN_g = %lu;\n", d[i].varname,
- (unsigned long)(d[i].comp_align));
- }
- }
-
- /* Consider VAX a little-endian machine */
- if (byte_order == 0 || byte_order == -1) {
- fprintf(rawoutstream, "\n\
- /* Set the native order for this machine */\n\
- H5T_native_order_g = H5T_ORDER_%s;\n",
- "LE");
- }
- else {
- fprintf(rawoutstream, "\n\
- /* Set the native order for this machine */\n\
- H5T_native_order_g = H5T_ORDER_%s;\n",
- "BE");
- }
-
- fprintf(rawoutstream, "\
-\n\
-done:\n\
- if(ret_value < 0) {\n\
- if(dt != NULL) {\n\
- dt->shared = H5FL_FREE(H5T_shared_t, dt->shared);\n\
- dt = H5FL_FREE(H5T_t, dt);\n\
- }\n\
- }\n\
-\n\
- FUNC_LEAVE_NOAPI(ret_value);\n} /* end H5T__init_native() */\n");
-
-} /* end print_results() */
-
-/*-------------------------------------------------------------------------
- * Function: iprint
- *
- * Purpose: Prints information about the fields of a floating point format
- *
- * Return: void
- *-------------------------------------------------------------------------
- */
-static void
-iprint(detected_t *d)
-{
- unsigned int pass;
-
- for (pass = (d->size - 1) / 4;; --pass) {
- unsigned int i, k;
-
- /* Print the byte ordering above the bit fields */
- fprintf(rawoutstream, " * ");
- for (i = MIN(pass * 4 + 3, d->size - 1); i >= pass * 4; --i) {
- fprintf(rawoutstream, "%4d", d->perm[i]);
- if (i > pass * 4)
- fputs(" ", rawoutstream);
- if (!i)
- break;
- }
-
- /* Print the bit fields */
- fprintf(rawoutstream, "\n * ");
- for (i = MIN(pass * 4 + 3, d->size - 1), k = MIN(pass * 32 + 31, 8 * d->size - 1); i >= pass * 4;
- --i) {
- unsigned int j;
-
- for (j = 8; j > 0; --j) {
- if (k == d->sign) {
- fputc('S', rawoutstream);
- }
- else if (k >= d->epos && k < d->epos + d->esize) {
- fputc('E', rawoutstream);
- }
- else if (k >= d->mpos && k < d->mpos + d->msize) {
- fputc('M', rawoutstream);
- }
- else {
- fputc('?', rawoutstream); /* Unknown floating point bit */
- }
- --k;
- }
- if (i > pass * 4)
- fputc(' ', rawoutstream);
- if (!i)
- break;
- }
- fputc('\n', rawoutstream);
- if (!pass)
- break;
- }
-
- /* Is there an implicit bit in the mantissa? */
- fprintf(rawoutstream, " * Implicit bit? %s\n", d->imp ? "yes" : "no");
-}
-
-/*-------------------------------------------------------------------------
- * Function: byte_cmp
- *
- * Purpose: Compares two chunks of memory A and B and returns the
- * byte index into those arrays of the first byte that
- * differs between A and B. Ignores differences where the
- * corresponding bit in pad_mask is set to 0.
- *
- * Return: Success: Index of differing byte.
- * Failure: -1 if all bytes are the same.
- *-------------------------------------------------------------------------
- */
-static int
-byte_cmp(int n, const void *_a, const void *_b, const unsigned char *pad_mask)
-{
- int i;
- const unsigned char *a = (const unsigned char *)_a;
- const unsigned char *b = (const unsigned char *)_b;
-
- for (i = 0; i < n; i++)
- if ((a[i] & pad_mask[i]) != (b[i] & pad_mask[i]))
- return i;
-
- return -1;
-}
-
-/*-------------------------------------------------------------------------
- * Function: bit_cmp
- *
- * Purpose: Compares two bit vectors and returns the index for the
- * first bit that differs between the two vectors. The
- * size of the vector is NBYTES. PERM is a mapping from
- * actual order to little endian. Ignores differences where
- * the corresponding bit in pad_mask is set to 0.
- *
- * Return: Index of first differing bit.
- *-------------------------------------------------------------------------
- */
-static unsigned int
-bit_cmp(unsigned int nbytes, int *perm, void *_a, void *_b, const unsigned char *pad_mask)
-{
- unsigned int i;
- unsigned char *a = (unsigned char *)_a;
- unsigned char *b = (unsigned char *)_b;
- unsigned char aa, bb;
-
- for (i = 0; i < nbytes; i++) {
- assert(perm[i] < (int)nbytes);
- if ((aa = (unsigned char)(a[perm[i]] & pad_mask[perm[i]])) !=
- (bb = (unsigned char)(b[perm[i]] & pad_mask[perm[i]]))) {
- unsigned int j;
-
- for (j = 0; j < 8; j++, aa >>= 1, bb >>= 1) {
- if ((aa & 1) != (bb & 1))
- return i * 8 + j;
- }
- fprintf(stderr, "INTERNAL ERROR");
- abort();
- }
- }
- fprintf(stderr, "INTERNAL ERROR");
- abort();
- return 0;
-}
-
-/*-------------------------------------------------------------------------
- * Function: fix_order
- *
- * Purpose: Given an array PERM with elements FIRST through LAST
- * initialized with zero origin byte numbers, this function
- * creates a permutation vector that maps the actual order
- * of a floating point number to little-endian.
- *
- * This function assumes that the mantissa byte ordering
- * implies the total ordering.
- *
- * Return: void
- *-------------------------------------------------------------------------
- */
-static void
-fix_order(int n, int last, int *perm, const char **mesg)
-{
- int i;
-
- if (last > 1) {
-
- /* We have at least three points to consider */
- if (perm[last] < perm[last - 1] && perm[last - 1] < perm[last - 2]) {
- /* Little endian */
- if (mesg)
- *mesg = "Little-endian";
- for (i = 0; i < n; i++)
- perm[i] = i;
- }
- else if (perm[last] > perm[last - 1] && perm[last - 1] > perm[last - 2]) {
- /* Big endian */
- if (mesg)
- *mesg = "Big-endian";
- for (i = 0; i < n; i++)
- perm[i] = (n - 1) - i;
- }
- else {
- /* Bi-endian machines like VAX
- * (NOTE: This is not an actual determination of the VAX-endianness.
- * It could have some other endianness and fall into this case.
- */
- assert(0 == n % 2);
- if (mesg)
- *mesg = "VAX";
- for (i = 0; i < n; i += 2) {
- perm[i] = (n - 2) - i;
- perm[i + 1] = (n - 1) - i;
- }
- }
- }
- else {
- fprintf(stderr, "Failed to detect byte order of %d-byte floating point.\n", n);
- exit(EXIT_FAILURE);
- }
-}
-
-/*-------------------------------------------------------------------------
- * Function: imp_bit
- *
- * Purpose: Looks for an implicit bit in the mantissa. The value
- * of _A should be 1.0 and the value of _B should be 0.5.
- * Some floating-point formats discard the most significant
- * bit of the mantissa after normalizing since it will always
- * be a one (except for 0.0). If this is true for the native
- * floating point values stored in _A and _B then the function
- * returns non-zero.
- *
- * This function assumes that the exponent occupies higher
- * order bits than the mantissa and that the most significant
- * bit of the mantissa is next to the least significant bit
- * of the exponent.
- *
- *
- * Return: Success: Non-zero if the most significant bit
- * of the mantissa is discarded (ie, the
- * mantissa has an implicit `one' as the
- * most significant bit). Otherwise,
- * returns zero.
- *
- * Failure: 1
- *-------------------------------------------------------------------------
- */
-static unsigned int
-imp_bit(unsigned int n, int *perm, void *_a, void *_b, const unsigned char *pad_mask)
-{
- unsigned char *a = (unsigned char *)_a;
- unsigned char *b = (unsigned char *)_b;
- unsigned int changed, major, minor;
- unsigned int msmb; /* Most significant mantissa bit */
-
- /* Look for the least significant bit that has changed between
- * A and B. This is the least significant bit of the exponent.
- */
- changed = bit_cmp(n, perm, a, b, pad_mask);
-
- /* The bit to the right (less significant) of the changed bit should
- * be the most significant bit of the mantissa. If it is non-zero
- * then the format does not remove the leading `1' of the mantissa.
- */
- msmb = changed - 1;
- major = msmb / 8;
- minor = msmb % 8;
-
- return (a[perm[major]] >> minor) & 0x01 ? 0 : 1;
-}
-
-/*-------------------------------------------------------------------------
- * Function: find_bias
- *
- * Purpose: Determines the bias of the exponent. This function should
- * be called with _A having a value of `1'.
- *
- * Return: The exponent bias
- *-------------------------------------------------------------------------
- */
-H5_ATTR_PURE static unsigned int
-find_bias(unsigned int epos, unsigned int esize, int *perm, void *_a)
-{
- unsigned char *a = (unsigned char *)_a;
- unsigned char mask;
- unsigned int b, shift = 0, nbits, bias = 0;
-
- while (esize > 0) {
- nbits = MIN(esize, (8 - epos % 8));
- mask = (unsigned char)((1 << nbits) - 1);
- b = (unsigned int)(a[perm[epos / 8]] >> (epos % 8)) & mask;
- bias |= b << shift;
-
- shift += nbits;
- esize -= nbits;
- epos += nbits;
- }
- return bias;
-}
-
-/*-------------------------------------------------------------------------
- * Function: print_header
- *
- * Purpose: Prints the C file header for the generated file.
- *
- * Return: void
- *-------------------------------------------------------------------------
- */
-static void
-print_header(void)
-{
- time_t now = time(NULL);
- struct tm *tm = localtime(&now);
- char real_name[30];
- char host_name[256];
- int i;
- const char *s;
-#ifdef H5_HAVE_GETPWUID
- struct passwd *pwd = NULL;
-#else
- int pwd = 1;
-#endif
- static const char *month_name[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
- "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
- static const char *purpose = "\
-This machine-generated source code contains\n\
-information about the various integer and\n\
-floating point numeric formats found on this\n\
-architecture. The parameters below should be\n\
-checked carefully and errors reported to the\n\
-HDF5 maintainer.\n\
-\n\
-Each of the numeric formats listed below are\n\
-printed from most significant bit to least\n\
-significant bit even though the actual bytes\n\
-might be stored in a different order in\n\
-memory. The integers above each binary byte\n\
-indicate the relative order of the bytes in\n\
-memory; little-endian machines have\n\
-decreasing numbers while big-endian machines\n\
-have increasing numbers.\n\
-\n\
-The fields of the numbers are printed as\n\
-letters with `S' for the mantissa sign bit,\n\
-`M' for the mantissa magnitude, and `E' for\n\
-the exponent. The exponent has an associated\n\
-bias which can be subtracted to find the\n\
-true exponent. The radix point is assumed\n\
-to be before the first `M' bit. Any bit\n\
-of a floating-point value not falling into one\n\
-of these categories is printed as a question\n\
-mark. Bits of integer types are printed as\n\
-`I' for 2's complement and `U' for magnitude.\n\
-\n\
-If the most significant bit of the normalized\n\
-mantissa (always a `1' except for `0.0') is\n\
-not stored then an `implicit=yes' appears\n\
-under the field description. In this case,\n\
-the radix point is still assumed to be\n\
-before the first `M' but after the implicit\n\
-bit.\n";
-
- /* The real name is the first item from the passwd gecos field */
-#ifdef H5_HAVE_GETPWUID
- {
- size_t n;
- char *comma;
- if ((pwd = getpwuid(getuid()))) {
- if ((comma = strchr(pwd->pw_gecos, ','))) {
- n = MIN(sizeof(real_name) - 1, (unsigned)(comma - pwd->pw_gecos));
- strncpy(real_name, pwd->pw_gecos, n);
- real_name[n] = '\0';
- }
- else {
- strncpy(real_name, pwd->pw_gecos, sizeof(real_name));
- real_name[sizeof(real_name) - 1] = '\0';
- }
- }
- else
- real_name[0] = '\0';
- }
-#else
- real_name[0] = '\0';
-#endif
-
- /* The FQDM of this host or the empty string */
-#ifdef H5_HAVE_GETHOSTNAME
- if (gethostname(host_name, sizeof(host_name)) < 0) {
- host_name[0] = '\0';
- }
-#else
- host_name[0] = '\0';
-#endif
-
- /* The file header: warning, copyright notice, build information */
- fprintf(rawoutstream, "/* Generated automatically by H5detect -- DO NOT EDIT! */\n\n\n");
- fputs(FileHeader, rawoutstream); /* The copyright notice -- see top of this file */
-
- fprintf(rawoutstream, " *\n * Created:\t\t%s %2d, %4d\n", month_name[tm->tm_mon], tm->tm_mday,
- 1900 + tm->tm_year);
- if (pwd || real_name[0] || host_name[0]) {
- fprintf(rawoutstream, " *\t\t\t");
- if (real_name[0])
- fprintf(rawoutstream, "%s <", real_name);
-#ifdef H5_HAVE_GETPWUID
- if (pwd)
- fputs(pwd->pw_name, rawoutstream);
-#endif
- if (host_name[0])
- fprintf(rawoutstream, "@%s", host_name);
- if (real_name[0])
- fprintf(rawoutstream, ">");
- fputc('\n', rawoutstream);
- }
- fprintf(rawoutstream, " *\n * Purpose:\t\t");
- for (s = purpose; *s; s++) {
- fputc(*s, rawoutstream);
- if ('\n' == *s && s[1])
- fprintf(rawoutstream, " *\t\t\t");
- }
-
- fprintf(rawoutstream, " *\n");
- fprintf(rawoutstream, " *\tDO NOT MAKE MODIFICATIONS TO THIS FILE!\n");
- fprintf(rawoutstream, " *\tIt was generated by code in `H5detect.c'.\n");
-
- fprintf(rawoutstream, " *\n *");
- for (i = 0; i < 73; i++)
- fputc('-', rawoutstream);
- fprintf(rawoutstream, "\n */\n\n");
-}
-
-/*-------------------------------------------------------------------------
- * Function: detect_C89_floats
- *
- * Purpose: Detect C89 floating point types
- *
- * Return: void
- *-------------------------------------------------------------------------
- */
-static void HDF_NO_UBSAN
-detect_C89_floats(void)
-{
- DETECT_F(float, FLOAT, d_g[nd_g]);
- nd_g++;
- DETECT_F(double, DOUBLE, d_g[nd_g]);
- nd_g++;
-}
-
-/*-------------------------------------------------------------------------
- * Function: detect_C99_floats
- *
- * Purpose: Detect C99 floating point types
- *
- * Return: void
- *-------------------------------------------------------------------------
- */
-static void HDF_NO_UBSAN
-detect_C99_floats(void)
-{
-#if H5_SIZEOF_DOUBLE == H5_SIZEOF_LONG_DOUBLE
- /*
- * If sizeof(double)==sizeof(long double) then assume that `long double'
- * isn't supported and use `double' instead. This suppresses warnings on
- * some systems and `long double' is probably the same as `double' here
- * anyway.
- */
- DETECT_F(double, LDOUBLE, d_g[nd_g]);
- nd_g++;
-#else
- DETECT_F(long double, LDOUBLE, d_g[nd_g]);
- nd_g++;
-#endif
-}
-
-/*-------------------------------------------------------------------------
- * Function: main
- *
- * Purpose: Main entry point
- *
- * Return: EXIT_SUCCESS/EXIT_FAILURE
- *
- *-------------------------------------------------------------------------
- */
-int HDF_NO_UBSAN
-main(int argc, char *argv[])
-{
- char *fname = NULL;
- FILE *f; /* Temporary holding place for the stream pointer
- * so that rawoutstream is changed only when succeeded */
-
- if (argc > 1)
- fname = argv[1];
-
- /* First check if filename is string "NULL" */
- if (fname != NULL) {
- if ((f = fopen(fname, "w")) != NULL)
- rawoutstream = f;
- }
- if (!rawoutstream)
- rawoutstream = stdout;
-
- print_header();
-
- /* C89 floating point types */
- detect_C89_floats();
-
- /* C99 floating point types */
- detect_C99_floats();
-
- print_results(nd_g, d_g);
-
- if (rawoutstream && rawoutstream != stdout) {
- if (fclose(rawoutstream))
- fprintf(stderr, "closing rawoutstream");
- else
- rawoutstream = NULL;
- }
-
- return EXIT_SUCCESS;
-}
diff --git a/src/H5make_libsettings.c b/src/H5make_libsettings.c
deleted file mode 100644
index 88a6d7d..0000000
--- a/src/H5make_libsettings.c
+++ /dev/null
@@ -1,300 +0,0 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Copyright by The HDF Group. *
- * All rights reserved. *
- * *
- * This file is part of HDF5. The full HDF5 copyright notice, including *
- * terms governing use, modification, and redistribution, is contained in *
- * the COPYING file, which can be found at the root of the source code *
- * distribution tree, or in https://www.hdfgroup.org/licenses. *
- * If you do not have access to either file, you may request a copy from *
- * help@hdfgroup.org. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/* Keep this declaration near the top of this file */
-static const char *FileHeader = "\n\
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\
- * Copyright by The HDF Group. *\n\
- * All rights reserved. *\n\
- * *\n\
- * This file is part of HDF5. The full HDF5 copyright notice, including *\n\
- * terms governing use, modification, and redistribution, is contained in *\n\
- * the COPYING file, which can be found at the root of the source code *\n\
- * distribution tree, or in https://www.hdfgroup.org/licenses. *\n\
- * If you do not have access to either file, you may request a copy from *\n\
- * help@hdfgroup.org. *\n\
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *";
-/*
- * Purpose: Generate the H5libsettings.c file from the
- * libhdf5.settings file.
- *
- *-------------------------------------------------------------------------
- */
-
-#include "H5private.h"
-
-/* Do NOT use HDfprintf in this file as it is not linked with the library,
- * which contains the H5system.c file in which the function is defined.
- */
-
-#define LIBSETTINGSFNAME "libhdf5.settings"
-
-FILE *rawoutstream = NULL;
-
-/*-------------------------------------------------------------------------
- * Function: insert_libhdf5_settings
- *
- * Purpose: insert the contents of libhdf5.settings into a file
- * represented by flibinfo.
- * Make it an empty string if H5_HAVE_EMBEDDED_LIBINFO is not
- * defined, i.e., not enabled.
- *
- * Return: void
- *-------------------------------------------------------------------------
- */
-static void
-insert_libhdf5_settings(FILE *flibinfo)
-{
-#ifdef H5_HAVE_EMBEDDED_LIBINFO
- FILE *fsettings; /* for files libhdf5.settings */
- int inchar;
- int bol = 0; /* indicates the beginning of a new line */
-
- if (NULL == (fsettings = HDfopen(LIBSETTINGSFNAME, "r"))) {
- HDperror(LIBSETTINGSFNAME);
- HDexit(EXIT_FAILURE);
- }
-
- /* Turn off warnings for large arrays. If the library info string is
- * a problem, people can build without the embedded library info.
- */
- HDfprintf(flibinfo, "#include \"H5private.h\"\n");
- HDfprintf(flibinfo, "H5_GCC_DIAG_OFF(\"larger-than=\")\n\n");
- HDfprintf(flibinfo, "H5_CLANG_DIAG_OFF(\"overlength-strings\")\n\n");
-
- /* Print variable definition and the string. Do not use const or some
- * platforms (AIX?) will have issues.
- */
- HDfprintf(flibinfo, "char H5libhdf5_settings[]=\n");
- bol++;
- while (EOF != (inchar = HDgetc(fsettings))) {
- if (bol) {
- /* Start a new line */
- HDfprintf(flibinfo, "\t\"");
- bol = 0;
- }
- if (inchar == '\n') {
- /* end of a line */
- HDfprintf(flibinfo, "\\n\"\n");
- bol++;
- }
- else
- HDputc(inchar, flibinfo);
- }
-
- if (HDfeof(fsettings)) {
- /* wrap up */
- if (!bol)
- /* EOF found without a new line */
- HDfprintf(flibinfo, "\\n\"\n");
- HDfprintf(flibinfo, ";\n\n");
- }
- else {
- HDfprintf(stderr, "Read errors encountered with %s\n", LIBSETTINGSFNAME);
- HDexit(EXIT_FAILURE);
- }
- if (0 != HDfclose(fsettings)) {
- HDperror(LIBSETTINGSFNAME);
- HDexit(EXIT_FAILURE);
- }
-
- /* Re-enable warnings for large arrays */
- HDfprintf(rawoutstream, "H5_GCC_DIAG_ON(\"larger-than=\")\n");
- HDfprintf(rawoutstream, "H5_CLANG_DIAG_OFF(\"overlength-strings\")\n");
-#else
- /* Print variable definition and an empty string. Do not use const or some
- * platforms (AIX?) will have issues.
- */
- HDfprintf(flibinfo, "char H5libhdf5_settings[]=\"\";\n");
-#endif
-} /* insert_libhdf5_settings() */
-
-/*-------------------------------------------------------------------------
- * Function: make_libinfo
- *
- * Purpose: Create the embedded library information definition.
- * This sets up for a potential extension that the declaration
- * is printed to a file different from stdout.
- *
- * Return: void
- *-------------------------------------------------------------------------
- */
-static void
-make_libinfo(void)
-{
- /* Print variable definition and then the string as a macro */
- insert_libhdf5_settings(rawoutstream);
-}
-
-/*-------------------------------------------------------------------------
- * Function: print_header
- *
- * Purpose: Prints the header for the generated file.
- *
- * Return: void
- *-------------------------------------------------------------------------
- */
-static void
-print_header(void)
-{
- time_t now = HDtime(NULL);
- struct tm *tm = HDlocaltime(&now);
- char real_name[30];
- char host_name[256];
- int i;
- const char *s;
-#ifdef H5_HAVE_GETPWUID
- struct passwd *pwd = NULL;
-#else
- int pwd = 1;
-#endif
- static const char *month_name[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
- "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
- static const char *purpose = "\
-This machine-generated source code contains\n\
-information about the library build configuration\n";
-
- /*
- * The real name is the first item from the passwd gecos field.
- */
-#ifdef H5_HAVE_GETPWUID
- {
- size_t n;
- char *comma;
-
- if ((pwd = HDgetpwuid(HDgetuid()))) {
- if ((comma = HDstrchr(pwd->pw_gecos, ','))) {
- n = MIN(sizeof(real_name) - 1, (unsigned)(comma - pwd->pw_gecos));
- HDstrncpy(real_name, pwd->pw_gecos, n);
- real_name[n] = '\0';
- }
- else {
- HDstrncpy(real_name, pwd->pw_gecos, sizeof(real_name));
- real_name[sizeof(real_name) - 1] = '\0';
- }
- }
- else
- real_name[0] = '\0';
- }
-#else
- real_name[0] = '\0';
-#endif
-
- /*
- * The FQDM of this host or the empty string.
- */
-#ifdef H5_HAVE_GETHOSTNAME
- if (HDgethostname(host_name, sizeof(host_name)) < 0)
- host_name[0] = '\0';
-#else
- host_name[0] = '\0';
-#endif
-
- /*
- * The file header: warning, copyright notice, build information.
- */
- HDfprintf(rawoutstream, "/* Generated automatically by H5make_libsettings -- do not edit */\n\n\n");
- HDfputs(FileHeader, rawoutstream); /*the copyright notice--see top of this file */
-
- HDfprintf(rawoutstream, " *\n * Created:\t\t%s %2d, %4d\n", month_name[tm->tm_mon], tm->tm_mday,
- 1900 + tm->tm_year);
- if (pwd || real_name[0] || host_name[0]) {
- HDfprintf(rawoutstream, " *\t\t\t");
- if (real_name[0])
- HDfprintf(rawoutstream, "%s <", real_name);
-#ifdef H5_HAVE_GETPWUID
- if (pwd)
- HDfputs(pwd->pw_name, rawoutstream);
-#endif
- if (host_name[0])
- HDfprintf(rawoutstream, "@%s", host_name);
- if (real_name[0])
- HDfprintf(rawoutstream, ">");
- HDfputc('\n', rawoutstream);
- }
-
- HDfprintf(rawoutstream, " *\n * Purpose:\t\t");
-
- for (s = purpose; *s; s++) {
- HDfputc(*s, rawoutstream);
- if ('\n' == *s && s[1])
- HDfprintf(rawoutstream, " *\t\t\t");
- }
-
- HDfprintf(rawoutstream, " *\n");
- HDfprintf(rawoutstream, " *\tDO NOT MAKE MODIFICATIONS TO THIS FILE!\n");
- HDfprintf(rawoutstream, " *\tIt was generated by code in `H5make_libsettings.c'.\n");
-
- HDfprintf(rawoutstream, " *\n *");
- for (i = 0; i < 73; i++)
- HDfputc('-', rawoutstream);
- HDfprintf(rawoutstream, "\n */\n\n");
-}
-
-/*-------------------------------------------------------------------------
- * Function: print_footer
- *
- * Purpose: Prints the file footer for the generated file.
- *
- * Return: void
- *-------------------------------------------------------------------------
- */
-static void
-print_footer(void)
-{
- /* nothing */
-}
-
-/*-------------------------------------------------------------------------
- * Function: main
- *
- * Purpose: Main entry point.
- *
- * Return: Success: EXIT_SUCCESS
- *-------------------------------------------------------------------------
- */
-int
-main(int argc, char *argv[])
-{
- char *fname = NULL;
- FILE *f; /* temporary holding place for the stream pointer
- * so that rawoutstream is changed only when succeeded
- */
-
- if (argc > 1)
- fname = argv[1];
-
- /* First check if filename is string "NULL" */
- if (fname != NULL) {
- /* binary output */
- if ((f = HDfopen(fname, "w")) != NULL)
- rawoutstream = f;
- }
- if (!rawoutstream)
- rawoutstream = stdout;
-
- print_header();
-
- /* Generate embedded library information variable definition */
- make_libinfo();
-
- print_footer();
-
- if (rawoutstream && rawoutstream != stdout) {
- if (HDfclose(rawoutstream))
- HDfprintf(stderr, "closing rawoutstream");
- else
- rawoutstream = NULL;
- }
-
- HDexit(EXIT_SUCCESS);
-}
diff --git a/src/H5private.h b/src/H5private.h
index b138301..f923376 100644
--- a/src/H5private.h
+++ b/src/H5private.h
@@ -1771,8 +1771,9 @@ extern hbool_t H5_coll_api_sanity_check_g;
extern H5_debug_t H5_debug_g;
#define H5DEBUG(X) (H5_debug_g.pkg[H5_PKG_##X].stream)
-/* Do not use const else AIX strings does not show it. */
-extern char H5libhdf5_settings[]; /* embedded library information */
+
+/* Embedded build information */
+extern const char H5build_settings[];
/*-------------------------------------------------------------------------
* Purpose: These macros are inserted automatically just after the
diff --git a/src/Makefile.am b/src/Makefile.am
index a1c21e3..e92a71c 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -18,25 +18,17 @@
include $(top_srcdir)/config/commence.am
include $(top_srcdir)/config/lt_vers.am
-# How to build H5detect for number format detection.
-# Use -g to force no optimization since many compilers (e.g., Intel) takes
-# a long time to compile it with any optimization on. H5detect is used
-# to generate H5Tinit.c once. So, optimization is not critical.
-noinst_PROGRAMS = H5detect H5make_libsettings
-
# Our main target, the HDF5 library
lib_LTLIBRARIES=libhdf5.la
# Add libtool numbers to the HDF5 library (from config/lt_vers.am)
libhdf5_la_LDFLAGS= -version-info $(LT_VERS_INTERFACE):$(LT_VERS_REVISION):$(LT_VERS_AGE) $(AM_LDFLAGS)
-# H5Tinit.c and H5lib_settings.c are generated files and should be cleaned.
-MOSTLYCLEANFILES=H5Tinit.c H5lib_settings.c $(DX_CLEANFILES)
-# H5pubconf.h is generated by configure, and should be cleaned.
-DISTCLEANFILES=H5pubconf.h
+# These files are generated by configure, and should be cleaned
+DISTCLEANFILES=H5pubconf.h H5build_settings.c
# library sources
-libhdf5_la_SOURCES= H5.c H5checksum.c H5dbg.c H5lib_settings.c H5system.c \
+libhdf5_la_SOURCES= H5.c H5build_settings.c H5checksum.c H5dbg.c H5system.c \
H5timer.c H5trace.c \
H5A.c H5Abtree2.c H5Adense.c H5Adeprec.c H5Aint.c H5Atest.c \
H5AC.c H5ACdbg.c H5ACproxy_entry.c \
@@ -101,7 +93,7 @@ libhdf5_la_SOURCES= H5.c H5checksum.c H5dbg.c H5lib_settings.c H5system.c \
H5SM.c H5SMbtree2.c H5SMcache.c H5SMmessage.c H5SMtest.c \
H5T.c H5Tarray.c H5Tbit.c H5Tcommit.c H5Tcompound.c H5Tconv.c \
H5Tcset.c H5Tdbg.c H5Tdeprec.c H5Tenum.c H5Tfields.c H5Tfixed.c \
- H5Tfloat.c H5Tinit.c H5Tnative.c H5Toffset.c H5Toh.c H5Topaque.c \
+ H5Tfloat.c H5Tinit_float.c H5Tnative.c H5Toffset.c H5Toh.c H5Topaque.c \
H5Torder.c H5Tref.c H5Tpad.c H5Tprecis.c H5Tstrpad.c H5Tvisit.c \
H5Tvlen.c \
H5TS.c \
@@ -190,32 +182,6 @@ endif
settingsdir=$(libdir)
settings_DATA=libhdf5.settings
-# Number format detection
-# The LD_LIBRARY_PATH setting is a kludge.
-# Things should have been all set during H5detect making.
-# Remove the generated .c file if errors occur unless HDF5_Make_Ignore
-# is set to ignore the error.
-H5Tinit.c: H5detect$(EXEEXT)
- @if $(AM_V_P); then set -x; else echo " GEN H5Tinit.c"; fi; \
- LD_LIBRARY_PATH="$$LD_LIBRARY_PATH`echo $(LDFLAGS) | \
- sed -e 's/-L/:/g' -e 's/ //g'`" \
- $(RUNSERIAL) ./H5detect$(EXEEXT) $@ || \
- (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \
- ($(RM) $@ ; exit 1)
-
-# Build configuration header file generation
-# The LD_LIBRARY_PATH setting is a kludge.
-# Things should have been all set during H5make_libsettings making.
-# Remove the generated .c file if errors occur unless HDF5_Make_Ignore
-# is set to ignore the error.
-H5lib_settings.c: H5make_libsettings$(EXEEXT) libhdf5.settings
- @if $(AM_V_P); then set -x; else echo " GEN H5lib_settings.c"; fi; \
- LD_LIBRARY_PATH="$$LD_LIBRARY_PATH`echo $(LDFLAGS) | \
- sed -e 's/-L/:/g' -e 's/ //g'`" \
- $(RUNSERIAL) ./H5make_libsettings$(EXEEXT) $@ || \
- (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \
- ($(RM) $@ ; exit 1)
-
# Error header generation
#
# Actually, H5Einit.h, H5Eterm.h, H5Edefin.h and H5Epubgen.h all
diff --git a/src/libhdf5.settings.in b/src/libhdf5.settings.in
index 32c82b9..f9e7928 100644
--- a/src/libhdf5.settings.in
+++ b/src/libhdf5.settings.in
@@ -1,5 +1,5 @@
- SUMMARY OF THE HDF5 CONFIGURATION
- =================================
+ SUMMARY OF THE HDF5 CONFIGURATION
+ =================================
General Information:
-------------------