diff --git a/math/py-numpy1/Makefile b/math/py-numpy1/Makefile index e6b83231570d..7873d11b3784 100644 --- a/math/py-numpy1/Makefile +++ b/math/py-numpy1/Makefile @@ -1,72 +1,73 @@ PORTNAME= numpy DISTVERSION= 1.26.4 +PORTREVISION= 1 CATEGORIES= math python MASTER_SITES= PYPI \ https://numpy.org/doc/${DISTVERSION:R}/:doc PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} PKGNAMESUFFIX= 1 DISTFILES= ${DISTNAME}${EXTRACT_SUFX} \ ${PORTNAME}-html.zip:doc DIST_SUBDIR= ${PORTNAME}-${DISTVERSION:R} EXTRACT_ONLY= ${DISTNAME}${EXTRACT_SUFX} MAINTAINER= python@FreeBSD.org COMMENT= Fundamental package for array computing in Python WWW= https://www.numpy.org/ LICENSE= BSD3CLAUSE LICENSE_FILE= ${WRKSRC}/LICENSE.txt BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}meson-python>=0.15.0:devel/meson-python@${PY_FLAVOR} TEST_DEPENDS= ${PYTHON_PKGNAMEPREFIX}hypothesis>=6.24.1:devel/py-hypothesis@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}typing-extensions>=4.2.0:devel/py-typing-extensions@${PY_FLAVOR} USES= compiler:c11 cpe fortran pkgconfig python shebangfix USE_PYTHON= allflavors autoplist concurrent cython pep517 pytest PEP517_BUILD_CONFIG_SETTING= -Csetup-args=-Dallow-noblas=false WITHOUT_FBSD10_FIX= yes SHEBANG_GLOB= *.py PORTDOCS= * CONFLICTS_INSTALL= py*-numpy TEST_WRKSRC= ${WRKDIR} TEST_ARGS= --pyargs numpy OPTIONS_DEFINE= DOCS OPTIONS_SINGLE= BLASLIB OPTIONS_SINGLE_BLASLIB= BLIS FLEXIBLAS NETLIB OPENBLAS OPTIONS_DEFAULT= OPENBLAS BLIS_DESC= BLIS BLAS-like implementation FLEXIBLAS_DESC= FlexiBLAS BLAS implementation BLIS_USES= blaslapack:blis BLIS_VARS= PEP517_BUILD_CONFIG_SETTING+="-Csetup-args=-Dblas=blis -Csetup-args=-Dlapack=flame" BLIS_BROKEN= math/libflame does not provide a pkg-config file FLEXIBLAS_USES= blaslapack:flexiblas FLEXIBLAS_VARS= PEP517_BUILD_CONFIG_SETTING+="-Csetup-args=-Dblas=flexiblas -Csetup-args=-Dlapack=flexiblas" NETLIB_LIB_DEPENDS= libcblas.so:math/cblas NETLIB_USES= blaslapack:netlib NETLIB_VARS= PEP517_BUILD_CONFIG_SETTING+="-Csetup-args=-Dblas=blas -Csetup-args=-Dlapack=lapack" OPENBLAS_USES= blaslapack:openblas OPENBLAS_VARS= PEP517_BUILD_CONFIG_SETTING+="-Csetup-args=-Dblas=openblas -Csetup-args=-Dlapack=openblas" .include .if ${PYTHON_REL} >= 31200 BUILD_DEPENDS+= ${PYTHON_PKGNAMEPREFIX}setuptools>0:devel/py-setuptools@${PY_FLAVOR} .endif post-patch: @${REINPLACE_CMD} -e 's|meson-python>=0.15.0,<0.16.0|meson-python>=0.15.0|' \ -e 's|Cython>=0.29.34,<3.1|Cython>=0.29.34|' \ ${WRKSRC}/pyproject.toml post-install-DOCS-on: @${MKDIR} ${STAGEDIR}${DOCSDIR} ${UNZIP_NATIVE_CMD} -qo ${DISTDIR}/${DIST_SUBDIR}/numpy-html.zip -d ${STAGEDIR}${DOCSDIR} @${RM} ${STAGEDIR}${DOCSDIR}/.buildinfo .include diff --git a/math/py-numpy1/files/patch-numpy___configtool.py b/math/py-numpy1/files/patch-numpy___configtool.py new file mode 100644 index 000000000000..4d6158efa35a --- /dev/null +++ b/math/py-numpy1/files/patch-numpy___configtool.py @@ -0,0 +1,42 @@ +--- numpy/_configtool.py.orig 2026-04-04 01:24:53 UTC ++++ numpy/_configtool.py +@@ -0,0 +1,39 @@ ++import argparse ++from pathlib import Path ++import sys ++ ++from .version import __version__ ++from .lib.utils import get_include ++ ++ ++def main() -> None: ++ parser = argparse.ArgumentParser() ++ parser.add_argument( ++ "--version", ++ action="version", ++ version=__version__, ++ help="Print the version and exit.", ++ ) ++ parser.add_argument( ++ "--cflags", ++ action="store_true", ++ help="Compile flag needed when using the NumPy headers.", ++ ) ++ parser.add_argument( ++ "--pkgconfigdir", ++ action="store_true", ++ help=("Print the pkgconfig directory in which `numpy.pc` is stored " ++ "(useful for setting $PKG_CONFIG_PATH)."), ++ ) ++ args = parser.parse_args() ++ if not sys.argv[1:]: ++ parser.print_help() ++ if args.cflags: ++ print("-I" + get_include()) ++ if args.pkgconfigdir: ++ _path = Path(get_include()) / '..' / 'lib' / 'pkgconfig' ++ print(_path.resolve()) ++ ++ ++if __name__ == "__main__": ++ main() diff --git a/math/py-numpy1/files/patch-numpy_core_meson.build b/math/py-numpy1/files/patch-numpy_core_meson.build new file mode 100644 index 000000000000..1e0b9cdc79ce --- /dev/null +++ b/math/py-numpy1/files/patch-numpy_core_meson.build @@ -0,0 +1,26 @@ +--- numpy/core/meson.build.orig 2024-02-05 21:17:48 UTC ++++ numpy/core/meson.build +@@ -621,6 +621,23 @@ src_ufunc_api = custom_target('__ufunc_api', + install_dir: np_dir / 'core/include/numpy' + ) + ++# Write out pkg-config file ++# ------------------------- ++ ++# Note: we can't use Meson's built-in pkgconfig module, because we have to ++# install numpy.pc within site-packages rather than in its normal location. ++cdata_numpy_pc = configuration_data() ++cdata_numpy_pc.set('version', meson.project_version()) ++ ++# Note: keep install path in sync with numpy/_configtool.py ++_numpy_pc = configure_file( ++ input: 'numpy.pc.in', ++ output: 'numpy.pc', ++ configuration: cdata_numpy_pc, ++ install: true, ++ install_dir: np_dir / 'core/lib/pkgconfig', ++ install_tag: 'devel' ++) + + # Set common build flags for C and C++ code + # ----------------------------------------- diff --git a/math/py-numpy1/files/patch-numpy_core_numpy.pc.in b/math/py-numpy1/files/patch-numpy_core_numpy.pc.in new file mode 100644 index 000000000000..58f33ee87633 --- /dev/null +++ b/math/py-numpy1/files/patch-numpy_core_numpy.pc.in @@ -0,0 +1,10 @@ +--- numpy/core/numpy.pc.in.orig 2026-04-04 00:13:21 UTC ++++ numpy/core/numpy.pc.in +@@ -0,0 +1,7 @@ ++prefix=${pcfiledir}/../.. ++includedir=${prefix}/include ++ ++Name: numpy ++Description: NumPy is the fundamental package for scientific computing with Python. ++Version: @version@ ++Cflags: -I${includedir} diff --git a/math/py-numpy1/files/patch-numpy_lib_utils.py b/math/py-numpy1/files/patch-numpy_lib_utils.py new file mode 100644 index 000000000000..03914f54522c --- /dev/null +++ b/math/py-numpy1/files/patch-numpy_lib_utils.py @@ -0,0 +1,35 @@ +--- numpy/lib/utils.py.orig 2024-02-05 21:17:48 UTC ++++ numpy/lib/utils.py +@@ -76,18 +76,29 @@ def get_include(): + """ + Return the directory that contains the NumPy \\*.h header files. + +- Extension modules that need to compile against NumPy should use this ++ Extension modules that need to compile against NumPy may need to use this + function to locate the appropriate include directory. + + Notes + ----- +- When using ``distutils``, for example in ``setup.py``:: ++ When using ``setuptools``, for example in ``setup.py``:: + + import numpy as np + ... + Extension('extension_name', ... +- include_dirs=[np.get_include()]) ++ include_dirs=[np.get_include()]) + ... ++ ++ Note that a CLI tool ``numpy-config`` was introduced in NumPy 2.0, using ++ that is likely preferred for build systems other than ``setuptools``:: ++ ++ $ numpy-config --cflags ++ -I/path/to/site-packages/numpy/_core/include ++ ++ # Or rely on pkg-config: ++ $ export PKG_CONFIG_PATH=$(numpy-config --pkgconfigdir) ++ $ pkg-config --cflags ++ -I/path/to/site-packages/numpy/_core/include + + """ + import numpy diff --git a/math/py-numpy1/files/patch-numpy_meson.build b/math/py-numpy1/files/patch-numpy_meson.build new file mode 100644 index 000000000000..77cd8dd42fc0 --- /dev/null +++ b/math/py-numpy1/files/patch-numpy_meson.build @@ -0,0 +1,10 @@ +--- numpy/meson.build.orig 2024-02-05 21:17:48 UTC ++++ numpy/meson.build +@@ -215,6 +215,7 @@ python_sources = [ + '__init__.pxd', + '__init__.py', + '__init__.pyi', ++ '_configtool.py', + '_distributor_init.py', + '_globals.py', + '_pytesttester.py', diff --git a/math/py-numpy1/files/patch-numpy_tests_test__configtool.py b/math/py-numpy1/files/patch-numpy_tests_test__configtool.py new file mode 100644 index 000000000000..306e0f5f677b --- /dev/null +++ b/math/py-numpy1/files/patch-numpy_tests_test__configtool.py @@ -0,0 +1,44 @@ +--- numpy/tests/test_configtool.py.orig 2026-04-04 00:20:07 UTC ++++ numpy/tests/test_configtool.py +@@ -0,0 +1,41 @@ ++import os ++import subprocess ++import sysconfig ++ ++import pytest ++import numpy as np ++ ++ ++is_editable = not bool(np.__path__) ++numpy_in_sitepackages = sysconfig.get_path('platlib') in np.__file__ ++# We only expect to have a `numpy-config` available if NumPy was installed via ++# a build frontend (and not `spin` for example) ++if not (numpy_in_sitepackages or is_editable): ++ pytest.skip("`numpy-config` not expected to be installed", ++ allow_module_level=True) ++ ++ ++def check_numpyconfig(arg): ++ p = subprocess.run(['numpy-config', arg], capture_output=True, text=True) ++ p.check_returncode() ++ return p.stdout.strip() ++ ++ ++def test_configtool_version(): ++ stdout = check_numpyconfig('--version') ++ assert stdout == np.__version__ ++ ++ ++def test_configtool_cflags(): ++ stdout = check_numpyconfig('--cflags') ++ assert stdout.endswith(os.path.join('numpy', 'core', 'include')) ++ ++ ++def test_configtool_pkgconfigdir(): ++ stdout = check_numpyconfig('--pkgconfigdir') ++ assert stdout.endswith(os.path.join('numpy', 'core', 'lib', 'pkgconfig')) ++ ++ if not is_editable: ++ # Also check that the .pc file actually exists (unless we're using an ++ # editable install, then it'll be hiding in the build dir) ++ assert os.path.exists(os.path.join(stdout, 'numpy.pc')) diff --git a/math/py-numpy1/files/patch-pyproject.toml b/math/py-numpy1/files/patch-pyproject.toml new file mode 100644 index 000000000000..f26d7ee283c7 --- /dev/null +++ b/math/py-numpy1/files/patch-pyproject.toml @@ -0,0 +1,21 @@ +--- pyproject.toml.orig 2024-02-05 21:17:48 UTC ++++ pyproject.toml +@@ -1,8 +1,8 @@ requires = [ + [build-system] + build-backend = "mesonpy" + requires = [ +- "Cython>=0.29.34,<3.1", +- "meson-python>=0.15.0,<0.16.0", ++ "Cython>=0.29.34", ++ "meson-python>=0.15.0", + ] + + [project] +@@ -43,6 +43,7 @@ f2py = 'numpy.f2py.f2py2e:main' + + [project.scripts] + f2py = 'numpy.f2py.f2py2e:main' ++numpy-config = 'numpy._configtool:main' + + [project.entry-points.array_api] + numpy = 'numpy.array_api'