From d14e6860a8876e72b6fc837e45027fb37a7b4890d6433e055408b9f67ec75853 Mon Sep 17 00:00:00 2001 From: Atri Bhattacharya Date: Tue, 17 Oct 2017 10:09:52 +0000 Subject: [PATCH] Accepting request 534352 from home:eeich:hpc_alt - Convert package to multibuild. - Add HPC build using environment modules (FATE#321717, FATE#321710). OBS-URL: https://build.opensuse.org/request/show/534352 OBS-URL: https://build.opensuse.org/package/show/science/hdf5?expand=0&rev=44 --- _multibuild | 8 + baselibs.conf | 34 -- baselibs.conf.in | 34 -- hdf5.changes | 7 + hdf5.spec | 1301 +++++++++++++++++------------------------- update_so_version.sh | 16 +- 6 files changed, 543 insertions(+), 857 deletions(-) create mode 100644 _multibuild delete mode 100644 baselibs.conf delete mode 100644 baselibs.conf.in diff --git a/_multibuild b/_multibuild new file mode 100644 index 0000000..55c830f --- /dev/null +++ b/_multibuild @@ -0,0 +1,8 @@ + + serial + openmpi + mvapich2 + gnu-openmpi-hpc + gnu-mvapich2-hpc + gnu-hpc + diff --git a/baselibs.conf b/baselibs.conf deleted file mode 100644 index cdc50b2..0000000 --- a/baselibs.conf +++ /dev/null @@ -1,34 +0,0 @@ -libhdf5-100 -libhdf5-100-openmpi -libhdf5-100-mvapich2 -libhdf5_hl100 -libhdf5_hl100-mvapich2 -libhdf5_hl100-openmpi -libhdf5_cpp100 -libhdf5_hl_cpp100 -libhdf5_fortran100 -libhdf5_fortran100-openmpi -libhdf5_fortran100-mvapich2 -libhdf5hl_fortran100 -libhdf5hl_fortran100-mvapich2 -libhdf5hl_fortran100-openmpi -hdf5-devel - requires - - requires "libhdf5-100- = " - requires "libhdf5_hl100- = " - requires "libhdf5_cpp100- = " - requires "libhdf5_hl_cpp100- = " - requires "libhdf5_fortran100- = " - requires "libhdf5hl_fortran100- = " -hdf5-openmpi-devel - requires -openmpi- - requires "libhdf5-100-openmpi- = " - requires "libhdf5_hl100-openmpi- = " - requires "libhdf5_fortran100-openmpi- = " - requires "libhdf5hl_fortran100-openmpi- = " -hdf5-mvapich2-devel - requires -openmpi- - requires "libhdf5-100-mvapich2- = " - requires "libhdf5_hl100-mvapich2- = " - requires "libhdf5_fortran100-mvapich2- = " - requires "libhdf5hl_fortran100-mvapich2- = " diff --git a/baselibs.conf.in b/baselibs.conf.in deleted file mode 100644 index 76092a9..0000000 --- a/baselibs.conf.in +++ /dev/null @@ -1,34 +0,0 @@ -libhdf5-@sonum@ -libhdf5-@sonum@-openmpi -libhdf5-@sonum@-mvapich2 -libhdf5_hl@sonum_HL@ -libhdf5_hl@sonum_HL@-mvapich2 -libhdf5_hl@sonum_HL@-openmpi -libhdf5_cpp@sonum_CXX@ -libhdf5_hl_cpp@sonum_HL_CXX@ -libhdf5_fortran@sonum_F@ -libhdf5_fortran@sonum_F@-openmpi -libhdf5_fortran@sonum_F@-mvapich2 -libhdf5hl_fortran@sonum_HL_F@ -libhdf5hl_fortran@sonum_HL_F@-mvapich2 -libhdf5hl_fortran@sonum_HL_F@-openmpi -hdf5-devel - requires - - requires "libhdf5-@sonum@- = " - requires "libhdf5_hl@sonum_HL@- = " - requires "libhdf5_cpp@sonum_CXX@- = " - requires "libhdf5_hl_cpp@sonum_HL_CXX@- = " - requires "libhdf5_fortran@sonum_F@- = " - requires "libhdf5hl_fortran@sonum_HL_F@- = " -hdf5-openmpi-devel - requires -openmpi- - requires "libhdf5-@sonum@-openmpi- = " - requires "libhdf5_hl@sonum_HL@-openmpi- = " - requires "libhdf5_fortran@sonum_F@-openmpi- = " - requires "libhdf5hl_fortran@sonum_HL_F@-openmpi- = " -hdf5-mvapich2-devel - requires -openmpi- - requires "libhdf5-@sonum@-mvapich2- = " - requires "libhdf5_hl@sonum_HL@-mvapich2- = " - requires "libhdf5_fortran@sonum_F@-mvapich2- = " - requires "libhdf5hl_fortran@sonum_HL_F@-mvapich2- = " diff --git a/hdf5.changes b/hdf5.changes index b80fa0f..25c7b2a 100644 --- a/hdf5.changes +++ b/hdf5.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Fri Sep 8 14:35:32 UTC 2017 - eich@suse.com + +- Convert package to multibuild. +- Add HPC build using environment modules + (FATE#321717, FATE#321710). + ------------------------------------------------------------------- Tue Aug 29 12:03:27 UTC 2017 - hpj@urpla.net diff --git a/hdf5.spec b/hdf5.spec index ab0e1e6..aacb421 100644 --- a/hdf5.spec +++ b/hdf5.spec @@ -16,14 +16,115 @@ # -%if 0%{?sles_version} -%define _mvapich2 1 -%endif -%if 0%{?suse_version} -%define _openmpi 1 +%global flavor @BUILD_FLAVOR@%{nil} + +# +%define _do_check 1 +%define use_sz2 0 + +%define vers 1.10.0 +%define _vers 1_10_0 +%define short_ver 1.10 +%define src_ver %{version}-patch1 +%define pname hdf5 + +%if "%{flavor}" == "" +ExclusiveArch: do_not_build + %define package_name %pname +%endif + +%if "%{flavor}" == "serial" +%undefine suffix +%undefine mpi_flavor +%bcond_with hpc +%endif + +%if "%{flavor}" == "openmpi" +%global mpi_flavor %{flavor} +%bcond_with hpc +%endif + +%if "%{flavor}" == "mvapich2" +%global mpi_flavor %{flavor} +%bcond_with hpc +%endif + +%if "%{flavor}" == "gnu-hpc" +%bcond_without hpc +%global compiler_family gnu +%undefine c_f_ver +%endif + +%if "%{flavor}" == "gnu-openmpi-hpc" +%bcond_without hpc +%define compiler_family gnu +%undefine c_f_ver +%global mpi_flavor openmpi +%define mpi_vers 1 +%endif + +%if "%{flavor}" == "gnu-mvapich2-hpc" +%bcond_without hpc +%define compiler_family gnu +%undefine c_f_ver +%global mpi_flavor mvapich2 +%endif + +%if "%{flavor}" == "gnu6-hpc" +%bcond_without hpc +%define compiler_family gnu +%define c_f_ver 6 +%undefine mpi_flavor +%endif + +%if "%{flavor}" == "gnu6-openmpi-hpc" +%bcond_without hpc +%define compiler_family gnu +%define c_f_ver 6 +%global mpi_flavor openmpi +%define mpi_vers 1 +%endif + +%if "%{flavor}" == "gnu6-mvapich2-hpc" +%bcond_without hpc +%define compiler_family gnu +%define c_f_ver 6 +%global mpi_flavor mvapich2 +%endif + +%{?mpi_flavor:%{bcond_without mpi}}%{!?mpi_flavor:%{bcond_with mpi}} +%{?with_hpc:%{!?compiler_family:%global compiler_family gnu}} +%{?with_mpi:%{!?mpi_flavor:%global mpi_flavor openmpi}} + +%{?with_mpi:%global my_suffix -%{mpi_flavor}} + +%if %{with hpc} +%{hpc_init -c %compiler_family %{?with_mpi:-m %mpi_flavor} %{?c_f_ver:-v %{c_f_ver}} %{?mpi_ver:-V %{mpi_ver}} %{?ext:-e %{ext}}} +%{?with_mpi:%global hpc_module_pname p%{pname}} + %define my_prefix %hpc_prefix + %define my_bindir %hpc_bindir + %define my_libdir %hpc_libdir + %define my_incdir %hpc_includedir + %define package_name %{hpc_package_name %_vers} + %define libname(l:s:) lib%{pname}%{-l*}%{hpc_package_name_tail %{?_vers}} +%else + %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_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:-}%{-l*}%{-s*}%{?my_suffix} %endif -%define _mpi %{?_openmpi:openmpi} %{?_mvapich2:mvapich2} # TODO: The so numbers autodetected by update_so_version.sh # do not match the so numbers that are actually buit. %define sonum 100 @@ -34,19 +135,16 @@ %define sonum_HL_F 100 %define sonum_TOOLS 100 -Name: hdf5 -Version: 1.10.0 +Name: %{package_name} +Version: %vers Release: 0 -%define short_ver 1.10 -%define src_ver %{version}-patch1 Summary: Command-line programs for the HDF5 scientific data format License: BSD-3-Clause Group: Productivity/Scientific/Other Url: http://www.hdfgroup.org/HDF5/ -Source0: http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-%{short_ver}/hdf5-%{src_ver}/src/hdf5-%{src_ver}.tar.bz2 -Source1000: baselibs.conf -Source1001: baselibs.conf.in -Source1002: update_so_version.sh +Source0: http://www.hdfgroup.org/ftp/HDF5/releases/%{pname}-%{short_ver}/%{pname}-%{src_ver}/src/%{pname}-%{src_ver}.tar.bz2 +Source100: _multibuild +Source1000: update_so_version.sh Patch0: hdf5-LD_LIBRARY_PATH.patch Patch1: hdf5-non_void_return.patch # not really needed but we want to get noticed if hdf5 doesn' t know our host @@ -59,24 +157,34 @@ Patch6: hdf5-buildcompare.patch Patch7: hdf5-mpi.patch Patch8: hdf5_disable_testphdf5.patch BuildRequires: fdupes -BuildRequires: gcc-c++ -BuildRequires: gcc-fortran BuildRequires: krb5-devel +%if 0%{?use_sz2} BuildRequires: libsz2-devel +%endif BuildRequires: openssl-devel BuildRequires: zlib-devel -%if 0%{?_openmpi} -BuildRequires: openmpi-devel -%endif -%if 0%{?_mvapich2} -BuildRequires: mvapich2-devel -%endif -Requires: libhdf5-%{sonum} = %{version} -Requires: libhdf5_cpp%{sonum_CXX} = %{version} -Requires: libhdf5_fortran%{sonum_F} = %{version} -Requires: libhdf5_hl%{sonum_HL} = %{version} -Requires: libhdf5_hl_cpp%{sonum_HL_CXX} = %{version} -Requires: libhdf5hl_fortran%{sonum_HL_F} = %{version} +%if %{without hpc} +BuildRequires: gcc-c++ +BuildRequires: gcc-fortran + %if %{with mpi} +BuildRequires: %{flavor}-devel + %else +Requires: lib%{pname}_cpp%{sonum_CXX} = %{version} +Requires: lib%{pname}_hl_cpp%{sonum_HL_CXX} = %{version} + %endif +Requires: lib%{pname}-%{sonum} = %{version} +Requires: lib%{pname}_fortran%{sonum_F} = %{version} +Requires: lib%{pname}_hl%{sonum_HL} = %{version} +Requires: lib%{pname}hl_fortran%{sonum_HL_F} = %{version} +%else # hpc +%hpc_requires +BuildRequires: %{compiler_family}%{?c_f_ver}-compilers-hpc-macros-devel +BuildRequires: lua-lmod +BuildRequires: suse-hpc + %if %{with mpi} +BuildRequires: %{mpi_flavor}%{?mpi_vers}-%{compiler_family}%{?c_f_ver}-hpc-macros-devel + %endif +%endif # ?hpc BuildRoot: %{_tmppath}/%{name}-%{version}-build %description @@ -97,46 +205,19 @@ megabytes of high-resolution MRI brain scans are stored in HDF5 files, together with metadata necessary for efficient data sharing, processing, visualization, and archiving. -This package contains utility functions for working with HDF5 files. - -%package -n %{name}-openmpi -Summary: Command-line programs for the HDF5 scientific data format -Group: Productivity/Scientific/Other -Requires: libhdf5-%{sonum}-openmpi = %{version} -Requires: libhdf5_fortran%{sonum_F}-openmpi = %{version} -Requires: libhdf5_hl%{sonum_HL}-openmpi = %{version} -Requires: libhdf5hl_fortran%{sonum_HL_F}-openmpi = %{version} - -%description -n %{name}-openmpi -HDF5 is a data model, library, and file format for storing and -managing data. It supports an unlimited variety of datatypes, and -is designed for flexible and efficient I/O and for high volume and -complex data. HDF5 is portable and is extensible, allowing -applications to evolve in their use of HDF5. - -The HDF5 technology suite is designed to organize, store, discover, -access, analyze, share, and preserve diverse, complex data in -continuously evolving heterogeneous computing and storage environments. - -HDF5 supports all types of data stored digitally, regardless of origin -or size. Petabytes of remote sensing data collected by satellites, -terabytes of computational results from nuclear testing models, and -megabytes of high-resolution MRI brain scans are stored in HDF5 files, -together with metadata necessary for efficient data sharing, -processing, visualization, and archiving. - -This package contains the openmpi version utility functions for working +This package contains the %{flavor} version utility functions for working with HDF5 files. -%package -n %{name}-mvapich2 -Summary: Command-line programs for the HDF5 scientific data format +%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: Productivity/Scientific/Other -Requires: libhdf5-%{sonum}-mvapich2 = %{version} -Requires: libhdf5_fortran%{sonum_F}-mvapich2 = %{version} -Requires: libhdf5_hl%{sonum_HL}-mvapich2 = %{version} -Requires: libhdf5hl_fortran%{sonum_HL_F}-mvapich2 = %{version} +Provides: %{libname} = %{version} +Obsoletes: %{libname} < %{version} +%{?with_hpc:Provides: libhdf5%{?with_mpi:-%{mpi_flavor}}-hpc = %{version}} +%{?with_hpc:Requires: %{name}-module = %version} -%description -n %{name}-mvapich2 +%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, and is designed for flexible and efficient I/O and for high volume and @@ -154,17 +235,52 @@ megabytes of high-resolution MRI brain scans are stored in HDF5 files, together with metadata necessary for efficient data sharing, processing, visualization, and archiving. -This package contains the mvapich2 version utility functions for working -with HDF5 files. +This package contains the %{flavor} version of the HDF5 runtime libraries. -%package -n libhdf5-%{sonum} +%{?with_hpc:%{hpc_master_package -l -n lib%{pname}%{hpc_package_name_tail}}} + +%package -n %{libname -l _hl -s %{sonum_HL}} +Summary: High-level shared libraries for the HDF5 scientific data format +# To avoid unresolvable errors due to multiple providers of the library +Group: Productivity/Scientific/Other +Provides: %{libname -l _hl} = %{version} +Obsoletes: %{libname -l _hl} < %{version} +%{?with_hpc:Provides: libhdf5%{?with_mpi:-%{mpi_flavor}}-hpc = %{version}} +%{?with_hpc:Requires: %{name}-module = %version} + +%description -n %{libname -l _hl -s %{sonum_HL}} +HDF5 is a data model, library, and file format for storing and +managing data. It supports an unlimited variety of datatypes, and +is designed for flexible and efficient I/O and for high volume and +complex data. HDF5 is portable and is extensible, allowing +applications to evolve in their use of HDF5. + +The HDF5 technology suite is designed to organize, store, discover, +access, analyze, share, and preserve diverse, complex data in +continuously evolving heterogeneous computing and storage environments. + +HDF5 supports all types of data stored digitally, regardless of origin +or size. Petabytes of remote sensing data collected by satellites, +terabytes of computational results from nuclear testing models, and +megabytes of high-resolution MRI brain scans are stored in HDF5 files, +together with metadata necessary for efficient data sharing, +processing, visualization, and archiving. + +This package contains the %{flavor} version of the high-level HDF5 +runtime libraries. + +%{?with_hpc:%{hpc_master_package -l -n lib%{pname}_hl%{hpc_package_name_tail}}} + +%package -n %{libname -l _cpp -s %{sonum_CXX}} Summary: Shared libraries for the HDF5 scientific data format # To avoid unresolvable errors due to multiple providers of the library Group: Productivity/Scientific/Other -Provides: libhdf5 = %{version} -Obsoletes: libhdf5 < %{version} +Provides: %{libname -l _cpp} = %{version} +Obsoletes: %{libname -l _cpp} < %{version} +%{?with_hpc:Provides: libhdf5%{?with_mpi:-%{mpi_flavor}}-hpc = %{version}} +%{?with_hpc:Requires: %{name}-module = %version} -%description -n libhdf5-%{sonum} +%description -n %{libname -l _cpp -s %{sonum_CXX}} HDF5 is a data model, library, and file format for storing and managing data. It supports an unlimited variety of datatypes, and is designed for flexible and efficient I/O and for high volume and @@ -184,68 +300,18 @@ processing, visualization, and archiving. This package contains the HDF5 runtime libraries. -%package -n libhdf5-%{sonum}-openmpi -Summary: Shared libraries for the HDF5 scientific data format -# To avoid unresolvable errors due to multiple providers of the library -Group: Productivity/Scientific/Other -Provides: libhdf5-openmpi = %{version} -Obsoletes: libhdf5-openmpi < %{version} +%{!?with_mpi:%{?with_hpc:%{hpc_master_package -l -n lib%{pname}_cpp%{hpc_package_name_tail}}}} -%description -n libhdf5-%{sonum}-openmpi -HDF5 is a data model, library, and file format for storing and -managing data. It supports an unlimited variety of datatypes, and -is designed for flexible and efficient I/O and for high volume and -complex data. HDF5 is portable and is extensible, allowing -applications to evolve in their use of HDF5. - -The HDF5 technology suite is designed to organize, store, discover, -access, analyze, share, and preserve diverse, complex data in -continuously evolving heterogeneous computing and storage environments. - -HDF5 supports all types of data stored digitally, regardless of origin -or size. Petabytes of remote sensing data collected by satellites, -terabytes of computational results from nuclear testing models, and -megabytes of high-resolution MRI brain scans are stored in HDF5 files, -together with metadata necessary for efficient data sharing, -processing, visualization, and archiving. - -This package contains the openmpi version of the HDF5 runtime libraries. - -%package -n libhdf5-%{sonum}-mvapich2 -Summary: Shared libraries for the HDF5 scientific data format -# To avoid unresolvable errors due to multiple providers of the library -Group: Productivity/Scientific/Other -Provides: libhdf5-mvapich2 = %{version} -Obsoletes: libhdf5-mvapich2 < %{version} - -%description -n libhdf5-%{sonum}-mvapich2 -HDF5 is a data model, library, and file format for storing and -managing data. It supports an unlimited variety of datatypes, and -is designed for flexible and efficient I/O and for high volume and -complex data. HDF5 is portable and is extensible, allowing -applications to evolve in their use of HDF5. - -The HDF5 technology suite is designed to organize, store, discover, -access, analyze, share, and preserve diverse, complex data in -continuously evolving heterogeneous computing and storage environments. - -HDF5 supports all types of data stored digitally, regardless of origin -or size. Petabytes of remote sensing data collected by satellites, -terabytes of computational results from nuclear testing models, and -megabytes of high-resolution MRI brain scans are stored in HDF5 files, -together with metadata necessary for efficient data sharing, -processing, visualization, and archiving. - -This package contains the mvapich2 version of the HDF5 runtime libraries. - -%package -n libhdf5_hl%{sonum_HL} +%package -n %{libname -l _hl_cpp -s %{sonum_HL_CXX}} Summary: High-level shared libraries for the HDF5 scientific data format # To avoid unresolvable errors due to multiple providers of the library Group: Productivity/Scientific/Other -Provides: libhdf5_hl = %{version} -Obsoletes: libhdf5_hl < %{version} +Provides: %{libname -l _hl_cpp} = %{version} +Obsoletes: %{libname -l _hl_cpp} < %{version} +%{?with_hpc:Provides: libhdf5%{?with_mpi:-%{mpi_flavor}}-hpc = %{version}} +%{?with_hpc:Requires: %{name}-module = %version} -%description -n libhdf5_hl%{sonum_HL} +%description -n %{libname -l _hl_cpp -s %{sonum_HL_CXX}} HDF5 is a data model, library, and file format for storing and managing data. It supports an unlimited variety of datatypes, and is designed for flexible and efficient I/O and for high volume and @@ -265,70 +331,18 @@ processing, visualization, and archiving. This package contains the the high-level HDF5 runtime libraries. -%package -n libhdf5_hl%{sonum_HL}-openmpi -Summary: High-level shared libraries for the HDF5 scientific data format -# To avoid unresolvable errors due to multiple providers of the library -Group: Productivity/Scientific/Other -Provides: libhdf5_hl-openmpi = %{version} -Obsoletes: libhdf5_hl-openmpi < %{version} +%{!?with_mpi:%{?with_hpc:%{hpc_master_package -l -n lib%{pname}_hl_cpp%{hpc_package_name_tail}}}} -%description -n libhdf5_hl%{sonum_HL}-openmpi -HDF5 is a data model, library, and file format for storing and -managing data. It supports an unlimited variety of datatypes, and -is designed for flexible and efficient I/O and for high volume and -complex data. HDF5 is portable and is extensible, allowing -applications to evolve in their use of HDF5. - -The HDF5 technology suite is designed to organize, store, discover, -access, analyze, share, and preserve diverse, complex data in -continuously evolving heterogeneous computing and storage environments. - -HDF5 supports all types of data stored digitally, regardless of origin -or size. Petabytes of remote sensing data collected by satellites, -terabytes of computational results from nuclear testing models, and -megabytes of high-resolution MRI brain scans are stored in HDF5 files, -together with metadata necessary for efficient data sharing, -processing, visualization, and archiving. - -This package contains the openmpi version of the high-level HDF5 -runtime libraries. - -%package -n libhdf5_hl%{sonum_HL}-mvapich2 -Summary: High-level shared libraries for the HDF5 scientific data format -# To avoid unresolvable errors due to multiple providers of the library -Group: Productivity/Scientific/Other -Provides: libhdf5_hl-mvapich2 = %{version} -Obsoletes: libhdf5_hl-mvapich2 < %{version} - -%description -n libhdf5_hl%{sonum_HL}-mvapich2 -HDF5 is a data model, library, and file format for storing and -managing data. It supports an unlimited variety of datatypes, and -is designed for flexible and efficient I/O and for high volume and -complex data. HDF5 is portable and is extensible, allowing -applications to evolve in their use of HDF5. - -The HDF5 technology suite is designed to organize, store, discover, -access, analyze, share, and preserve diverse, complex data in -continuously evolving heterogeneous computing and storage environments. - -HDF5 supports all types of data stored digitally, regardless of origin -or size. Petabytes of remote sensing data collected by satellites, -terabytes of computational results from nuclear testing models, and -megabytes of high-resolution MRI brain scans are stored in HDF5 files, -together with metadata necessary for efficient data sharing, -processing, visualization, and archiving. - -This package contains the mvapich2 version of the high-level HDF5 -runtime libraries. - -%package -n libhdf5_cpp%{sonum_CXX} +%package -n %{libname -l _fortran -s %{sonum_F}} Summary: Shared libraries for the HDF5 scientific data format # To avoid unresolvable errors due to multiple providers of the library Group: Productivity/Scientific/Other -Provides: libhdf5_cpp = %{version} -Obsoletes: libhdf5_cpp < %{version} +Provides: %{libname -l _fortran} = %{version} +Obsoletes: %{libname -l _fortran} < %{version} +%{?with_hpc:Provides: libhdf5%{?with_mpi:-%{mpi_flavor}}-hpc = %{version}} +%{?with_hpc:Requires: %{name}-module = %version} -%description -n libhdf5_cpp%{sonum_CXX} +%description -n %{libname -l _fortran -s %{sonum_F}} HDF5 is a data model, library, and file format for storing and managing data. It supports an unlimited variety of datatypes, and is designed for flexible and efficient I/O and for high volume and @@ -346,16 +360,20 @@ megabytes of high-resolution MRI brain scans are stored in HDF5 files, together with metadata necessary for efficient data sharing, processing, visualization, and archiving. -This package contains the HDF5 runtime libraries. +This package contains the %{flavor} version of the HDF5 runtime libraries. -%package -n libhdf5_hl_cpp%{sonum_HL_CXX} +%{?with_hpc:%{hpc_master_package -l -n lib%{pname}_fortran%{hpc_package_name_tail}}} + +%package -n %{libname -l hl_fortran -s %{sonum_HL_F}} Summary: High-level shared libraries for the HDF5 scientific data format # To avoid unresolvable errors due to multiple providers of the library Group: Productivity/Scientific/Other -Provides: libhdf5_hl_cpp = %{version} -Obsoletes: libhdf5_hl_cpp < %{version} +Provides: %{libname -l hl_fortran} = %{version} +Obsoletes: %{libname -l hl_fortran} < %{version} +%{?with_hpc:Provides: libhdf5%{?with_mpi:-%{mpi_flavor}}-hpc = %{version}} +%{?whit_hpc:Requires: %{name}-module = %version} -%description -n libhdf5_hl_cpp%{sonum_HL_CXX} +%description -n %{libname -l hl_fortran -s %{sonum_HL_F}} HDF5 is a data model, library, and file format for storing and managing data. It supports an unlimited variety of datatypes, and is designed for flexible and efficient I/O and for high volume and @@ -373,177 +391,16 @@ megabytes of high-resolution MRI brain scans are stored in HDF5 files, together with metadata necessary for efficient data sharing, processing, visualization, and archiving. -This package contains the the high-level HDF5 runtime libraries. - -%package -n libhdf5_fortran%{sonum_F} -Summary: Shared libraries for the HDF5 scientific data format -# To avoid unresolvable errors due to multiple providers of the library -Group: Productivity/Scientific/Other -Provides: libhdf5_fortran = %{version} -Obsoletes: libhdf5_fortran < %{version} - -%description -n libhdf5_fortran%{sonum_F} -HDF5 is a data model, library, and file format for storing and -managing data. It supports an unlimited variety of datatypes, and -is designed for flexible and efficient I/O and for high volume and -complex data. HDF5 is portable and is extensible, allowing -applications to evolve in their use of HDF5. - -The HDF5 technology suite is designed to organize, store, discover, -access, analyze, share, and preserve diverse, complex data in -continuously evolving heterogeneous computing and storage environments. - -HDF5 supports all types of data stored digitally, regardless of origin -or size. Petabytes of remote sensing data collected by satellites, -terabytes of computational results from nuclear testing models, and -megabytes of high-resolution MRI brain scans are stored in HDF5 files, -together with metadata necessary for efficient data sharing, -processing, visualization, and archiving. - -This package contains the HDF5 runtime libraries. - -%package -n libhdf5_fortran%{sonum_F}-openmpi -Summary: Shared libraries for the HDF5 scientific data format -# To avoid unresolvable errors due to multiple providers of the library -Group: Productivity/Scientific/Other -Provides: libhdf5_fortran-openmpi = %{version} -Obsoletes: libhdf5_fortran-openmpi < %{version} - -%description -n libhdf5_fortran%{sonum_F}-openmpi -HDF5 is a data model, library, and file format for storing and -managing data. It supports an unlimited variety of datatypes, and -is designed for flexible and efficient I/O and for high volume and -complex data. HDF5 is portable and is extensible, allowing -applications to evolve in their use of HDF5. - -The HDF5 technology suite is designed to organize, store, discover, -access, analyze, share, and preserve diverse, complex data in -continuously evolving heterogeneous computing and storage environments. - -HDF5 supports all types of data stored digitally, regardless of origin -or size. Petabytes of remote sensing data collected by satellites, -terabytes of computational results from nuclear testing models, and -megabytes of high-resolution MRI brain scans are stored in HDF5 files, -together with metadata necessary for efficient data sharing, -processing, visualization, and archiving. - -This package contains the openmpi version of the HDF5 runtime libraries. - -%package -n libhdf5_fortran%{sonum_F}-mvapich2 -Summary: Shared libraries for the HDF5 scientific data format -# To avoid unresolvable errors due to multiple providers of the library -Group: Productivity/Scientific/Other -Provides: libhdf5_fortran-mvapich2 = %{version} -Obsoletes: libhdf5_fortran-mvapich2 < %{version} - -%description -n libhdf5_fortran%{sonum_F}-mvapich2 -HDF5 is a data model, library, and file format for storing and -managing data. It supports an unlimited variety of datatypes, and -is designed for flexible and efficient I/O and for high volume and -complex data. HDF5 is portable and is extensible, allowing -applications to evolve in their use of HDF5. - -The HDF5 technology suite is designed to organize, store, discover, -access, analyze, share, and preserve diverse, complex data in -continuously evolving heterogeneous computing and storage environments. - -HDF5 supports all types of data stored digitally, regardless of origin -or size. Petabytes of remote sensing data collected by satellites, -terabytes of computational results from nuclear testing models, and -megabytes of high-resolution MRI brain scans are stored in HDF5 files, -together with metadata necessary for efficient data sharing, -processing, visualization, and archiving. - -This package contains the mvapich2 version of the HDF5 runtime libraries. - -%package -n libhdf5hl_fortran%{sonum_HL_F} -Summary: High-level shared libraries for the HDF5 scientific data format -# To avoid unresolvable errors due to multiple providers of the library -Group: Productivity/Scientific/Other -Provides: libhdf5hl_fortran = %{version} -Obsoletes: libhdf5hl_fortran < %{version} - -%description -n libhdf5hl_fortran%{sonum_HL_F} -HDF5 is a data model, library, and file format for storing and -managing data. It supports an unlimited variety of datatypes, and -is designed for flexible and efficient I/O and for high volume and -complex data. HDF5 is portable and is extensible, allowing -applications to evolve in their use of HDF5. - -The HDF5 technology suite is designed to organize, store, discover, -access, analyze, share, and preserve diverse, complex data in -continuously evolving heterogeneous computing and storage environments. - -HDF5 supports all types of data stored digitally, regardless of origin -or size. Petabytes of remote sensing data collected by satellites, -terabytes of computational results from nuclear testing models, and -megabytes of high-resolution MRI brain scans are stored in HDF5 files, -together with metadata necessary for efficient data sharing, -processing, visualization, and archiving. - -This package contains the the high-level HDF5 runtime libraries. - -%package -n libhdf5hl_fortran%{sonum_HL_F}-openmpi -Summary: High-level shared libraries for the HDF5 scientific data format -# To avoid unresolvable errors due to multiple providers of the library -Group: Productivity/Scientific/Other -Provides: libhdf5hl_fortran-openmpi = %{version} -Obsoletes: libhdf5hl_fortran-openmpi < %{version} - -%description -n libhdf5hl_fortran%{sonum_HL_F}-openmpi -HDF5 is a data model, library, and file format for storing and -managing data. It supports an unlimited variety of datatypes, and -is designed for flexible and efficient I/O and for high volume and -complex data. HDF5 is portable and is extensible, allowing -applications to evolve in their use of HDF5. - -The HDF5 technology suite is designed to organize, store, discover, -access, analyze, share, and preserve diverse, complex data in -continuously evolving heterogeneous computing and storage environments. - -HDF5 supports all types of data stored digitally, regardless of origin -or size. Petabytes of remote sensing data collected by satellites, -terabytes of computational results from nuclear testing models, and -megabytes of high-resolution MRI brain scans are stored in HDF5 files, -together with metadata necessary for efficient data sharing, -processing, visualization, and archiving. - -This package contains the openmpi version of the high-level HDF5 +This package contains the %{flavor} version of the high-level HDF5 runtime libraries. -%package -n libhdf5hl_fortran%{sonum_HL_F}-mvapich2 -Summary: High-level shared libraries for the HDF5 scientific data format -# To avoid unresolvable errors due to multiple providers of the library -Group: Productivity/Scientific/Other -Provides: libhdf5hl_fortran-mvapich2 = %{version} -Obsoletes: libhdf5hl_fortran-mvapich2 < %{version} +%{?with_hpc:%{hpc_master_package -l -n lib%{pname}_hl_fortran%{hpc_package_name_tail}}} -%description -n libhdf5hl_fortran%{sonum_HL_F}-mvapich2 -HDF5 is a data model, library, and file format for storing and -managing data. It supports an unlimited variety of datatypes, and -is designed for flexible and efficient I/O and for high volume and -complex data. HDF5 is portable and is extensible, allowing -applications to evolve in their use of HDF5. - -The HDF5 technology suite is designed to organize, store, discover, -access, analyze, share, and preserve diverse, complex data in -continuously evolving heterogeneous computing and storage environments. - -HDF5 supports all types of data stored digitally, regardless of origin -or size. Petabytes of remote sensing data collected by satellites, -terabytes of computational results from nuclear testing models, and -megabytes of high-resolution MRI brain scans are stored in HDF5 files, -together with metadata necessary for efficient data sharing, -processing, visualization, and archiving. - -This package contains the mvapich2 version of the high-level HDF5 -runtime libraries. - -%package devel-data +%package -n %{pname}-devel-data Summary: Development data files for %{name} Group: Development/Libraries/Other -%description devel-data +%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, and is designed for flexible and efficient I/O and for high volume and @@ -565,18 +422,23 @@ 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/Other +Summary: Development files for %{name}%{?my_suffix} +Group: Development/Libraries/Parallel +%if %{without mpi} +Requires: %{libname -l _cpp -s %{sonum_CXX}} = %{version} +Requires: %{libname -l _hl_cpp -s %{sonum_HL_CXX}} = %{version} +%endif Requires: %{name} = %{version} -Requires: %{name}-devel-data = %{version} +Requires: %{pname}-devel-data = %{version} +%if 0%{?use_sz2} Requires: libsz2-devel +%endif +Requires: %{libname -s %{sonum}} = %{version} # Required by Fortran programs? -Requires: libhdf5-%{sonum} = %{version} -Requires: libhdf5_cpp%{sonum_CXX} = %{version} -Requires: libhdf5_fortran%{sonum_F} = %{version} -Requires: libhdf5_hl%{sonum_HL} = %{version} -Requires: libhdf5_hl_cpp%{sonum_HL_CXX} = %{version} -Requires: libhdf5hl_fortran%{sonum_HL_F} = %{version} +Requires: %{libname -l _fortran -s %{sonum_F}} = %{version} +Requires: %{libname -l _hl -s %{sonum_HL}} = %{version} +Requires: %{libname -l hl_fortran -s %{sonum_HL_F}} = %{version} +%{?with_hpc:%hpc_requires_devel} %description devel HDF5 is a data model, library, and file format for storing and @@ -597,78 +459,14 @@ together with metadata necessary for efficient data sharing, processing, visualization, and archiving. This package contains all files needed to create projects that use -HDF5. +the %{flavor} version of HDF5. -%package openmpi-devel -Summary: Development files for %{name}-openmpi -Group: Development/Libraries/Parallel -Requires: %{name}-devel-data = %{version} -Requires: %{name}-openmpi = %{version} -Requires: libsz2-devel -# Required by Fortran programs? -Requires: libhdf5-%{sonum}-openmpi = %{version} -Requires: libhdf5_fortran%{sonum_F}-openmpi = %{version} -Requires: libhdf5_hl%{sonum_HL}-openmpi = %{version} -Requires: libhdf5hl_fortran%{sonum_HL_F}-openmpi = %{version} - -%description openmpi-devel -HDF5 is a data model, library, and file format for storing and -managing data. It supports an unlimited variety of datatypes, and -is designed for flexible and efficient I/O and for high volume and -complex data. HDF5 is portable and is extensible, allowing -applications to evolve in their use of HDF5. - -The HDF5 technology suite is designed to organize, store, discover, -access, analyze, share, and preserve diverse, complex data in -continuously evolving heterogeneous computing and storage environments. - -HDF5 supports all types of data stored digitally, regardless of origin -or size. Petabytes of remote sensing data collected by satellites, -terabytes of computational results from nuclear testing models, and -megabytes of high-resolution MRI brain scans are stored in HDF5 files, -together with metadata necessary for efficient data sharing, -processing, visualization, and archiving. - -This package contains all files needed to create projects that use -the openmpi version of HDF5. - -%package mvapich2-devel -Summary: Development files for %{name}-mvapich2 -Group: Development/Libraries/Parallel -Requires: %{name}-devel-data = %{version} -Requires: %{name}-mvapich2 = %{version} -Requires: libsz2-devel -# Required by Fortran programs? -Requires: libhdf5-%{sonum}-mvapich2 = %{version} -Requires: libhdf5_fortran%{sonum_F}-mvapich2 = %{version} -Requires: libhdf5_hl%{sonum_HL}-mvapich2 = %{version} -Requires: libhdf5hl_fortran%{sonum_HL_F}-mvapich2 = %{version} - -%description mvapich2-devel -HDF5 is a data model, library, and file format for storing and -managing data. It supports an unlimited variety of datatypes, and -is designed for flexible and efficient I/O and for high volume and -complex data. HDF5 is portable and is extensible, allowing -applications to evolve in their use of HDF5. - -The HDF5 technology suite is designed to organize, store, discover, -access, analyze, share, and preserve diverse, complex data in -continuously evolving heterogeneous computing and storage environments. - -HDF5 supports all types of data stored digitally, regardless of origin -or size. Petabytes of remote sensing data collected by satellites, -terabytes of computational results from nuclear testing models, and -megabytes of high-resolution MRI brain scans are stored in HDF5 files, -together with metadata necessary for efficient data sharing, -processing, visualization, and archiving. - -This package contains all files needed to create projects that use -the mvapich2 version of HDF5. +%{?with_hpc:%{hpc_master_package devel}} %package devel-static -Summary: Static development files for %{name} -Group: Development/Libraries/Other -Requires: %{name}-devel = %{version} +Summary: Static development files for %{name}%{?my_suffix} +Group: Development/Libraries/Parallel +Requires: %{name}%{?my_suffix}-devel = %{version} %description devel-static HDF5 is a data model, library, and file format for storing and @@ -688,69 +486,19 @@ megabytes of high-resolution MRI brain scans are stored in HDF5 files, together with metadata necessary for efficient data sharing, processing, visualization, and archiving. -This package provides the static libraries for HDF5. +This package provides the static libraries for the %{flavor} version of HDF5. -%package openmpi-devel-static -Summary: Static development files for %{name}-openmpi -Group: Development/Libraries/Parallel -Requires: %{name}-openmpi-devel = %{version} - -%description openmpi-devel-static -HDF5 is a data model, library, and file format for storing and -managing data. It supports an unlimited variety of datatypes, and -is designed for flexible and efficient I/O and for high volume and -complex data. HDF5 is portable and is extensible, allowing -applications to evolve in their use of HDF5. - -The HDF5 technology suite is designed to organize, store, discover, -access, analyze, share, and preserve diverse, complex data in -continuously evolving heterogeneous computing and storage environments. - -HDF5 supports all types of data stored digitally, regardless of origin -or size. Petabytes of remote sensing data collected by satellites, -terabytes of computational results from nuclear testing models, and -megabytes of high-resolution MRI brain scans are stored in HDF5 files, -together with metadata necessary for efficient data sharing, -processing, visualization, and archiving. - -This package provides the static libraries for the openmpi version of HDF5. - -%package mvapich2-devel-static -Summary: Static development files for %{name}-mvapich2 -Group: Development/Libraries/Parallel -Requires: %{name}-mvapich2-devel = %{version} - -%description mvapich2-devel-static -HDF5 is a data model, library, and file format for storing and -managing data. It supports an unlimited variety of datatypes, and -is designed for flexible and efficient I/O and for high volume and -complex data. HDF5 is portable and is extensible, allowing -applications to evolve in their use of HDF5. - -The HDF5 technology suite is designed to organize, store, discover, -access, analyze, share, and preserve diverse, complex data in -continuously evolving heterogeneous computing and storage environments. - -HDF5 supports all types of data stored digitally, regardless of origin -or size. Petabytes of remote sensing data collected by satellites, -terabytes of computational results from nuclear testing models, and -megabytes of high-resolution MRI brain scans are stored in HDF5 files, -together with metadata necessary for efficient data sharing, -processing, visualization, and archiving. - -This package provides the static libraries for the mvapich2 version of HDF5. - -%package examples +%package -n %{pname}-examples Summary: Examples for %{name} Group: Documentation/Other -Requires: libhdf5-%{sonum} = %{version} -Requires: libhdf5_cpp%{sonum_CXX} = %{version} -Requires: libhdf5_fortran%{sonum_F} = %{version} -Requires: libhdf5_hl%{sonum_HL} = %{version} -Requires: libhdf5_hl_cpp%{sonum_HL_CXX} = %{version} -Requires: libhdf5hl_fortran%{sonum_HL_F} = %{version} +Requires: %{libname -l _cpp -s %{sonum_CXX}} = %{version} +Requires: %{libname -l _fortran -s %{sonum_F}} = %{version} +Requires: %{libname -l _hl -s %{sonum_HL}} = %{version} +Requires: %{libname -l _hl_cpp -s %{sonum_HL_CXX}} = %{version} +Requires: %{libname -l hl_fortran -s %{sonum_HL_F}} = %{version} +Requires: %{libname -s %{sonum}} = %{version} -%description examples +%description -n %{pname}-examples HDF5 is a data model, library, and file format for storing and managing data. It supports an unlimited variety of datatypes, and is designed for flexible and efficient I/O and for high volume and @@ -770,8 +518,38 @@ processing, visualization, and archiving. This package provides examples of HDF5 library use. +%if %{with hpc} +%package module +Summary: Module files for %{name}%{?my_suffix} +Group: Development/Libraries/Parallel +Provides: %{name}-module = %version +BuildArch: noarch + +%description module +HDF5 is a data model, library, and file format for storing and +managing data. It supports an unlimited variety of datatypes, and +is designed for flexible and efficient I/O and for high volume and +complex data. HDF5 is portable and is extensible, allowing +applications to evolve in their use of HDF5. + +The HDF5 technology suite is designed to organize, store, discover, +access, analyze, share, and preserve diverse, complex data in +continuously evolving heterogeneous computing and storage environments. + +HDF5 supports all types of data stored digitally, regardless of origin +or size. Petabytes of remote sensing data collected by satellites, +terabytes of computational results from nuclear testing models, and +megabytes of high-resolution MRI brain scans are stored in HDF5 files, +together with metadata necessary for efficient data sharing, +processing, visualization, and archiving. + +This package contains the environment module needed for the HDF5 +library packages. +%endif + %prep -%setup -q -n %{name}-%{version}-patch1 +%{?with_hpc: %hpc_debug} +%setup -q -n %{pname}-%{version}-patch1 %patch0 -p1 -b .LD_LIBRARY_PATH %patch1 -p0 -b .non_void_return %patch2 -p0 -b .abort_unknown_host_config @@ -783,21 +561,15 @@ This package provides examples of HDF5 library use. %patch7 -p1 %patch8 -p1 -echo "prepare parallel builds: %{_mpi}" -for build_dir in build %{_mpi}; do - mkdir $build_dir - ln -s ../configure $build_dir -done - %build + +%{?with_hpc:%hpc_setup} +%{?with_hpc:%hpc_debug} + export CC=gcc export CXX=g++ export F9X=gfortran export CFLAGS="%{optflags}" -# workaround for known gcc issue, see RELEASE.txt -if gcc --version |grep -q " 4\.[68]"; then - export CFLAGS="${CFLAGS/-O2/-O0}" -fi %ifarch %arm # we want to have useful H5_CFLAGS on arm too test -e config/linux-gnueabi || cp config/linux-gnu config/linux-gnueabi @@ -813,70 +585,70 @@ test -e config/linux-gnueabi || cp config/linux-gnu config/linux-gnueabi # C++ code is thread-safe. Since our users are going to be # accessing this through other programs, this doesn't matter. -pushd build +%if %{without hpc} + %if %{with mpi} +export CC="%{my_bindir}/mpicc" +export FC="%{my_bindir}/mpif90" +export F77="%{my_bindir}/mpif77" +export LD_LIBRARY_PATH="%{my_libdir}" + %endif %configure \ + %if %{with mpi} + --prefix=%{my_prefix} \ + --exec-prefix=%{_prefix} \ + --bindir=%{my_bindir} \ + --libdir=%{my_libdir} \ + --includedir=%{my_incdir} \ + --datadir=%{_datadir} \ + %endif --docdir=%{_docdir}/%{name} \ +%else +%global _hpc_exec_prefix %hpc_exec_prefix +%global hpc_exec_prefix %_prefix + %if %{with mpi} +export CC=mpicc +export CXX=mpicxx +export F77=mpif77 +export FC=mpif90 +export MPICC=mpicc +export MPIFC=mpifc +export MPICXX=mpicxx + %endif +%hpc_configure \ +%define hpc_exec_prefix %{expand:%_hpc_exec_prefix} +%endif --disable-dependency-tracking \ --enable-fortran \ - --enable-fortran2003 \ --enable-unsupported \ --enable-hl \ --enable-shared \ - --enable-cxx \ --enable-threadsafe \ --enable-build-mode=production \ +%if %{with mpi} + --enable-parallel \ +%else + --enable-cxx \ + %if 0%{?use_sz2} --with-szlib \ + %endif +%endif --with-pthread make V=1 %{?_smp_mflags} -popd - -for mpi in %{_mpi}; -do -pushd $mpi -export CC="%{_libdir}/mpi/gcc/$mpi/bin/mpicc" -export FC="%{_libdir}/mpi/gcc/$mpi/bin/mpif90" -export F77="%{_libdir}/mpi/gcc/$mpi/bin/mpif77" -export LD_LIBRARY_PATH="%{_libdir}/mpi/gcc/$mpi/%{_lib}" -%configure \ - --docdir=%{_docdir}/%{name} \ - --prefix=%{_libdir}/mpi/gcc/$mpi \ - --exec-prefix=%{_libdir}/mpi/gcc/$mpi \ - --bindir=%{_libdir}/mpi/gcc/$mpi/bin \ - --libdir=%{_libdir}/mpi/gcc/$mpi/%{_lib} \ - --datadir=%{_libdir}/mpi/gcc/$mpi/share \ - --includedir=%{_libdir}/mpi/gcc/$mpi/include \ - --disable-dependency-tracking \ - --enable-fortran \ - --enable-fortran2003 \ - --enable-unsupported \ - --enable-hl \ - --enable-shared \ - --enable-threadsafe \ - --enable-parallel \ - --enable-build-mode=production \ - --with-pthread - -make %{?_smp_mflags} -popd -done %install -# install serial and parallel builds, (the serial one will win in case of -# duplicate files) -for build_dir in %{_mpi} build; do - make install DESTDIR=%{buildroot} -C "$build_dir" -done +%{?with_hpc:%hpc_setup} +%{?with_hpc:%hpc_debug} + +make install DESTDIR=%{buildroot} find %{buildroot} -type f -name "*.la" -delete -print + +%if %{without mpi} find %{buildroot}%{_datadir}/hdf5_examples -type f \ | grep -v ".sh$" | xargs chmod 644 -# delete examples from parallel builds -rm -rf %{buildroot}%{_libdir}/mpi/gcc/*/share/hdf5_examples -%if 0%{?suse_version} >= 1110 -%fdupes -s %{buildroot}/%{_datadir} -%endif + %if %{without hpc} # rpm macro for version checking mkdir -p %{buildroot}%{_sysconfdir}/rpm cat > %{buildroot}%{_sysconfdir}/rpm/macros.hdf5 < %{buildroot}%{_sysconfdir}/rpm/macros.hdf5 <= 1110 +%fdupes -s %{buildroot}/%{_datadir} +%endif + +%if %{without hpc} +# baselib looks different for different flavors - generate it on the fly +cat > %{_sourcedir}/baselib.conf < + requires "libhdf5-%{sonum}%{?my_suffix}- = " + requires "libhdf5_hl%{sonum_HL}%{?my_suffix}- = " + requires "libhdf5_fortran%{sonum_HL_F}%{?my_suffix}- = " +%if %{without mpi} + requires "libhdf5_cpp%{sonum_CXX}%{?my_suffix}- = " + requires "libhdf5_hl_cpp%{sonum_HL_CXX}%{?my_suffix}- = " +%endif +EOF +%else +%{hpc_write_pkgconfig -n hdf5 -l libhdf5} +%{hpc_write_pkgconfig -n hdf5_hl -l libhdf5_hl} +%{hpc_write_pkgconfig -n hdf5_fortran -l libhdf5_fortran} +%{hpc_write_pkgconfig -n hdf5_hl_fortran -l libhdfhl_fortran} +%if %{without mpi} +%{hpc_write_pkgconfig -n hdf5_cpp -l libhdf5_cpp} +%{hpc_write_pkgconfig -n hdf5_hl_cpp -l libhdf5_hl_cpp} +%endif + +%hpc_write_modules_files +#%%Module1.0##################################################################### + +proc ModulesHelp { } { + +puts stderr " " +puts stderr "This module loads the %{pname} library built with the %{compiler_family} compiler toolchain." +puts stderr "\nVersion %{version}\n" + +} +module-whatis "Name: %{pname} built with %{compiler_family} toolchain" +module-whatis "Version: %{version}" +module-whatis "Category: runtime library" +module-whatis "Description: %{summary}" +module-whatis "%{url}" + +set version %{version} + +prepend-path PATH %{hpc_bindir} +prepend-path LD_LIBRARY_PATH %{hpc_libdir} + +setenv %{hpc_upcase %pname}_DIR %{hpc_prefix} +setenv %{hpc_upcase %pname}_BIN %{hpc_bindir} +setenv %{hpc_upcase %pname}_LIB %{hpc_libdir} + +if {[file isdirectory %{hpc_includedir}]} { +prepend-path LIBRARY_PATH %{hpc_libdir} +prepend-path CPATH %{hpc_includedir} +prepend-path C_INCLUDE_PATH %{hpc_includedir} +prepend-path CPLUS_INCLUDE_PATH %{hpc_includedir} +prepend-path INCLUDE %{hpc_includedir} + +setenv %{hpc_upcase %pname}_INC %{hpc_includedir} +} + +family "%pname" + +EOF +%endif + +%if 0%{?_do_check} %check %if 0%{?qemu_user_space_build} # default timeout is 1200 seconds export HDF5_ALARM_SECONDS=3600 %endif -make %{?_smp_mflags} -C build check +%if %{with mpi} export HDF5_Make_Ignore=yes -for mpi in %{_mpi}; do - make -C $mpi check -done - -%post -n libhdf5-%{sonum} -p /sbin/ldconfig -%postun -n libhdf5-%{sonum} -p /sbin/ldconfig -%post -n libhdf5_hl%{sonum_HL} -p /sbin/ldconfig -%postun -n libhdf5_hl%{sonum_HL} -p /sbin/ldconfig -%post -n libhdf5_cpp%{sonum_CXX} -p /sbin/ldconfig -%postun -n libhdf5_cpp%{sonum_CXX} -p /sbin/ldconfig -%post -n libhdf5_hl_cpp%{sonum_HL_CXX} -p /sbin/ldconfig -%postun -n libhdf5_hl_cpp%{sonum_HL_CXX} -p /sbin/ldconfig -%post -n libhdf5_fortran%{sonum_F} -p /sbin/ldconfig -%postun -n libhdf5_fortran%{sonum_F} -p /sbin/ldconfig -%post -n libhdf5hl_fortran%{sonum_HL_F} -p /sbin/ldconfig -%postun -n libhdf5hl_fortran%{sonum_HL_F} -p /sbin/ldconfig - -%if 0%{?_openmpi} -%post -n libhdf5-%{sonum}-openmpi -p /sbin/ldconfig -%postun -n libhdf5-%{sonum}-openmpi -p /sbin/ldconfig -%post -n libhdf5_hl%{sonum_HL}-openmpi -p /sbin/ldconfig -%postun -n libhdf5_hl%{sonum_HL}-openmpi -p /sbin/ldconfig -%post -n libhdf5_fortran%{sonum_F}-openmpi -p /sbin/ldconfig -%postun -n libhdf5_fortran%{sonum_F}-openmpi -p /sbin/ldconfig -%post -n libhdf5hl_fortran%{sonum_HL_F}-openmpi -p /sbin/ldconfig -%postun -n libhdf5hl_fortran%{sonum_HL_F}-openmpi -p /sbin/ldconfig +%endif +%{?with_hpc:%hpc_setup} +make %{?_smp_mflags} check %endif -%if 0%{?_mvapich2} -%post -n libhdf5-%{sonum}-mvapich2 -p /sbin/ldconfig -%postun -n libhdf5-%{sonum}-mvapich2 -p /sbin/ldconfig -%post -n libhdf5_hl%{sonum_HL}-mvapich2 -p /sbin/ldconfig -%postun -n libhdf5_hl%{sonum_HL}-mvapich2 -p /sbin/ldconfig -%post -n libhdf5_fortran%{sonum_F}-mvapich2 -p /sbin/ldconfig -%postun -n libhdf5_fortran%{sonum_F}-mvapich2 -p /sbin/ldconfig -%post -n libhdf5hl_fortran%{sonum_HL_F}-mvapich2 -p /sbin/ldconfig -%postun -n libhdf5hl_fortran%{sonum_HL_F}-mvapich2 -p /sbin/ldconfig +%if %{without mpi} +%post -n %{libname -l _cpp -s %{sonum_CXX}} -p /sbin/ldconfig +%postun -n %{libname -l _cpp -s %{sonum_CXX}} -p /sbin/ldconfig +%post -n %{libname -l _hl_cpp -s %{sonum_HL_CXX}} -p /sbin/ldconfig +%postun -n %{libname -l _hl_cpp -s %{sonum_HL_CXX}} -p /sbin/ldconfig %endif -%files -%defattr(-,root,root) -%{_bindir}/gif2h5 -%{_bindir}/h52gif -%{_bindir}/h5clear -%{_bindir}/h5copy -%{_bindir}/h5debug -%{_bindir}/h5diff -%{_bindir}/h5dump -%{_bindir}/h5format_convert -%{_bindir}/h5import -%{_bindir}/h5jam -%{_bindir}/h5ls -%{_bindir}/h5mkgrp -%{_bindir}/h5perf_serial -%{_bindir}/h5redeploy -%{_bindir}/h5repack -%{_bindir}/h5repart -%{_bindir}/h5stat -%{_bindir}/h5unjam -%{_bindir}/h5watch +%post -n %{libname -s %{sonum}} -p /sbin/ldconfig +%postun -n %{libname -s %{sonum}} -p /sbin/ldconfig +%post -n %{libname -l _hl -s %{sonum_HL}} -p /sbin/ldconfig +%postun -n %{libname -l _hl -s %{sonum_HL}} -p /sbin/ldconfig +%post -n %{libname -l _fortran -s %{sonum_F}} -p /sbin/ldconfig +%postun -n %{libname -l _fortran -s %{sonum_F}} -p /sbin/ldconfig +%post -n %{libname -l hl_fortran -s %{sonum_HL_F}} -p /sbin/ldconfig +%postun -n %{libname -l hl_fortran -s %{sonum_HL_F}} -p /sbin/ldconfig -%files -n libhdf5-%{sonum} -%defattr(-,root,root) -%doc COPYING ACKNOWLEDGMENTS README.txt -%doc release_docs/HISTORY-1_8_0-1_10_0.txt -%doc release_docs/RELEASE.txt -%defattr(0755,root,root) -%{_libdir}/libhdf5.so.%{sonum} -%{_libdir}/libhdf5.so.%{sonum}.* +%if %{with hpc} +%postun module +%hpc_module_delete_if_default +%endif -%files -n libhdf5_hl%{sonum_HL} -%defattr(-,root,root) -%doc COPYING -%defattr(0755,root,root) -%{_libdir}/libhdf5_hl.so.%{sonum_HL} -%{_libdir}/libhdf5_hl.so.%{sonum_HL}.* - -%files -n libhdf5_cpp%{sonum_CXX} -%defattr(-,root,root) -%doc COPYING -%defattr(0755,root,root) -%{_libdir}/libhdf5_cpp.so.%{sonum_CXX} -%{_libdir}/libhdf5_cpp.so.%{sonum_CXX}.* - -%files -n libhdf5_hl_cpp%{sonum_HL_CXX} -%defattr(-,root,root) -%doc COPYING -%defattr(0755,root,root) -%{_libdir}/libhdf5_hl_cpp.so.%{sonum_HL_CXX} -%{_libdir}/libhdf5_hl_cpp.so.%{sonum_HL_CXX}.* - -%files -n libhdf5_fortran%{sonum_F} -%defattr(-,root,root) -%doc COPYING -%defattr(0755,root,root) -%{_libdir}/libhdf5_fortran.so.%{sonum_F} -%{_libdir}/libhdf5_fortran.so.%{sonum_F}.* - -%files -n libhdf5hl_fortran%{sonum_HL_F} -%defattr(-,root,root) -%doc COPYING -%defattr(0755,root,root) -%{_libdir}/libhdf5hl_fortran.so.%{sonum_HL_F} -%{_libdir}/libhdf5hl_fortran.so.%{sonum_HL_F}.* - -%files devel-data -%defattr(-,root,root,-) -%config(noreplace) %{_sysconfdir}/rpm/macros.hdf5 - -%files devel -%defattr(-,root,root) -%doc release_docs/HISTORY-1_0-1_8_0_rc3.txt -%doc release_docs/RELEASE.txt -%doc ACKNOWLEDGMENTS README.txt -%{_bindir}/h5c++ -%{_bindir}/h5cc -%{_bindir}/h5fc -%{_includedir}/*.h -%{_libdir}/*.so -%{_libdir}/*.settings -%{_includedir}/*.mod - -%files devel-static -%defattr(-,root,root) -%{_libdir}/*.a - -%files examples +%if %{without mpi} +%files -n %{pname}-examples %defattr(-,root,root) %{_datadir}/hdf5_examples -%if 0%{?_openmpi} -%files -n %{name}-openmpi -%defattr(-,root,root) -%{_libdir}/mpi/gcc/openmpi/bin/gif2h5 -%{_libdir}/mpi/gcc/openmpi/bin/h52gif -%{_libdir}/mpi/gcc/openmpi/bin/h5clear -%{_libdir}/mpi/gcc/openmpi/bin/h5copy -%{_libdir}/mpi/gcc/openmpi/bin/h5debug -%{_libdir}/mpi/gcc/openmpi/bin/h5diff -%{_libdir}/mpi/gcc/openmpi/bin/h5dump -%{_libdir}/mpi/gcc/openmpi/bin/h5format_convert -%{_libdir}/mpi/gcc/openmpi/bin/h5import -%{_libdir}/mpi/gcc/openmpi/bin/h5jam -%{_libdir}/mpi/gcc/openmpi/bin/h5ls -%{_libdir}/mpi/gcc/openmpi/bin/h5mkgrp -%{_libdir}/mpi/gcc/openmpi/bin/h5perf -%{_libdir}/mpi/gcc/openmpi/bin/h5perf_serial -%{_libdir}/mpi/gcc/openmpi/bin/h5redeploy -%{_libdir}/mpi/gcc/openmpi/bin/h5repack -%{_libdir}/mpi/gcc/openmpi/bin/h5repart -%{_libdir}/mpi/gcc/openmpi/bin/h5stat -%{_libdir}/mpi/gcc/openmpi/bin/h5unjam -%{_libdir}/mpi/gcc/openmpi/bin/ph5diff -%{_libdir}/mpi/gcc/openmpi/bin/h5watch + %if 0%{without hpc} -%files -n libhdf5-%{sonum}-openmpi +%files -n %{pname}-devel-data +%defattr(-,root,root,-) +%config(noreplace) %{_sysconfdir}/rpm/macros.hdf5 + %endif +%endif # flavor == serial + +%files -n %{name} +%defattr(-,root,root) +%{?with_hpc:%dir %my_bindir} +%{my_bindir}/gif2h5 +%{my_bindir}/h52gif +%{my_bindir}/h5clear +%{my_bindir}/h5copy +%{my_bindir}/h5debug +%{my_bindir}/h5diff +%{my_bindir}/h5dump +%{my_bindir}/h5format_convert +%{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}/h5redeploy +%{my_bindir}/h5repack +%{my_bindir}/h5repart +%{my_bindir}/h5stat +%{my_bindir}/h5unjam +%{my_bindir}/h5watch + +%files -n %{libname -s %{sonum}} %defattr(-,root,root) %doc COPYING ACKNOWLEDGMENTS README.txt +## +%if %{without mpi} +%doc release_docs/HISTORY-1_8_0-1_10_0.txt +%doc release_docs/RELEASE.txt +%endif %defattr(0755,root,root) -%{_libdir}/mpi/gcc/openmpi/%{_lib}/libhdf5.so.%{sonum} -%{_libdir}/mpi/gcc/openmpi/%{_lib}/libhdf5.so.%{sonum}.* +%{?whith_hpc:%hpc_dirs} +%{my_libdir}/libhdf5.so.%{sonum} +%{my_libdir}/libhdf5.so.%{sonum}.* -%files -n libhdf5_hl%{sonum_HL}-openmpi +%files -n %{libname -l _hl -s %{sonum_HL}} %defattr(-,root,root) %doc COPYING %defattr(0755,root,root) -%{_libdir}/mpi/gcc/openmpi/%{_lib}/libhdf5_hl.so.%{sonum_HL} -%{_libdir}/mpi/gcc/openmpi/%{_lib}/libhdf5_hl.so.%{sonum_HL}.* +%{?with_hpc:%hpc_dirs} +%{my_libdir}/libhdf5_hl.so.%{sonum_HL} +%{my_libdir}/libhdf5_hl.so.%{sonum_HL}.* -%files -n libhdf5_fortran%{sonum_F}-openmpi +%if %{without mpi} +%files -n %{libname -l _cpp -s %{sonum_CXX}} %defattr(-,root,root) %doc COPYING %defattr(0755,root,root) -%{_libdir}/mpi/gcc/openmpi/%{_lib}/libhdf5_fortran.so.%{sonum_F} -%{_libdir}/mpi/gcc/openmpi/%{_lib}/libhdf5_fortran.so.%{sonum_F}.* +%{?with_hpc:%hpc_dirs} +%{my_libdir}/libhdf5_cpp.so.%{sonum_CXX} +%{my_libdir}/libhdf5_cpp.so.%{sonum_CXX}.* -%files -n libhdf5hl_fortran%{sonum_HL_F}-openmpi +%files -n %{libname -l _hl_cpp -s %{sonum_HL_CXX}} %defattr(-,root,root) %doc COPYING %defattr(0755,root,root) -%{_libdir}/mpi/gcc/openmpi/%{_lib}/libhdf5hl_fortran.so.%{sonum_HL_F} -%{_libdir}/mpi/gcc/openmpi/%{_lib}/libhdf5hl_fortran.so.%{sonum_HL_F}.* +%{?with_hpc:%hpc_dirs} +%{my_libdir}/libhdf5_hl_cpp.so.%{sonum_HL_CXX} +%{my_libdir}/libhdf5_hl_cpp.so.%{sonum_HL_CXX}.* +%endif # flavor == serial -%files openmpi-devel +%files -n %{libname -l _fortran -s %{sonum_F}} %defattr(-,root,root) -%{_libdir}/mpi/gcc/openmpi/bin/h5pcc -%{_libdir}/mpi/gcc/openmpi/bin/h5pfc -%{_libdir}/mpi/gcc/openmpi/include/*.h -%{_libdir}/mpi/gcc/openmpi/%{_lib}/*.so -%{_libdir}/mpi/gcc/openmpi/%{_lib}/*.settings -%{_libdir}/mpi/gcc/openmpi/include/*.mod +%doc COPYING +%defattr(0755,root,root) +%{?with_hpc:%hpc_dirs} +%{my_libdir}/libhdf5_fortran.so.%{sonum_F} +%{my_libdir}/libhdf5_fortran.so.%{sonum_F}.* -%files openmpi-devel-static +%files -n %{libname -l hl_fortran -s %{sonum_HL_F}} %defattr(-,root,root) -%{_libdir}/mpi/gcc/openmpi/%{_lib}/*.a +%doc COPYING +%defattr(0755,root,root) +%{?with_hpc:%hpc_dirs} +%{my_libdir}/libhdf5hl_fortran.so.%{sonum_HL_F} +%{my_libdir}/libhdf5hl_fortran.so.%{sonum_HL_F}.* + +%if %{with hpc} +%files module +%defattr(-,root,root) +%hpc_modules_files %endif -%if 0%{?_mvapich2} -%files -n %{name}-mvapich2 +%files devel %defattr(-,root,root) -%{_libdir}/mpi/gcc/mvapich2/bin/gif2h5 -%{_libdir}/mpi/gcc/mvapich2/bin/h52gif -%{_libdir}/mpi/gcc/mvapich2/bin/h5copy -%{_libdir}/mpi/gcc/mvapich2/bin/h5debug -%{_libdir}/mpi/gcc/mvapich2/bin/h5diff -%{_libdir}/mpi/gcc/mvapich2/bin/h5dump -%{_libdir}/mpi/gcc/mvapich2/bin/h5import -%{_libdir}/mpi/gcc/mvapich2/bin/h5jam -%{_libdir}/mpi/gcc/mvapich2/bin/h5ls -%{_libdir}/mpi/gcc/mvapich2/bin/h5mkgrp -%{_libdir}/mpi/gcc/mvapich2/bin/h5perf -%{_libdir}/mpi/gcc/mvapich2/bin/h5perf_serial -%{_libdir}/mpi/gcc/mvapich2/bin/h5redeploy -%{_libdir}/mpi/gcc/mvapich2/bin/h5repack -%{_libdir}/mpi/gcc/mvapich2/bin/h5repart -%{_libdir}/mpi/gcc/mvapich2/bin/h5stat -%{_libdir}/mpi/gcc/mvapich2/bin/h5unjam -%{_libdir}/mpi/gcc/mvapich2/bin/ph5diff - -%files -n libhdf5-%{sonum}-mvapich2 -%defattr(-,root,root) -%doc COPYING -%defattr(0755,root,root) -%{_libdir}/mpi/gcc/mvapich2/%{_lib}/libhdf5.so.%{sonum} -%{_libdir}/mpi/gcc/mvapich2/%{_lib}/libhdf5.so.%{sonum}.* - -%files -n libhdf5_hl%{sonum_HL}-mvapich2 -%defattr(-,root,root) -%doc COPYING -%defattr(0755,root,root) -%{_libdir}/mpi/gcc/mvapich2/%{_lib}/libhdf5_hl.so.%{sonum_HL} -%{_libdir}/mpi/gcc/mvapich2/%{_lib}/libhdf5_hl.so.%{sonum_HL}.* - -%files -n libhdf5_fortran%{sonum_F}-mvapich2 -%defattr(-,root,root) -%doc COPYING -%defattr(0755,root,root) -%{_libdir}/mpi/gcc/mvapich2/%{_lib}/libhdf5_fortran.so.%{sonum_F} -%{_libdir}/mpi/gcc/mvapich2/%{_lib}/libhdf5_fortran.so.%{sonum_F}.* - -%files -n libhdf5hl_fortran%{sonum_HL_F}-mvapich2 -%defattr(-,root,root) -%doc COPYING -%defattr(0755,root,root) -%{_libdir}/mpi/gcc/mvapich2/%{_lib}/libhdf5hl_fortran.so.%{sonum_HL_F} -%{_libdir}/mpi/gcc/mvapich2/%{_lib}/libhdf5hl_fortran.so.%{sonum_HL_F}.* - -%files mvapich2-devel -%defattr(-,root,root) -%{_libdir}/mpi/gcc/mvapich2/bin/h5pcc -%{_libdir}/mpi/gcc/mvapich2/bin/h5pfc -%{_libdir}/mpi/gcc/mvapich2/include/*.h -%{_libdir}/mpi/gcc/mvapich2/%{_lib}/*.so -%{_libdir}/mpi/gcc/mvapich2/%{_lib}/*.settings -%{_libdir}/mpi/gcc/mvapich2/include/*.mod - -%files mvapich2-devel-static -%defattr(-,root,root) -%{_libdir}/mpi/gcc/mvapich2/%{_lib}/*.a +## +%{?with_hpc:%dir %{my_incdir}} +%doc release_docs/HISTORY-1_0-1_8_0_rc3.txt +%doc release_docs/RELEASE.txt +%doc ACKNOWLEDGMENTS README.txt +%{?with_hpc:%{hpc_pkgconfig_file -n hdf5}} +%{?with_hpc:%{hpc_pkgconfig_file -N -n hdf5_hl}} +%{?with_hpc:%{hpc_pkgconfig_file -N -n hdf5_fortran}} +%{?with_hpc:%{hpc_pkgconfig_file -N -n hdf5_hl_fortran}} +%if %{without mpi} +%{?with_hpc:%{hpc_pkgconfig_file -N -n hdf5_cpp}} +%{?with_hpc:%{hpc_pkgconfig_file -N -n hdf5_hl_cpp}} +%{my_bindir}/h5c++ +%{my_bindir}/h5cc +%{my_bindir}/h5fc +%else +%{my_bindir}/h5pcc +%{my_bindir}/h5pfc %endif +%{my_incdir}/*.h +%{my_libdir}/*.so +%{my_libdir}/*.settings +%{my_incdir}/*.mod + +%files devel-static +%defattr(-,root,root) +%{my_libdir}/*.a %changelog diff --git a/update_so_version.sh b/update_so_version.sh index e50077e..4d94ae5 100644 --- a/update_so_version.sh +++ b/update_so_version.sh @@ -13,8 +13,8 @@ dbg() cleanup() { - rm -f lt_vers.sh sonum_spec.sed sonum_baselibs.sed - rm -f hdf5.spec.tmp baselibs.conf.tmp + rm -f lt_vers.sh sonum_spec.sed + rm -f hdf5.spec.tmp } ## We are going to parse these variables from tarball: @@ -54,9 +54,8 @@ for infix in "" _CXX _F _HL _HL_CXX _HL_F _TOOLS; do test "${!var}" -gt 0 || exit_error "$var='${!var}' bad or undefined" dbg "update $var=${!var}" def_sonum="sonum${infix}" - # create sed scripts for spec file and baselibs + # create sed scripts for spec file echo "s/^%define $def_sonum .*/%define $def_sonum ${!var}/" >> sonum_spec.sed - echo "s/@${def_sonum}@/${!var}/g" >> sonum_baselibs.sed done # update spec file if needed @@ -68,13 +67,4 @@ else echo "hdf5.spec updated" >&2 fi -# update baselibs if needed -sed -f sonum_baselibs.sed baselibs.conf.in > baselibs.conf.tmp -if diff -q baselibs.conf.tmp baselibs.conf &>/dev/null; then - dbg "baselibs.conf was up-to-date" -else - mv baselibs.conf.tmp baselibs.conf - echo "baselibs.conf updated" >&2 -fi - cleanup