Commit Graph

2429 Commits

Author SHA1 Message Date
Allen Byrne
d4200dc689
Fix the rpath with option - plugins fail without (#5298)
* Only need loader_path
2025-02-14 16:07:04 -06:00
Allen Byrne
2f4f6902cd
Use only one find_package call for zlib. (#5280) 2025-02-14 11:22:23 -06:00
Allen Byrne
d667869991
Update files based on issues discovered during release (#5294) 2025-02-10 07:43:59 -06:00
Neil Fortner
61aa40f3fb
Fix error in H5Ddebug() (#5299)
* Fix error in H5Ddebug(). Add h5ls test cases.

* Committing clang-format changes

* Fix cmake (hopefully)

* Fix cmake again (hopefully)

* Fix issue with modification times showing up differently on different
systems. Add test case for v1 b-trees.

* Add cmake for new tests

* Add RELEASE.txt entry

---------

Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2025-02-07 16:40:55 -06:00
Harmen Stoppels
55bfec8f41
cmake: remove outdated rpath handling (#5271) 2025-01-29 08:48:25 -06:00
Matt L
331c000e6a
Add H5Tdecode2, rename and deprecate H5Tdecode (#5213) 2025-01-24 08:13:43 -06:00
Allen Byrne
09186b6c61
Update install notes (#5233) 2025-01-21 14:38:00 -06:00
Allen Byrne
2ad03911d9
Convert doc folder files to doxygen (#5216) 2025-01-17 11:48:58 -06:00
Allen Byrne
58ae0ae200
Develop libaec fix (#5182)
* Use the ${LIBAEC_PACKAGE_NAME} variable instead of SZIP
2025-01-10 15:49:59 -06:00
H. Joe Lee
5d3261910d
Fix typos (#5222) 2025-01-10 08:55:48 -06:00
H. Joe Lee
b0eac7d06d
Fix typo (#5218) 2025-01-08 23:02:42 -08:00
Allen Byrne
67d074cac7
Fix doxygen missing references (#5205) 2025-01-06 11:32:52 -06:00
Quincey Koziol
331193f357
Add new multithreaded concurrency configuration (#5015)
Added infrastructure support for multithreaded concurrency by adding an optional way to switch to using a non-recursive R/W lock for the global API lock. This is enabled with a new 'concurrency' configuration flag for the autotools & CMake builds, which is disabled by default.

When the 'concurrency' build option is chosen, the global API lock will use the R/W lock and all API calls currently will acquire a write lock, ensuring exclusive access by one thread. Over time, the API routines that are converted to support multithreaded concurrency will switch to acquiring a read lock instead.

Reentering the library from application callbacks is managed by the 'disable locking for this thread' (DLFTT) threadsafety protocol. This is internally handled within the H5_API_LOCK / H5_API_UNLOCK macros in H5private.h (as before), which invoke the 'dlftt' routines in H5TSint.c.

To support this change, the threadsafety configuration macros for the library have been updated:
- --enable-threadsafe now defines the H5_HAVE_THREADSAFE macro
- --enable-concurrency defines the H5_HAVE_CONCURRENCY macro
The new H5_HAVE_THREADSAFE_API macro is set if either H5_HAVE_THREADSAFE or H5_HAVE_CONCURRENCY is enabled.

New Github actions are added to include the concurrency configuration in the CI for the develop branch.

To support the new non-recursive R/W locking for API routines, some other changes are necessary:

Added macro wrappers around all callback invocations that could call an
application function, and therefore re-enter the library:
H5_BEFORE_USER_CB* / H5_AFTER_USER_CB*

Added H5_user_cb_prepare / H5_user_cb_restore routines that save the
state of the library when callback leaves the library. Includes error
stack and threadsafe reentry state currently.

There's also some small cleanups to various places in the library:

Moved the H5E_mpi_error_str / H5E_mpi_error_str_len globals to be local for
pushing MPI errors, so that multiple threads can't interfere with each
other.

Added H5TS_rwlock_trywrlock() routine to R/W lock interface.

Emulate R/W locks on MacOS because its implementation of
pthread_rwlock_wrlock() does not conform to the POSIX standard.

Don't acquire the global API lock in H5close, since it's acquired in H5_term_library, which is necessary because H5_term_library is invoked via other code paths that don't hold the global API lock.

Don't call H5Eget_auto2 API routine within H5_term_library.

Switched 'return NULL' in H5allocate_memory to HGOTO_DONE(NULL).

Switched H5Pget_file_space_strategy / H5Pset_file_space_strategy to use
internal routines instead of API routines.

Switched H5Oopen_by_addr & H5Ovisit1 to use internal routines instead of
API routines.

Fixed a few places in src/H5Odeprec.c where a major
error ID was passed as a minor ID.
2024-12-19 01:35:21 -08:00
Matt L
914640e123
Prevent H5Pset* routines from modifying default plists (#5172)
* Prevent H5Pset_vol from changing default VOL
* Prevent public routines from modifying default plists
* Allow default backing FAPL for onion VFD
* Require FAPL in H5Pset_vol()
* Merge into existing H5P tests
2024-12-17 07:52:46 -06:00
Allen Byrne
1a9f13a7f1
Rework the compression library search (#5085) 2024-12-13 10:28:27 -06:00
Dana Robinson
8f2c03b2da
Remove the hash_size param from H5Iregister_type() (#5170)
The hash_size parameter of H5Iregister_type() hasn't been used since 1.8.
It's been removed and the API call has been versioned.

This PR also updates the make_vers script to handle v2.0.0.

Fixes #4344
2024-12-10 00:34:40 -08:00
jhendersonHDF
090e60407f
Skip some parallel tests for OpenMPI version 5.0.5 (#5151)
An issue in the 5.0.5 release of OpenMPI causes some parallel
HDF5 tests to fail. The issue was resolved in the OpenMPI 5.0.6
release.
2024-11-27 10:16:33 -06:00
Allen Byrne
778646f506
Update zfp compression lib references (#5141) 2024-11-22 15:44:40 -06:00
Allen Byrne
919d094ed6
Update plugin version refs to match updated plugins repo (#5129) 2024-11-19 03:37:53 -08:00
Dana Robinson
9019113587
Make H5F_LIBVER_LATEST a real enum value (#5083)
It was formerly a macro, but is now an enum value with the same
value as the latest numbered API.
2024-11-12 07:34:25 -06:00
Larry Knox
9063e4ef25
Remove incorrect 's' from install directory <hdf5>/lib/plugin. (#5087) 2024-11-12 07:24:22 -06:00
Allen Byrne
d09ea66934
Rename HDF5_ENABLE_Z_LIB_SUPPORT to HDF5_ENABLE_ZLIB_SUPPORT (#5074) 2024-11-05 15:59:28 -06:00
Scot Breitenfeld
92c411b88f
Renamed H5VLstart_lib_state and H5VLfinish_lib_state (#5070) 2024-11-05 11:05:43 -06:00
bmribler
49935f8bbc
Fixed H5Ovisit2() change of behavior between 1.10.11 and v1.14.4.3 (#5022)
H5O__visit() uses the object information to be returned to the
application, so when the application did not request for certain
information, they were not available to H5O__visit.  This lack of
information caused incorrect behavior down the road.

We now call H5O_get_info again providing H5O_INFO_BASIC for "fields",
so we can obtain correct object information for H5O__visit to use.

Fixes #4941
2024-11-04 08:08:11 -08:00
Allen Byrne
ad3ea2633a
Move hl example into HDF5Examples (#5057) 2024-11-04 05:22:27 -08:00
jhendersonHDF
90429f5e7d
Implement support for complex number datatypes (#4630)
* Implement support for complex number datatypes

Adds the new datatype class H5T_COMPLEX

Adds the new API function H5Tcomplex_create which creates a complex
number datatype from an ID of a base floating-point datatype

Adds the new feature check macros H5_HAVE_COMPLEX_NUMBERS and
H5_HAVE_C99_COMPLEX_NUMBERS

Adds the new datatype size macros H5_SIZEOF_FLOAT_COMPLEX,
H5_SIZEOF_DOUBLE_COMPLEX and H5_SIZEOF_LONG_DOUBLE_COMPLEX

Adds the new datatype ID macros H5T_NATIVE_FLOAT_COMPLEX,
H5T_NATIVE_DOUBLE_COMPLEX, H5T_NATIVE_LDOUBLE_COMPLEX,
H5T_CPLX_IEEE_F16LE, H5T_CPLX_IEEE_F16BE,
H5T_CPLX_IEEE_F32LE, H5T_CPLX_IEEE_F32BE,
H5T_CPLX_IEEE_F64LE and H5T_CPLX_IEEE_F64BE

Adds hard and soft datatype conversion paths between complex number
datatypes and all the integer and floating-point datatypes, as well as
between other complex number datatypes

Adds a special conversion path between complex number datatypes and
array or compound datatypes where the in-memory layout of data is the
same between the datatypes and data can be converted directly

Adds support for complex number datatypes to the h5dump, h5ls and
h5diff/ph5diff tools. Allows h5dump '-m' option to change floating-point
printing format for float complex and double complex datatypes, as well
as long double complex if it has the same size as double complex

Adds minimal support to the h5watch and h5import tools

Adds support for the predefined complex number datatypes and
H5Tcomplex_create function to the Java wrappers. Also adds initial,
untested support to the JNI for future use with HDFView

Adds support for just the H5T_COMPLEX datatype class to the Fortran
wrappers

Adds support for the predefined complex number datatypes and
H5Tcomplex_create function to the high level library H5LT interface
for use with the H5LTtext_to_dtype and H5LTdtype_to_text functions

Changes some usages of "complex" in the library since it conflicts with
the "complex" keyword from the complex.h header. Also changes various
usages of the word "complex" throughout the library to distinguish
compound datatypes from complex datatypes.
2024-10-31 13:54:25 -07:00
Allen Byrne
192d630f27
Add long double format option to h5dump (#5025) 2024-10-29 08:06:13 -07:00
Allen Byrne
f4dbb810c1
Add msys2 workflow for CMake (#4991)
Also updates CMake configure checks to build HDF5 w/ MSYS2
2024-10-28 16:28:29 -07:00
Allen Byrne
5425a571e0
Convert develop to v2.0.0 (#5006)
Switches previous 1.16/17/18 values to 2.0
2024-10-27 21:51:07 -07:00
Allen Byrne
6122828198
Split out compiler flags into specific compiler files (#4974)
* Split CMake HDFCompileFlags into specific compiler files

* Separate out CXX Flags

* Add Fortran compiler specific files

* Merge in #4816 changes and close #4816

* fix hanging endif

---------

Co-authored-by: Larry Knox <lrknox@hdfgroup.org>
2024-10-25 10:03:35 -05:00
Larry Knox
0439876eeb
Switch default for HDF5_GENERATE_HEADERS (CMake) to OFF. (#5005) 2024-10-24 22:31:15 -07:00
Quincey Koziol
97e1ed4fc8
Refactor allocation of API context (#4942)
Since each API context is local to a thread, use the stack to
store the context instead of allocating & releasing it each time.
This improves performance (slightly), reduces alloc/free calls,
and eliminates the H5FL package from the push & pop operations,
which helps simplify threadsafe operation.

One effect of this change is that the H5VLstart_lib_state /
H5VLfinish_lib_state API routines for pass through connector
authors now require a parameter that can be used to store
the library's context. It was probably a mistake to assume
that these two routines would not do this previously, so this
is essentially a bug fix for them.

Some other minor things:

 * Added API context push+pop operations to cache tests
  (I'm not actually certain why this was working before) and
  a few other places
* Cleaned up a bunch of warnings in test code (calloc args, mainly)
* Made header file inclusions more standard in some source files
2024-10-24 10:09:22 -07:00
Quincey Koziol
2c58357b8f
Refactor H5FD and package initialization (#4934)
- Reverts PR#1024, which (unnecessarily) switched from deferred
  package initialization to centralized initialization of all packages
  and introduced H5FDperform_init() to wrap an internal routine
  to initialize VFD plugins.
- Went back to deferred package initialization (primarily), to
  eliminate unnecessary resource use. (Performance has been
  verified to be the same either way)
- Switched VFD plugins to use “#define (H5OPEN, )” pattern,
  with registration of internal VFD plugins at library initialization
  time. Eliminates calling API routine (H5FDperform_init) from
  within the library, which was deadlocking threadsafe concurrency.
  And also eliminates exposing internal library routines in a public
  header file.
- Removed copy-and-paste replicas of the H5OPEN macro and put
  a (better) single definition in H5public.h
- Separated API and internal routine calls in stdio and multi VFD
  plugins into separate source files, so that the library doesn’t
  invoke API routines internally (also a deadlock problem for
  threadsafe concurrency). Also needed a “private” header for these
  plugins.
- Separated registering/unregistering a VFD plugin from initializing
  /finalizing the plugin, instead of blurring those ideas together.
  Defers the VFD plugin init to when it’s actually used, which reduces
  resource usage, especially for the MPI-based plugins like the subfiling,
  etc.
- Refactored the copy-and-pasted check for locking into a central
  location in the H5FD.c code.
- Fixed a bunch of compiler warnings, especially ones that trigger CI
  failures with -Werror
2024-10-24 06:28:40 -07:00
Allen Byrne
8efc084646
Updated zlib and libaec compression versions (#4953) 2024-10-23 19:35:34 -07:00
Allen Byrne
1b72a1bca0
Add support for native zlib-ng in the library and compression references (#4935)
* Correct compile defs for zip_perf program
2024-10-23 16:20:15 -05:00
Quincey Koziol
ed4419cc52
Remove another couple of H5E_clear_stack calls (#4968)
Also cleans up the links test, which had a ton of copy-and-pasted incorrect negative error checks (Calling TEST_ERROR within H5E_BEGIN_TRY / H5E_END_TRY pairs will goto out of the pair, leaving errors suppressed).
2024-10-23 10:13:57 -07:00
Allen Byrne
baa1e8e292
Prefix remaining CMake options except for CMake BUILD* variables (#4990) 2024-10-22 15:40:54 -07:00
Dana Robinson
6db28d6f9f Remove bin/cmakehdf5
This was an unsupported build script to make building the library
with CMake look like building it with the Autotools. It hasn't been
maintained in a long time and we've had it marked as deprecated for
years.
2024-10-22 14:42:56 -05:00
Dana Robinson
680cdd08bb
Check in generated files in src (#4981)
These files are infrequently updated and generating them adds an
annoying dependency on Perl. We're checking them in and will
probably add a GitHub action to check if anything is stale
when creating a PR.

Adds:
    * H5Edefin.h
    * H5Einit.h
    * H5Emajdef.h
    * H5Emindef.h
    * H5Epubgen.h
    * H5Eterm.h
    * H5overflow.h
    * H5version.h
2024-10-20 12:48:46 -07:00
Dana Robinson
245bb2cd23
Remove some Solaris Studio work-arounds (#4979)
Solaris Studio hasn't been updated in almost a decade and the last
version (12.4, circa 2015) doesn't seem to fully support C11.

This PR removes some work-arounds for things like __attribute__()
support.
2024-10-20 12:47:52 -07:00
Dana Robinson
7f1e49206d
Renamed COPYING to LICENSE (#4978)
This is where most people will expect to find license information. The
COPYING_LBNL_HDF5 file has also been renamed to LICENSE_LBNL_HDF5.
The licenses are unchanged.
2024-10-18 21:13:04 -07:00
Dana Robinson
bb5661101a
Remove the high-level GIF tools (#4976)
The high-level GIF tools, h52gif and gif2h5, have unfixed CVE issues
(with no proof-of-concept files). They are not critical tools, are not
well maintained, and are an odd fit for building with the library.
Because of this, they have been removed. We may move them to a separate
repository in the future.
2024-10-18 12:09:42 -07:00
Dana Robinson
478c7d166f
Set the C standard to 11 (#4975)
Ignores some of the older Autotools platform files, since the Autotools
will be dropped in the next major release (and we don't have
compilers on which to test, anyway).

Also drops support for the old, non-compliant MSVC
preprocessor.
2024-10-18 12:04:27 -07:00
Dana Robinson
4a10a06072
Switch HDoff_t from __int64 to int64_t on Windows (#4973)
__int64 raises warnings when building with clang
2024-10-18 09:51:47 -07:00
Dana Robinson
fc5b66b1a8
Only clear FE_INVALID when that symbol is present on the system (#4954)
When we initialize the floating-point types at library startup, it's
possible to raise floating-point exceptions when we check which things
are supported. Normally, we clear these floating-point exceptions via
feclearexcept(FE_INVALID), but FE_INVALID may not be present on all
systems. Specifically, this was reported as being a problem when using
Emscripten 3.1.68 to compile HDF5 1.14.5 to WebAssembly.

We've added an #ifdef FE_INVALID block around the exception clearing
code to correct this.

Fixes #4952
2024-10-14 14:30:22 -07:00
jhendersonHDF
68bffcd45e
Remove old RELEASE.txt note (#4945) 2024-10-10 07:50:43 -07:00
Allen Byrne
f49f04004c
Add HISTORY and clean RELEASE (#4923)
* Add publish-release step
2024-10-04 13:02:03 -05:00
Allen Byrne
65dc2ce6de
Update version usage (#4919) 2024-10-03 14:46:48 -05:00
Quincey Koziol
767282f68a
VOL refactor and cleanup (#4856)
Cleanup and prepare for thread-safety changes.

Big ideas:

* Wrap H5VL_class_t with H5VL_connector_t, so use of the class can be refcounted within the H5VL package, instead of relying on storing an ID within the H5VL_t struct and incrementing & decrementing the ID's refcount.
* Register H5VL_connector_t* for VOL connector IDs, instead of the H5VL_class_t*
* Stop other packages from rummaging around inside H5VL_connector_t and H5VL_object_t data structures, so that the H5VL package can change implementation details without coupled changes throughout the library

Small things:

* Simplified the coding for creating links
* Moved some routines into more logical locations
2024-10-03 12:19:33 -07:00
Allen Byrne
07756c87f5 Update develop to 1.18 API 2024-10-02 19:53:38 -05:00