diff --git a/fftw.spec b/fftw.spec index dbe65f130f3bf80bbbfc28a19c320a3e156afa9d..49304d7d75862fe73b50fa65dd70dea2c5cf720f 100644 --- a/fftw.spec +++ b/fftw.spec @@ -1,12 +1,19 @@ +%define anolis_release 2 + +%ifarch x86_64 +%bcond_without quad +%else +%bcond_with quad +%endif %bcond_without mpich %bcond_without openmpi -%if %{with mpich} -%global mpi_list %{?mpi_list} mpich -%endif %if %{with openmpi} %global mpi_list %{?mpi_list} openmpi %endif - +%if %{with mpich} +%global mpi_list %{?mpi_list} mpich +%endif + Name: fftw Version: 3.3.10 Release: 1%{?dist} @@ -17,31 +24,19 @@ Source0: http://www.fftw.org/fftw-%{version}.tar.gz Patch1001: 1001-skip-mpi-check.patch -BuildRequires: gcc-gfortran - -%global quad 0 -# Quad precision support only available with gcc >= 4.6 (Fedora >= 15) -# and only on these arches -%ifarch x86_64 -%global quad 1 -%endif - -# For check phase -BuildRequires: time -BuildRequires: perl-interpreter -%if %{with mpich} -BuildRequires: mpich-devel -BuildRequires: nss-myhostname +BuildRequires: make gcc-gfortran +BuildRequires: time perl-interpreter +%if %{with mpich} || %{with openmpi} +BuildRequires: environment-modules %endif %if %{with openmpi} BuildRequires: openmpi-devel %endif -%if %{with mpich} || %{with openmpi} -BuildRequires: environment-modules +%if %{with mpich} +BuildRequires: mpich-devel +BuildRequires: nss-myhostname %endif -BuildRequires: make - - + %description FFTW is a C subroutine library for computing the Discrete Fourier Transform (DFT) in one or more dimensions, of both real and complex @@ -49,19 +44,16 @@ data, and of arbitrary input size. %package libs Summary: FFTW run-time library +%if %{with quad} +Requires: %{name}-libs-quad = %{version}-%{release} +%endif +Requires: %{name}-libs-long = %{version}-%{release} +Requires: %{name}-libs-single = %{version}-%{release} +Requires: %{name}-libs-double = %{version}-%{release} Provides: fftw3 = %{version}-%{release} -# Libs rearranged in 3.3.1-2 -Obsoletes: fftw-libs-threads < %{version}-%{release} Obsoletes: fftw-libs-openmp < %{version}-%{release} - -# Pull in the actual libraries -Requires: %{name}-libs-single%{?_isa} = %{version}-%{release} -Requires: %{name}-libs-double%{?_isa} = %{version}-%{release} -Requires: %{name}-libs-long%{?_isa} = %{version}-%{release} -%if %{quad} -Requires: %{name}-libs-quad%{?_isa} = %{version}-%{release} -%endif - +Obsoletes: fftw-libs-threads < %{version}-%{release} + %description libs This is a dummy package package, pulling in the individual FFTW run-time libraries. @@ -70,9 +62,8 @@ run-time libraries. %package devel Summary: Headers, libraries and docs for the FFTW library Requires: pkgconfig -Requires: %{name}%{?_isa} = %{version}-%{release} -Requires: %{name}-libs%{?_isa} = %{version}-%{release} -Provides: fftw3-devel%{?_isa} = %{version}-%{release} +Requires: %{name}-libs = %{version}-%{release} +Requires: %{name} = %{version}-%{release} Provides: fftw3-devel = %{version}-%{release} %description devel @@ -83,66 +74,61 @@ data, and of arbitrary input size. This package contains header files and development libraries needed to develop programs using the FFTW fast Fourier transform library. -%package libs-double -Summary: FFTW library, double precision - -%description libs-double -This package contains the FFTW library compiled in double precision. - -%package libs-single -Summary: FFTW library, single precision - -%description libs-single -This package contains the FFTW library compiled in single precision. - %package libs-long Summary: FFTW library, long double precision %description libs-long This package contains the FFTW library compiled in long double precision. + +%package libs-single +Summary: FFTW library, single precision -%if %{quad} -%package libs-quad -Summary: FFTW library, quadruple +%description libs-single +This package contains the FFTW library compiled in single precision. + +%package libs-double +Summary: FFTW library, double precision -%description libs-quad -This package contains the FFTW library compiled in quadruple -precision. -%endif +%description libs-double +This package contains the FFTW library compiled in double precision. %package static Summary: Static versions of the FFTW libraries -Requires: %{name}-devel%{?_isa} = %{version}-%{release} -Provides: fftw3-static%{?_isa} = %{version}-%{release} +Requires: %{name}-devel = %{version}-%{release} Provides: fftw3-static = %{version}-%{release} %description static The fftw-static package contains the statically linkable version of the FFTW fast Fourier transform library. + +%if %{with quad} +%package libs-quad +Summary: FFTW library, quadruple +%description libs-quad +This package contains the FFTW library compiled in quadruple +precision. +%endif + %if %{with mpich} %package mpich-libs Summary: FFTW MPICH run-time library +Requires: %{name}-mpich-libs-single = %{version}-%{release} +Requires: %{name}-mpich-libs-double = %{version}-%{release} +Requires: %{name}-mpich-libs-long = %{version}-%{release} Provides: fftw3-mpich = %{version}-%{release} - -# Pull in the actual libraries -Requires: %{name}-mpich-libs-single%{?_isa} = %{version}-%{release} -Requires: %{name}-mpich-libs-double%{?_isa} = %{version}-%{release} -Requires: %{name}-mpich-libs-long%{?_isa} = %{version}-%{release} - + %description mpich-libs This is a dummy package package, pulling in the individual FFTW MPICH run-time libraries. - - + %package mpich-devel Summary: Headers, libraries and docs for the FFTW MPICH library Requires: mpich-devel Requires: pkgconfig -Requires: %{name}-devel%{?_isa} = %{version}-%{release} -Requires: %{name}-mpich-libs%{?_isa} = %{version}-%{release} -Provides: fftw3-mpich-devel%{?_isa} = %{version}-%{release} +Requires: %{name}-devel = %{version}-%{release} +Requires: %{name}-mpich-libs = %{version}-%{release} Provides: fftw3-mpich-devel = %{version}-%{release} %description mpich-devel @@ -153,33 +139,32 @@ data, and of arbitrary input size. This package contains header files and development libraries needed to develop programs using the FFTW fast Fourier transform library for MPICH. -%package mpich-libs-double -Summary: FFTW MPICH library, double precision -Requires: %{name}-libs-double%{?_isa} = %{version}-%{release} - -%description mpich-libs-double -This package contains the FFTW MPICH library compiled in double precision. - -%package mpich-libs-single -Summary: FFTW MPICH library, single precision -Requires: %{name}-libs-single%{?_isa} = %{version}-%{release} - -%description mpich-libs-single -This package contains the FFTW MPICH library compiled in single precision. - %package mpich-libs-long Summary: FFTW MPICH library, long double precision -Requires: %{name}-libs-long%{?_isa} = %{version}-%{release} +Requires: %{name}-libs-long = %{version}-%{release} %description mpich-libs-long This package contains the FFTW MPICH library compiled in long double precision. + +%package mpich-libs-single +Summary: FFTW MPICH library, single precision +Requires: %{name}-libs-single = %{version}-%{release} + +%description mpich-libs-single +This package contains the FFTW MPICH library compiled in single precision. + +%package mpich-libs-double +Summary: FFTW MPICH library, double precision +Requires: %{name}-libs-double = %{version}-%{release} +%description mpich-libs-double +This package contains the FFTW MPICH library compiled in double precision. + %package mpich-static Summary: Static versions of the FFTW MPICH libraries -Requires: %{name}-mpich-devel%{?_isa} = %{version}-%{release} -Requires: %{name}-static%{?_isa} = %{version}-%{release} -Provides: fftw3-mpich-static%{?_isa} = %{version}-%{release} +Requires: %{name}-mpich-devel = %{version}-%{release} +Requires: %{name}-static = %{version}-%{release} Provides: fftw3-mpich-static = %{version}-%{release} %description mpich-static @@ -190,25 +175,21 @@ the FFTW fast Fourier transform library for MPICh. %if %{with openmpi} %package openmpi-libs Summary: FFTW OpenMPI run-time library +Requires: %{name}-openmpi-libs-single = %{version}-%{release} +Requires: %{name}-openmpi-libs-double = %{version}-%{release} +Requires: %{name}-openmpi-libs-long = %{version}-%{release} Provides: fftw3-openmpi = %{version}-%{release} -# Pull in the actual libraries -Requires: %{name}-openmpi-libs-single%{?_isa} = %{version}-%{release} -Requires: %{name}-openmpi-libs-double%{?_isa} = %{version}-%{release} -Requires: %{name}-openmpi-libs-long%{?_isa} = %{version}-%{release} - %description openmpi-libs This is a dummy package package, pulling in the individual FFTW OpenMPI run-time libraries. - %package openmpi-devel Summary: Headers, libraries and docs for the FFTW OpenMPI library Requires: openmpi-devel Requires: pkgconfig -Requires: %{name}-devel%{?_isa} = %{version}-%{release} -Requires: %{name}-openmpi-libs%{?_isa} = %{version}-%{release} -Provides: fftw3-openmpi-devel%{?_isa} = %{version}-%{release} +Requires: %{name}-devel = %{version}-%{release} +Requires: %{name}-openmpi-libs = %{version}-%{release} Provides: fftw3-openmpi-devel = %{version}-%{release} %description openmpi-devel @@ -218,41 +199,40 @@ data, and of arbitrary input size. This package contains header files and development libraries needed to develop programs using the FFTW fast Fourier transform library for OpenMPI. - -%package openmpi-libs-double -Summary: FFTW OpenMPI library, double precision -Requires: %{name}-libs-double%{?_isa} = %{version}-%{release} - -%description openmpi-libs-double -This package contains the FFTW OpenMPI library compiled in double precision. - -%package openmpi-libs-single -Summary: FFTW OpenMPI library, single precision -Requires: %{name}-libs-single%{?_isa} = %{version}-%{release} - -%description openmpi-libs-single -This package contains the FFTW OpenMPI library compiled in single precision. - -%package openmpi-libs-long -Summary: FFTW OpenMPI library, long double precision -Requires: %{name}-libs-long%{?_isa} = %{version}-%{release} - -%description openmpi-libs-long -This package contains the FFTW OpenMPI library compiled in long double -precision. - + %package openmpi-static Summary: Static versions of the FFTW OpenMPI libraries -Requires: %{name}-openmpi-devel%{?_isa} = %{version}-%{release} -Requires: %{name}-static%{?_isa} = %{version}-%{release} -Provides: fftw3-openmpi-static%{?_isa} = %{version}-%{release} +Requires: %{name}-openmpi-devel = %{version}-%{release} +Requires: %{name}-static = %{version}-%{release} Provides: fftw3-openmpi-static = %{version}-%{release} %description openmpi-static The fftw-openmpi-static package contains the statically linkable version of the FFTW fast Fourier transform library for MPICh. %endif + +%package openmpi-libs-long +Summary: FFTW OpenMPI library, long double precision +Requires: %{name}-libs-long = %{version}-%{release} +%description openmpi-libs-long +This package contains the FFTW OpenMPI library compiled in long double +precision. + +%package openmpi-libs-single +Summary: FFTW OpenMPI library, single precision +Requires: %{name}-libs-single = %{version}-%{release} + +%description openmpi-libs-single +This package contains the FFTW OpenMPI library compiled in single precision. + +%package openmpi-libs-double +Summary: FFTW OpenMPI library, double precision +Requires: %{name}-libs-double = %{version}-%{release} + +%description openmpi-libs-double +This package contains the FFTW OpenMPI library compiled in double precision. + %package doc Summary: FFTW library manual BuildArch: noarch @@ -262,41 +242,33 @@ This package contains the manual for the FFTW fast Fourier transform library. %prep -%setup -q -%patch1001 -p1 +%autosetup -p1 -n %{name}-%{version} %build -# Explicitly load shell support for the environment-modules package, used -# below via 'module' pseudo-command. . /etc/profile.d/modules.sh - -# Configure uses g77 by default, if present on system + export F77=gfortran - + BASEFLAGS="--enable-shared --disable-dependency-tracking --enable-threads" BASEFLAGS+=" --enable-openmp" - -# Precisions to build + prec_name[0]=single prec_name[1]=double prec_name[2]=long prec_name[3]=quad - -# Corresponding flags + prec_flags[0]=--enable-single prec_flags[1]=--enable-double prec_flags[2]=--enable-long-double prec_flags[3]=--enable-quad-precision - + %ifarch x86_64 -# Enable SSE2 and AVX support for x86_64 for ((i=0; i<2; i++)) ; do prec_flags[i]+=" --enable-sse2 --enable-avx" done %endif -# Loop over precisions -%if %{quad} +%if %{with quad} for ((iprec=0; iprec<4; iprec++)) ; do %else for ((iprec=0; iprec<3; iprec++)) ; do @@ -310,8 +282,7 @@ for ((iprec=0; iprec<3; iprec++)) ; do make %{?_smp_mflags} cd .. done - -# MPI Builds - this duplicates the non-mpi builds, but oh well + for mpi in %{mpi_list} ; do module load mpi/${mpi}-%{_arch} # Loop over precisions - no quad precision support with MPI @@ -336,19 +307,16 @@ for mpi in %{mpi_list} ; do done %install -# Explicitly load shell support for the environment-modules package, used -# below via 'module' pseudo-command. source /etc/profile.d/modules.sh -%if %{quad} +%if %{with quad} for ver in single double long quad ; do %else for ver in single double long ; do %endif make -C $ver install DESTDIR=%{buildroot} done - -# MPI + for mpi in %{mpi_list} ; do module load mpi/${mpi}-%{_arch} for ver in single double long ; do @@ -359,17 +327,17 @@ for mpi in %{mpi_list} ; do done module unload mpi/${mpi}-%{_arch} done - + rm -f %{buildroot}%{_infodir}/dir find %{buildroot} -name \*.la -delete - + %check # Explicitly load shell support for the environment-modules package, used # below via 'module' pseudo-command. . /etc/profile.d/modules.sh - + bdir=$(pwd) -%if %{quad} +%if %{with quad} for ver in single double long quad ; do %else for ver in single double long ; do @@ -391,7 +359,7 @@ done %ldconfig_scriptlets libs-single %ldconfig_scriptlets libs-double %ldconfig_scriptlets libs-long -%if %{quad} +%if %{with quad} %ldconfig_scriptlets libs-quad %endif @@ -422,7 +390,7 @@ done %{_libdir}/libfftw3l_threads.so.* %{_libdir}/libfftw3l_omp.so.* -%if %{quad} +%if %{with quad} %files libs-quad %license COPYING COPYRIGHT %doc AUTHORS ChangeLog NEWS README* TODO @@ -507,5 +475,8 @@ done %endif %changelog +* Sat Apr 15 2023 Guyu Wang - 3.3.10-2 +- Optimise spec file + * Tue May 10 2022 gaochang - 3.3.10-1 - Init from upstream version 3.3.10