2 # Copyright (C) 2006-2016 OpenWrt.org
4 # This is free software, licensed under the GNU General Public License v2.
5 # See /LICENSE for more information.
8 include $(TOPDIR
)/rules.mk
10 # The file included below defines PYTHON3_VERSION
11 include ..
/python3-version.mk
15 PKG_VERSION
:=$(PYTHON3_VERSION
).
$(PYTHON3_VERSION_MICRO
)
17 PKG_SOURCE
:=Python-
$(PKG_VERSION
).
tar.xz
18 PKG_SOURCE_URL
:=https
://www.python.org
/ftp
/python
/$(PKG_VERSION
)
19 PKG_HASH
:=2f0e409df2ab57aa9fc4cbddfb976af44e4e55bf6f619eee6bc5c2297264a7f6
21 PKG_MAINTAINER
:=Jeffery To
<jeffery.to@gmail.com
>
23 PKG_LICENSE_FILES
:=LICENSE Doc
/copyright.rst Doc
/license.rst Modules
/_ctypes
/darwin
/LICENSE Modules
/_ctypes
/libffi_osx
/LICENSE Modules
/expat
/COPYING
24 PKG_CPE_ID
:=cpe
:/a
:python
:python
26 # This file provides the necsessary host build variables
27 include ..
/python3-host.mk
31 include ..
/python3-package.mk
35 HOST_BUILD_PARALLEL
:=1
36 # LTO is handled here individually, see --with-lto below
37 # "no-lto" prevents CONFIG_USE_LTO to add additional and interfering flags
38 PKG_BUILD_FLAGS
:=no-lto
40 PKG_BUILD_DIR
:=$(BUILD_DIR
)/Python-
$(PKG_VERSION
)
41 HOST_BUILD_DIR
:=$(BUILD_DIR_HOST
)/Python-
$(PKG_VERSION
)
43 PKG_BUILD_DEPENDS
:=bluez python3
/host python-build
/host python-installer
/host python-wheel
/host
44 HOST_BUILD_DEPENDS
:=bzip2
/host libffi
/host
46 include $(INCLUDE_DIR
)/host-build.mk
47 include $(INCLUDE_DIR
)/package.mk
49 define Package
/python3
/Default
53 TITLE
:=Python
$(PYTHON3_VERSION
)
54 URL
:=https
://www.python.org
/
57 define Package
/python3
/Default
/description
58 Python is an interpreted
, interactive
, object-oriented programming
59 language. It incorporates modules
, exceptions
, dynamic typing
, very high
60 level dynamic data types
, and classes. It supports multiple programming
61 paradigms beyond object-oriented programming
, such
as procedural and
62 functional programming. Python combines remarkable power with very clear
63 syntax. It has interfaces to many system calls and libraries
, as well
as
64 to various window systems
, and is extensible in C or C
++. It is also
65 usable
as an extension language for applications that need a
66 programmable interface. Finally
, Python is portable
: it runs on many
67 Unix variants including Linux and macOS
, and on Windows.
70 define Package
/libpython3
71 $(call Package
/python3
/Default
)
74 ABI_VERSION
:=$(PYTHON3_VERSION
)
77 define Package
/libpython3
/description
78 $(call Package
/python3
/Default
/description
)
80 This package contains only core Python library.
83 define Package
/python3-base
84 $(call Package
/python3
/Default
)
85 TITLE
+= base interpreter
89 define Package
/python3-base
/description
90 $(call Package
/python3
/Default
/description
)
92 This package contains only the interpreter and the bare minimum for the
96 define Package
/python3-light
97 $(call Package
/python3
/Default
)
98 TITLE
+= light installation
99 DEPENDS
:=+python3-base
+libbz2
+zlib
102 define Package
/python3-light
/config
103 source
"$(SOURCE)/Config-python3-light.in"
106 define Package
/python3-light
/description
107 $(call Package
/python3
/Default
/description
)
109 This package installs the base interpreter package and contains the most
110 commonly used parts of the standard library.
113 PYTHON3_LIB_FILES_DEL
:=
115 PYTHON3_SO_SUFFIX
:=cpython-
$(PYTHON3_VERSION_MAJOR
)$(PYTHON3_VERSION_MINOR
).so
116 PYTHON3_PACKAGES_DEPENDS
:=
117 define Py3BasePackage
118 PYTHON3_PACKAGES
+=$(1)
120 PYTHON3_PACKAGES_DEPENDS
+=$(1)
122 PYTHON3_LIB_FILES_DEL
+=$(2)
124 Py3Package
/$(1)/filespec
=
126 define Py3Package
/$(1)/filespec
127 $(foreach lib_file
,$(2),
132 Py3Package
/$(1)/install?
=:
135 include .
/files
/python3-package-
*.mk
137 define Package
/python3
138 $(call Package
/python3
/Default
)
139 TITLE
+= programming language
140 DEPENDS
:=+python3-light
$(foreach package
,$(PYTHON3_PACKAGES_DEPENDS
),+$(package
))
143 define Package
/python3
/description
144 $(call Package
/python3
/Default
/description
)
146 This package installs almost
all parts of the standard Python
150 # Set READELF here so that the exact same readelf program name can be
151 # replaced in _sysconfigdata.py (in Build/Install)
152 TARGET_CONFIGURE_OPTS
+= \
153 READELF
="$(TARGET_CROSS)readelf"
157 -L
$(STAGING_DIR
)/usr
/lib
-L
$(STAGING_DIR
)/lib
159 # Bypass configure tests for cross compilation
161 ac_cv_buggy_getaddrinfo
=no \
162 ac_cv_file__dev_ptc
=no \
163 ac_cv_file__dev_ptmx
=yes
165 # Do not link with libbsd for flock
166 # https://github.com/openwrt/packages/issues/21161
168 ac_cv_lib_bsd_flock
=no
170 # Disable stdlib modules
171 # Check for a better way in the future: https://github.com/python/cpython/issues/98558
173 py_cv_module__tkinter
=n
/a \
176 # Workaround for hardfloat mips
177 # https://bugs.python.org/issue46265
178 ifneq ($(findstring mips
,$(CONFIG_ARCH
)),)
179 ifeq ($(CONFIG_HAS_FPU
),y
)
181 ax_cv_check_cflags___fno_semantic_interposition
=no
186 PYTHONSTRICTEXTENSIONBUILD
=1
189 --enable-optimizations \
191 --disable-test-modules \
192 --with-build-python \
195 --without-ensurepip \
196 $(if
$(CONFIG_IPV6
),--enable-ipv6
) \
197 $(if
$(findstring mips
,$(CONFIG_ARCH
)),,--with-lto
)
200 $(call Build
/Install
/Default
,)
202 $(SED
) 's|$(TARGET_AR)|ar|g;s|$(TARGET_CROSS)readelf|readelf|g;s|$(TARGET_CC)|gcc|g;s|$(TARGET_CXX)|g++|g' \
203 $(PKG_INSTALL_DIR
)/usr
/lib
/python
$(PYTHON3_VERSION
)/_sysconfigdata.py \
204 $(PKG_INSTALL_DIR
)/usr
/lib
/python
$(PYTHON3_VERSION
)/config-
$(PYTHON3_VERSION
)/Makefile
207 define Build
/InstallDev
208 $(INSTALL_DIR
) $(1)/usr
/include $(1)/usr
/lib
$(1)/usr
/lib
/pkgconfig
209 $(INSTALL_DIR
) $(2)/bin
211 $(PKG_INSTALL_DIR
)/usr
/include/python
$(PYTHON3_VERSION
) \
214 $(PKG_INSTALL_DIR
)/usr
/lib
/python
$(PYTHON3_VERSION
) \
215 $(PKG_INSTALL_DIR
)/usr
/lib
/libpython
$(PYTHON3_VERSION
).so
* \
218 '^_PYTHON_HOST_PLATFORM=' \
219 $(PKG_INSTALL_DIR
)/usr
/lib
/python
$(PYTHON3_VERSION
)/config-
$(PYTHON3_VERSION
)/Makefile
> \
220 $(1)/usr
/lib
/python
$(PYTHON3_VERSION
)/config-
$(PYTHON3_VERSION
)/Makefile-vars
222 $(PKG_INSTALL_DIR
)/usr
/lib
/pkgconfig
/python
*.
pc \
223 $(1)/usr
/lib
/pkgconfig
225 $(PKG_INSTALL_DIR
)/usr
/bin
/python
$(PYTHON3_VERSION
)-config \
228 's|^prefix_real=.*$$$$|prefix_real="$(PYTHON3_DIR)"|' \
229 $(2)/bin
/python
$(PYTHON3_VERSION
)-config
232 PYTHON3_BASE_LIB_FILES
:= \
233 /usr
/lib
/python
$(PYTHON3_VERSION
)/encodings \
234 /usr
/lib
/python
$(PYTHON3_VERSION
)/_collections_abc.py \
235 /usr
/lib
/python
$(PYTHON3_VERSION
)/_sitebuiltins.py \
236 /usr
/lib
/python
$(PYTHON3_VERSION
)/_sysconfigdata.py \
237 /usr
/lib
/python
$(PYTHON3_VERSION
)/_weakrefset.py \
238 /usr
/lib
/python
$(PYTHON3_VERSION
)/abc.py \
239 /usr
/lib
/python
$(PYTHON3_VERSION
)/codecs.py \
240 /usr
/lib
/python
$(PYTHON3_VERSION
)/genericpath.py \
241 /usr
/lib
/python
$(PYTHON3_VERSION
)/io.py \
242 /usr
/lib
/python
$(PYTHON3_VERSION
)/os.py \
243 /usr
/lib
/python
$(PYTHON3_VERSION
)/posixpath.py \
244 /usr
/lib
/python
$(PYTHON3_VERSION
)/site.py \
245 /usr
/lib
/python
$(PYTHON3_VERSION
)/sysconfig.py \
246 /usr
/lib
/python
$(PYTHON3_VERSION
)/stat.py
248 PYTHON3_LIB_FILES_DEL
+=$(PYTHON3_BASE_LIB_FILES
)
250 define Py3Package
/python3-base
/filespec
251 +|
/usr
/bin
/python
$(PYTHON3_VERSION
)
252 $(foreach lib_file
,$(PYTHON3_BASE_LIB_FILES
),
257 define Py3Package
/python3-light
/filespec
258 +|
/usr
/lib
/python
$(PYTHON3_VERSION
)
259 -|
/usr
/lib
/python
$(PYTHON3_VERSION
)/distutils
/cygwinccompiler.py
260 -|
/usr
/lib
/python
$(PYTHON3_VERSION
)/idlelib
261 -|
/usr
/lib
/python
$(PYTHON3_VERSION
)/tkinter
262 -|
/usr
/lib
/python
$(PYTHON3_VERSION
)/turtledemo
263 -|
/usr
/lib
/python
$(PYTHON3_VERSION
)/webbrowser.py
264 -|
/usr
/lib
/python
$(PYTHON3_VERSION
)/_osx_support.py
265 $(foreach lib_file
,$(filter /usr
/lib
/python
$(PYTHON3_VERSION
)/%,$(PYTHON3_LIB_FILES_DEL
)),
270 define Package
/libpython3
/install
271 # Adding the lib-dynload folder (even just empty) suppresses 2 warnings when starting Python
272 $(INSTALL_DIR
) $(1)/usr
/lib
/python
$(PYTHON3_VERSION
)/lib-dynload
/
273 $(CP
) $(PKG_INSTALL_DIR
)/usr
/lib
/libpython
$(PYTHON3_VERSION
).so
* $(1)/usr
/lib
/
276 define Py3Package
/python3-base
/install
277 $(INSTALL_DIR
) $(1)/usr
/bin
278 $(LN
) python
$(PYTHON3_VERSION
) $(1)/usr
/bin
/python3
279 $(LN
) python
$(PYTHON3_VERSION
) $(1)/usr
/bin
/python
282 Py3Package
/python3-light
/install:=:
283 Package
/python3
/install:=:
285 # libuuid is provided by e2fsprogs and uuid/uuid.h is moved into
286 # $(STAGING_DIR_HOST)/include/e2fsprogs
288 -I
$(STAGING_DIR_HOST
)/include/e2fsprogs
290 -I
$(STAGING_DIR_HOST
)/include/e2fsprogs
293 -Wl
$(comma
)-rpath
$(comma
)$(STAGING_DIR_HOSTPKG
)/lib
295 ifeq ($(HOST_OS
),Linux
)
297 -Wl
,--no-as-needed
-lrt
300 # Would be nice to be able to do this, but hosts are very fiddly
301 # HOST_MAKE_VARS += \
302 # PYTHONSTRICTEXTENSIONBUILD=1
304 # Bypass configure test
305 HOST_CONFIGURE_VARS
+= \
306 ac_cv_working_openssl_hashlib
=yes
308 ifeq ($(HOST_OS
),Darwin
)
309 HOST_CONFIGURE_VARS
+= \
310 ac_cv_header_libintl_h
=no
312 USE_PYTHON_CONFIG_PY
=1
315 HOST_CONFIGURE_ARGS
+= \
316 --enable-optimizations \
317 --disable-test-modules \
318 --with-ensurepip
=upgrade \
319 --with-ssl-default-suites
=openssl \
320 --with-system-expat \
323 define Host
/Configure
324 $(SED
) 's/^ENABLE_USER_SITE = None$$$$/ENABLE_USER_SITE = False/' $(HOST_BUILD_DIR
)/Lib
/site.py
325 $(call Host
/Configure
/Default
)
326 ls
$(HOST_BUILD_DIR
)/Lib
/ensurepip
/_bundled
/setuptools-
$(PYTHON3_SETUPTOOLS_VERSION
)-py3-none-any.whl
327 ls
$(HOST_BUILD_DIR
)/Lib
/ensurepip
/_bundled
/pip-
$(PYTHON3_PIP_VERSION
)-py3-none-any.whl
331 $(if
$(wildcard $(HOST_PYTHON3_PKG_DIR
)/.setuptools_installed_
$(PYTHON3_SETUPTOOLS_VERSION
)-$(PYTHON3_SETUPTOOLS_PKG_RELEASE
)),,
333 $(HOST_PYTHON3_PKG_DIR
)/pkg_resources \
334 $(HOST_PYTHON3_PKG_DIR
)/setuptools \
335 $(HOST_PYTHON3_PKG_DIR
)/setuptools-
* \
336 $(HOST_PYTHON3_PKG_DIR
)/.setuptools-patched
* \
337 $(HOST_PYTHON3_PKG_DIR
)/.setuptools_installed_
*
339 $(if
$(wildcard $(HOST_PYTHON3_PKG_DIR
)/.pip_installed_
$(PYTHON3_PIP_VERSION
)-$(PYTHON3_PIP_PKG_RELEASE
)),,
341 $(HOST_PYTHON3_PKG_DIR
)/pip \
342 $(HOST_PYTHON3_PKG_DIR
)/pip-
* \
343 $(HOST_PYTHON3_PKG_DIR
)/.pip-patched
* \
344 $(HOST_PYTHON3_PKG_DIR
)/.pip_installed_
*
346 $(call Host
/Install
/Default
)
347 $(if
$(wildcard $(HOST_PYTHON3_PKG_DIR
)/.setuptools_installed_
$(PYTHON3_SETUPTOOLS_VERSION
)-$(PYTHON3_SETUPTOOLS_PKG_RELEASE
)),,
348 $(call HostPatchDir
,$(HOST_PYTHON3_PKG_DIR
),.
/patches-host-setuptools
,)
349 touch
$(HOST_PYTHON3_PKG_DIR
)/.setuptools_installed_
$(PYTHON3_SETUPTOOLS_VERSION
)-$(PYTHON3_SETUPTOOLS_PKG_RELEASE
)
351 $(if
$(wildcard $(HOST_PYTHON3_PKG_DIR
)/.pip_installed_
$(PYTHON3_PIP_VERSION
)-$(PYTHON3_PIP_PKG_RELEASE
)),,
352 $(call HostPatchDir
,$(HOST_PYTHON3_PKG_DIR
),.
/patches-host-pip
,)
353 touch
$(HOST_PYTHON3_PKG_DIR
)/.pip_installed_
$(PYTHON3_PIP_VERSION
)-$(PYTHON3_PIP_PKG_RELEASE
)
357 $(eval
$(call HostBuild
))
359 $(foreach package
, $(PYTHON3_PACKAGES
), \
360 $(eval
$(call Py3Package
,$(package
))) \
361 $(eval
$(call BuildPackage
,$(package
))) \
362 $(eval
$(call BuildPackage
,$(package
)-src
)) \
365 $(eval
$(call BuildPackage
,libpython3
))
366 $(eval
$(call BuildPackage
,python3
))
368 $(eval
$(call Py3Package
,python3-base
))
369 $(eval
$(call Py3Package
,python3-light
))
371 $(eval
$(call BuildPackage
,python3-base
))
372 $(eval
$(call BuildPackage
,python3-light
))
374 $(eval
$(call BuildPackage
,python3-base-src
))
375 $(eval
$(call BuildPackage
,python3-light-src
))