dev-qt/qttest: stable 5.14.2 for ppc, bug #719732
[gentoo.git] / sci-libs / fftw / fftw-3.3.6_p2.ebuild
1 # Copyright 1999-2020 Gentoo Authors
2 # Distributed under the terms of the GNU General Public License v2
3
4 EAPI=6
5
6 FORTRAN_NEEDED=fortran
7
8 inherit flag-o-matic fortran-2 toolchain-funcs versionator multibuild multilib-minimal
9
10 DESCRIPTION="Fast C library for the Discrete Fourier Transform"
11 HOMEPAGE="http://www.fftw.org/"
12
13 MY_P=${PN}-${PV/_p/-pl}
14
15 if [[ ${PV} = *9999 ]]; then
16         inherit autotools git-r3
17         EGIT_REPO_URI="https://github.com/FFTW/fftw3.git"
18 else
19         SRC_URI="http://www.fftw.org/${PN}-${PV/_p/-pl}.tar.gz"
20         KEYWORDS="~alpha amd64 arm ~arm64 hppa ~ia64 ~mips ppc ppc64 sparc x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos"
21 fi
22
23 LICENSE="GPL-2+"
24 SLOT="3.0/3"
25 IUSE="altivec cpu_flags_x86_avx cpu_flags_x86_avx2 cpu_flags_x86_fma3 cpu_flags_x86_fma4 cpu_flags_x86_sse cpu_flags_x86_sse2 doc fortran mpi neon openmp quad static-libs test threads zbus"
26 RESTRICT="!test? ( test )"
27
28 RDEPEND="
29         mpi? ( >=virtual/mpi-2.0-r4[${MULTILIB_USEDEP}] )"
30 DEPEND="${RDEPEND}
31         test? ( dev-lang/perl )"
32
33 S=${WORKDIR}/${MY_P}
34 HTML_DOCS=( doc/html/. )
35
36 pkg_pretend() {
37         [[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
38 }
39
40 pkg_setup() {
41         if [[ ${MERGE_TYPE} != binary ]] && use openmp; then
42                 tc-check-openmp
43                 FORTRAN_NEED_OPENMP=1
44         fi
45
46         fortran-2_pkg_setup
47
48         MULTIBUILD_VARIANTS=( single double longdouble )
49         if use quad; then
50                 if ! tc-is-gcc; then
51                         ewarn "quad precision only available for gcc >= 4.6"
52                         die "need quad precision capable gcc"
53                 fi
54                 MULTIBUILD_VARIANTS+=( quad )
55         fi
56 }
57
58 src_prepare() {
59         default
60
61         # fix info file for category directory
62         if [[ ${PV} = *9999 ]]; then
63                 sed -i -e
64                         's/Texinfo documentation system/Libraries/' \
65                         doc/fftw3."info" || die "failed to fix info file"
66
67                 eautoreconf
68         fi
69 }
70
71 multilib_src_configure() {
72         # jlec reported USE=quad on abi_x86_32 has too few registers
73         # stub Makefiles
74         if [[ ${MULTILIB_ABI_FLAG} == abi_x86_32 && ${MULTIBUILD_ID} == quad-* ]]; then
75                 mkdir -p "${BUILD_DIR}/tests" || die
76                 echo "all: ;" > "${BUILD_DIR}/Makefile" || die
77                 echo "install: ;" >> "${BUILD_DIR}/Makefile" || die
78                 echo "smallcheck: ;" > "${BUILD_DIR}/tests/Makefile" || die
79                 return 0
80         fi
81
82         local myconf=(
83                 --enable-shared
84                 $(use_enable static-libs static)
85                 $(use_enable "cpu_flags_x86_fma$(usex cpu_flags_x86_fma3 3 4)" fma)
86                 $(use_enable fortran)
87                 $(use_enable zbus mips-zbus-timer)
88                 $(use_enable threads)
89                 $(use_enable openmp)
90         )
91         case "${MULTIBUILD_ID}" in
92                 single-*)
93                         # altivec, sse, single-paired only work for single
94                         myconf+=(
95                                 --enable-single
96                                 $(use_enable altivec)
97                                 $(use_enable cpu_flags_x86_avx avx)
98                                 $(use_enable cpu_flags_x86_avx2 avx2)
99                                 $(use_enable cpu_flags_x86_sse sse)
100                                 $(use_enable cpu_flags_x86_sse2 sse2)
101                                 $(use_enable neon)
102                                 $(use_enable mpi)
103                         )
104                         ;;
105
106                 double-*)
107                         myconf+=(
108                                 $(use_enable cpu_flags_x86_avx avx)
109                                 $(use_enable cpu_flags_x86_avx2 avx2)
110                                 $(use_enable cpu_flags_x86_sse2 sse2)
111                                 $(use_enable mpi)
112                         )
113                         ;;
114
115                 longdouble-*)
116                         myconf+=(
117                                 --enable-long-double
118                                 $(use_enable mpi)
119                         )
120                         ;;
121
122                 quad-*)
123                         # quad does not support mpi
124                         myconf+=(
125                                 --enable-quad-precision
126                         )
127                         ;;
128
129                 *)
130                         die "${MULTIBUILD_ID%-*} precision not implemented in this ebuild"
131                         ;;
132         esac
133
134         ECONF_SOURCE="${S}" econf "${myconf[@]}" MPICC="$(tc-getCC) -lmpi"
135 }
136
137 src_configure() {
138         multibuild_foreach_variant multilib-minimal_src_configure
139 }
140
141 src_compile() {
142         multibuild_foreach_variant multilib-minimal_src_compile
143 }
144
145 multilib_src_test() {
146         emake -C tests smallcheck
147 }
148
149 src_test() {
150         # We want this to be a reasonably quick test, but that is still hard...
151         ewarn "This test series will take 30 minutes on a modern 2.5Ghz machine"
152         # Do not increase the number of threads, it will not help your performance
153         # local testbase="perl check.pl --nthreads=1 --estimate"
154         #     ${testbase} -${p}d || die "Failure: $n"
155
156         multibuild_foreach_variant multilib-minimal_src_test
157 }
158
159 src_install() {
160         multibuild_foreach_variant multilib-minimal_src_install
161         dodoc CONVENTIONS
162
163         if use doc; then
164                 dodoc doc/*.pdf
165                 docinto faq
166                 dodoc -r doc/FAQ/fftw-faq.html/.
167         else
168                 rm -r "${ED%/}"/usr/share/doc/${PF}/html || die
169         fi
170
171         local x
172         for x in "${ED%/}"/usr/lib*/pkgconfig/*.pc; do
173                 local u
174                 for u in $(usev mpi) $(usev threads) $(usex openmp omp ""); do
175                         sed -e "s|-lfftw3[flq]\?|&_${u} &|" "$x" > "${x%.pc}_${u}.pc" || die
176                 done
177         done
178
179         # fftw uses pkg-config to record its private dependencies
180         find "${D}" -name '*.la' -delete || die
181 }