diff options
Diffstat (limited to 'sci-libs/fftw/fftw-2.1.5-r8.ebuild')
-rw-r--r-- | sci-libs/fftw/fftw-2.1.5-r8.ebuild | 156 |
1 files changed, 156 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..e889eba4d768 --- /dev/null +++ b/sci-libs/fftw/fftw-2.1.5-r8.ebuild @@ -0,0 +1,156 @@ +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +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 +} |