# # spec file # # Copyright (c) 2023 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} %define _do_check 1 %define ver 4.9.2 %define _ver 4_9_2 %define pname netcdf %define sonum 19 %if 0%{?sle_version} >= 150200 %define DisOMPI1 ExclusiveArch: do_not_build %endif %if !0%{?is_opensuse} && 0%{?sle_version:1} %if 0%{?sle_version} < 150200 %define DisOMPI3 ExclusiveArch: do_not_build %endif %if 0%{?sle_version} < 150300 %define DisOMPI4 ExclusiveArch: do_not_build %endif %endif %bcond_with valgrind_checks # Keep disabled until properly set up on HDF5 library side %bcond_with plugins %if "%flavor" == "" %define package_name %{pname} ExclusiveArch: do_not_build %endif ExcludeArch: s390 %if "%{flavor}" == "serial" %bcond_with hpc %endif %if "%{flavor}" == "gnu-hpc" %global compiler_family gnu %undefine c_f_ver %undefine mpi_flavor %bcond_without hpc %endif %if "%{flavor}" == "gnu-openmpi4-hpc" %{?DisOMPI4} %global compiler_family gnu %undefine c_f_ver %define mpi_flavor openmpi %define mpi_ver 4 %bcond_without hpc %endif %if "%{flavor}" == "gnu-openmpi5-hpc" %{?DisOMPI5} %global compiler_family gnu %undefine c_f_ver %define mpi_flavor openmpi %define mpi_ver 5 %bcond_without hpc %endif %if "%{flavor}" == "gnu-mvapich2-hpc" %global compiler_family gnu %undefine c_f_ver %define mpi_flavor mvapich2 %bcond_without hpc %endif %if "%{flavor}" == "gnu-mpich-hpc" %global compiler_family gnu %undefine c_f_ver %define mpi_flavor mpich %bcond_without hpc %endif %if "%{flavor}" == "gnu7-hpc" %global compiler_family gnu %define c_f_ver 7 %undefine mpi_flavor %bcond_without hpc %endif %if "%{flavor}" == "gnu7-openmpi4-hpc" %{?DisOMPI4} %global compiler_family gnu %define c_f_ver 7 %define mpi_flavor openmpi %define mpi_ver 4 %bcond_without hpc %endif %if "%{flavor}" == "gnu7-openmpi5-hpc" %{?DisOMPI5} %global compiler_family gnu %define c_f_ver 7 %define mpi_flavor openmpi %define mpi_ver 5 %bcond_without hpc %endif %if "%{flavor}" == "gnu7-mvapich2-hpc" %global compiler_family gnu %define c_f_ver 7 %define mpi_flavor mvapich2 %bcond_without hpc %endif %if "%{flavor}" == "gnu7-mpich-hpc" %global compiler_family gnu %define c_f_ver 7 %define mpi_flavor mpich %bcond_without hpc %endif %if "%{flavor}" == "gnu8-hpc" %global compiler_family gnu %define c_f_ver 8 %undefine mpi_flavor %bcond_without hpc %endif %if "%{flavor}" == "gnu8-openmpi4-hpc" %{?DisOMPI4} %global compiler_family gnu %define c_f_ver 8 %define mpi_flavor openmpi %define mpi_ver 4 %bcond_without hpc %endif %if "%{flavor}" == "gnu8-openmpi5-hpc" %{?DisOMPI5} %global compiler_family gnu %define c_f_ver 8 %define mpi_flavor openmpi %define mpi_ver 5 %bcond_without hpc %endif %if "%{flavor}" == "gnu8-mvapich2-hpc" %global compiler_family gnu %define c_f_ver 8 %define mpi_flavor mvapich2 %bcond_without hpc %endif %if "%{flavor}" == "gnu8-mpich-hpc" %global compiler_family gnu %define c_f_ver 8 %define mpi_flavor mpich %bcond_without hpc %endif %if "%{flavor}" == "gnu9-hpc" %global compiler_family gnu %define c_f_ver 9 %undefine mpi_flavor %bcond_without hpc %endif %if "%{flavor}" == "gnu9-openmpi4-hpc" %{?DisOMPI4} %global compiler_family gnu %define c_f_ver 9 %define mpi_flavor openmpi %define mpi_ver 4 %bcond_without hpc %endif %if "%{flavor}" == "gnu9-openmpi5-hpc" %{?DisOMPI5} %global compiler_family gnu %define c_f_ver 9 %define mpi_flavor openmpi %define mpi_ver 5 %bcond_without hpc %endif %if "%{flavor}" == "gnu9-mvapich2-hpc" %global compiler_family gnu %define c_f_ver 9 %define mpi_flavor mvapich2 %bcond_without hpc %endif %if "%{flavor}" == "gnu9-mpich-hpc" %global compiler_family gnu %define c_f_ver 9 %define mpi_flavor mpich %bcond_without hpc %endif %if "%{flavor}" == "gnu10-hpc" %global compiler_family gnu %define c_f_ver 10 %undefine mpi_flavor %bcond_without hpc %endif %if "%{flavor}" == "gnu10-openmpi4-hpc" %{?DisOMPI4} %global compiler_family gnu %define c_f_ver 10 %define mpi_flavor openmpi %define mpi_ver 4 %bcond_without hpc %endif %if "%{flavor}" == "gnu10-openmpi5-hpc" %{?DisOMPI5} %global compiler_family gnu %define c_f_ver 10 %define mpi_flavor openmpi %define mpi_ver 5 %bcond_without hpc %endif %if "%{flavor}" == "gnu10-mvapich2-hpc" %global compiler_family gnu %define c_f_ver 10 %define mpi_flavor mvapich2 %bcond_without hpc %endif %if "%{flavor}" == "gnu10-mpich-hpc" %global compiler_family gnu %define c_f_ver 10 %define mpi_flavor mpich %bcond_without hpc %endif %if "%{flavor}" == "gnu11-openmpi4-hpc" %{?DisOMPI4} %global compiler_family gnu %define c_f_ver 11 %define mpi_flavor openmpi %define mpi_ver 4 %bcond_without hpc %endif %if "%{flavor}" == "gnu11-openmpi5-hpc" %{?DisOMPI5} %global compiler_family gnu %define c_f_ver 11 %define mpi_flavor openmpi %define mpi_ver 5 %bcond_without hpc %endif %if "%{flavor}" == "gnu11-mvapich2-hpc" %global compiler_family gnu %define c_f_ver 11 %define mpi_flavor mvapich2 %bcond_without hpc %endif %if "%{flavor}" == "gnu11-mpich-hpc" %global compiler_family gnu %define c_f_ver 11 %define mpi_flavor mpich %bcond_without hpc %endif %if "%{flavor}" == "mvapich2" %define mpi_flavor mvapich2 %bcond_with hpc %endif %if "%{flavor}" == "openmpi4" %{?DisOMPI4} %define mpi_flavor openmpi %define mpi_ver 4 %bcond_with hpc %endif %if "%{flavor}" == "openmpi5" %{?DisOMPI5} %define mpi_flavor openmpi %define mpi_ver 5 %bcond_with hpc %endif %{?mpi_flavor:%{bcond_without mpi}}%{!?mpi_flavor:%{bcond_with mpi}} %{?with_hpc:%{!?compiler_family:%global compiler_family gnu}} %{?with_mpi:%{!?mpi_flavor:error "No MPI family specified!"}} # openmpi 1 was called just "openmpi" in Leap 15.x/SLE15 %if 0%{?suse_version} >= 1550 || "%{mpi_flavor}" != "openmpi" || "%{mpi_ver}" != "1" %define mpi_ext %{?mpi_ver} %endif %if %{with hpc} ExcludeArch: %ix86 %{hpc_init -c %compiler_family %{?c_f_ver:-v %{c_f_ver}} %{?with_mpi:-m {%mpi_flavor}} %{?mpi_ver:-V %{mpi_ver}} %{?ext:-e %{ext}}} %define package_name %{hpc_package_name %_ver} %define libname(s:) lib%{pname}%{hpc_package_name_tail %_ver} %define p_prefix %hpc_prefix %define p_bindir %hpc_bindir %define p_libdir %hpc_libdir %define p_mandir %hpc_mandir %define p_includedir %hpc_includedir %else %define package_name %{pname}%{p_suffix} %define libname(s:) lib%{pname}%{-s*}%{?p_suffix} %if %{without mpi} %define p_prefix %_prefix %define p_bindir %_bindir %define p_libdir %_libdir %define p_mandir %_mandir %define p_includedir %_includedir %else %define p_prefix /usr/%{_lib}/mpi/gcc/%{mpi_flavor}%{?mpi_ext} %define p_bindir %{p_prefix}/bin %define p_libdir %{p_prefix}/%{_lib} %define p_mandir %{p_prefix}/share/man %define p_includedir %{p_prefix}/include %endif %endif %define p_suffix %{?with_mpi:-%{mpi_flavor}%{?mpi_ext}} %define hdf5_module_file %{?with_mpi:p}hdf5 %define purpose_compiler %{?nil:%{!?with_hpc:.} %{?with_hpc:built for the %{compiler_family} compiler%{?c_f_ver: version %c_f_ver}.} } %define purpose() This package contains %{?with_mpi:the %{mpi_flavor}%{?mpi_ver} version of }%{**}%{purpose_compiler} %if %{with valgrind_checks} %ifnarch %ix86 x86_64 ppc ppc64 s390x armv7l aarch64 %{error: Vagrind not support on this platform!} %else %define valgrind_checks 1 %endif %endif Name: %{package_name} Summary: Command-line programs for the NetCDF scientific data format License: NetCDF Group: Productivity/Scientific/Other Version: %ver Release: 0 URL: https://www.unidata.ucar.edu/software/netcdf/ Source: https://downloads.unidata.ucar.edu/netcdf-c/%{version}/%{pname}-c-%{version}.tar.gz Source1: nc-config.1.gz Patch6: parseServers-Fix-uninitialized-variable-simplify-error-path.patch Patch8: val_NC_check_voff-Fix-uninitialized-variable-warning.patch Patch9: pr_att-Fix-uninitialized-variable.patch Patch10: NCD4_dumpbytes-Add-missing-initialization-of-float-types.patch Patch11: NCZ_def_var_chunking-make-sure-cs-is-set-before-used.patch Patch12: Fix-spurious-uninitialized-variable-warning.patch BuildRequires: autoconf BuildRequires: automake BuildRequires: gawk BuildRequires: libcurl-devel >= 7.18.0 BuildRequires: libtool BuildRequires: pkg-config BuildRequires: unzip BuildRequires: zlib-devel >= 1.2.5 BuildRequires: pkgconfig(libxml-2.0) BuildRequires: pkgconfig(libzstd) %if 0%{?valgrind_checks} BuildRequires: valgrind %endif %if %{without hpc} BuildRequires: gcc-c++ BuildRequires: gcc-fortran BuildRequires: hdf5%{p_suffix}-devel BuildRequires: libhdf5_hl%{p_suffix} %if %{with mpi} BuildRequires: %{mpi_flavor}%{?mpi_ext}-devel %endif %else BuildRequires: %{compiler_family}%{?c_f_ver}-compilers-hpc-macros-devel BuildRequires: hdf5-%{compiler_family}%{?c_f_ver}%{?with_mpi:-%{mpi_flavor}%{?mpi_ver}}-hpc-devel # Install libhdf5*--hpc explicitly for %%requires_eq: BuildRequires: libhdf5-%{compiler_family}%{?c_f_ver}%{?with_mpi:-%{mpi_flavor}%{?mpi_ver}}-hpc BuildRequires: libhdf5_hl-%{compiler_family}%{?c_f_ver}%{?with_mpi:-%{mpi_flavor}%{?mpi_ver}}-hpc BuildRequires: lua-lmod BuildRequires: suse-hpc %if %{with mpi} BuildRequires: %{mpi_flavor}%{?mpi_ver}-%{compiler_family}%{?c_f_ver}-hpc-macros-devel %endif %endif Requires: %{libname -s %{sonum}} = %{version} %description NetCDF is a set of software libraries and self-describing, machine-independent data formats that support the creation, access, and sharing of array-oriented scientific data. %{purpose utility functions for working with NetCDF files} %{?with_hpc:%{hpc_master_package}} %package -n %{libname -s %{sonum}} Summary: Shared libraries for the NetCDF scientific data format Group: Productivity/Scientific/Other %if %{without hpc} # To avoid unresolvable errors due to multiple providers of the library %{requires_eq \--whatprovides libhdf5%{p_suffix}} %{requires_eq \--whatprovides libhdf5_hl%{p_suffix}} %else %{hpc_requires} %{requires_eq libhdf5%{hpc_package_name_tail}} %{requires_eq libhdf5_hl%{hpc_package_name_tail}} %endif %description -n %{libname -s %{sonum}} NetCDF is a set of software libraries and self-describing, machine-independent data formats that support the creation, access, and sharing of array-oriented scientific data. NetCDF (network Common Data Form) is an interface for array-oriented data access and a collection of software libraries for C, Fortran, C++, and Perl that provides an implementation of the interface. The NetCDF library also defines a machine-independent format for representing scientific data. Together, the interface, library, and format support the creation, access, and sharing of scientific data. NetCDF data is: - Self-Describing: A NetCDF file includes information about the data it contains. - Network-transparent: A NetCDF file is represented in a form that can be accessed by computers with different ways of storing integers, characters, and floating-point numbers. - Direct-access: A small subset of a large dataset may be accessed efficiently, without first reading through all the preceding data. - Appendable: Data can be appended to a NetCDF dataset along one dimension without copying the dataset or redefining its structure. The structure of a NetCDF dataset can be changed, though this sometimes causes the dataset to be copied. - Sharable: One writer and multiple readers may simultaneously access the same NetCDF file. %{purpose the NetCDF runtime libraries} %{?with_hpc:%{hpc_master_package -L -l}} %package devel-data Summary: Development data files for %{name} Group: Development/Libraries/C and C++ Provides: %{pname}-rpm-macros = %version Conflicts: otherproviders(%{pname}-rpm-macros) %description devel-data NetCDF is a set of software libraries and self-describing, machine-independent data formats that support the creation, access, and sharing of array-oriented scientific data. This package contains generic files needed to create projects that use any version of NetCDF. %package devel Summary: Development files for %{name} Group: Development/Libraries/C and C++ Requires: %{libname -s %{sonum}} = %{version} %{!?with_hpc:Requires: %{pname}-devel-data = %{version}} Requires: libcurl-devel >= 7.18.0 Requires: pkgconfig Requires: zlib-devel >= 1.2.5 %if %{without hpc} %{requires_eq hdf5%{p_suffix}-devel} %{?with_mpi:Requires: %{mpi_flavor}%{?mpi_ext}-devel} %else %{hpc_requires_devel} %{requires_eq hdf5%{hpc_package_name_tail}-devel} %endif %description devel NetCDF is a set of software libraries and self-describing, machine-independent data formats that support the creation, access, and sharing of array-oriented scientific data. %{purpose all files needed to create projects that use NetCDF} %{?with_hpc:%{hpc_master_package devel}} %package devel-static Summary: Static development files for %{name} Group: Development/Libraries/C and C++ %if %{without hpc} %{requires_eq hdf5%{p_suffix}-devel} %else Requires: %{name}-devel = %{version} %endif Requires: libcurl-devel >= 7.18.0 Requires: zlib-devel >= 1.2.5 %description devel-static NetCDF is a set of software libraries and self-describing, machine-independent data formats that support the creation, access, and sharing of array-oriented scientific data. %{purpose the static libraries for NetCDF} %prep %{?with_hpc:%hpc_debug} %setup -q -n %{pname}-c-%{version} %autopatch -p1 # Create baselib.conf dynamically (non-HPC build only). %if %{without hpc} cat > %{_sourcedir}/baselibs.conf < %{buildroot}%{_rpmmacrodir}/macros.netcdf < %{buildroot}%{_datadir}/modules/%{pname}-%{mpi_flavor}%{?mpi_ext}/%version #%%Module proc ModulesHelp { } { global dotversion puts stderr "\tLoads the %{pname}-%{mpi_flavor} %version Environment" } module-whatis "Loads the %{pname}-%{mpi_flavor} %version Environment." prepend-path PATH %{p_bindir} prepend-path MANPATH %{p_mandir} prepend-path LD_LIBRARY_PATH %{p_libdir} prepend-path LIBRARY_PATH %{p_libdir} prepend-path CPATH %{p_includedir} prepend-path C_INCLUDE_PATH %{p_includedir} prepend-path CPLUS_INCLUDE_PATH %{p_includedir} EOF %endif %else %hpc_write_modules_files #%%Module1.0##################################################################### proc ModulesHelp { } { puts stderr " " puts stderr "This module loads the NetCDF C API built with the %{compiler_family} compiler" puts stderr "toolchain and the %{mpi_flavor}%{?mpi_ver} MPI stack." puts stderr " " puts stderr "Note that this build of NetCDF leverages the HDF I/O library and requires linkage" puts stderr "against hdf5. Consequently, the phdf5 package is loaded automatically with this module." puts stderr "A typical compilation step for C applications requiring NetCDF is as follows:" puts stderr " " puts stderr "\\\$CC -I\\\$NETCDF_INC app.c -L\\\$NETCDF_LIB -lnetcdf -L\\\$HDF5_LIB -lhdf5" puts stderr "\nVersion %{version}\n" } module-whatis "Name: %{hpc_upcase %pname} built with %{compiler_family} toolchain" module-whatis "Version: %{version}" module-whatis "Category: runtime library" module-whatis "Description: %{SUMMARY:0}" module-whatis "%{url}" set version %{version} # Require phdf5 if [ expr [ module-info mode load ] || [module-info mode display ] ] { if { ![is-loaded %{hdf5_module_file}] } { module load %{hdf5_module_file} } } prepend-path PATH %{hpc_bindir} prepend-path MANPATH %{hpc_mandir} prepend-path LD_LIBRARY_PATH %{hpc_libdir} setenv %{hpc_upcase %pname}_DIR %{hpc_prefix} setenv %{hpc_upcase %pname}_BIN %{hpc_bindir} 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} %hpc_modulefile_add_pkgconfig_path setenv %{hpc_upcase %pname}_LIB %{hpc_libdir} setenv %{hpc_upcase %pname}_INC %{hpc_includedir} } EOF %endif %if 0%{?_do_check} %check %if %{with hpc} %{hpc_setup} module load %{hdf5_module_file} %else %if %{with mpi} . /usr/%_lib/mpi/gcc/%{mpi_flavor}%{?mpi_ext}/bin/mpivars.sh %endif %endif %ifarch ppc64 s390x %ix86 # tst_netcdf4_4 fails on ix86 - https://github.com/Unidata/netcdf-c/issues/2433 make check || { echo -e "WARNING: ignore check error for ppc64/s390x/ix86"; } %else make check %endif %if 0%{?valgrind_checks} make check-valgrind %endif %endif %if %{with hpc} || %{with mpi} %define ldconfig_args -N %p_libdir %endif %post -n %{libname -s %{sonum}} /sbin/ldconfig %{?ldconfig_args} %postun -n %{libname -s %{sonum}} /sbin/ldconfig %{?ldconfig_args} %{?with_hpc:%hpc_module_delete_if_default} %files %license COPYRIGHT %doc README.md RELEASE_NOTES.md %{?with_hpc:%dir %hpc_datadir} %{?with_hpc:%dir %p_mandir} %{p_bindir}%{!?with_hpc:/*} %exclude %{p_bindir}/nc-config %if "%{flavor}" != "serial" %dir %{p_mandir}/man1 %endif %{p_mandir}/man1/* %files -n %{libname -s %{sonum}} %if %{with hpc} %hpc_dirs %hpc_modules_files %else %if %{with mpi} %dir %{_datadir}/modules %{_datadir}/modules/%{pname}-%{mpi_flavor}%{?mpi_ext} %endif %endif %{p_libdir}/libnetcdf.so.%{sonum}* %if %{without mpi} && %{without hpc} %files devel-data %{_rpmmacrodir}/macros.netcdf %endif %files devel %{p_bindir}/nc-config %{p_includedir}%{!?with_hpc:/*} %{p_libdir}/*.so %{?with_hpc:%hpc_pkgconfig_file} %{p_libdir}/pkgconfig/netcdf.pc %if "%{flavor}" != "serial" %dir %{p_mandir}/man3 %endif %{p_mandir}/man3/* %{p_libdir}/libnetcdf.settings %files devel-static %{p_libdir}/libnetcdf.a %changelog