From bf103a0ef465d31e4dc16a7093063331be7578d3 Mon Sep 17 00:00:00 2001 From: "Andrew J. Hesford" Date: Tue, 4 Apr 2023 10:06:35 -0400 Subject: [PATCH 1/4] New package: python3-lazy_loader-0.2 --- srcpkgs/python3-lazy_loader/template | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 srcpkgs/python3-lazy_loader/template diff --git a/srcpkgs/python3-lazy_loader/template b/srcpkgs/python3-lazy_loader/template new file mode 100644 index 000000000000..492c98124834 --- /dev/null +++ b/srcpkgs/python3-lazy_loader/template @@ -0,0 +1,19 @@ +# Template file for 'python3-lazy_loader' +pkgname=python3-lazy_loader +version=0.2 +revision=1 +build_style=python3-pep517 +hostmakedepends="python3-flit_core" +depends="python3" +checkdepends="python3-pytest-xdist" +short_desc="Populate Python namespace without incurring immediate import costs" +maintainer="Andrew J. Hesford " +license="BSD-3-Clause" +homepage="https://github.com/scientific-python/lazy_loader" +changelog="https://raw.githubusercontent.com/scientific-python/lazy_loader/main/CHANGELOG.md" +distfiles="${PYPI_SITE}/l/lazy_loader/lazy_loader-${version}.tar.gz" +checksum=0edc7a5175c400acb108f283749951fefdadedeb00adcec6e88b974a9254f18a + +post_install() { + vlicense LICENSE.md +} From b1387ce9d4df0d4fa4acdd484f28596a0d1f43b7 Mon Sep 17 00:00:00 2001 From: "Andrew J. Hesford" Date: Fri, 2 Jun 2023 12:06:36 -0400 Subject: [PATCH 2/4] New package: python3-pyproject-metadata-0.7.1 --- srcpkgs/python3-pyproject-metadata/template | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 srcpkgs/python3-pyproject-metadata/template diff --git a/srcpkgs/python3-pyproject-metadata/template b/srcpkgs/python3-pyproject-metadata/template new file mode 100644 index 000000000000..fcf5c5d22593 --- /dev/null +++ b/srcpkgs/python3-pyproject-metadata/template @@ -0,0 +1,19 @@ +# Template file for 'python3-pyproject-metadata' +pkgname=python3-pyproject-metadata +version=0.7.1 +revision=1 +build_style=python3-pep517 +hostmakedepends="python3-flit_core python3-wheel" +depends="python3-packaging" +short_desc="PEP 621 metadata parsing" +maintainer="Andrew J. Hesford " +license="MIT" +homepage="https://pep621.readthedocs.io/" +changelog="https://raw.githubusercontent.com/FFY00/python-pyproject-metadata/main/CHANGELOG.rst" +distfiles="${PYPI_SITE}/p/pyproject-metadata/pyproject-metadata-${version}.tar.gz" +checksum=0a94f18b108b9b21f3a26a3d541f056c34edcb17dc872a144a15618fed7aef67 +make_check=no # tarball includes no tests + +post_install() { + vlicense LICENSE +} From b7e81ddd31c6a38fa1ab7b06a4a712fab673e998 Mon Sep 17 00:00:00 2001 From: "Andrew J. Hesford" Date: Fri, 2 Jun 2023 12:48:57 -0400 Subject: [PATCH 3/4] New package: python3-meson-python-0.13.1 --- srcpkgs/python3-meson-python/template | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 srcpkgs/python3-meson-python/template diff --git a/srcpkgs/python3-meson-python/template b/srcpkgs/python3-meson-python/template new file mode 100644 index 000000000000..50dc5be1c509 --- /dev/null +++ b/srcpkgs/python3-meson-python/template @@ -0,0 +1,20 @@ +# Template file for 'python3-meson-python' +pkgname=python3-meson-python +version=0.13.1 +revision=1 +build_style=python3-pep517 +hostmakedepends="meson python3-pyproject-metadata" +depends="meson python3-pyproject-metadata patchelf" +short_desc="Meson PEP 517 Python build backend" +maintainer="Andrew J. Hesford " +license="MIT" +homepage="https://meson-python.readthedocs.io/" +changelog="https://raw.githubusercontent.com/mesonbuild/meson-python/main/CHANGELOG.rst" +distfiles="${PYPI_SITE}/m/meson_python/meson_python-${version}.tar.gz" +checksum=63b3170001425c42fa4cfedadb9051cbd28925ff8eed7c40d36ba0099e3c7618 +# tests require custom-built executables, need reconciliation with xbps-src env +make_check=no + +post_install() { + vlicense LICENSE +} From 50389ad91e287c862114285a4bf836880deb84a9 Mon Sep 17 00:00:00 2001 From: "Andrew J. Hesford" Date: Tue, 4 Apr 2023 10:09:26 -0400 Subject: [PATCH 4/4] python3-scikit-image: update to 0.21.0. --- .../patches/meson-cross.patch | 93 +++++++++++++++++++ .../patches/numpy-version.patch | 14 +++ srcpkgs/python3-scikit-image/template | 63 ++++++++++--- 3 files changed, 155 insertions(+), 15 deletions(-) create mode 100644 srcpkgs/python3-scikit-image/patches/meson-cross.patch create mode 100644 srcpkgs/python3-scikit-image/patches/numpy-version.patch diff --git a/srcpkgs/python3-scikit-image/patches/meson-cross.patch b/srcpkgs/python3-scikit-image/patches/meson-cross.patch new file mode 100644 index 000000000000..8807a612f665 --- /dev/null +++ b/srcpkgs/python3-scikit-image/patches/meson-cross.patch @@ -0,0 +1,93 @@ +From 8789a3365282a4f5604e090a10c960e710d240b9 Mon Sep 17 00:00:00 2001 +From: "Andrew J. Hesford" +Date: Tue, 6 Jun 2023 10:05:25 -0400 +Subject: [PATCH] meson: allow proper selection of NumPy, Pythran in cross + builds + +--- + skimage/meson.build | 62 +++++++++++++++++++++++++++------------------ + 1 file changed, 38 insertions(+), 24 deletions(-) + +diff --git a/skimage/meson.build b/skimage/meson.build +index 28c831312..c168389d7 100644 +--- a/skimage/meson.build ++++ b/skimage/meson.build +@@ -29,37 +29,51 @@ if is_windows + endif + endif + +-# NumPy include directory - needed in all submodules +-incdir_numpy = run_command(py3, +- [ +- '-c', +- 'import os; os.chdir(".."); import numpy; print(numpy.get_include())' +- ], +- check: true +-).stdout().strip() ++# Both NumPy and Pythran require header files that may differ between the build ++# system and the host system in a cross-compilation environment. To accommodate ++# these cases, we can query user-defined properties that can be specified in ++# the 'properties' section of a Meson cross file: ++# ++# [properties] ++# numpy-include-dir = '/path/to/numpy/includes' ++# pythran-include-dir = '/path/to/pythran/includes' ++# ++# In the absence of explicitly configured paths, just run the build Python and ++# try to query the Python packages for their paths directly. ++ ++# NumPy include directory ++incdir_numpy = meson.get_external_property('numpy-include-dir', 'not-given') ++if incdir_numpy == 'not-given' ++ # If not specified, try to query NumPy from the build python ++ incdir_numpy = run_command(py3, ++ [ ++ '-c', ++ 'import os; os.chdir(".."); import numpy; print(numpy.get_include())' ++ ], ++ check: true ++ ).stdout().strip() ++endif + + inc_np = include_directories(incdir_numpy) + + cc = meson.get_compiler('c') + +-# Pythran include directory and build flags +-use_pythran = run_command(py3, +- [ +- '-c', +- 'import os; print(os.environ.get("SCIPY_USE_PYTHRAN", 1))' +- ], +- check: true +-).stdout().strip() == '1' +- +-incdir_pythran = run_command(py3, +- [ +- '-c', +- 'import os; os.chdir(".."); import pythran; print(os.path.dirname(pythran.__file__));' +- ], +- check: true +-).stdout().strip() ++# Pythran include directory ++incdir_pythran = meson.get_external_property('pythran-include-dir', 'not-given') ++if incdir_pythran == 'not-given' ++ # If not specified, try to query Pythran from the build python ++ incdir_pythran = run_command(py3, ++ [ ++ '-c', ++ 'import os; os.chdir(".."); import pythran; print(os.path.dirname(pythran.__file__));' ++ ], ++ check: true ++ ).stdout().strip() ++endif ++ + inc_pythran = include_directories(incdir_pythran) + ++# Pythran build flags + cpp_args_pythran = [ + '-DENABLE_PYTHON_MODULE', + '-D__PYTHRAN__=3', +-- +2.41.0 + diff --git a/srcpkgs/python3-scikit-image/patches/numpy-version.patch b/srcpkgs/python3-scikit-image/patches/numpy-version.patch new file mode 100644 index 000000000000..9d3a96588edd --- /dev/null +++ b/srcpkgs/python3-scikit-image/patches/numpy-version.patch @@ -0,0 +1,14 @@ +There doesn't seem to be a valid reason for this restriction, and it doesn't +impede building anyway. + +--- a/pyproject.toml ++++ b/pyproject.toml +@@ -145,7 +145,7 @@ + "numpy==1.21.1; python_version=='3.8' and platform_python_implementation != 'PyPy'", + "numpy==1.21.1; python_version=='3.9' and platform_python_implementation != 'PyPy'", + "numpy==1.21.6; python_version=='3.10' and platform_system != 'Windows' and platform_python_implementation != 'PyPy'", +- "numpy==1.23.3; python_version=='3.11' and platform_python_implementation != 'PyPy'", ++ "numpy>=1.23.3; python_version=='3.11' and platform_python_implementation != 'PyPy'", + "numpy; python_version>='3.12'", + "numpy; python_version>='3.8' and platform_python_implementation=='PyPy'", + ] diff --git a/srcpkgs/python3-scikit-image/template b/srcpkgs/python3-scikit-image/template index c3b403fdef61..df69402a73dd 100644 --- a/srcpkgs/python3-scikit-image/template +++ b/srcpkgs/python3-scikit-image/template @@ -1,28 +1,61 @@ # Template file for 'python3-scikit-image' pkgname=python3-scikit-image -version=0.19.3 -revision=2 -_pkgname="${pkgname#python3-}" -build_style=python3-module -build_helper="numpy" -hostmakedepends="python3-Cython python3-wheel python3-numpy - python3-packaging python3-setuptools pythran" -makedepends="python3-devel" -depends="python3-scipy python3-numpy python3-imageio python3-matplotlib - python3-networkx python3-tifffile python3-pywt python3-packaging" +version=0.21.0 +revision=1 +build_style=meson +build_helper="python3" +hostmakedepends="python3-build python3-installer python3-meson-python + python3-wheel python3-setuptools python3-packaging python3-Cython pythran + python3-lazy_loader python3-numpy" +makedepends="python3-devel python3-numpy pythran" +depends="python3-numpy python3-scipy python3-networkx python3-Pillow + python3-imageio python3-tifffile python3-pywt python3-packaging + python3-lazy_loader" short_desc="Image processing in Python" maintainer="Andrew J. Hesford " license="BSD-3-Clause, MIT" homepage="https://scikit-image.org/" -distfiles="https://github.com/${_pkgname}/${_pkgname}/archive/v${version}.tar.gz" -checksum=4eb877c98d1395769daef5bc2ba8a7efd3f736c87086aecb3775a9174593398b +distfiles="https://github.com/scikit-image/scikit-image/archive/v${version}.tar.gz" +checksum=53a82a9dbd3ed608d2ad3876269a271a7e922b12e228388eac996b508aadd652 # Tests require data files and unpackaged dependencies make_check=no -pre_build() { - make_build_args+=" ${makejobs}" +if [ ! "$XBPS_WORDSIZE" = "$XBPS_TARGET_WORDSIZE" ]; then + broken="pythran components build only if word size matches" +fi + +if [ "${CROSS_BUILD}" ]; then + configure_args="--cross-file=python.cross" +fi + +pre_patch() { + if [ "${CROSS_BUILD}" ]; then + # Meson can't tolerate $CC with arguments as set by build helper + CC="${XBPS_CROSS_TRIPLET}-gcc" + # CXX needs to know where to find Python headers + CXXFLAGS+=" -I${XBPS_CROSS_BASE}/${py3_inc}" + fi +} + +post_patch() { + if [ "${CROSS_BUILD}" ]; then + local _xpy="${XBPS_CROSS_BASE}/${py3_sitelib}" + cat > python.cross <<-EOF + [properties] + numpy-include-dir = '${_xpy}/numpy/core/include' + pythran-include-dir = '${_xpy}/pythran' + EOF + fi +} + +do_build() { + # Use the build directory already configured by xbps-src for meson + python3 -m build --no-isolation --wheel \ + -Cbuilddir="./build" -Ccompile-args="${makejobs}" . } -post_install() { +do_install() { + python3 -m installer --destdir "${DESTDIR}" \ + --no-compile-bytecode dist/*.whl vlicense LICENSE.txt }