1 # Copyright 1999-2017 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
6 PYTHON_COMPAT=( python2_7 python3_{4,5,6} )
7 PYTHON_REQ_USE="threads(+)"
11 inherit fortran-2 distutils-r1 flag-o-matic multiprocessing toolchain-funcs
13 DESCRIPTION="Scientific algorithms library for Python"
14 HOMEPAGE="https://www.scipy.org/"
16 mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz
18 https://docs.scipy.org/doc/${PN}-${DOC_PV}/${PN}-html-${PV}.zip -> ${PN}-${DOC_PV}-html.zip
19 https://docs.scipy.org/doc/${PN}-${DOC_PV}/${PN}-ref-${PV}.pdf -> ${PN}-${DOC_PV}-ref.pdf
24 IUSE="doc sparse test"
25 KEYWORDS="~amd64 ~arm ~ppc ~ppc64 ~x86 ~amd64-linux ~x86-linux ~ppc-macos ~x86-macos"
28 >=dev-python/numpy-1.10[lapack,${PYTHON_USEDEP}]
32 sparse? ( sci-libs/umfpack:0= )"
35 >=dev-python/cython-0.22[${PYTHON_USEDEP}]
37 doc? ( app-arch/unzip )
38 test? ( dev-python/nose[${PYTHON_USEDEP}] )"
40 dev-python/pillow[${PYTHON_USEDEP}]"
42 DOCS=( HACKING.rst.txt THANKS.txt )
44 DISTUTILS_IN_SOURCE_BUILD=1
47 "${FILESDIR}"/${PN}-0.12.0-blitz.patch
48 "${FILESDIR}"/${PN}-0.12.0-restore-sys-argv.patch
54 unzip -qo "${DISTDIR}"/${PN}-${DOC_PV}-html.zip -d html || die
59 $(tc-getPKG_CONFIG) --cflags-only-I $@ | \
60 sed -e 's/^-I//' -e 's/[ ]*-I/:/g' -e 's/[ ]*$//' -e 's|^:||'
64 $(tc-getPKG_CONFIG) --libs-only-L $@ | \
65 sed -e 's/^-L//' -e 's/[ ]*-L/:/g' -e 's/[ ]*$//' -e 's|^:||'
69 $(tc-getPKG_CONFIG) --libs-only-l $@ | \
70 sed -e 's/[ ]-l*\(pthread\|m\)\([ ]\|$\)//g' \
71 -e 's/^-l//' -e 's/[ ]*-l/,/g' -e 's/[ ]*$//' \
72 | tr ',' '\n' | sort -u | tr '\n' ',' | sed -e 's|,$||'
75 python_prepare_all() {
76 # scipy automatically detects libraries by default
77 export {FFTW,FFTW3,UMFPACK}=None
78 use sparse && unset UMFPACK
79 # the missing symbols are in -lpythonX.Y, but since the version can
80 # differ, we just introduce the same scaryness as on Linux/ELF
81 [[ ${CHOST} == *-darwin* ]] \
82 && append-ldflags -bundle "-undefined dynamic_lookup" \
83 || append-ldflags -shared
84 [[ -z ${FC} ]] && export FC="$(tc-getFC)"
85 # hack to force F77 to be FC until bug #278772 is fixed
86 [[ -z ${F77} ]] && export F77="$(tc-getFC)"
88 export SCIPY_FCONFIG="config_fc --noopt --noarch"
91 local libdir="${EPREFIX}"/usr/$(get_libdir)
92 cat >> site.cfg <<-EOF || die
94 include_dirs = $(pc_incdir cblas)
95 library_dirs = $(pc_libdir cblas blas):${libdir}
96 blas_libs = $(pc_libs cblas blas)
98 library_dirs = $(pc_libdir lapack):${libdir}
99 lapack_libs = $(pc_libs lapack)
102 # Drop hashes to force rebuild of cython based .c code
103 rm cythonize.dat || die
105 distutils-r1_python_prepare_all
109 ${EPYTHON} tools/cythonize.py || die
110 distutils-r1_python_compile \
111 $(usex python_targets_python3_5 "" "-j $(makeopts_jobs)") \
116 # fails with bdist_egg. should it be fixed in distutils-r1 eclass?
117 distutils_install_for_testing ${SCIPY_FCONFIG}
118 cd "${TEST_DIR}" || die "no ${TEST_DIR} available"
120 'import numpy as np; print("relaxed strides checking:", np.ones((10,1),order="C").flags.f_contiguous)' \
122 # https://github.com/scipy/scipy/issues/5426
124 "import scipy, sys; r = scipy.test('fast', verbose=2, raise_warnings='release'); sys.exit(0 if r.wasSuccessful() else 1)" \
125 || die "Tests fail with ${EPYTHON}"
127 # "import scipy, sys; r = scipy.test('fast',verbose=2); sys.exit(0 if r.wasSuccessful() else 1)" \
128 # || die "Tests fail with ${EPYTHON}"
131 python_install_all() {
133 local DOCS=( "${DISTDIR}"/${PN}-${DOC_PV}-ref.pdf ) \
134 local HTML_DOCS=( "${WORKDIR}"/html/. )
135 distutils-r1_python_install_all
139 distutils-r1_python_install ${SCIPY_FCONFIG}
143 elog "You might want to set the variable SCIPY_PIL_IMAGE_VIEWER"
144 elog "to your prefered image viewer. Example:"
145 elog "\t echo \"export SCIPY_PIL_IMAGE_VIEWER=display\" >> ~/.bashrc"