numpy: bump to version 2.2.1
authorAlexandru Ardelean <alex@shruggie.ro>
Tue, 24 Dec 2024 12:28:02 +0000 (14:28 +0200)
committerAlexandru Ardelean <ardeleanalex@gmail.com>
Sat, 28 Dec 2024 16:51:59 +0000 (18:51 +0200)
Dropped:
  003-without-vendored-meson.patch
  004-workaround-for-multiple-top-level-packages-discovered.patch

This time, we really need to use meson to build numpy.
And to make things more complicated, the 'vendored' meson package (that
comes with numpy) must be used. This is because they have some special
logic in there that's specific to numpy.

With this change, we also need to keep a special/internal
'openwrt-cross.txt.in' file, because cross-compiling numpy also requires
that a 'longdouble_format' property be added.
More details about this:
   https://github.com/numpy/numpy/issues/23972
   https://github.com/numpy/numpy/blob/maintenance/2.2.x/doc/source/building/cross_compilation.rst

Removing quirk fix for x86_64 with detecting 'avx512f'.
This should work with the new meson stuff.

And finally, added a test.sh script.
This should make sure that this package works fine during upgrades.

Signed-off-by: Alexandru Ardelean <alex@shruggie.ro>
lang/python/numpy/Makefile
lang/python/numpy/files/openwrt-cross.txt.in [new file with mode: 0644]
lang/python/numpy/patches/002-avoid-build-user-config-files.patch
lang/python/numpy/patches/003-without-vendored-meson.patch [deleted file]
lang/python/numpy/patches/004-workaround-for-multiple-top-level-packages-discovered.patch [deleted file]
lang/python/numpy/test.sh [new file with mode: 0644]

index bb7539dcca117400a3629fc45d5d7686a006aa81..7f948bac884065b8488cfd80454eb06624d80ac2 100644 (file)
@@ -6,11 +6,11 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=numpy
-PKG_VERSION:=2.1.3
+PKG_VERSION:=2.2.1
 PKG_RELEASE:=1
 
 PYPI_NAME:=$(PKG_NAME)
-PKG_HASH:=aa08e04e08aaf974d4458def539dece0d28146d866a39da5639596f4921fd761
+PKG_HASH:=45681fd7128c8ad1c379f0ca0776a8b0c6583d2f69889ddac01559dfe4390918
 
 PKG_MAINTAINER:=Alexandru Ardelean <ardeleanalex@gmail.com>
 
@@ -27,9 +27,43 @@ PKG_BUILD_DEPENDS:=python-cython/host pyproject-metadata/host
 PYTHON3_PKG_BUILD_VARS:= \
         $(if $(CONFIG_NUMPY_OPENBLAS_SUPPORT),,NPY_BLAS_ORDER= NPY_LAPACK_ORDER= )
 
+MESON_USE_STAGING_PYTHON:=1
+
 include ../pypi.mk
 include $(INCLUDE_DIR)/package.mk
 include ../python3-package.mk
+include $(INCLUDE_DIR)/meson.mk
+
+MESON_ARGS+= \
+       -Ddisable-optimization=true \
+       -Dcpu-baseline=min
+
+# Override 'Meson', to use numpy's vendored meson
+define Meson
+       $(call Python3/Run,,$(PKG_BUILD_DIR)/vendored-meson/meson/meson.py $(1),$(2))
+endef
+
+define Meson/CreateCrossFile
+       $(STAGING_DIR_HOST)/bin/sed \
+               -e "s|@CC@|$(foreach BIN,$(TARGET_CC),'$(BIN)',)|" \
+               -e "s|@CXX@|$(foreach BIN,$(TARGET_CXX),'$(BIN)',)|" \
+               -e "s|@LD@|$(foreach FLAG,$(TARGET_LINKER),'$(FLAG)',)|" \
+               -e "s|@AR@|$(TARGET_AR)|" \
+               -e "s|@STRIP@|$(TARGET_CROSS)strip|" \
+               -e "s|@NM@|$(TARGET_NM)|" \
+               -e "s|@PKGCONFIG@|$(PKG_CONFIG)|" \
+               -e "s|@CMAKE@|$(STAGING_DIR_HOST)/bin/cmake|" \
+               -e "s|@PYTHON@|$(PYTHON_BIN)|" \
+               -e "s|@CFLAGS@|$(foreach FLAG,$(TARGET_CFLAGS) $(EXTRA_CFLAGS) $(TARGET_CPPFLAGS) $(EXTRA_CPPFLAGS),'$(FLAG)',)|" \
+               -e "s|@CXXFLAGS@|$(foreach FLAG,$(TARGET_CXXFLAGS) $(EXTRA_CXXFLAGS) $(TARGET_CPPFLAGS) $(EXTRA_CPPFLAGS),'$(FLAG)',)|" \
+               -e "s|@LDFLAGS@|$(foreach FLAG,$(TARGET_LDFLAGS) $(EXTRA_LDFLAGS),'$(FLAG)',)|" \
+               -e "s|@ARCH@|$(MESON_ARCH)|" \
+               -e "s|@CPU@|$(MESON_CPU)|" \
+               -e "s|@ENDIAN@|$(if $(CONFIG_BIG_ENDIAN),big,little)|" \
+               < files/openwrt-cross.txt.in \
+               > $(1)
+       echo "longdouble_format = '$(if $(CONFIG_BIG_ENDIAN),IEEE_DOUBLE_BE,IEEE_DOUBLE_LE)'" >> $(1)
+endef
 
 define Package/python3-numpy
   SUBMENU:=Python
