diff --git a/spk/python312-wheels/Makefile b/spk/python312-wheels/Makefile new file mode 100644 index 00000000000..598ff0292fa --- /dev/null +++ b/spk/python312-wheels/Makefile @@ -0,0 +1,137 @@ +SPK_NAME = python312-wheels +SPK_VERS = 1.0 +SPK_VERS_MAJOR_MINOR = $(word 1,$(subst ., ,$(SPK_VERS))).$(word 2,$(subst ., ,$(SPK_VERS))) +SPK_REV = 1 +SPK_ICON = src/python3-pip.png + +# Platform "powerpc-none-linux-gnuspe" with compiler "gcc" is not supported by the +# CPython core team, see https://peps.python.org/pep-0011/ for more information. +# And compiler must support std=c++11 (OlD_PPC_ARCHS fail, but ARMv5_ARCHS have no issue). +UNSUPPORTED_ARCHS = $(OLD_PPC_ARCHS) + +PYTHON_PACKAGE = python312 + +MAINTAINER = SynoCommunity +DESCRIPTION = Collection of programs for the Python programming language. +DESCRIPTION_FRE = Collection of programs for the Python programming language. +DESCRIPTION_SPN = Colección de programas para el lenguaje de programación Python. +STARTABLE = no +DISPLAY_NAME = Python Wheels Collection +CHANGELOG = "1. Initial package" + +HOMEPAGE = https://www.python.org +LICENSE = PSF + +# Enable debug_info symgols +#GCC_DEBUG_INFO := 1 + +WHEELS = src/requirements-crossenv.txt +WHEELS += src/requirements-abi3.txt + +# [borgbackup] +# Use OpenSSL path as defined by either +# spksrc.wheel-env.mk or spksrc.python.mk +ENV += BORG_OPENSSL_PREFIX="$(OPENSSL_STAGING_PREFIX)" +ENV += BORG_LIBLZ4_PREFIX="$(STAGING_INSTALL_PREFIX)" +ENV += BORG_LIBZSTD_PREFIX="$(STAGING_INSTALL_PREFIX)" +ENV += BORG_LIBB2_PREFIX="$(STAGING_INSTALL_PREFIX)" +DEPENDS += cross/attr cross/acl cross/openssl3 cross/lz4 cross/zstd cross/libb2 cross/fuse + +# [cryptography] +# Use cross/cryptography to generate py36-abi3 limited API +# NOTE: It's not possible to build py36-abi3 limited API using pip due to PEP517 +# To generate py311-py311 regular build use src/requirements-crossenv.txt +DEPENDS += cross/cryptography + +# [gevent] +DEPENDS += cross/libev cross/c-ares +ENV += GEVENTSETUP_EMBED_CARES=FALSE +ENV += GEVENTSETUP_EMBED_LIBEV=FALSE + +# [lxml] +DEPENDS += cross/libxml2 +DEPENDS += cross/libxslt + +# [mysqlclient] +DEPENDS += cross/mysql-connector-c +DEPENDS += cross/mariadb-connector-c +ENV += MYSQLCLIENT_CFLAGS="$(CFLAGS) -I$(STAGING_INSTALL_PREFIX)/include/mysql -I$(STAGING_INSTALL_PREFIX)/include/mariadb -I$(STAGING_INSTALL_PREFIX)/$(PYTHON_INC_DIR)" +ENV += MYSQLCLIENT_LDFLAGS="$(LDFLAGS)" + +# [Pillow] +DEPENDS += cross/freetype cross/libjpeg cross/zlib +WHEELS_BUILD_ARGS += [Pillow] +WHEELS_BUILD_ARGS += build_ext +WHEELS_BUILD_ARGS += --disable-platform-guessing +WHEELS_BUILD_ARGS += --enable-freetype +WHEELS_BUILD_ARGS += --enable-jpeg +WHEELS_BUILD_ARGS += --enable-zlib + +# [pycares] +DEPENDS += cross/c-ares +ENV += PYCARES_USE_SYSTEM_LIB=1 + +# [pycurl] +DEPENDS += cross/curl +ENV += PYCURL_CURL_CONFIG=$(STAGING_INSTALL_PREFIX)/bin/curl-config + +# [PyNaCl] +DEPENDS += cross/libsodium +ENV += SODIUM_INSTALL=system + +# [PyYAML] +DEPENDS += cross/libyaml + +include ../../mk/spksrc.common.mk + +# [rpds-py] +# maturin canot be built as pre-requisite crossenv +ifneq ($(findstring $(ARCH),$(ARMv5_ARCHS)),$(ARCH)) +WHEELS += src/requirements-crossenv-rpds-py.txt +# Requires path to maturin from crossenv +ENV += PATH=$(WORK_DIR)/crossenv/build/bin:$(PATH) +endif + +include ../../mk/spksrc.python.mk + +# [greenlet] +ifeq ($(call version_ge $(TC_GCC), 4.9),1) +WHEELS += src/requirements-crossenv-greenlet-v3.txt +WHEELS_CPPFLAGS += [greenlet] -std=c++11 -fpermissive +endif + +# [numpy] <= 1.21.6 (armv5) +# [numpy] <= 1.22.4 (armv7l) +# [numpy] <= 1.24.4 last working version with gcc-4.9 +# These versions are now unsupported using py312 +# [numpy] >= 1.25.0 requires c++17 +ifeq ($(call version_gt, $(TC_GCC), 5.0),1) +WHEELS += src/requirements-crossenv-numpy.txt +endif + +# [pycryptodome] +ifeq ($(call version_ge, $(TC_GCC), 4.9),1) +WHEELS_CFLAGS += [pycryptodome] -std=c11 +else +WHEELS_CFLAGS += [pycryptodome] -std=c99 +endif + +# [pycryptodomex] +ifeq ($(call version_ge, $(TC_GCC), 4.9),1) +WHEELS_CFLAGS += [pycryptodomex] -std=c11 +else +WHEELS_CFLAGS += [pycryptodomex] -std=c99 +endif + +# [pydantic_core] +ifeq ($(call version_ge, $(TC_GCC), 4.9),1) +WHEELS_CFLAGS += [pydantic_core] -std=c11 +else +WHEELS_CFLAGS += [pydantic_core] -std=c99 +endif +# Requires path to maturin from crossenv +ENV += PATH=$(WORK_DIR)/crossenv/build/bin:$(PATH) + +# [rpds-py] +# Requires path to maturin from crossenv +ENV += PATH=$(WORK_DIR)/crossenv/build/bin:$(PATH) diff --git a/spk/python312-wheels/src/python3-pip.png b/spk/python312-wheels/src/python3-pip.png new file mode 100644 index 00000000000..d195821833d Binary files /dev/null and b/spk/python312-wheels/src/python3-pip.png differ diff --git a/spk/python312-wheels/src/requirements-abi3.txt b/spk/python312-wheels/src/requirements-abi3.txt new file mode 100644 index 00000000000..4e50951c5f1 --- /dev/null +++ b/spk/python312-wheels/src/requirements-abi3.txt @@ -0,0 +1,12 @@ +## +## All configurations below are optional and +## are provided to demonstrate how to build +## various wheels. Uncoment to enable. +## + +# [pycryptodome] + [pycryptodomex] +# Require: +# - CFLAGS=-sdt=c99 < gcc-4.9 +# - CFLAGS=-sdt=c11 >= gcc-4.9 +pycryptodome==3.20.0 +pycryptodomex==3.20.0 diff --git a/spk/python312-wheels/src/requirements-crossenv-greenlet-v3.txt b/spk/python312-wheels/src/requirements-crossenv-greenlet-v3.txt new file mode 100644 index 00000000000..e2ea909ebd6 --- /dev/null +++ b/spk/python312-wheels/src/requirements-crossenv-greenlet-v3.txt @@ -0,0 +1,10 @@ +## +## All configurations below are optional and +## are provided to demonstrate how to build +## various wheels. Uncoment to enable. +## + +# [greenlet] +# - Mandatory require full c++11 support +greenlet==3.0.3 +greenlet==3.1.1 diff --git a/spk/python312-wheels/src/requirements-crossenv-numpy.txt b/spk/python312-wheels/src/requirements-crossenv-numpy.txt new file mode 100644 index 00000000000..46e88a79f22 --- /dev/null +++ b/spk/python312-wheels/src/requirements-crossenv-numpy.txt @@ -0,0 +1,14 @@ +## +## All configurations below are optional and +## are provided to demonstrate how to build +## various wheels. Uncoment to enable. +## + +# [numpy] +# - Require Cython in cross/python310 crossenv +# - Numpy >= 1.26.x requires: +# c++17, meson-python, scikit-build-core +numpy==2.1.3 +numpy==2.0.2 +numpy==1.26.4 +numpy==1.25.1 diff --git a/spk/python312-wheels/src/requirements-crossenv-rpds-py.txt b/spk/python312-wheels/src/requirements-crossenv-rpds-py.txt new file mode 100644 index 00000000000..dbe0de961fc --- /dev/null +++ b/spk/python312-wheels/src/requirements-crossenv-rpds-py.txt @@ -0,0 +1,13 @@ +## +## All configurations below are optional and +## are provided to demonstrate how to build +## various wheels. Uncoment to enable. +## + +# [rpds-py] +# Require environment variables +# PYO3_CROSS_LIB_DIR=$(STAGING_INSTALL_PREFIX)/lib/ +# PYO3_CROSS_INCLUDE_DIR=$(STAGING_INSTALL_PREFIX)/include/ +# Requires path to maturin from crossenv +# ENV += PATH=$(WORK_DIR)/crossenv/build/bin:$(PATH) +rpds-py==0.20.0 diff --git a/spk/python312-wheels/src/requirements-crossenv.txt b/spk/python312-wheels/src/requirements-crossenv.txt new file mode 100644 index 00000000000..8bdbfaa2d62 --- /dev/null +++ b/spk/python312-wheels/src/requirements-crossenv.txt @@ -0,0 +1,116 @@ +## +## All configurations below are optional and +## are provided to demonstrate how to build +## various wheels. Uncoment to enable. +## + +# [bcrypt] +# Require environment variables +# PYO3_CROSS_LIB_DIR=$(STAGING_INSTALL_PREFIX)/lib/ +# PYO3_CROSS_INCLUDE_DIR=$(STAGING_INSTALL_PREFIX)/include/ +bcrypt==4.2.0 + +# [cryptography] +# Mandatory of using OPENSSL_*_DIR starting with version >= 40 +# https://docs.rs/openssl/latest/openssl/#automatic +# ENV += OPENSSL_LIB_DIR=$(STAGING_INSTALL_PREFIX)/lib/ +# ENV += OPENSSL_INCLUDE_DIR=$(STAGING_INSTALL_PREFIX)/include/ +cryptography==43.0.1 + +# Requirement for cryptography +cffi==1.17.0 + +# commonly used cross-compiled wheels +# All tested and can be enabled but may conflict +# with local python apps requirements + +borgbackup==1.2.6 +charset-normalizer==3.2.0 +greenlet==3.1.1 +immutables==0.20 +llfuse==1.5.0 +MarkupSafe==2.1.5 +msgpack==1.0.5 # used compiled verrsion for performance +msgpack-python==0.5.6 +netifaces==0.11.0 +psutil==6.0.0 +pyrsistent==0.19.3 +regex==2024.7.24 +ruamel.yaml.clib==0.2.12 +SQLAlchemy==2.0.32 +zope.interface==7.0.2 + +# [gevent] +# Depends: libev, c-ares +# Require environment variables +# GEVENTSETUP_EMBED_CARES=FALSE +# GEVENTSETUP_EMBED_LIBEV=FALSE +gevent==24.2.1 + +# [lxml] +# Depends: libxml2, libxslt +lxml==5.3.0 + +# [mysqlclient] +# Depends: mysql-connector-c, mariadb-connector-c +# Require environment variables +# MYSQLCLIENT_CFLAGS +# MYSQLCLIENT_LDFLAGS +mysqlclient==2.2.4 + +# [Pillow] +# Require --global-options arguments +# WHEELS_BUILD_ARGS = [Pillow] build_ext --disable-platform-guessing +Pillow==9.5.0 + +# [pycares] +# Depends: c-ares +# Require environment variables +# PYCARES_USE_SYSTEM_LIB=1 +pycares==4.4.0 + +# [pycurl] +# Depends: curl +# Require environment variables +# PYCURL_CURL_CONFIG +pycurl==7.45.3 + +# [pydantic_core] +# Requires path to maturin from crossenv +# Requires WHEELS_CFLAGS = -std=c11 for = gcc-4.9 +# Requires WHEELS_CFLAGS = -std=c99 for < gcc-4.9 +# Require environment variables +# PYO3_CROSS_LIB_DIR=$(STAGING_INSTALL_PREFIX)/lib/ +# PYO3_CROSS_INCLUDE_DIR=$(STAGING_INSTALL_PREFIX)/include/ +pydantic_core==2.23.0 + +# [PyNaCl] +# Depends: cross/libsodium +# Require environment variables +# SODIUM_INSTALL=system +PyNaCl==1.5.0 + +# [PyYAML] +# Depends: libyaml +PyYAML==6.0.2 + +# [rencode] +# Updated fork of the project +# rencode==1.0.6 <<-- unsupported +git+https://github.com/totaam/rencode.git@f6254ab26161f90b9c5e97915b9193fee805fc1f#egg=rencode==1.0.7 + +# [rpds-py] +# Require environment variables +# PYO3_CROSS_LIB_DIR=$(STAGING_INSTALL_PREFIX)/lib/ +# PYO3_CROSS_INCLUDE_DIR=$(STAGING_INSTALL_PREFIX)/include/ +# Requires path to maturin from crossenv +# ENV += PATH=$(WORK_DIR)/crossenv/build/bin:$(PATH) +rpds-py==0.10.2 + +# [ujson] +# - Require setuptools-scm in cross/python3* crossenv +ujson==5.10.0 + +# [webrtcvad] +# webrtcvad==2.0.10 # requires unreleased version at specific commit for qoriq arch +git+https://github.com/wiseman/py-webrtcvad@3bd761332a9404f5c9276105070ee814c4428342#egg=webrtcvad==2.0.10