Skip to content

Fix standalone example build issues - #6598

Open
mattjala wants to merge 3 commits into
HDFGroup:developfrom
mattjala:examples-shared-libs-detection
Open

Fix standalone example build issues#6598
mattjala wants to merge 3 commits into
HDFGroup:developfrom
mattjala:examples-shared-libs-detection

Conversation

@mattjala

@mattjala mattjala commented Aug 6, 2026

Copy link
Copy Markdown
Contributor
  • Fixed the C++ examples failing to compile when built standalone

The standalone examples build used C++98, but H5public.h includes
<cinttypes>, which requires C++11. This affected any C++ translation unit
including hdf5.h, and did not match the HDF5 C++ library itself, which is
built as C++11. The C++ examples did not compile, against either static or
shared HDF5. The examples are now built as C++11.

Only the standalone build was affected. Examples built as part of the HDF5
build inherit the library's own C++ standard.

  • Fixed the examples skipping the HL, Fortran and C++ programs in some configurations

When built standalone against an installed HDF5, the examples chose between
the shared and static HL, Fortran and C++ libraries using BUILD_SHARED_LIBS,
while the C library used H5EXAMPLE_USE_SHARED_LIBS. Since
H5EXAMPLE_USE_SHARED_LIBS determines which component is requested from
find_package, and therefore which HDF5_<linkage>_<lang>_FOUND variables
exist, BUILD_SHARED_LIBS could not select a linkage on its own. With
H5EXAMPLE_USE_SHARED_LIBS on and BUILD_SHARED_LIBS unset, those examples
were disabled with a "libs not found" message even though the libraries were
installed and had been found. The selection now uses
H5EXAMPLE_USE_SHARED_LIBS, matching the C library.

Builds driven through CTestScript.cmake were not affected, since its cache
file forces BUILD_SHARED_LIBS on. This affected cases where the examples
were built directly without that cache file.

BUILD_SHARED_LIBS remains documented as a user option in
config/examples/HDF5_Examples_options.cmake but no longer influences
library selection in this case. Pending discussion, we may want to remove that variable
or rework this mechanism.

Copilot AI lite review requested due to automatic review settings August 6, 2026 16:46
@mattjala mattjala added the Component - Build CMake files label Aug 6, 2026
@github-project-automation github-project-automation Bot moved this to To be triaged in HDF5 - TRIAGE & TRACK Aug 6, 2026
The standalone examples build forces CMAKE_CXX_STANDARD 98, but
H5public.h includes <cinttypes>, which requires C++11. Any C++
translation unit that includes hdf5.h is therefore affected, not just
users of the C++ API, and the HDF5 C++ library itself is built as C++11
(config/flags/HDFCompilerCXXFlags.cmake). The C++ examples do not
compile as a result, against static or shared HDF5 alike.

Only the standalone build is affected, which is why this is not visible
in ordinary use. The C++98 setting lives in BASIC_SETTINGS, and
HDF5Examples/CMakeLists.txt skips that whole block when
EXAMPLES_EXTERNALLY_CONFIGURED is set -- which HDF5 does for its own
in-tree example build (config/cmake/HDF5ExampleCache.cmake). Built in
tree, the examples inherit HDF5's C++11 and compile normally, and that
is the path the CI workflows exercise. The standalone path, where the
C++98 setting does apply, is driven by the release scripts rather than
by the workflows, and has the C++ examples off by default.
When the examples are built standalone against an installed HDF5, the
HL, Fortran and C++ branches choose between the shared and static
libraries using BUILD_SHARED_LIBS, while the C branch just above them
uses H5EXAMPLE_USE_SHARED_LIBS.

H5EXAMPLE_USE_SHARED_LIBS is what decides whether the "shared" or the
"static" component is requested from find_package, so only the matching
HDF5_<linkage>_<lang>_FOUND variables are ever set. BUILD_SHARED_LIBS
cannot select a linkage on its own; it can only agree or fail to match.
Of its four combinations with H5EXAMPLE_USE_SHARED_LIBS, three produce
no observable difference. In the fourth, H5EXAMPLE_USE_SHARED_LIBS=ON
with BUILD_SHARED_LIBS unset, the shared branch is not taken and the
static branch cannot be, so the HL, Fortran and C++ examples are
disabled with "libs not found" even though the libraries are installed
and were found.

Use H5EXAMPLE_USE_SHARED_LIBS, which is the declared option and is
already what the C branch uses.

A build driven through config/examples/CTestScript.cmake does not reach
the broken combination, because it configures with
HDF5Examples/config/cmake/cacheinit.cmake, which forces
BUILD_SHARED_LIBS=ON. A direct cmake invocation without that cache file
does. In either case the HL, Fortran and C++ examples are off by
default, so this is only visible once they are enabled.

BUILD_SHARED_LIBS remains documented as a user option in
config/examples/HDF5_Examples_options.cmake but no longer influences
library selection; that comment should be revisited separately.
@mattjala
mattjala force-pushed the examples-shared-libs-detection branch from c7a81e1 to 089f290 Compare August 6, 2026 16:49
@mattjala
mattjala force-pushed the examples-shared-libs-detection branch from 089f290 to de4bc7b Compare August 6, 2026 16:50

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Review Checklist

This PR touches the following areas. Each needs a sign-off
from its listed owners before merging.

Comment thread release_docs/CHANGELOG.md
Builds driven through `CTestScript.cmake` were not affected, since its cache
file forces `BUILD_SHARED_LIBS` on. This affected cases where the examples
were built directly without that cache file.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just curious, is it possible to combine them so that there are no two different things giving the same effect?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

Status: To be triaged

Development

Successfully merging this pull request may close these issues.

3 participants