xref: /OK3568_Linux_fs/buildroot/package/pkg-python.mk (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun################################################################################
2*4882a593Smuzhiyun# Python package infrastructure
3*4882a593Smuzhiyun#
4*4882a593Smuzhiyun# This file implements an infrastructure that eases development of
5*4882a593Smuzhiyun# package .mk files for Python packages. It should be used for all
6*4882a593Smuzhiyun# packages that use Python setup.py/setuptools as their build system.
7*4882a593Smuzhiyun#
8*4882a593Smuzhiyun# See the Buildroot documentation for details on the usage of this
9*4882a593Smuzhiyun# infrastructure
10*4882a593Smuzhiyun#
11*4882a593Smuzhiyun# In terms of implementation, this Python infrastructure requires the
12*4882a593Smuzhiyun# .mk file to only specify metadata information about the package:
13*4882a593Smuzhiyun# name, version, download URL, etc.
14*4882a593Smuzhiyun#
15*4882a593Smuzhiyun# We still allow the package .mk file to override what the different
16*4882a593Smuzhiyun# steps are doing, if needed. For example, if <PKG>_BUILD_CMDS is
17*4882a593Smuzhiyun# already defined, it is used as the list of commands to perform to
18*4882a593Smuzhiyun# build the package, instead of the default Python behaviour. The
19*4882a593Smuzhiyun# package can also define some post operation hooks.
20*4882a593Smuzhiyun#
21*4882a593Smuzhiyun################################################################################
22*4882a593Smuzhiyun
23*4882a593Smuzhiyunifeq ($$($(2)_NEEDS_HOST_PYTHON),python2)
24*4882a593Smuzhiyun$$(error "$(1): python2 is no longer supported!")
25*4882a593Smuzhiyunendif
26*4882a593Smuzhiyun
27*4882a593Smuzhiyunifeq ($(BR2_arm)$(BR2_armeb),y)
28*4882a593SmuzhiyunPKG_PYTHON_ARCH = arm
29*4882a593Smuzhiyunelse
30*4882a593SmuzhiyunPKG_PYTHON_ARCH = $(ARCH)
31*4882a593Smuzhiyunendif
32*4882a593SmuzhiyunPKG_PYTHON_HOST_PLATFORM = linux-$(PKG_PYTHON_ARCH)
33*4882a593Smuzhiyun
34*4882a593Smuzhiyun# basename does not evaluate if a file exists, so we must check to ensure
35*4882a593Smuzhiyun# the _sysconfigdata__linux_*.py file exists. The "|| true" is added to return
36*4882a593Smuzhiyun# an empty string if the file does not exist.
37*4882a593SmuzhiyunPKG_PYTHON_SYSCONFIGDATA_PATH = $(PYTHON3_PATH)/_sysconfigdata__linux_*.py
38*4882a593SmuzhiyunPKG_PYTHON_SYSCONFIGDATA_NAME = `{ [ -e $(PKG_PYTHON_SYSCONFIGDATA_PATH) ] && basename $(PKG_PYTHON_SYSCONFIGDATA_PATH) .py; } || true`
39*4882a593Smuzhiyun
40*4882a593Smuzhiyun# Target python packages
41*4882a593SmuzhiyunPKG_PYTHON_ENV = \
42*4882a593Smuzhiyun	_PYTHON_HOST_PLATFORM="$(PKG_PYTHON_HOST_PLATFORM)" \
43*4882a593Smuzhiyun	_PYTHON_PROJECT_BASE="$(PYTHON3_DIR)" \
44*4882a593Smuzhiyun	_PYTHON_SYSCONFIGDATA_NAME="$(PKG_PYTHON_SYSCONFIGDATA_NAME)" \
45*4882a593Smuzhiyun	PATH=$(BR_PATH) \
46*4882a593Smuzhiyun	$(TARGET_CONFIGURE_OPTS) \
47*4882a593Smuzhiyun	PYTHONPATH="$(PYTHON3_PATH)" \
48*4882a593Smuzhiyun	PYTHONNOUSERSITE=1 \
49*4882a593Smuzhiyun	_python_sysroot=$(STAGING_DIR) \
50*4882a593Smuzhiyun	_python_prefix=/usr \
51*4882a593Smuzhiyun	_python_exec_prefix=/usr
52*4882a593Smuzhiyun
53*4882a593Smuzhiyun# Host python packages
54*4882a593SmuzhiyunHOST_PKG_PYTHON_ENV = \
55*4882a593Smuzhiyun	PATH=$(BR_PATH) \
56*4882a593Smuzhiyun	PYTHONNOUSERSITE=1 \
57*4882a593Smuzhiyun	$(HOST_CONFIGURE_OPTS)
58*4882a593Smuzhiyun
59*4882a593Smuzhiyun# Target distutils-based packages
60*4882a593SmuzhiyunPKG_PYTHON_DISTUTILS_ENV = \
61*4882a593Smuzhiyun	$(PKG_PYTHON_ENV) \
62*4882a593Smuzhiyun	LDSHARED="$(TARGET_CROSS)gcc -shared" \
63*4882a593Smuzhiyun	SETUPTOOLS_USE_DISTUTILS=stdlib \
64*4882a593Smuzhiyun
65*4882a593SmuzhiyunPKG_PYTHON_DISTUTILS_BUILD_OPTS = \
66*4882a593Smuzhiyun	--executable=/usr/bin/python
67*4882a593Smuzhiyun
68*4882a593SmuzhiyunPKG_PYTHON_DISTUTILS_INSTALL_OPTS = \
69*4882a593Smuzhiyun	--install-headers=/usr/include/python$(PYTHON3_VERSION_MAJOR) \
70*4882a593Smuzhiyun	--prefix=/usr
71*4882a593Smuzhiyun
72*4882a593SmuzhiyunPKG_PYTHON_DISTUTILS_INSTALL_TARGET_OPTS = \
73*4882a593Smuzhiyun	$(PKG_PYTHON_DISTUTILS_INSTALL_OPTS) \
74*4882a593Smuzhiyun	--root=$(TARGET_DIR)
75*4882a593Smuzhiyun
76*4882a593SmuzhiyunPKG_PYTHON_DISTUTILS_INSTALL_STAGING_OPTS = \
77*4882a593Smuzhiyun	$(PKG_PYTHON_DISTUTILS_INSTALL_OPTS) \
78*4882a593Smuzhiyun	--root=$(STAGING_DIR)
79*4882a593Smuzhiyun
80*4882a593Smuzhiyun# Host distutils-based packages
81*4882a593SmuzhiyunHOST_PKG_PYTHON_DISTUTILS_ENV = \
82*4882a593Smuzhiyun	$(HOST_PKG_PYTHON_ENV) \
83*4882a593Smuzhiyun	SETUPTOOLS_USE_DISTUTILS=stdlib
84*4882a593Smuzhiyun
85*4882a593SmuzhiyunHOST_PKG_PYTHON_DISTUTILS_INSTALL_OPTS = \
86*4882a593Smuzhiyun	--prefix=$(HOST_DIR)
87*4882a593Smuzhiyun
88*4882a593Smuzhiyun# Target setuptools-based packages
89*4882a593SmuzhiyunPKG_PYTHON_SETUPTOOLS_ENV = \
90*4882a593Smuzhiyun	$(PKG_PYTHON_ENV) \
91*4882a593Smuzhiyun	SETUPTOOLS_USE_DISTUTILS=stdlib
92*4882a593Smuzhiyun
93*4882a593SmuzhiyunPKG_PYTHON_SETUPTOOLS_CMD = \
94*4882a593Smuzhiyun	$(if $(wildcard $($(PKG)_BUILDDIR)/setup.py),setup.py,-c 'from setuptools import setup;setup()')
95*4882a593Smuzhiyun
96*4882a593SmuzhiyunPKG_PYTHON_SETUPTOOLS_INSTALL_OPTS = \
97*4882a593Smuzhiyun	--install-headers=/usr/include/python$(PYTHON3_VERSION_MAJOR) \
98*4882a593Smuzhiyun	--prefix=/usr \
99*4882a593Smuzhiyun	--executable=/usr/bin/python \
100*4882a593Smuzhiyun	--single-version-externally-managed
101*4882a593Smuzhiyun
102*4882a593SmuzhiyunPKG_PYTHON_SETUPTOOLS_INSTALL_TARGET_OPTS = \
103*4882a593Smuzhiyun	$(PKG_PYTHON_SETUPTOOLS_INSTALL_OPTS) \
104*4882a593Smuzhiyun	--root=$(TARGET_DIR)
105*4882a593Smuzhiyun
106*4882a593SmuzhiyunPKG_PYTHON_SETUPTOOLS_INSTALL_STAGING_OPTS = \
107*4882a593Smuzhiyun	$(PKG_PYTHON_SETUPTOOLS_INSTALL_OPTS) \
108*4882a593Smuzhiyun	--root=$(STAGING_DIR)
109*4882a593Smuzhiyun
110*4882a593Smuzhiyun# Host setuptools-based packages
111*4882a593SmuzhiyunHOST_PKG_PYTHON_SETUPTOOLS_ENV = \
112*4882a593Smuzhiyun	$(HOST_PKG_PYTHON_ENV) \
113*4882a593Smuzhiyun	SETUPTOOLS_USE_DISTUTILS=stdlib
114*4882a593Smuzhiyun
115*4882a593SmuzhiyunHOST_PKG_PYTHON_SETUPTOOLS_INSTALL_OPTS = \
116*4882a593Smuzhiyun	--prefix=$(HOST_DIR) \
117*4882a593Smuzhiyun	--root=/ \
118*4882a593Smuzhiyun	--single-version-externally-managed
119*4882a593Smuzhiyun
120*4882a593Smuzhiyun# Target pep517-based packages
121*4882a593SmuzhiyunPKG_PYTHON_PEP517_ENV = \
122*4882a593Smuzhiyun	$(PKG_PYTHON_ENV)
123*4882a593Smuzhiyun
124*4882a593SmuzhiyunPKG_PYTHON_PEP517_INSTALL_OPTS = \
125*4882a593Smuzhiyun	--interpreter=/usr/bin/python \
126*4882a593Smuzhiyun	--script-kind=posix
127*4882a593Smuzhiyun
128*4882a593SmuzhiyunPKG_PYTHON_PEP517_INSTALL_TARGET_OPTS = \
129*4882a593Smuzhiyun	$(PKG_PYTHON_PEP517_INSTALL_OPTS) \
130*4882a593Smuzhiyun	--purelib=$(TARGET_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR)/site-packages \
131*4882a593Smuzhiyun	--headers=$(TARGET_DIR)/usr/include/python$(PYTHON3_VERSION_MAJOR) \
132*4882a593Smuzhiyun	--scripts=$(TARGET_DIR)/usr/bin \
133*4882a593Smuzhiyun	--data=$(TARGET_DIR)/usr
134*4882a593Smuzhiyun
135*4882a593SmuzhiyunPKG_PYTHON_PEP517_INSTALL_STAGING_OPTS = \
136*4882a593Smuzhiyun	$(PKG_PYTHON_PEP517_INSTALL_OPTS) \
137*4882a593Smuzhiyun	--purelib=$(STAGING_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR)/site-packages \
138*4882a593Smuzhiyun	--headers=$(STAGING_DIR)/usr/include/python$(PYTHON3_VERSION_MAJOR) \
139*4882a593Smuzhiyun	--scripts=$(STAGING_DIR)/usr/bin \
140*4882a593Smuzhiyun	--data=$(STAGING_DIR)/usr
141*4882a593Smuzhiyun
142*4882a593Smuzhiyun# Host pep517-based packages
143*4882a593SmuzhiyunHOST_PKG_PYTHON_PEP517_ENV = \
144*4882a593Smuzhiyun	$(HOST_PKG_PYTHON_ENV)
145*4882a593Smuzhiyun
146*4882a593SmuzhiyunHOST_PKG_PYTHON_PEP517_BOOTSTRAP_INSTALL_OPTS = \
147*4882a593Smuzhiyun	--installdir=$(HOST_DIR)/lib/python$(PYTHON3_VERSION_MAJOR)/site-packages
148*4882a593Smuzhiyun
149*4882a593Smuzhiyun################################################################################
150*4882a593Smuzhiyun# inner-python-package -- defines how the configuration, compilation
151*4882a593Smuzhiyun# and installation of a Python package should be done, implements a
152*4882a593Smuzhiyun# few hooks to tune the build process and calls the generic package
153*4882a593Smuzhiyun# infrastructure to generate the necessary make targets
154*4882a593Smuzhiyun#
155*4882a593Smuzhiyun#  argument 1 is the lowercase package name
156*4882a593Smuzhiyun#  argument 2 is the uppercase package name, including a HOST_ prefix
157*4882a593Smuzhiyun#             for host packages
158*4882a593Smuzhiyun#  argument 3 is the uppercase package name, without the HOST_ prefix
159*4882a593Smuzhiyun#             for host packages
160*4882a593Smuzhiyun#  argument 4 is the type (target or host)
161*4882a593Smuzhiyun################################################################################
162*4882a593Smuzhiyun
163*4882a593Smuzhiyundefine inner-python-package
164*4882a593Smuzhiyun
165*4882a593Smuzhiyunifndef $(2)_SETUP_TYPE
166*4882a593Smuzhiyun ifdef $(3)_SETUP_TYPE
167*4882a593Smuzhiyun  $(2)_SETUP_TYPE = $$($(3)_SETUP_TYPE)
168*4882a593Smuzhiyun else
169*4882a593Smuzhiyun  $$(error "$(2)_SETUP_TYPE must be set")
170*4882a593Smuzhiyun endif
171*4882a593Smuzhiyunendif
172*4882a593Smuzhiyun
173*4882a593Smuzhiyun# Distutils
174*4882a593Smuzhiyunifeq ($$($(2)_SETUP_TYPE),distutils)
175*4882a593Smuzhiyunifeq ($(4),target)
176*4882a593Smuzhiyun$(2)_BASE_ENV = $$(PKG_PYTHON_DISTUTILS_ENV)
177*4882a593Smuzhiyun$(2)_BASE_BUILD_CMD = setup.py build
178*4882a593Smuzhiyun$(2)_BASE_BUILD_OPTS = $$(PKG_PYTHON_DISTUTILS_BUILD_OPTS)
179*4882a593Smuzhiyun$(2)_BASE_INSTALL_TARGET_CMD  = setup.py install --no-compile $$(PKG_PYTHON_DISTUTILS_INSTALL_TARGET_OPTS)
180*4882a593Smuzhiyun$(2)_BASE_INSTALL_STAGING_CMD = setup.py install $$(PKG_PYTHON_DISTUTILS_INSTALL_STAGING_OPTS)
181*4882a593Smuzhiyunelse
182*4882a593Smuzhiyun$(2)_BASE_ENV         = $$(HOST_PKG_PYTHON_DISTUTILS_ENV)
183*4882a593Smuzhiyun$(2)_BASE_BUILD_CMD   = setup.py build
184*4882a593Smuzhiyun$(2)_BASE_INSTALL_CMD = setup.py install $$(HOST_PKG_PYTHON_DISTUTILS_INSTALL_OPTS)
185*4882a593Smuzhiyunendif
186*4882a593Smuzhiyun# Setuptools
187*4882a593Smuzhiyunelse ifeq ($$($(2)_SETUP_TYPE),setuptools)
188*4882a593Smuzhiyunifeq ($(4),target)
189*4882a593Smuzhiyun$(2)_BASE_ENV = $$(PKG_PYTHON_SETUPTOOLS_ENV)
190*4882a593Smuzhiyun$(2)_BASE_BUILD_CMD = $$(PKG_PYTHON_SETUPTOOLS_CMD) build
191*4882a593Smuzhiyun$(2)_BASE_INSTALL_TARGET_CMD = $$(PKG_PYTHON_SETUPTOOLS_CMD) install --no-compile $$(PKG_PYTHON_SETUPTOOLS_INSTALL_TARGET_OPTS)
192*4882a593Smuzhiyun$(2)_BASE_INSTALL_STAGING_CMD = $$(PKG_PYTHON_SETUPTOOLS_CMD) install $$(PKG_PYTHON_SETUPTOOLS_INSTALL_STAGING_OPTS)
193*4882a593Smuzhiyunelse
194*4882a593Smuzhiyun$(2)_BASE_ENV = $$(HOST_PKG_PYTHON_SETUPTOOLS_ENV)
195*4882a593Smuzhiyun$(2)_BASE_BUILD_CMD = $$(PKG_PYTHON_SETUPTOOLS_CMD) build
196*4882a593Smuzhiyun$(2)_BASE_INSTALL_CMD = $$(PKG_PYTHON_SETUPTOOLS_CMD) install $$(HOST_PKG_PYTHON_SETUPTOOLS_INSTALL_OPTS)
197*4882a593Smuzhiyunendif
198*4882a593Smuzhiyunelse ifneq ($$(filter flit pep517,$$($(2)_SETUP_TYPE)),)
199*4882a593Smuzhiyunifeq ($(4),target)
200*4882a593Smuzhiyun$(2)_BASE_ENV = $$(PKG_PYTHON_PEP517_ENV)
201*4882a593Smuzhiyun$(2)_BASE_BUILD_CMD = -m build -n -w
202*4882a593Smuzhiyun$(2)_BASE_INSTALL_TARGET_CMD = $(TOPDIR)/support/scripts/pyinstaller.py dist/* $$(PKG_PYTHON_PEP517_INSTALL_TARGET_OPTS)
203*4882a593Smuzhiyun$(2)_BASE_INSTALL_STAGING_CMD = $(TOPDIR)/support/scripts/pyinstaller.py dist/* $$(PKG_PYTHON_PEP517_INSTALL_STAGING_OPTS)
204*4882a593Smuzhiyunelse
205*4882a593Smuzhiyun$(2)_BASE_ENV = $$(HOST_PKG_PYTHON_PEP517_ENV)
206*4882a593Smuzhiyun$(2)_BASE_BUILD_CMD = -m build -n -w
207*4882a593Smuzhiyun$(2)_BASE_INSTALL_CMD = -m installer dist/*
208*4882a593Smuzhiyunendif
209*4882a593Smuzhiyunelse ifeq ($$($(2)_SETUP_TYPE),flit-bootstrap)
210*4882a593Smuzhiyunifeq ($(4),target)
211*4882a593Smuzhiyun$$(error flit-bootstrap setup type only supported for host packages)
212*4882a593Smuzhiyunelse
213*4882a593Smuzhiyun$(2)_BASE_ENV = $$(HOST_PKG_PYTHON_PEP517_ENV)
214*4882a593Smuzhiyun$(2)_BASE_BUILD_CMD = -m flit_core.wheel
215*4882a593Smuzhiyun$(2)_BASE_INSTALL_CMD ?= -m installer dist/*
216*4882a593Smuzhiyunendif
217*4882a593Smuzhiyunelse
218*4882a593Smuzhiyun$$(error "Invalid $(2)_SETUP_TYPE. Valid options are 'distutils', 'setuptools', 'pep517' or 'flit'.")
219*4882a593Smuzhiyunendif
220*4882a593Smuzhiyun
221*4882a593Smuzhiyun# Target packages need both the python interpreter on the target (for
222*4882a593Smuzhiyun# runtime) and the python interpreter on the host (for
223*4882a593Smuzhiyun# compilation). However, host packages only need the python
224*4882a593Smuzhiyun# interpreter on the host.
225*4882a593Smuzhiyun#
226*4882a593Smuzhiyunifeq ($(4),target)
227*4882a593Smuzhiyun$(2)_DEPENDENCIES += host-python3 python3
228*4882a593Smuzhiyunelse
229*4882a593Smuzhiyun$(2)_DEPENDENCIES += host-python3
230*4882a593Smuzhiyunendif # ($(4),target)
231*4882a593Smuzhiyun
232*4882a593Smuzhiyun# Setuptools based packages will need setuptools for the host Python
233*4882a593Smuzhiyun# interpreter (both host and target).
234*4882a593Smuzhiyun#
235*4882a593Smuzhiyunifeq ($$($(2)_SETUP_TYPE),setuptools)
236*4882a593Smuzhiyun$(2)_DEPENDENCIES += $$(if $$(filter host-python-setuptools,$(1)),,host-python-setuptools)
237*4882a593Smuzhiyunelse ifneq ($$(filter flit pep517,$$($(2)_SETUP_TYPE)),)
238*4882a593Smuzhiyun$(2)_DEPENDENCIES += host-python-pypa-build host-python-installer
239*4882a593Smuzhiyunifeq ($$($(2)_SETUP_TYPE),flit)
240*4882a593Smuzhiyun$(2)_DEPENDENCIES += host-python-flit-core
241*4882a593Smuzhiyunendif
242*4882a593Smuzhiyunelse ifeq ($$($(2)_SETUP_TYPE),flit-bootstrap)
243*4882a593Smuzhiyun# Don't add dependency on host-python-installer for
244*4882a593Smuzhiyun# host-python-installer itself, and its dependencies.
245*4882a593Smuzhiyunifeq ($$(filter host-python-flit-core host-python-installer,$(1)),)
246*4882a593Smuzhiyun$(2)_DEPENDENCIES += host-python-installer
247*4882a593Smuzhiyunendif
248*4882a593Smuzhiyunendif # SETUP_TYPE
249*4882a593Smuzhiyun
250*4882a593Smuzhiyun# Python interpreter to use for building the package.
251*4882a593Smuzhiyun#
252*4882a593Smuzhiyun$(2)_PYTHON_INTERPRETER = $$(HOST_DIR)/bin/python
253*4882a593Smuzhiyun
254*4882a593Smuzhiyun#
255*4882a593Smuzhiyun# Build step. Only define it if not already defined by the package .mk
256*4882a593Smuzhiyun# file.
257*4882a593Smuzhiyun#
258*4882a593Smuzhiyunifndef $(2)_BUILD_CMDS
259*4882a593Smuzhiyundefine $(2)_BUILD_CMDS
260*4882a593Smuzhiyun	(cd $$($$(PKG)_BUILDDIR)/; \
261*4882a593Smuzhiyun		$$($$(PKG)_BASE_ENV) $$($$(PKG)_ENV) \
262*4882a593Smuzhiyun		$$($(2)_PYTHON_INTERPRETER) \
263*4882a593Smuzhiyun		$$($$(PKG)_BASE_BUILD_CMD) \
264*4882a593Smuzhiyun		$$($$(PKG)_BASE_BUILD_OPTS) $$($$(PKG)_BUILD_OPTS))
265*4882a593Smuzhiyunendef
266*4882a593Smuzhiyunendif
267*4882a593Smuzhiyun
268*4882a593Smuzhiyun#
269*4882a593Smuzhiyun# Host installation step. Only define it if not already defined by the
270*4882a593Smuzhiyun# package .mk file.
271*4882a593Smuzhiyun#
272*4882a593Smuzhiyunifndef $(2)_INSTALL_CMDS
273*4882a593Smuzhiyundefine $(2)_INSTALL_CMDS
274*4882a593Smuzhiyun	(cd $$($$(PKG)_BUILDDIR)/; \
275*4882a593Smuzhiyun		$$($$(PKG)_BASE_ENV) $$($$(PKG)_ENV) \
276*4882a593Smuzhiyun		$$($(2)_PYTHON_INTERPRETER) \
277*4882a593Smuzhiyun		$$($$(PKG)_BASE_INSTALL_CMD) \
278*4882a593Smuzhiyun		$$($$(PKG)_INSTALL_OPTS))
279*4882a593Smuzhiyunendef
280*4882a593Smuzhiyunendif
281*4882a593Smuzhiyun
282*4882a593Smuzhiyun#
283*4882a593Smuzhiyun# Target installation step. Only define it if not already defined by
284*4882a593Smuzhiyun# the package .mk file.
285*4882a593Smuzhiyun#
286*4882a593Smuzhiyunifndef $(2)_INSTALL_TARGET_CMDS
287*4882a593Smuzhiyundefine $(2)_INSTALL_TARGET_CMDS
288*4882a593Smuzhiyun	(cd $$($$(PKG)_BUILDDIR)/; \
289*4882a593Smuzhiyun		$$($$(PKG)_BASE_ENV) $$($$(PKG)_ENV) \
290*4882a593Smuzhiyun		$$($(2)_PYTHON_INTERPRETER) \
291*4882a593Smuzhiyun		$$($$(PKG)_BASE_INSTALL_TARGET_CMD) \
292*4882a593Smuzhiyun		$$($$(PKG)_INSTALL_TARGET_OPTS))
293*4882a593Smuzhiyunendef
294*4882a593Smuzhiyunendif
295*4882a593Smuzhiyun
296*4882a593Smuzhiyun#
297*4882a593Smuzhiyun# Staging installation step. Only define it if not already defined by
298*4882a593Smuzhiyun# the package .mk file.
299*4882a593Smuzhiyun#
300*4882a593Smuzhiyunifndef $(2)_INSTALL_STAGING_CMDS
301*4882a593Smuzhiyundefine $(2)_INSTALL_STAGING_CMDS
302*4882a593Smuzhiyun	(cd $$($$(PKG)_BUILDDIR)/; \
303*4882a593Smuzhiyun		$$($$(PKG)_BASE_ENV) $$($$(PKG)_ENV) \
304*4882a593Smuzhiyun		$$($(2)_PYTHON_INTERPRETER) \
305*4882a593Smuzhiyun		$$($$(PKG)_BASE_INSTALL_STAGING_CMD) \
306*4882a593Smuzhiyun		$$($$(PKG)_INSTALL_STAGING_OPTS))
307*4882a593Smuzhiyunendef
308*4882a593Smuzhiyunendif
309*4882a593Smuzhiyun
310*4882a593Smuzhiyun# Call the generic package infrastructure to generate the necessary
311*4882a593Smuzhiyun# make targets
312*4882a593Smuzhiyun$(call inner-generic-package,$(1),$(2),$(3),$(4))
313*4882a593Smuzhiyun
314*4882a593Smuzhiyunendef
315*4882a593Smuzhiyun
316*4882a593Smuzhiyun################################################################################
317*4882a593Smuzhiyun# python-package -- the target generator macro for Python packages
318*4882a593Smuzhiyun################################################################################
319*4882a593Smuzhiyun
320*4882a593Smuzhiyunpython-package = $(call inner-python-package,$(pkgname),$(call UPPERCASE,$(pkgname)),$(call UPPERCASE,$(pkgname)),target)
321*4882a593Smuzhiyunhost-python-package = $(call inner-python-package,host-$(pkgname),$(call UPPERCASE,host-$(pkgname)),$(call UPPERCASE,$(pkgname)),host)
322