@@ -54,12 +88,6 @@ config NUMPY_OPENBLAS_SUPPORT
 endmenu
 endef
 
-ifeq ($(ARCH),x86_64)
-# FIXME: temporary fix for x86_64 with GCC 13 + musl;
-#        numpy does not detect this compiler extension, so we just enable it
-TARGET_CFLAGS += -mavx512f
-endif
-
 define Build/Prepare/numpy-sitecfg
        echo "[DEFAULT]"                                 >  $(PKG_BUILD_DIR)/site.cfg
        echo "library_dirs = $(STAGING_DIR)/usr/lib"     >> $(PKG_BUILD_DIR)/site.cfg
diff --git a/lang/python/numpy/files/openwrt-cross.txt.in b/lang/python/numpy/files/openwrt-cross.txt.in
new file mode 100644 (file)
index 0000000..836a0e5
--- /dev/null
@@ -0,0 +1,27 @@
+[binaries]
+c = [@CC@]
+c_ld = [@LD@]
+cpp = [@CXX@]
+cpp_ld = [@LD@]
+ar = '@AR@'
+strip = '@STRIP@'
+nm = '@NM@'
+pkg-config = '@PKGCONFIG@'
+cmake = '@CMAKE@'
+python = '@PYTHON@'
+
+[built-in options]
+c_args = [@CFLAGS@]
+c_link_args = [@LDFLAGS@]
+cpp_args = [@CXXFLAGS@]
+cpp_link_args = [@LDFLAGS@]
+prefix = '/usr'
+
+[host_machine]
+system = 'linux'
+cpu_family = '@ARCH@'
+cpu = '@CPU@'
+endian = '@ENDIAN@'
+
+[properties]
+needs_exe_wrapper = true
index c3d70207e262692adbb54fd5379002587f1fafc0..cf7faf4edc3b6bda09c2952199ac18897e9ee50a 100644 (file)
@@ -1,6 +1,6 @@
 --- a/numpy/distutils/system_info.py
 +++ b/numpy/distutils/system_info.py
-@@ -404,7 +404,7 @@ def get_standard_file(fname):
+@@ -403,7 +403,7 @@ def get_standard_file(fname):
          pass
      else:
          user_file = os.path.join(f, fname)
diff --git a/lang/python/numpy/patches/003-without-vendored-meson.patch b/lang/python/numpy/patches/003-without-vendored-meson.patch
deleted file mode 100644 (file)
index 3dabd11..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
---- a/pyproject.toml
-+++ b/pyproject.toml
-@@ -1,7 +1,7 @@
- [build-system]
--build-backend = "mesonpy"
-+#build-backend = "mesonpy"
- requires = [
--    "meson-python>=0.15.0",
-+#    "meson-python>=0.15.0",
-     "Cython>=3.0.6",  # keep in sync with version check in meson.build
- ]
-@@ -181,8 +181,8 @@ select = "*-win32"
- config-settings = "setup-args=--vsenv setup-args=-Dallow-noblas=true build-dir=build"
- repair-wheel-command = ""
--[tool.meson-python]
--meson = 'vendored-meson/meson/meson.py'
-+#[tool.meson-python]
-+#meson = 'vendored-meson/meson/meson.py'
- [tool.meson-python.args]
- install = ['--tags=runtime,python-runtime,tests,devel']
-@@ -190,8 +190,8 @@ install = ['--tags=runtime,python-runtim
- [tool.spin]
- package = 'numpy'
--[tool.spin.meson]
--cli = 'vendored-meson/meson/meson.py'
-+#[tool.spin.meson]
-+#cli = 'vendored-meson/meson/meson.py'
- [tool.spin.commands]
- "Build" = [
diff --git a/lang/python/numpy/patches/004-workaround-for-multiple-top-level-packages-discovered.patch b/lang/python/numpy/patches/004-workaround-for-multiple-top-level-packages-discovered.patch
deleted file mode 100644 (file)
index c5424b5..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/pyproject.toml
-+++ b/pyproject.toml
-@@ -59,6 +59,9 @@ download = "https://pypi.org/project/num
- tracker = "https://github.com/numpy/numpy/issues"
- "release notes" = "https://numpy.org/doc/stable/release"
-+[tool.setuptools]
-+py-modules = []
-+
- [tool.towncrier]
-     single_file = false
-     filename = "doc/source/release/notes-towncrier.rst"
diff --git a/lang/python/numpy/test.sh b/lang/python/numpy/test.sh
new file mode 100644 (file)
index 0000000..dc22892
--- /dev/null
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+EXP_VER="$2"
+
+python3 - << EOF
+import sys
+import numpy as np
+
+if (np.__version__ != "$EXP_VER"):
+    print("Got incorrect version: " + np.__version__)
+    sys.exit(1)
+
+arr = np.array([1, 2, 3, 4, 5])
+
+print(arr)
+
+EOF
+