dev-qt/qttest: stable 5.14.2 for ppc, bug #719732
[gentoo.git] / sci-libs / fftw / fftw-3.3.8-r1.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 multibuild multilib-minimal toolchain-funcs
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         quad? ( sys-devel/gcc[fortran] )
32         test? ( dev-lang/perl )"
33
34 S=${WORKDIR}/${MY_P}
35 HTML_DOCS=( doc/html/. )
36
37 pkg_pretend() {
38         [[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
39 }
40
41 pkg_setup() {
42         if [[ ${MERGE_TYPE} != binary ]] && use openmp; then
43                 tc-check-openmp
44                 FORTRAN_NEED_OPENMP=1
45         fi
46
47         fortran-2_pkg_setup
48
49         MULTIBUILD_VARIANTS=( single double longdouble )
50         if use quad; then
51                 if ! tc-is-gcc; then
52                         ewarn "quad precision only available for gcc >= 4.6"
53                         die "need quad precision capable gcc"
54                 fi
55                 MULTIBUILD_VARIANTS+=( quad )
56         fi
57 }
58
59 src_prepare() {
60         default
61
62         # fix info file for category directory
63         if [[ ${PV} = *9999 ]]; then
64                 sed -i -e
65                         's/Texinfo documentation system/Libraries/' \
66                         doc/fftw3."info" || die "failed to fix info file"
67
68                 eautoreconf
69         fi
70 }
71
72 multilib_src_configure() {
73         # jlec reported USE=quad on abi_x86_32 has too few registers
74         # stub Makefiles
75         if [[ ${MULTILIB_ABI_FLAG} == abi_x86_32 && ${MULTIBUILD_ID} == quad-* ]]; then
76                 mkdir -p "${BUILD_DIR}/tests" || die
77                 echo "all: ;" > "${BUILD_DIR}/Makefile" || die
78                 echo "install: ;" >> "${BUILD_DIR}/Makefile" || die
79                 echo "smallcheck: ;" > "${BUILD_DIR}/tests/Makefile" || die
80                 return 0
81         fi
82
83         local myconf=(
84                 --enable-shared
85                 $(use_enable static-libs static)
86                 $(use_enable "cpu_flags_x86_fma$(usex cpu_flags_x86_fma3 3 4)" fma)
87                 $(use_enable fortran)
88                 $(use_enable zbus mips-zbus-timer)
89                 $(use_enable threads)
90                 $(use_enable openmp)
91         )
92         case "${MULTIBUILD_ID}" in
93                 single-*)
94                         # altivec, sse, single-paired only work for single
95                         myconf+=(
96                                 --enable-single
97                                 $(use_enable altivec)
98                                 $(use_enable cpu_flags_x86_avx avx)
99                                 $(use_enable cpu_flags_x86_avx2 avx2)
100                                 $(use_enable cpu_flags_x86_sse sse)
101                                 $(use_enable cpu_flags_x86_sse2 sse2)
102                                 $(use_enable neon)
103                                 $(use_enable mpi)
104                         )
105                         ;;
106
107                 double-*)
108                         myconf+=(
109                                 $(use_enable cpu_flags_x86_avx avx)
110                                 $(use_enable cpu_flags_x86_avx2 avx2)
111                                 $(use_enable cpu_flags_x86_sse2 sse2)
112                                 $(use_enable mpi)
113                         )
114                         ;;
115
116                 longdouble-*)
117                         myconf+=(
118                                 --enable-long-double
119                                 $(use_enable mpi)
120                         )
121                         ;;
122
123                 quad-*)
124                         # quad does not support mpi
125                         myconf+=(
126                                 --enable-quad-precision
127                         )
128                         ;;
129
130                 *)
131                         die "${MULTIBUILD_ID%-*} precision not implemented in this ebuild"
132                         ;;
133         esac
134
135         ECONF_SOURCE="${S}" econf "${myconf[@]}" MPICC="$(tc-getCC)"
136 }
137
138 src_configure() {
139         # upstream does not append proper -m flags
140         # https://bugs.gentoo.org/698572
141         use cpu_flags_x86_avx2 && append-flags -mavx2
142
143         multibuild_foreach_variant multilib-minimal_src_configure
144 }
145
146 src_compile() {
147         multibuild_foreach_variant multilib-minimal_src_compile
148 }
149
150 multilib_src_test() {
151         emake -C tests smallcheck
152 }
153
154 src_test() {
155         # We want this to be a reasonably quick test, but that is still hard...
156         ewarn "This test series will take 30 minutes on a modern 2.5Ghz machine"
157         # Do not increase the number of threads, it will not help your performance
158         # local testbase="perl check.pl --nthreads=1 --estimate"
159         #     ${testbase} -${p}d || die "Failure: $n"
160
161         multibuild_foreach_variant multilib-minimal_src_test
162 }
163
164 src_install() {
165         multibuild_foreach_variant multilib-minimal_src_install
166         dodoc CONVENTIONS
167
168         if use doc; then
169                 dodoc doc/*.pdf
170                 docinto faq
171                 dodoc -r doc/FAQ/fftw-faq.html/.
172         else
173                 rm -r "${ED%/}"/usr/share/doc/${PF}/html || die
174         fi
175
176         local x
177         for x in "${ED%/}"/usr/lib*/pkgconfig/*.pc; do
178                 local u
179                 for u in $(usev mpi) $(usev threads) $(usex openmp omp ""); do
180                         sed -e "s|-lfftw3[flq]\?|&_${u} &|" "$x" > "${x%.pc}_${u}.pc" || die
181                 done
182         done
183
184         # fftw uses pkg-config to record its private dependencies
185         find "${D}" -name '*.la' -delete || die
186 }