#
# Conditional build:
-%bcond_without fftwl # don't build "long" subpackages
+%bcond_without fftwl # "long" subpackages
+%bcond_without fftwq # "quad" subpackages
+%bcond_without gomp # OpenMP support
#
Summary: Fast Fourier Transform library
Summary(pl.UTF-8): Biblioteka z funkcjami szybkiej transformaty Fouriera
Summary(pt_BR.UTF-8): biblioteca fast fourier transform
Name: fftw3
-Version: 3.2.2
+Version: 3.3
Release: 1
License: GPL v2+
Group: Libraries
Source0: ftp://ftp.fftw.org/pub/fftw/fftw-%{version}.tar.gz
-# Source0-md5: b616e5c91218cc778b5aa735fefb61ae
+# Source0-md5: 0728ab3ec0ebb06631ab3b80a5c3d130
Patch0: %{name}-info.patch
Patch1: %{name}-link.patch
-Patch2: %{name}-ac_simd.patch
URL: http://www.fftw.org/
BuildRequires: autoconf
BuildRequires: automake
+BuildRequires: gcc-fortran
%ifarch alpha ppc s390 s390x sparc sparcv9
%if %{with fftwl}
# for 128-bit long double support
BuildRequires: glibc >= 6:2.4-1
%endif
%endif
+%if %{with fftwq}
+BuildRequires: gcc >= 6:4.6.0
+BuildRequires: libquadmath-devel
+%endif
+%if %{with gomp}
+BuildRequires: gcc >= 6:4.2.0
+BuildRequires: libgomp-devel
+%endif
BuildRequires: libtool
BuildRequires: texinfo
Requires: %{name}-common = %{version}-%{release}
BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
+%define builds single double %{?with_fftwl:long-double} %{?with_fftwq:quad-precision}
+
%description
FFTW is a collection of fast C routines for computing the Discrete
Fourier Transform in one or more dimensions. It includes complex,
Group: Development/Libraries
Requires: %{name} = %{version}-%{release}
Requires: %{name}-common-devel = %{version}-%{release}
+%{?with_gomp:Requires: libgomp-devel}
%description devel
This package contains the files you need to develop programs using the
Group: Development/Libraries
Requires: %{name}-common-devel = %{version}-%{release}
Requires: %{name}-single = %{version}-%{release}
+%{?with_gomp:Requires: libgomp-devel}
%description single-devel
This package contains the files you need to develop programs using the
%description single-devel -l pl.UTF-8
Ten pakiet zawiera pliki potrzebne do tworzenia programów używających
-biblioteki FFTW pojedynczej precyzji (wykonującej szybką transformatę
-Fouriera).
+biblioteki FFTW (wykonującej szybką transformatę Fouriera) pojedynczej
+precyzji.
%package single-static
Summary: Static fftw single precision libraries
Group: Development/Libraries
Requires: %{name}-common-devel = %{version}-%{release}
Requires: %{name}-long = %{version}-%{release}
+%{?with_gomp:Requires: libgomp-devel}
%description long-devel
This package contains the files you need to develop programs using the
%description long-devel -l pl.UTF-8
Ten pakiet zawiera pliki potrzebne do tworzenia programów używających
-biblioteki FFTW rozszerzonej precyzji (wykonującej szybką transformatę
-Fouriera).
+biblioteki FFTW (wykonującej szybką transformatę Fouriera)
+rozszerzonej precyzji.
%package long-static
Summary: Static fftw long double precision libraries
%description long-static -l pl.UTF-8
Statyczne biblioteki fftw rozszerzonej precyzji.
+%package quad
+Summary: Fast Fourier Transform library - quad precision
+Summary(pl.UTF-8): Biblioteka z funkcjami szybkiej transformaty Fouriera - poczwórnej precyzji
+Group: Libraries
+Requires: %{name}-common = %{version}-%{release}
+
+%description quad
+FFTW is a collection of fast C routines for computing the Discrete
+Fourier Transform in one or more dimensions. It includes complex,
+real, and parallel transforms, and can handle arbitrary array sizes
+efficiently. This RPM package includes the quad precision FFTW
+uniprocessor and threads libraries.
+
+%description quad -l pl.UTF-8
+FFTW jest zbiorem szybkich funkcji C do obliczania dyskretnych
+transformat Fouriera w jednym lub więcej wymiarach. Zawiera również
+zespolone, rzeczywiste oraz równoległe transformaty i potrafi wydajnie
+radzić sobie z tablicami o dowolnych rozmiarach. Ten pakiet RPM
+zawiera wersje FFTW o poczwórnej precyzji dla architektur
+jednoprocesorowych oraz z obsługą wątków.
+
+%package quad-devel
+Summary: Development files for quad precision fftw
+Summary(pl.UTF-8): Pliki programistyczne do fftw poczwórnej precyzji
+Group: Development/Libraries
+Requires: %{name}-common-devel = %{version}-%{release}
+Requires: %{name}-quad = %{version}-%{release}
+%{?with_gomp:Requires: libgomp-devel}
+Requires: libquadmath-devel
+
+%description quad-devel
+This package contains the files you need to develop programs using the
+quad precision FFTW (fast fourier transform library).
+
+%description quad-devel -l pl.UTF-8
+Ten pakiet zawiera pliki potrzebne do tworzenia programów używających
+biblioteki FFTW (wykonującej szybką transformatę Fouriera) poczwórnej
+precyzji.
+
+%package quad-static
+Summary: Static fftw quad precision libraries
+Summary(pl.UTF-8): Statyczne biblioteki fftw poczwórnej precyzji
+Group: Development/Libraries
+Requires: %{name}-quad-devel = %{version}-%{release}
+
+%description quad-static
+Static fftw quad precision libraries.
+
+%description quad-static -l pl.UTF-8
+Statyczne biblioteki fftw poczwórnej precyzji.
+
%package common
Summary: Files common for all versions of fftw libraries
Summary(pl.UTF-8): Pliki wspólne dla wszystkich wersji bibliotek fftw
%setup -q -n fftw-%{version}
%patch0 -p1
%patch1 -p1
-%patch2 -p1
%build
%{__libtoolize}
%{__automake}
# MMX/SSE/etc. seem to be safe because of runtime CPU detection
-for ver in single double %{?with_fftwl:long-double}; do
+for ver in %{builds}; do
OPTS=""
# k7,SSE,3dnow,altivec only for single
if [ "$ver" = "single" ]; then
-%ifarch i686
+%ifarch i686 pentium3 pentium4
OPTS="--enable-sse"
%endif
%ifarch athlon
: # keep sh happy about syntax
%endif
fi
-%ifarch i686
+%ifarch i686 pentium4
# SSE2 only for double
- if [ "$ver" = "double" ]; then
- OPTS="--enable-sse2"
+ if [ "$ver" = "double" -o "$ver" = "single" ]; then
+ OPTS="--enable-sse2 --enable-avx"
fi
%endif
install -d build-${ver}
cd build-${ver}
../%configure \
+ --enable-openmp \
--enable-shared \
--enable-threads \
--enable-$ver \
rm -rf $RPM_BUILD_ROOT
install -d $RPM_BUILD_ROOT%{_sysconfdir}/fftw
-%{__make} install -C build-single \
- DESTDIR=$RPM_BUILD_ROOT
-
-%{__make} install -C build-double \
- DESTDIR=$RPM_BUILD_ROOT
-
-%if %{with fftwl}
-%{__make} install -C build-long-double \
- DESTDIR=$RPM_BUILD_ROOT
-%endif
+for b in %{builds} ; do
+ %{__make} install -C build-${b} \
+ DESTDIR=$RPM_BUILD_ROOT
+done
%clean
rm -rf $RPM_BUILD_ROOT
%attr(755,root,root) %ghost %{_libdir}/libfftw3.so.3
%attr(755,root,root) %{_libdir}/libfftw3_threads.so.*.*.*
%attr(755,root,root) %ghost %{_libdir}/libfftw3_threads.so.3
+%if %{with gomp}
+%attr(755,root,root) %{_libdir}/libfftw3_omp.so.*.*.*
+%attr(755,root,root) %ghost %{_libdir}/libfftw3_omp.so.3
+%endif
%{_mandir}/man1/fftw-wisdom.1*
%files devel
%attr(755,root,root) %{_libdir}/libfftw3_threads.so
%{_libdir}/libfftw3.la
%{_libdir}/libfftw3_threads.la
+%if %{with gomp}
+%attr(755,root,root) %{_libdir}/libfftw3_omp.so
+%{_libdir}/libfftw3_omp.la
+%endif
%{_pkgconfigdir}/fftw3.pc
%files static
%defattr(644,root,root,755)
%{_libdir}/libfftw3.a
%{_libdir}/libfftw3_threads.a
+%if %{with gomp}
+%{_libdir}/libfftw3_omp.a
+%endif
%files single
%defattr(644,root,root,755)
%attr(755,root,root) %ghost %{_libdir}/libfftw3f.so.3
%attr(755,root,root) %{_libdir}/libfftw3f_threads.so.*.*.*
%attr(755,root,root) %ghost %{_libdir}/libfftw3f_threads.so.3
+%if %{with gomp}
+%attr(755,root,root) %{_libdir}/libfftw3f_omp.so.*.*.*
+%attr(755,root,root) %ghost %{_libdir}/libfftw3f_omp.so.3
+%endif
%{_mandir}/man1/fftwf-wisdom.1*
%files single-devel
%attr(755,root,root) %{_libdir}/libfftw3f_threads.so
%{_libdir}/libfftw3f.la
%{_libdir}/libfftw3f_threads.la
+%if %{with gomp}
+%attr(755,root,root) %{_libdir}/libfftw3f_omp.so
+%{_libdir}/libfftw3f_omp.la
+%endif
%{_pkgconfigdir}/fftw3f.pc
%files single-static
%defattr(644,root,root,755)
%{_libdir}/libfftw3f.a
%{_libdir}/libfftw3f_threads.a
+%if %{with gomp}
+%{_libdir}/libfftw3f_omp.a
+%endif
%if %{with fftwl}
%files long
%attr(755,root,root) %ghost %{_libdir}/libfftw3l.so.3
%attr(755,root,root) %{_libdir}/libfftw3l_threads.so.*.*.*
%attr(755,root,root) %ghost %{_libdir}/libfftw3l_threads.so.3
+%if %{with gomp}
+%attr(755,root,root) %{_libdir}/libfftw3l_omp.so.*.*.*
+%attr(755,root,root) %ghost %{_libdir}/libfftw3l_omp.so.3
+%endif
%{_mandir}/man1/fftwl-wisdom.1*
%files long-devel
%attr(755,root,root) %{_libdir}/libfftw3l_threads.so
%{_libdir}/libfftw3l.la
%{_libdir}/libfftw3l_threads.la
+%if %{with gomp}
+%attr(755,root,root) %{_libdir}/libfftw3l_omp.so
+%{_libdir}/libfftw3l_omp.la
+%endif
%{_pkgconfigdir}/fftw3l.pc
%files long-static
%defattr(644,root,root,755)
%{_libdir}/libfftw3l.a
%{_libdir}/libfftw3l_threads.a
+%if %{with gomp}
+%{_libdir}/libfftw3l_omp.a
+%endif
+%endif
+
+%if %{with fftwq}
+%files quad
+%defattr(644,root,root,755)
+%attr(755,root,root) %{_bindir}/fftwq-wisdom
+%attr(755,root,root) %{_libdir}/libfftw3q.so.*.*.*
+%attr(755,root,root) %ghost %{_libdir}/libfftw3q.so.3
+%attr(755,root,root) %{_libdir}/libfftw3q_threads.so.*.*.*
+%attr(755,root,root) %ghost %{_libdir}/libfftw3q_threads.so.3
+%if %{with gomp}
+%attr(755,root,root) %{_libdir}/libfftw3q_omp.so.*.*.*
+%attr(755,root,root) %ghost %{_libdir}/libfftw3q_omp.so.3
+%endif
+%{_mandir}/man1/fftwq-wisdom.1*
+
+%files quad-devel
+%defattr(644,root,root,755)
+%attr(755,root,root) %{_libdir}/libfftw3q.so
+%attr(755,root,root) %{_libdir}/libfftw3q_threads.so
+%{_libdir}/libfftw3q.la
+%{_libdir}/libfftw3q_threads.la
+%if %{with gomp}
+%attr(755,root,root) %{_libdir}/libfftw3q_omp.so
+%{_libdir}/libfftw3q_omp.la
+%endif
+%{_pkgconfigdir}/fftw3q.pc
+
+%files quad-static
+%defattr(644,root,root,755)
+%{_libdir}/libfftw3q.a
+%{_libdir}/libfftw3q_threads.a
+%if %{with gomp}
+%{_libdir}/libfftw3q_omp.a
+%endif
%endif
%files common
%defattr(644,root,root,755)
%doc doc/html doc/FAQ/fftw-faq.html
%{_includedir}/fftw3.f
+%{_includedir}/fftw3.f03
%{_includedir}/fftw3.h
%{_infodir}/fftw3.info*