Blob Blame History Raw
Name:           netcdf-cxx4
Version:        4.2
Release:        4%{?dist}
Summary:        NetCDF-4 C++ library

Group:          Applications/Engineering
License:        NetCDF
URL:            http://www.unidata.ucar.edu/software/netcdf/
Source0:        http://www.unidata.ucar.edu/downloads/netcdf/ftp/netcdf-cxx4-%{version}.tar.gz
BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)

BuildRequires:  netcdf-devel
#mpiexec segfaults if ssh is not present
#https://trac.mcs.anl.gov/projects/mpich2/ticket/1576
BuildRequires:  openssh-clients

%global with_mpich2 1
%global with_openmpi 1
%if 0%{?rhel}
%ifarch ppc64
# No mpich2 on ppc64 in EL
%global with_mpich2 0
%endif
%endif
%ifarch s390 s390x
# No openmpi on s390(x)
%global with_openmpi 0
%endif

%if %{with_mpich2}
%global mpi_list mpich2
%endif
%if %{with_openmpi}
%global mpi_list %{?mpi_list} openmpi
%endif

%description
netCDF-4 C++ library.


%package devel
Summary:        Development files for netCDF-4 C++ API
Group:          Development/Libraries
Requires:       %{name}%{?_isa} = %{version}-%{release}
Requires:       pkgconfig
Requires:       netcdf-devel%{?_isa}

%description devel
Development files for netCDF-4 C++ API.


%package static
Summary:        Static library for netCDF-4 C++ API
Group:          Development/Libraries
Requires:       %{name}-devel%{?_isa} = %{version}-%{release}

%description static
Static library for netCDF-4 C++ API.


%if %{with_mpich2}
%package mpich2
Summary: NetCDF mpich2 libraries
Group: Development/Libraries
Requires: mpich2
BuildRequires: mpich2-devel
BuildRequires: netcdf-mpich2-devel

%description mpich2
NetCDF parallel mpich2 libraries


%package mpich2-devel
Summary: NetCDF mpich2 development files
Group: Development/Libraries
Requires: %{name}-mpich2%{?_isa} = %{version}-%{release}
Requires: mpich2
Requires: pkgconfig
Requires: netcdf-mpich2-devel
Requires: libcurl-devel

%description mpich2-devel
NetCDF parallel mpich2 development files


%package mpich2-static
Summary: NetCDF mpich2 static libraries
Group: Development/Libraries
Requires: %{name}-mpich2-devel%{?_isa} = %{version}-%{release}

%description mpich2-static
NetCDF parallel mpich2 static libraries
%endif


%if %{with_openmpi}
%package openmpi
Summary: NetCDF openmpi libraries
Group: Development/Libraries
Requires: openmpi
BuildRequires: openmpi-devel
BuildRequires: netcdf-openmpi-devel

%description openmpi
NetCDF parallel openmpi libraries


%package openmpi-devel
Summary: NetCDF openmpi development files
Group: Development/Libraries
Requires: %{name}-openmpi%{_isa} = %{version}-%{release}
Requires: openmpi-devel
Requires: pkgconfig
Requires: netcdf-openmpi-devel
Requires: libcurl-devel

%description openmpi-devel
NetCDF parallel openmpi development files


%package openmpi-static
Summary: NetCDF openmpi static libraries
Group: Development/Libraries
Requires: %{name}-openmpi-devel%{?_isa} = %{version}-%{release}

%description openmpi-static
NetCDF parallel openmpi static libraries
%endif


%prep
%setup -q
# Fix line endings
sed -i -e 's/\r//' examples/*.cpp


%build
#Do out of tree builds
%global _configure ../configure

# Serial build
mkdir build
pushd build
ln -s ../configure .
%configure
make %{?_smp_mflags}
popd

# MPI builds
export CC=mpicc
export CXX=mpicxx
for mpi in %{mpi_list}
do
  mkdir $mpi
  pushd $mpi
  module load $mpi-%{_arch}
  ln -s ../configure .
  %configure \
    --libdir=%{_libdir}/$mpi/lib \
    --bindir=%{_libdir}/$mpi/bin \
    --sbindir=%{_libdir}/$mpi/sbin \
    --includedir=%{_includedir}/$mpi-%{_arch} \
    --datarootdir=%{_libdir}/$mpi/share \
    --mandir=%{_libdir}/$mpi/share/man
  make %{?_smp_mflags}
  module purge
  popd
done


%install
make -C build install DESTDIR=${RPM_BUILD_ROOT}
/bin/rm ${RPM_BUILD_ROOT}%{_libdir}/*.la
for mpi in %{mpi_list}
do
  module load $mpi-%{_arch}
  make -C $mpi install DESTDIR=${RPM_BUILD_ROOT}
  rm $RPM_BUILD_ROOT/%{_libdir}/$mpi/lib/*.la
  module purge
done


%check
make -C build check
for mpi in mpich2 openmpi
do
  module load $mpi-%{_arch}
  make -C $mpi check
  module purge
done


%clean
rm -rf ${RPM_BUILD_ROOT}


%post -p /sbin/ldconfig

%postun -p /sbin/ldconfig


%files
%doc COPYRIGHT
%{_libdir}/libnetcdf_c++4.so.*

%files devel
%doc examples
%{_bindir}/ncxx4-config
%{_includedir}/*
%{_libdir}/libnetcdf_c++4.so
%{_libdir}/pkgconfig/netcdf-cxx4.pc

%files static
%{_libdir}/libnetcdf_c++4.a


%if %{with_mpich2}
%files mpich2
%doc COPYRIGHT
%{_libdir}/mpich2/lib/*.so.*

%files mpich2-devel
%{_libdir}/mpich2/bin/ncxx4-config
%{_includedir}/mpich2-%{_arch}/*
%{_libdir}/mpich2/lib/*.so
%{_libdir}/mpich2/lib/pkgconfig/%{name}.pc

%files mpich2-static
%{_libdir}/mpich2/lib/*.a
%endif

%if %{with_openmpi}
%files openmpi
%doc COPYRIGHT
%{_libdir}/openmpi/lib/*.so.*

%files openmpi-devel
%{_libdir}/openmpi/bin/ncxx4-config
%{_includedir}/openmpi-%{_arch}/*
%{_libdir}/openmpi/lib/*.so
%{_libdir}/openmpi/lib/pkgconfig/%{name}.pc

%files openmpi-static
%{_libdir}/openmpi/lib/*.a
%endif


%changelog
* Wed Mar 7 2012 Orion Poplawski <orion@cora.nwra.com> - 4.2-4
- Fix line endings

* Wed Mar 7 2012 Orion Poplawski <orion@cora.nwra.com> - 4.2-3
- Build parallel versions
- Ship examples with -devel

* Mon Oct 3 2011 Orion Poplawski <orion@cora.nwra.com> - 4.2-2
- Use %%{?_isa} in Requires
- Make -static sub-package require the -devel package

* Fri Sep 30 2011 Orion Poplawski <orion@cora.nwra.com> - 4.2-1
- Initial package