python: Add proper support for pyproject.toml-based builds
This removes the changes made in
61f202c017
and adds actual support for
pyproject.toml-based (PEP 517) builds of Python packages.
Packages can force the use of the old build process by setting
PYTHON3_PKG_FORCE_DISTUTILS_SETUP:=1; this should only be a temporary
workaround until the package can be updated/fixed to use the new build
process.
Signed-off-by: Jeffery To <jeffery.to@gmail.com>
This commit is contained in:
parent
705176cd6a
commit
5156c0c82b
|
@ -98,12 +98,6 @@ HOST_PYTHON3_PIP_VARS:= \
|
|||
PIP_CONFIG_FILE=/dev/null \
|
||||
PIP_DISABLE_PIP_VERSION_CHECK=1
|
||||
|
||||
define SetupPyShim
|
||||
if [ -f $(1)/pyproject.toml ] && [ ! -f $(1)/setup.py ] ; then \
|
||||
$(CP) $(python3_mk_path)setup.py.shim $(1)setup.py ; \
|
||||
fi
|
||||
endef
|
||||
|
||||
# Multiple concurrent pip processes can lead to errors or unexpected results: https://github.com/pypa/pip/issues/2361
|
||||
# $(1) => packages to install
|
||||
define HostPython3/PipInstall
|
||||
|
|
|
@ -56,18 +56,6 @@ define Python3/Run
|
|||
$(HOST_PYTHON3_BIN) $(2)
|
||||
endef
|
||||
|
||||
# $(1) => build subdir
|
||||
# $(2) => additional arguments to setup.py
|
||||
# $(3) => additional variables
|
||||
define Python3/ModSetup
|
||||
$(INSTALL_DIR) $(PKG_INSTALL_DIR)/$(PYTHON3_PKG_DIR)
|
||||
$(call SetupPyShim,$(PKG_BUILD_DIR)/$(strip $(1)))
|
||||
$(call Python3/Run, \
|
||||
$(PKG_BUILD_DIR)/$(strip $(1)), \
|
||||
setup.py $(2), \
|
||||
$(3) PY_PKG_VERSION=$(PKG_VERSION))
|
||||
endef
|
||||
|
||||
define Python3/FixShebang
|
||||
$(SED) "1"'!'"b;s,^#"'!'".*python.*,#"'!'"/usr/bin/python3," -i --follow-symlinks $(1)
|
||||
endef
|
||||
|
@ -189,10 +177,26 @@ endef
|
|||
|
||||
# Py3Build
|
||||
|
||||
PYTHON3_PKG_SETUP_DIR ?=
|
||||
PYTHON3_PKG_SETUP_GLOBAL_ARGS ?=
|
||||
PYTHON3_PKG_SETUP_ARGS ?= --single-version-externally-managed
|
||||
PYTHON3_PKG_SETUP_VARS ?=
|
||||
PYTHON3_PKG_BUILD?=1
|
||||
PYTHON3_PKG_FORCE_DISTUTILS_SETUP?=
|
||||
|
||||
PYTHON3_PKG_SETUP_DIR?=
|
||||
PYTHON3_PKG_SETUP_GLOBAL_ARGS?=
|
||||
PYTHON3_PKG_SETUP_ARGS?=--single-version-externally-managed
|
||||
PYTHON3_PKG_SETUP_VARS?=
|
||||
|
||||
PYTHON3_PKG_BUILD_CONFIG_SETTINGS?=
|
||||
PYTHON3_PKG_BUILD_VARS?=$(PYTHON3_PKG_SETUP_VARS)
|
||||
PYTHON3_PKG_BUILD_ARGS?=
|
||||
PYTHON3_PKG_BUILD_PATH?=$(PYTHON3_PKG_SETUP_DIR)
|
||||
|
||||
PYTHON3_PKG_INSTALL_VARS?=
|
||||
|
||||
PYTHON3_PKG_WHEEL_NAME?=$(subst -,_,$(if $(PYPI_SOURCE_NAME),$(PYPI_SOURCE_NAME),$(PKG_NAME)))
|
||||
PYTHON3_PKG_WHEEL_VERSION?=$(PKG_VERSION)
|
||||
|
||||
PYTHON3_PKG_BUILD_DIR?=$(PKG_BUILD_DIR)/$(PYTHON3_PKG_BUILD_PATH)
|
||||
|
||||
|
||||
PYTHON3_PKG_HOST_PIP_INSTALL_ARGS = \
|
||||
$(foreach req,$(HOST_PYTHON3_PACKAGE_BUILD_DEPENDS), \
|
||||
|
@ -224,21 +228,58 @@ define Py3Build/InstallBuildDepends
|
|||
)
|
||||
endef
|
||||
|
||||
define Py3Build/Compile/Default
|
||||
define Py3Build/Compile/Distutils
|
||||
$(call Py3Build/InstallBuildDepends)
|
||||
$(call Python3/ModSetup, \
|
||||
$(PYTHON3_PKG_SETUP_DIR), \
|
||||
$(PYTHON3_PKG_SETUP_GLOBAL_ARGS) \
|
||||
install --prefix="/usr" --root="$(PKG_INSTALL_DIR)" \
|
||||
$(PYTHON3_PKG_SETUP_ARGS), \
|
||||
$(INSTALL_DIR) $(PKG_INSTALL_DIR)/$(PYTHON3_PKG_DIR)
|
||||
$(call Python3/Run, \
|
||||
$(PKG_BUILD_DIR)/$(strip $(PYTHON3_PKG_SETUP_DIR)), \
|
||||
setup.py \
|
||||
$(PYTHON3_PKG_SETUP_GLOBAL_ARGS) \
|
||||
install \
|
||||
--prefix="/usr" \
|
||||
--root="$(PKG_INSTALL_DIR)" \
|
||||
$(PYTHON3_PKG_SETUP_ARGS) \
|
||||
, \
|
||||
$(PYTHON3_PKG_SETUP_VARS) \
|
||||
)
|
||||
endef
|
||||
|
||||
Py3Build/Configure=$(Py3Build/Configure/Default)
|
||||
Py3Build/Compile=$(Py3Build/Compile/Default)
|
||||
define Py3Build/Compile/Default
|
||||
$(call Py3Build/InstallBuildDepends)
|
||||
$(call Python3/Run, \
|
||||
$(PKG_BUILD_DIR), \
|
||||
-m build \
|
||||
--no-isolation \
|
||||
--outdir "$(PYTHON3_PKG_BUILD_DIR)"/openwrt-build \
|
||||
--wheel \
|
||||
$(foreach setting,$(PYTHON3_PKG_BUILD_CONFIG_SETTINGS),--config-setting=$(setting)) \
|
||||
$(PYTHON3_PKG_BUILD_ARGS) \
|
||||
"$(PYTHON3_PKG_BUILD_DIR)" \
|
||||
, \
|
||||
$(PYTHON3_PKG_BUILD_VARS) \
|
||||
)
|
||||
endef
|
||||
|
||||
PYTHON3_PKG_BUILD ?= 1
|
||||
define Py3Build/Install/Default
|
||||
$(call Python3/Run, \
|
||||
$(PKG_BUILD_DIR), \
|
||||
-m installer \
|
||||
--destdir "$(PKG_INSTALL_DIR)" \
|
||||
--no-compile-bytecode \
|
||||
--prefix /usr \
|
||||
"$(PYTHON3_PKG_BUILD_DIR)"/openwrt-build/$(PYTHON3_PKG_WHEEL_NAME)-$(PYTHON3_PKG_WHEEL_VERSION)-*.whl \
|
||||
, \
|
||||
$(PYTHON3_PKG_INSTALL_VARS) \
|
||||
)
|
||||
endef
|
||||
|
||||
Py3Build/Compile=$(Py3Build/Compile/Default)
|
||||
Py3Build/Install=$(Py3Build/Install/Default)
|
||||
|
||||
ifeq ($(strip $(PYTHON3_PKG_FORCE_DISTUTILS_SETUP)),1)
|
||||
Py3Build/Compile=$(Py3Build/Compile/Distutils)
|
||||
Py3Build/Install:=:
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(PYTHON3_PKG_BUILD)),1)
|
||||
ifeq ($(PY3),stdlib)
|
||||
|
@ -246,4 +287,5 @@ ifeq ($(strip $(PYTHON3_PKG_BUILD)),1)
|
|||
endif
|
||||
Hooks/Configure/Post+=Py3Build/CheckHostPipVersionMatch
|
||||
Build/Compile=$(Py3Build/Compile)
|
||||
Build/Install=$(Py3Build/Install)
|
||||
endif
|
||||
|
|
|
@ -11,7 +11,7 @@ include $(TOPDIR)/rules.mk
|
|||
include ../python3-version.mk
|
||||
|
||||
PKG_NAME:=python3
|
||||
PKG_RELEASE:=3
|
||||
PKG_RELEASE:=4
|
||||
PKG_VERSION:=$(PYTHON3_VERSION).$(PYTHON3_VERSION_MICRO)
|
||||
|
||||
PKG_SOURCE:=Python-$(PKG_VERSION).tar.xz
|
||||
|
@ -45,7 +45,7 @@ PKG_CONFIG_DEPENDS:= \
|
|||
CONFIG_PACKAGE_python3-pkg-resources \
|
||||
CONFIG_PACKAGE_python3-setuptools CONFIG_PACKAGE_python3-pip
|
||||
|
||||
PKG_BUILD_DEPENDS:=bluez python3/host
|
||||
PKG_BUILD_DEPENDS:=bluez python3/host python-build/host python-installer/host python-wheel/host
|
||||
HOST_BUILD_DEPENDS:=bzip2/host libffi/host
|
||||
|
||||
include $(INCLUDE_DIR)/host-build.mk
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
import os
|
||||
import setuptools
|
||||
|
||||
# FIXME: see about getting rid of PY_PKG_VERSION asap when setuptools handles this correctly
|
||||
if __name__ == "__main__":
|
||||
setuptools.setup(version=os.environ['PY_PKG_VERSION'])
|
Loading…
Reference in New Issue