openwrt-packages/lang/python/python3-host-build.mk

100 lines
2.7 KiB
Makefile

#
# Copyright (C) 2023 Jeffery To
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
python3_mk_path:=$(dir $(lastword $(MAKEFILE_LIST)))
include $(python3_mk_path)python3-host.mk
PYTHON3_HOST_BUILD?=1
PYTHON3_HOST_BUILD_CONFIG_SETTINGS?=
PYTHON3_HOST_BUILD_VARS?=
PYTHON3_HOST_BUILD_ARGS?=
PYTHON3_HOST_BUILD_PATH?=
PYTHON3_HOST_INSTALL_VARS?=
PYTHON3_HOST_WHEEL_NAME?=$(subst -,_,$(if $(PYPI_SOURCE_NAME),$(PYPI_SOURCE_NAME),$(PKG_NAME)))
PYTHON3_HOST_WHEEL_VERSION?=$(PKG_VERSION)
PYTHON3_HOST_BUILD_DIR?=$(HOST_BUILD_DIR)/$(PYTHON3_HOST_BUILD_PATH)
PYTHON3_HOST_DIR_NAME:=$(lastword $(subst /,$(space),$(CURDIR)))
PYTHON3_HOST_STAGING_DIR:=$(TMP_DIR)/host-stage-$(PYTHON3_HOST_DIR_NAME)
PYTHON3_HOST_STAGING_FILES_LIST_DIR:=$(HOST_BUILD_PREFIX)/stamp
PYTHON3_HOST_STAGING_FILES_LIST:=$(PYTHON3_HOST_STAGING_FILES_LIST_DIR)/$(PYTHON3_HOST_DIR_NAME).list
define Py3Host/Compile/Bootstrap
$(call HostPython3/Run, \
$(HOST_BUILD_DIR), \
-m flit_core.wheel \
--outdir "$(PYTHON3_HOST_BUILD_DIR)"/openwrt-build \
"$(PYTHON3_HOST_BUILD_DIR)" \
)
endef
define Py3Host/Compile
$(call HostPython3/Run, \
$(HOST_BUILD_DIR), \
-m build \
--no-isolation \
--outdir "$(PYTHON3_HOST_BUILD_DIR)"/openwrt-build \
--wheel \
$(foreach setting,$(PYTHON3_HOST_BUILD_CONFIG_SETTINGS),--config-setting=$(setting)) \
$(PYTHON3_HOST_BUILD_ARGS) \
"$(PYTHON3_HOST_BUILD_DIR)" \
, \
$(PYTHON3_HOST_BUILD_VARS) \
)
endef
define Py3Host/Install/Installer
$(call HostPython3/Run, \
$(HOST_BUILD_DIR), \
-m installer \
--destdir "$(1)" \
--prefix "" \
"$(PYTHON3_HOST_BUILD_DIR)"/openwrt-build/$(PYTHON3_HOST_WHEEL_NAME)-$(PYTHON3_HOST_WHEEL_VERSION)-*.whl \
, \
$(PYTHON3_HOST_INSTALL_VARS) \
)
endef
define Py3Host/Install
rm -rf "$(PYTHON3_HOST_STAGING_DIR)"
mkdir -p "$(PYTHON3_HOST_STAGING_DIR)" "$(PYTHON3_HOST_STAGING_FILES_LIST_DIR)"
$(call Py3Host/Install/Installer,$(PYTHON3_HOST_STAGING_DIR))
$(call Py3Host/Uninstall,$(1))
cd "$(PYTHON3_HOST_STAGING_DIR)" && find ./ > "$(PYTHON3_HOST_STAGING_DIR).files"
$(call locked, \
mv "$(PYTHON3_HOST_STAGING_DIR).files" "$(PYTHON3_HOST_STAGING_FILES_LIST)" && \
$(CP) "$(PYTHON3_HOST_STAGING_DIR)"/* "$(1)/", \
host-staging-dir \
)
rm -rf "$(PYTHON3_HOST_STAGING_DIR)"
endef
define Py3Host/Uninstall
if [ -f "$(PYTHON3_HOST_STAGING_FILES_LIST)" ]; then \
"$(SCRIPT_DIR)/clean-package.sh" \
"$(PYTHON3_HOST_STAGING_FILES_LIST)" \
"$(1)" ; \
rm -f "$(PYTHON3_HOST_STAGING_FILES_LIST)" ; \
fi
endef
ifeq ($(strip $(PYTHON3_HOST_BUILD)),1)
Host/Compile=$(Py3Host/Compile)
Host/Install=$(Py3Host/Install)
Host/Uninstall=$(call Py3Host/Uninstall,$(HOST_BUILD_PREFIX))
endif