# # spec file for package hdf5 # # Copyright (c) 2025 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed # upon. The license for this file, and modifications and additions to the # file, is the same license as for the pristine package itself (unless the # license for the pristine package is not an Open Source License, in which # case the license is the MIT License). An "Open Source License" is a # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. # Please submit bugfixes or comments via https://bugs.opensuse.org/ # %global flavor @BUILD_FLAVOR@%{nil} %bcond_with sz2 %define sonum 310 %define pname hdf5 %bcond_with static %if %{with static} %global _lto_cflags %{_lto_cflags} -ffat-lto-objects %endif %if "%{flavor}" == "" ExclusiveArch: do_not_build %define package_name %pname %endif %if "%{flavor}" == "serial" %endif %if "%{flavor}" == "openmpi4" %global mpi_flavor %{flavor} %endif %if "%{flavor}" == "openmpi5" %global mpi_flavor %{flavor} ExcludeArch: %{ix86} %{arm} %endif %if "%{flavor}" == "mvapich2" %global mpi_flavor %{flavor} %endif %{?mpi_flavor:%{bcond_without mpi}}%{!?mpi_flavor:%{bcond_with mpi}} %{?with_mpi:%{!?mpi_flavor:error "No MPI family specified!"}} %if %{without mpi} %define my_prefix %_prefix %define my_bindir %_bindir %define my_libdir %_libdir %define my_incdir %_includedir %else %define my_prefix %{_libdir}/mpi/gcc/%{mpi_flavor} %define my_suffix -%{mpi_flavor} %define my_bindir %{my_prefix}/bin %define my_libdir %{my_prefix}/%{_lib} %define my_incdir %{my_prefix}/include %endif %if 0%{!?package_name:1} %define package_name %pname%{?my_suffix} %endif %define libname(l:s:) lib%{pname}%{!-l:%{-s:-}}%{-l*}%{-s*}%{?my_suffix} %define vname %{pname} %define __builder ninja Name: %{package_name} Version: 1.14.6 Release: 0 Summary: Command-line programs for the HDF5 scientific data format License: BSD-3-Clause Group: Productivity/Scientific/Other URL: https://www.hdfgroup.org/HDF5/ Source0: https://github.com/HDFGroup/hdf5/releases/download/%{pname}_%{version}/%{pname}-%{version}.tar.gz Source100: %{pname}.rpmlintrc # PATCH-FIX-UPSTREAM hdf5-cmake-fix-script-paths.patch badshah400@gmail.com -- Fix paths in scripts when built using cmake Patch0: hdf5-cmake-fix-script-paths.patch # not really needed but we want to get noticed if hdf5 doesn' t know our host Patch2: hdf5-1.8.11-abort_unknown_host_config.patch %ifarch %arm Patch4: hdf5-1.8.10-tests-arm.patch %endif Patch5: PPC64LE-Fix-long-double-handling.patch BuildRequires: cmake BuildRequires: fdupes BuildRequires: gcc-c++ BuildRequires: gcc-fortran BuildRequires: hostname BuildRequires: ninja %if %{with sz2} BuildRequires: sz2-devel %endif BuildRequires: zlib-devel %if %{with mpi} BuildRequires: %{mpi_flavor}-devel %else Requires: lib%{pname}_cpp%{sonum} = %{version} Requires: lib%{pname}_hl_cpp%{sonum} = %{version} %endif Requires: lib%{pname}-%{sonum} = %{version} Requires: lib%{pname}_fortran%{sonum} = %{version} Requires: lib%{pname}_hl%{sonum} = %{version} Requires: lib%{pname}_hl_fortran%{sonum} = %{version} Requires: lib%{pname}_tools%{sonum} = %{version} %description HDF5 is a data model, library, and file format for storing and managing data. It supports an unlimited variety of datatypes. This package contains the %{flavor} version utility functions for working with HDF5 files. %package -n %{libname -s %{sonum}} Summary: Shared libraries for the HDF5 scientific data format # To avoid unresolvable errors due to multiple providers of the library Group: System/Libraries Provides: %{libname} = %{version} Obsoletes: %{libname} < %{version} %description -n %{libname -s %{sonum}} HDF5 is a data model, library, and file format for storing and managing data. It supports an unlimited variety of datatypes. This package contains the %{flavor} version of the HDF5 runtime libraries. %package -n %{libname -l _hl -s %{sonum}} Summary: High-level shared libraries for the HDF5 scientific data format # To avoid unresolvable errors due to multiple providers of the library Group: System/Libraries Provides: %{libname -l _hl} = %{version} Obsoletes: %{libname -l _hl} < %{version} %description -n %{libname -l _hl -s %{sonum}} HDF5 is a data model, library, and file format for storing and managing data. It supports an unlimited variety of datatypes. This package contains the %{flavor} version of the high-level HDF5 runtime libraries. %package -n %{libname -l _cpp -s %{sonum}} Summary: Shared libraries for the HDF5 scientific data format # To avoid unresolvable errors due to multiple providers of the library Group: System/Libraries Provides: %{libname -l _cpp} = %{version} Obsoletes: %{libname -l _cpp} < %{version} %description -n %{libname -l _cpp -s %{sonum}} HDF5 is a data model, library, and file format for storing and managing data. It supports an unlimited variety of datatypes. This package contains the HDF5 runtime libraries. %package -n %{libname -l _hl_cpp -s %{sonum}} Summary: High-level shared libraries for the HDF5 scientific data format # To avoid unresolvable errors due to multiple providers of the library Group: System/Libraries Provides: %{libname -l _hl_cpp} = %{version} Obsoletes: %{libname -l _hl_cpp} < %{version} %description -n %{libname -l _hl_cpp -s %{sonum}} HDF5 is a data model, library, and file format for storing and managing data. It supports an unlimited variety of datatypes. This package contains the the high-level HDF5 runtime libraries. %package -n %{libname -l _fortran -s %{sonum}} Summary: Shared libraries for the HDF5 scientific data format # To avoid unresolvable errors due to multiple providers of the library Group: System/Libraries Provides: %{libname -l _fortran} = %{version} Obsoletes: %{libname -l _fortran} < %{version} %description -n %{libname -l _fortran -s %{sonum}} HDF5 is a data model, library, and file format for storing and managing data. It supports an unlimited variety of datatypes. This package contains the %{flavor} version of the HDF5 runtime libraries. %package -n %{libname -l _hl_fortran -s %{sonum}} Summary: High-level shared libraries for the HDF5 scientific data format # To avoid unresolvable errors due to multiple providers of the library Group: System/Libraries Provides: %{libname -l _hl_fortran} = %{version} Obsoletes: %{libname -l _hl_fortran} < %{version} %description -n %{libname -l _hl_fortran -s %{sonum}} HDF5 is a data model, library, and file format for storing and managing data. It supports an unlimited variety of datatypes. This package contains the %{flavor} version of the high-level HDF5 runtime libraries. %package -n %{libname -l _tools -s %{sonum}} Summary: Shared libraries for the HDF5 scientific data format # To avoid unresolvable errors due to multiple providers of the library Group: System/Libraries Provides: %{libname -l _tools} = %{version} Obsoletes: %{libname -l _tools} < %{version} %description -n %{libname -l _tools -s %{sonum}} HDF5 is a data model, library, and file format for storing and managing data. It supports an unlimited variety of datatypes. This package contains the HDF5 runtime libraries. %package -n %{pname}-devel-data Summary: Development data files for %{name} Group: Development/Libraries/Other BuildArch: noarch %description -n %{pname}-devel-data HDF5 is a data model, library, and file format for storing and managing data. It supports an unlimited variety of datatypes. This package contains generic files needed to create projects that use any version of HDF5. %package devel Summary: Development files for %{name} Group: Development/Libraries/Parallel Requires: %{libname -l _cpp -s %{sonum}} = %{version} Requires: %{libname -l _hl_cpp -s %{sonum}} = %{version} Requires: %{name} = %{version} Requires: %{pname}-devel-data = %{version} Requires: zlib-devel %if 0%{?use_sz2} Requires: libsz2-devel %endif Requires: %{libname -s %{sonum}} = %{version} # Required by Fortran programs? Requires: %{libname -l _fortran -s %{sonum}} = %{version} Requires: %{libname -l _hl -s %{sonum}} = %{version} Requires: %{libname -l _hl_fortran -s %{sonum}} = %{version} Requires: %{libname -l _tools -s %{sonum}} = %{version} %description devel HDF5 is a data model, library, and file format for storing and managing data. It supports an unlimited variety of datatypes. This package contains all files needed to create projects that use the %{flavor} version of HDF5. %package devel-static Summary: Static development files for %{name} Group: Development/Libraries/Parallel Requires: %{name}-devel = %{version} %description devel-static HDF5 is a data model, library, and file format for storing and managing data. It supports an unlimited variety of datatypes. This package provides the static libraries for the %{flavor} version of HDF5. %package -n %{vname}-examples Summary: Examples for %{name} Group: Documentation/Other BuildArch: noarch %description -n %{vname}-examples HDF5 is a data model, library, and file format for storing and managing data. It supports an unlimited variety of datatypes. This package provides examples of HDF5 library use. %prep %autosetup -N -n %{pname}-%{version} %patch -P 0 -p1 %patch -P 2 -p0 -b .abort_unknown_host_config %ifarch %arm %patch -P 4 -p0 -b .tests-arm %endif %patch -P 5 -p1 # baselibs looks different for different flavors - generate it on the fly cat > %{_sourcedir}/baselibs.conf << EOF libhdf5-%{sonum}%{?my_suffix} libhdf5_hl%{sonum}%{?my_suffix} libhdf5_fortran%{sonum}%{?my_suffix} libhdf5hl_fortran%{sonum}%{?my_suffix} libhdf5_cpp%{sonum}%{?my_suffix} libhdf5_hl_cpp%{sonum}%{?my_suffix} libhdf5_tools%{sonum}%{?my_suffix} hdf5%{?my_suffix}-devel requires %{?my_suffix}- requires "libhdf5-%{sonum}%{?my_suffix}- = " requires "libhdf5_hl%{sonum}%{?my_suffix}- = " requires "libhdf5_fortran%{sonum}%{?my_suffix}- = " requires "libhdf5hl_fortran%{sonum}%{?my_suffix}- = " requires "libhdf5_cpp%{sonum}%{?my_suffix}- = " requires "libhdf5_hl_cpp%{sonum}%{?my_suffix}- = " requires "libhdf5_tools%{sonum}%{?my_suffix}- = " EOF %build export CFLAGS="%{optflags}" export CXXFLAGS="%{optflags}" export FFLAGS="%{optflags}" export FCFLAGS="%{optflags}" %ifarch %arm # we want to have useful H5_CFLAGS on arm too test -e config/linux-gnueabi || cp config/linux-gnu config/linux-gnueabi %endif # SECTION Tests to disable by regex ## Long lasting tests for MPI DISABLED_TEST_REGEX="MPI_TEST_t_.*" ## Failing tests on 32bit %ifarch %ix86 DISABLED_TEST_REGEX+="|FORTRAN_testhdf5_fortran|MPI_TEST_testphdf5" %endif ## PPC peculiarities %ifarch %power64 DISABLED_TEST_REGEX+="|MPI_TEST_H5DIFF-h5diff_601" %endif %ifarch %arm64 DISABLED_TEST_REGEX+="|MPI_TEST_H5DIFF-h5diff_601" %endif export DISABLED_TEST_REGEX # /SECTION # NOTE 1: -DALLOW_UNSUPPORTED=ON is required when -DHDF5_BUILD_FORTRAN is # enabled along with -DHDF5_ENABLE_THREADSAFE=ON. Building with thise # combination results in thread-safe C libraries and non-thread-safe fortran # and/or C++ libraries. So you have to explicitly allow building the # thread-safe C library and the non-thread-safe C++ and fortran libraries in # order to make sure people don't assume that their fortran or C++ code is # thread-safe. Since our users are going to be accessing this through other # programs, this doesn't matter. # NOTE 2: It is absolutely critical to set explicitly the CMAKE__COMPILER # options for each flavour of build, even for the serial one, especially when # ccache is used to speed up builds. Otherwise, the scripts `h5(p)cc` and # libhdf5.settings embed incorrect values of the compiler (e.g. ccache instead # of gcc) causing major issues downstream. %cmake \ %if %{with mpi} -DCMAKE_C_COMPILER:FILEPATH="%{my_bindir}/mpicc" \ -DCMAKE_CXX_COMPILER:FILEPATH="%{my_bindir}/mpicxx" \ -DCMAKE_Fortran_COMPILER:FILEPATH="%{my_bindir}/mpif90" \ -DCMAKE_INSTALL_BINDIR:PATH=%{my_bindir} \ -DCMAKE_INSTALL_INCLUDEDIR:PATH=%{my_incdir} \ -DCMAKE_INSTALL_LIBDIR:PATH=%{my_libdir} \ -DCMAKE_INSTALL_PREFIX:PATH=%{my_prefix} \ %else -DCMAKE_C_COMPILER:FILEPATH="%{my_bindir}/cc" \ -DCMAKE_CXX_COMPILER:FILEPATH="%{my_bindir}/c++" \ -DCMAKE_Fortran_COMPILER:FILEPATH="%{my_bindir}/gfortran" \ %endif -DCMAKE_SKIP_INSTALL_RPATH:BOOL=ON \ -DALLOW_UNSUPPORTED:BOOL=ON \ -DBUILD_STATIC_LIBS:BOOL=%{?with_static:ON}%{!?with_static:OFF} \ -DBUILD_TESTING:BOOL=ON \ -DHDF5_INSTALL_CMAKE_DIR:PATH=%{_lib}/cmake/hdf5 \ -DHDF5_BUILD_CPP_LIB:BOOL=ON \ -DHDF5_BUILD_FORTRAN:BOOL=ON \ -DHDF5_BUILD_HL_GIF_TOOLS:BOOL=OFF \ -DHDF5_BUILD_HL_LIB:BOOL=ON \ -DHDF5_BUILD_PARALLEL_TOOLS:BOOL=OFF \ -DHDF5_BUILD_TOOLS:BOOL=ON \ -DHDF5_DISABLE_TESTS_REGEX:STRING="${DISABLED_TEST_REGEX}" \ -DHDF5_ENABLE_DEPRECATED_SYMBOLS:BOOL=ON \ -DHDF5_ENABLE_PARALLEL:BOOL=%{?with_mpi:ON}%{!?with_mpi:OFF} \ -DHDF5_ENABLE_SZIP_SUPPORT:BOOL=%{?with_sz2:ON}%{!?with_sz2:OFF} \ -DHDF5_ENABLE_THREADSAFE:BOOL=ON \ -DHDF5_USE_GNU_DIRS:BOOL=ON \ %{nil} # Remove timestamp/buildhost/kernel version export SDE_DATE=$(date -d @${SOURCE_DATE_EPOCH} -u) export UNAME_M_O=$(uname -m -o) sed -i -e "s/\(Configured on: \).*/\1 $SDE_DATE/" \ -e "s#\(Uname information: \).*#\1 $UNAME_M_O#" \ -e "s/\(Configured by: \).*/\1 abuild@OBS/" \ src/libhdf5.settings # Not clear why we need to do this for mvapich2, # but linking against libmpi.so.* fails otherwise %if "%{?mpi_flavor}" == "mvapich2" export LD_LIBRARY_PATH+=":%{my_libdir}" %endif %cmake_build %install %cmake_install find %{buildroot} -type f -name "*.la" -delete -print # Incorrect path pointing to package build dir sed -Ei "s@(Module Directory: ).*@\1%{my_incdir}/mod@" %{buildroot}%{my_libdir}/libhdf5.settings chmod -x HDF5Examples/C/H5FLT/tfiles/h5ex_d_*.* # Delete %%doc files from all possible combinations of dirs rm -rf %{buildroot}%{_prefix}/share/COPYING \ %{buildroot}%{my_prefix}/share/COPYING \ %{buildroot}%{_docdir}/%{name}/ \ %{buildroot}%{_docdir}/%{vname}/ \ %{buildroot}%{my_prefix}/share/doc/packages/%{name}/ \ %{buildroot}%{my_prefix}/share/doc/packages/%{vname}/ \ %{nil} sed -Ei "1{s@/usr/bin/env bash@%{my_bindir}/bash@}" %{buildroot}%{my_bindir}/h5fuse # HACK: We need the _test.so libraries in buildroot for tests # to succeed, but we can exclude them from file lists cp %{__builddir}/bin/libhdf5_test*.so* %{buildroot}%{my_libdir} %if %{without mpi} # Manually install examples as cmake does not do it (unversioned dir) install -m 0755 -d %{buildroot}%{_datadir}/hdf5_examples cp -pr HDF5Examples/* %{buildroot}%{_datadir}/hdf5_examples/ # rpm macro for version checking mkdir -p %{buildroot}%{_rpmconfigdir}/macros.d/ cat > %{buildroot}%{_rpmconfigdir}/macros.d/macros.hdf5 < 120200 || 0%{?suse_version} > 1320 %define mylicense %license %else %define mylicense %doc %endif %if %{without mpi} %files -n %{vname}-examples %{_prefix}/share/hdf5_examples %files -n %{pname}-devel-data %{_rpmconfigdir}/macros.d/macros.hdf5 %endif # ?mpi %files -n %{name} %{my_bindir}/h5clear %{my_bindir}/h5copy %{my_bindir}/h5debug %{my_bindir}/h5delete %{my_bindir}/h5diff %{my_bindir}/h5dump %{my_bindir}/h5format_convert %{my_bindir}/h5fuse %{my_bindir}/h5import %{my_bindir}/h5jam %{my_bindir}/h5ls %{my_bindir}/h5mkgrp %if %{with mpi} %{my_bindir}/ph5diff %{my_bindir}/h5perf %endif %{my_bindir}/h5perf_serial %{my_bindir}/h5repack %{my_bindir}/h5repart %{my_bindir}/h5stat %{my_bindir}/h5unjam %{my_bindir}/h5watch %{my_bindir}/mirror_server* %files -n %{libname -s %{sonum}} %doc ACKNOWLEDGMENTS README.md %mylicense COPYING ## %if %{without mpi} %doc release_docs/HISTORY-1_14.txt %doc release_docs/RELEASE.txt %endif %defattr(0755,root,root) %{my_libdir}/libhdf5.so.%{sonum} %{my_libdir}/libhdf5.so.%{sonum}.* %files -n %{libname -l _hl -s %{sonum}} %mylicense COPYING %defattr(0755,root,root) %{my_libdir}/libhdf5_hl.so.%{sonum} %{my_libdir}/libhdf5_hl.so.%{sonum}.* %files -n %{libname -l _cpp -s %{sonum}} %mylicense COPYING %defattr(0755,root,root) %{my_libdir}/libhdf5_cpp.so.%{sonum} %{my_libdir}/libhdf5_cpp.so.%{sonum}.* %files -n %{libname -l _hl_cpp -s %{sonum}} %mylicense COPYING %defattr(0755,root,root) %{my_libdir}/libhdf5_hl_cpp.so.%{sonum} %{my_libdir}/libhdf5_hl_cpp.so.%{sonum}.* %files -n %{libname -l _fortran -s %{sonum}} %mylicense COPYING %defattr(0755,root,root) %{my_libdir}/libhdf5_fortran.so.%{sonum} %{my_libdir}/libhdf5_fortran.so.%{sonum}.* %{my_libdir}/libhdf5_f90cstub.so.%{sonum} %{my_libdir}/libhdf5_f90cstub.so.%{sonum}.* %files -n %{libname -l _hl_fortran -s %{sonum}} %mylicense COPYING %defattr(0755,root,root) %{my_libdir}/libhdf5_hl_fortran.so.%{sonum} %{my_libdir}/libhdf5_hl_fortran.so.%{sonum}.* %{my_libdir}/libhdf5_hl_f90cstub.so.%{sonum} %{my_libdir}/libhdf5_hl_f90cstub.so.%{sonum}.* %files -n %{libname -l _tools -s %{sonum}} %mylicense COPYING %defattr(0755,root,root) %{my_libdir}/libhdf5_tools.so.%{sonum} %{my_libdir}/libhdf5_tools.so.%{sonum}.* %files devel ## %doc release_docs/HISTORY-1_14.txt %doc release_docs/RELEASE.txt %doc ACKNOWLEDGMENTS README.md %doc release_docs/USING_HDF5_CMake.txt %{my_bindir}/h5c++ %{my_bindir}/h5cc %{my_bindir}/h5fc %{my_bindir}/h5hlc++ %{my_bindir}/h5hlcc %{my_bindir}/h5hlfc %if %{with mpi} %{my_bindir}/h5pcc %{my_bindir}/h5pfc %endif %{my_incdir}/*.h %{my_incdir}/H5fortran_types.F90 %{my_incdir}/H5config_f.inc %{my_incdir}/mod/ %{my_libdir}/*.so %{my_libdir}/*.settings %{my_incdir}/*.mod %{my_libdir}/pkgconfig/*.pc %dir %{my_libdir}/cmake %{my_libdir}/cmake/hdf5/ %exclude %{my_libdir}/libhdf5_test*.so* %if %{with static} %files devel-static %{my_libdir}/*.a %endif %changelog