dev-python/numpy: add upstream patch for compiler args (fix Ceph build failure)

Bug: https://bugs.gentoo.org/802150
Thanks-to: Hector Martin <marcan@marcan.st>
Signed-off-by: Sam James <sam@gentoo.org>
This commit is contained in:
Sam James
2021-11-17 23:12:39 +00:00
parent 67485ec66d
commit aeb4bf89ff
2 changed files with 193 additions and 0 deletions

View File

@@ -0,0 +1,49 @@
https://github.com/numpy/numpy/commit/689d905f501b7abbddf0fdef241fa586a83e5cd6
https://github.com/numpy/numpy/pull/20116
https://bugs.gentoo.org/802150
From 7dcf62379f41407d8f9583d1c2016e3d8ec48384 Mon Sep 17 00:00:00 2001
From: Hector Martin <marcan@marcan.st>
Date: Thu, 14 Oct 2021 14:58:52 +0900
Subject: [PATCH] MAINT: Fix issue with C compiler args containing spaces
Instead of doing a dumb string split, use shlex to make sure args
containing spaces are handled properly.
---
numpy/distutils/unixccompiler.py | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/numpy/distutils/unixccompiler.py b/numpy/distutils/unixccompiler.py
index 733a9fc5094..4884960fdf2 100644
--- a/numpy/distutils/unixccompiler.py
+++ b/numpy/distutils/unixccompiler.py
@@ -5,6 +5,7 @@
import os
import sys
import subprocess
+import shlex
from distutils.errors import CompileError, DistutilsExecError, LibError
from distutils.unixccompiler import UnixCCompiler
@@ -30,15 +31,15 @@ def UnixCCompiler__compile(self, obj, src, ext, cc_args, extra_postargs, pp_opts
if 'OPT' in os.environ:
# XXX who uses this?
from sysconfig import get_config_vars
- opt = " ".join(os.environ['OPT'].split())
- gcv_opt = " ".join(get_config_vars('OPT')[0].split())
- ccomp_s = " ".join(self.compiler_so)
+ opt = shlex.join(shlex.split(os.environ['OPT']))
+ gcv_opt = shlex.join(shlex.split(get_config_vars('OPT')[0]))
+ ccomp_s = shlex.join(self.compiler_so)
if opt not in ccomp_s:
ccomp_s = ccomp_s.replace(gcv_opt, opt)
- self.compiler_so = ccomp_s.split()
- llink_s = " ".join(self.linker_so)
+ self.compiler_so = shlex.split(ccomp_s)
+ llink_s = shlex.join(self.linker_so)
if opt not in llink_s:
- self.linker_so = llink_s.split() + opt.split()
+ self.linker_so = self.linker_so + shlex.split(opt)
display = '%s: %s' % (os.path.basename(self.compiler_so[0]), src)

View File

@@ -0,0 +1,144 @@
# Copyright 1999-2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=7
PYTHON_COMPAT=( python3_{8..10} )
PYTHON_REQ_USE="threads(+)"
FORTRAN_NEEDED=lapack
inherit distutils-r1 flag-o-matic fortran-2 toolchain-funcs
DOC_PV=${PV}
DESCRIPTION="Fast array and numerical python library"
HOMEPAGE="https://numpy.org/"
SRC_URI="
mirror://pypi/${PN:0:1}/${PN}/${P}.zip
doc? (
https://numpy.org/doc/$(ver_cut 1-2 ${DOC_PV})/numpy-html.zip -> numpy-html-${DOC_PV}.zip
https://numpy.org/doc/$(ver_cut 1-2 ${DOC_PV})/numpy-ref.pdf -> numpy-ref-${DOC_PV}.pdf
https://numpy.org/doc/$(ver_cut 1-2 ${DOC_PV})/numpy-user.pdf -> numpy-user-${DOC_PV}.pdf
)"
LICENSE="BSD"
SLOT="0"
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~sparc-solaris ~x64-solaris ~x86-solaris"
IUSE="doc lapack"
RDEPEND="
lapack? (
>=virtual/cblas-3.8
>=virtual/lapack-3.8
)
"
BDEPEND="
${RDEPEND}
app-arch/unzip
>=dev-python/cython-0.29.24[${PYTHON_USEDEP}]
lapack? ( virtual/pkgconfig )
test? (
>=dev-python/hypothesis-5.8.0[${PYTHON_USEDEP}]
>=dev-python/pytz-2019.3[${PYTHON_USEDEP}]
>=dev-python/cffi-1.14.0[${PYTHON_USEDEP}]
)
"
PATCHES=(
"${FILESDIR}"/numpy-1.21.0-no-hardcode-blasv2.patch
"${FILESDIR}"/numpy-1.21.4-build-compiler-args-ceph.patch
)
distutils_enable_tests pytest
src_unpack() {
default
if use doc; then
unzip -qo "${DISTDIR}"/numpy-html-${DOC_PV}.zip -d html || die
fi
}
python_prepare_all() {
if use lapack; then
local incdir="${EPREFIX}"/usr/include
local libdir="${EPREFIX}"/usr/$(get_libdir)
cat >> site.cfg <<-EOF || die
[blas]
include_dirs = ${incdir}
library_dirs = ${libdir}
blas_libs = cblas,blas
[lapack]
library_dirs = ${libdir}
lapack_libs = lapack
EOF
else
export {ATLAS,PTATLAS,BLAS,LAPACK,MKL}=None
fi
export CC="$(tc-getCC) ${CFLAGS}"
append-flags -fno-strict-aliasing
# See progress in http://projects.scipy.org/scipy/numpy/ticket/573
# with the subtle difference that we don't want to break Darwin where
# -shared is not a valid linker argument
if [[ ${CHOST} != *-darwin* ]]; then
append-ldflags -shared
fi
# only one fortran to link with:
# linking with cblas and lapack library will force
# autodetecting and linking to all available fortran compilers
append-fflags -fPIC
if use lapack; then
NUMPY_FCONFIG="config_fc --noopt --noarch"
# workaround bug 335908
[[ $(tc-getFC) == *gfortran* ]] && NUMPY_FCONFIG+=" --fcompiler=gnu95"
fi
# don't version f2py, we will handle it.
sed -i -e '/f2py_exe/s: + os\.path.*$::' numpy/f2py/setup.py || die
# disable fuzzed tests
find numpy/*/tests -name '*.py' -exec sed -i \
-e 's:def \(.*_fuzz\):def _\1:' {} + || die
# very memory- and disk-hungry
sed -i -e 's:test_large_zip:_&:' numpy/lib/tests/test_io.py || die
distutils-r1_python_prepare_all
}
python_compile() {
export MAKEOPTS=-j1 #660754
distutils-r1_python_compile ${NUMPY_FCONFIG}
}
python_test() {
local deselect=(
numpy/typing/tests/test_typing.py::test_reveal[arrayterator.py]
)
distutils_install_for_testing --single-version-externally-managed \
--record "${TMPDIR}/record.txt" ${NUMPY_FCONFIG}
cd "${TEST_DIR}/lib" || die
epytest ${deselect[@]/#/--deselect }
}
python_install() {
# https://github.com/numpy/numpy/issues/16005
local mydistutilsargs=( build_src )
distutils-r1_python_install ${NUMPY_FCONFIG}
python_optimize
}
python_install_all() {
local DOCS=( LICENSE.txt README.md THANKS.txt )
if use doc; then
local HTML_DOCS=( "${WORKDIR}"/html/. )
DOCS+=( "${DISTDIR}"/${PN}-{user,ref}-${DOC_PV}.pdf )
fi
distutils-r1_python_install_all
}