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,5 +1,6 @@ PORTNAME= numpy DISTVERSION= 1.26.4 +PORTREVISION= 1 CATEGORIES= math python MASTER_SITES= PYPI \ https://numpy.org/doc/${DISTVERSION:R}/:doc 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'