summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'sci-libs/fftw/fftw-2.1.5-r8.ebuild')
-rw-r--r--sci-libs/fftw/fftw-2.1.5-r8.ebuild157
1 files changed, 157 insertions, 0 deletions
diff --git a/sci-libs/fftw/fftw-2.1.5-r8.ebuild b/sci-libs/fftw/fftw-2.1.5-r8.ebuild
new file mode 100644
index 000000000000..6c1df9055aa4
--- /dev/null
+++ b/sci-libs/fftw/fftw-2.1.5-r8.ebuild
@@ -0,0 +1,157 @@
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=4
+
+FORTRAN_NEEDED=fortran
+
+inherit autotools eutils flag-o-matic fortran-2 toolchain-funcs
+
+DESCRIPTION="Fast C library for the Discrete Fourier Transform"
+SRC_URI="http://www.fftw.org/${P}.tar.gz"
+HOMEPAGE="http://www.fftw.org"
+
+DEPEND="mpi? ( virtual/mpi )"
+RDEPEND="${DEPEND}"
+
+SLOT="2.1"
+LICENSE="GPL-2+"
+IUSE="doc float fortran mpi openmp threads static-libs"
+
+KEYWORDS="alpha amd64 arm hppa ia64 ppc ppc64 s390 sparc x86 ~amd64-linux ~x86-linux ~ppc-macos ~x86-macos"
+
+pkg_setup() {
+ use openmp && FORTRAN_NEED_OPENMP="1"
+ fortran-2_pkg_setup
+ # this one is reported to cause trouble on pentium4 m series
+ filter-mfpmath "sse"
+
+ # here I need (surprise) to increase optimization:
+ # --enable-i386-hacks requires -fomit-frame-pointer to work properly
+ if use x86; then
+ is-flag "-fomit-frame-pointer" || append-flags "-fomit-frame-pointer"
+ fi
+ if use openmp && [[ $(tc-getCC) == *gcc* ]] && ! tc-has-openmp; then
+ ewarn "You are using gcc and OpenMP is only available with gcc >= 4.2 "
+ ewarn "If you want to build fftw with OpenMP, abort now,"
+ ewarn "and switch CC to an OpenMP capable compiler"
+ ewarn "Otherwise the configure script will select POSIX threads."
+ fi
+ use openmp && [[ $(tc-getCC)$ == icc* ]] && append-ldflags $(no-as-needed)
+}
+
+src_prepare() {
+ # doc suggests installing single and double precision versions
+ # via separate compilations. will do in two separate source trees
+ # since some sed'ing is done during the build
+ # (?if --enable-type-prefix is set?)
+
+ epatch \
+ "${FILESDIR}"/${P}-as-needed.patch \
+ "${FILESDIR}"/${P}-configure.in.patch \
+ "${FILESDIR}"/${P}-no-test.patch \
+ "${FILESDIR}"/${P}-cc.patch \
+ "${FILESDIR}"/${P}-texinfo5.1.patch
+
+ # fix info files
+ for infofile in doc/fftw*info*; do
+ cat >> ${infofile} <<-EOF
+ INFO-DIR-SECTION Libraries
+ START-INFO-DIR-ENTRY
+ * fftw: (fftw). ${DESCRIPTION}
+ END-INFO-DIR-ENTRY
+ EOF
+ done
+
+ sed -i 's/AM_CONFIG_HEADER/AC_CONFIG_HEADERS/g' configure.in || die
+
+ eautoreconf
+
+ cd "${WORKDIR}"
+ cp -R ${P} ${P}-double
+ mv ${P} ${P}-single
+ ln -s ${P}-single ${P}
+}
+
+src_configure() {
+ local myconf="
+ --enable-shared
+ --enable-type-prefix
+ --enable-vec-recurse
+ $(use_enable fortran)
+ $(use_enable mpi)
+ $(use_enable static-libs static)
+ $(use_enable x86 i386-hacks)"
+ if use openmp; then
+ myconf="${myconf}
+ --enable-threads
+ --with-openmp"
+ elif use threads; then
+ myconf="${myconf}
+ --enable-threads
+ --without-openmp"
+ else
+ myconf="${myconf}
+ --disable-threads
+ --without-openmp"
+ fi
+ cd "${S}-single"
+ econf ${myconf} \
+ --enable-float \
+ --with-gcc=$(tc-getCC)
+
+ cd "${S}-double"
+ econf ${myconf} \
+ --with-gcc=$(tc-getCC)
+}
+
+src_compile() {
+ local dir
+ for dir in "${S}-single" "${S}-double"
+ do
+ einfo "Running compilation in ${dir}"
+ emake -C ${dir}
+ done
+}
+
+src_test() {
+ local dir
+ for dir in "${S}-single" "${S}-double"
+ do
+ einfo "Running tests in ${dir}"
+ emake -C ${dir} -j1 check
+ done
+}
+
+src_install () {
+ # both builds are installed in the same place
+ # libs are distinguished by prefix (s or d), see docs for details
+
+ local dir
+ for dir in "${S}-single" "${S}-double"
+ do
+ emake DESTDIR="${D}" -C ${dir} install
+ done
+
+ insinto /usr/include
+ doins fortran/fftw_f77.i
+ dodoc AUTHORS ChangeLog NEWS TODO README README.hacks
+ use doc && dohtml doc/*
+
+ if use float; then
+ for f in "${ED}"/usr/{include,$(get_libdir)}/*sfft*; do
+ ln -s $(basename ${f}) ${f/sfft/fft}
+ done
+ for f in "${ED}"/usr/{include,$(get_libdir)}/*srfft*; do
+ ln -s $(basename ${f}) ${f/srfft/rfft}
+ done
+ else
+ for f in "${ED}"/usr/{include,$(get_libdir)}/*dfft*; do
+ ln -s $(basename ${f}) ${f/dfft/fft}
+ done
+ for f in "${ED}"/usr/{include,$(get_libdir)}/*drfft*; do
+ ln -s $(basename ${f}) ${f/drfft/rfft}
+ done
+ fi
+}