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
:=85cd12e9cf1d6d5a45f17f7afe1cebe7ee628d3282281c492e86adf636defa3f
21 PKG_MAINTAINER
:=Jeffery To
<jeffery.to@gmail.com
>
22 PKG_LICENSE
:=Python-2.0
.1 0BSD
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 # Disable stdlib modules
166 # Check for a better way in the future: https://github.com/python/cpython/issues/98558
168 py_cv_module__tkinter
=n
/a \
171 # Workaround for hardfloat mips
172 # https://bugs.python.org/issue46265
173 ifneq ($(findstring mips
,$(CONFIG_ARCH
)),)
174 ifeq ($(CONFIG_HAS_FPU
),y
)
176 ax_cv_check_cflags___fno_semantic_interposition
=no
181 PYTHONSTRICTEXTENSIONBUILD
=1
184 --enable-optimizations \
186 --disable-test-modules \
187 --with-build-python \
190 --without-ensurepip \
191 $(if
$(CONFIG_IPV6
),--enable-ipv6
) \
192 $(if
$(findstring mips
,$(CONFIG_ARCH
)),,--with-lto
)
195 $(call Build
/Install
/Default
,)
197 $(SED
) 's|$(TARGET_AR)|ar|g;s|$(TARGET_CROSS)readelf|readelf|g;s|$(TARGET_CC)|gcc|g;s|$(TARGET_CXX)|g++|g' \
198 $(PKG_INSTALL_DIR
)/usr
/lib
/python
$(PYTHON3_VERSION
)/_sysconfigdata_
*.py \
199 $(PKG_INSTALL_DIR
)/usr
/lib
/python
$(PYTHON3_VERSION
)/config-
$(PYTHON3_VERSION
)-*/Makefile
202 define Build
/InstallDev
203 $(INSTALL_DIR
) $(1)/usr
/include
205 $(PKG_INSTALL_DIR
)/usr
/include/python
$(PYTHON3_VERSION
) \
208 $(INSTALL_DIR
) $(1)/usr
/lib
210 $(PKG_INSTALL_DIR
)/usr
/lib
/python
$(PYTHON3_VERSION
) \
211 $(PKG_INSTALL_DIR
)/usr
/lib
/libpython
$(PYTHON3_VERSION
).so
* \
214 $(INSTALL_DIR
) $(1)/usr
/lib
/python
$(PYTHON3_VERSION
)/openwrt
216 '^(_PYTHON_HOST_PLATFORM|ABIFLAGS|MACHDEP|MULTIARCH)=' \
217 $(PKG_INSTALL_DIR
)/usr
/lib
/python
$(PYTHON3_VERSION
)/config-
$(PYTHON3_VERSION
)-*/Makefile
> \
218 $(1)/usr
/lib
/python
$(PYTHON3_VERSION
)/openwrt
/Makefile-vars
220 $(INSTALL_DIR
) $(1)/usr
/lib
/pkgconfig
222 $(PKG_INSTALL_DIR
)/usr
/lib
/pkgconfig
/python
*.
pc \
223 $(1)/usr
/lib
/pkgconfig
225 $(INSTALL_DIR
) $(2)/bin
227 $(PKG_INSTALL_DIR
)/usr
/bin
/python
$(PYTHON3_VERSION
)-config \
230 's|^prefix_real=.*$$$$|prefix_real="$(PYTHON3_DIR)"|' \
231 $(2)/bin
/python
$(PYTHON3_VERSION
)-config
234 PYTHON3_BASE_LIB_FILES
:= \
235 /usr
/lib
/python
$(PYTHON3_VERSION
)/encodings \
236 /usr
/lib
/python
$(PYTHON3_VERSION
)/_collections_abc.py \
237 /usr
/lib
/python
$(PYTHON3_VERSION
)/_sitebuiltins.py \
238 /usr
/lib
/python
$(PYTHON3_VERSION
)/_sysconfigdata_
*.py \
239 /usr
/lib
/python
$(PYTHON3_VERSION
)/_weakrefset.py \
240 /usr
/lib
/python
$(PYTHON3_VERSION
)/abc.py \
241 /usr
/lib
/python
$(PYTHON3_VERSION
)/codecs.py \
242 /usr
/lib
/python
$(PYTHON3_VERSION
)/genericpath.py \
243 /usr
/lib
/python
$(PYTHON3_VERSION
)/io.py \
244 /usr
/lib
/python
$(PYTHON3_VERSION
)/os.py \
245 /usr
/lib
/python
$(PYTHON3_VERSION
)/posixpath.py \
246 /usr
/lib
/python
$(PYTHON3_VERSION
)/site.py \
247 /usr
/lib
/python
$(PYTHON3_VERSION
)/sysconfig.py \
248 /usr
/lib
/python
$(PYTHON3_VERSION
)/stat.py
250 PYTHON3_LIB_FILES_DEL
+=$(PYTHON3_BASE_LIB_FILES
)
252 define Py3Package
/python3-base
/filespec
253 +|
/usr
/bin
/python
$(PYTHON3_VERSION
)
254 $(foreach lib_file
,$(PYTHON3_BASE_LIB_FILES
),
259 define Py3Package
/python3-light
/filespec
260 +|
/usr
/lib
/python
$(PYTHON3_VERSION
)
261 -|
/usr
/lib
/python
$(PYTHON3_VERSION
)/distutils
/cygwinccompiler.py
262 -|
/usr
/lib
/python
$(PYTHON3_VERSION
)/idlelib
263 -|
/usr
/lib
/python
$(PYTHON3_VERSION
)/tkinter
264 -|
/usr
/lib
/python
$(PYTHON3_VERSION
)/turtledemo
265 -|
/usr
/lib
/python
$(PYTHON3_VERSION
)/webbrowser.py
266 -|
/usr
/lib
/python
$(PYTHON3_VERSION
)/_osx_support.py
267 $(foreach lib_file
,$(filter /usr
/lib
/python
$(PYTHON3_VERSION
)/%,$(PYTHON3_LIB_FILES_DEL
)),
272 define Package
/libpython3
/install
273 # Adding the lib-dynload folder (even just empty) suppresses 2 warnings when starting Python
274 $(INSTALL_DIR
) $(1)/usr
/lib
/python
$(PYTHON3_VERSION
)/lib-dynload
/
275 $(CP
) $(PKG_INSTALL_DIR
)/usr
/lib
/libpython
$(PYTHON3_VERSION
).so
* $(1)/usr
/lib
/
278 define Py3Package
/python3-base
/install
279 $(INSTALL_DIR
) $(1)/usr
/bin
280 $(LN
) python
$(PYTHON3_VERSION
) $(1)/usr
/bin
/python3
281 $(LN
) python
$(PYTHON3_VERSION
) $(1)/usr
/bin
/python
284 Py3Package
/python3-light
/install:=:
285 Package
/python3
/install:=:
287 # libuuid is provided by e2fsprogs and uuid/uuid.h is moved into
288 # $(STAGING_DIR_HOST)/include/e2fsprogs
290 -I
$(STAGING_DIR_HOST
)/include/e2fsprogs
292 -I
$(STAGING_DIR_HOST
)/include/e2fsprogs
295 -Wl
$(comma
)-rpath
$(comma
)$(STAGING_DIR_HOSTPKG
)/lib
297 ifeq ($(HOST_OS
),Linux
)
299 -Wl
,--no-as-needed
-lrt
302 # Would be nice to be able to do this, but hosts are very fiddly
303 # HOST_MAKE_VARS += \
304 # PYTHONSTRICTEXTENSIONBUILD=1
306 # Bypass configure test
307 HOST_CONFIGURE_VARS
+= \
308 ac_cv_working_openssl_hashlib
=yes
310 ifeq ($(HOST_OS
),Darwin
)
311 HOST_CONFIGURE_VARS
+= \
312 ac_cv_header_libintl_h
=no
314 USE_PYTHON_CONFIG_PY
=1
317 HOST_CONFIGURE_ARGS
+= \
318 --enable-optimizations \
319 --disable-test-modules \
320 --with-ensurepip
=upgrade \
321 --with-ssl-default-suites
=openssl \
322 --with-system-expat \
325 define Host
/Configure
326 $(SED
) 's/^ENABLE_USER_SITE = None$$$$/ENABLE_USER_SITE = False/' $(HOST_BUILD_DIR
)/Lib
/site.py
327 $(call Host
/Configure
/Default
)
328 ls
$(HOST_BUILD_DIR
)/Lib
/ensurepip
/_bundled
/setuptools-
$(PYTHON3_SETUPTOOLS_VERSION
)-py3-none-any.whl
329 ls
$(HOST_BUILD_DIR
)/Lib
/ensurepip
/_bundled
/pip-
$(PYTHON3_PIP_VERSION
)-py3-none-any.whl
333 $(if
$(wildcard $(HOST_PYTHON3_PKG_DIR
)/.setuptools_installed_
$(PYTHON3_SETUPTOOLS_VERSION
)-$(PYTHON3_SETUPTOOLS_PKG_RELEASE
)),,
335 $(HOST_PYTHON3_PKG_DIR
)/pkg_resources \
336 $(HOST_PYTHON3_PKG_DIR
)/setuptools \
337 $(HOST_PYTHON3_PKG_DIR
)/setuptools-
* \
338 $(HOST_PYTHON3_PKG_DIR
)/.setuptools-patched
* \
339 $(HOST_PYTHON3_PKG_DIR
)/.setuptools_installed_
*
341 $(if
$(wildcard $(HOST_PYTHON3_PKG_DIR
)/.pip_installed_
$(PYTHON3_PIP_VERSION
)-$(PYTHON3_PIP_PKG_RELEASE
)),,
343 $(HOST_PYTHON3_PKG_DIR
)/pip \
344 $(HOST_PYTHON3_PKG_DIR
)/pip-
* \
345 $(HOST_PYTHON3_PKG_DIR
)/.pip-patched
* \
346 $(HOST_PYTHON3_PKG_DIR
)/.pip_installed_
*
348 $(call Host
/Install
/Default
)
349 $(if
$(wildcard $(HOST_PYTHON3_PKG_DIR
)/.setuptools_installed_
$(PYTHON3_SETUPTOOLS_VERSION
)-$(PYTHON3_SETUPTOOLS_PKG_RELEASE
)),,
350 $(call HostPatchDir
,$(HOST_PYTHON3_PKG_DIR
),.
/patches-host-setuptools
,)
351 touch
$(HOST_PYTHON3_PKG_DIR
)/.setuptools_installed_
$(PYTHON3_SETUPTOOLS_VERSION
)-$(PYTHON3_SETUPTOOLS_PKG_RELEASE
)
353 $(if
$(wildcard $(HOST_PYTHON3_PKG_DIR
)/.pip_installed_
$(PYTHON3_PIP_VERSION
)-$(PYTHON3_PIP_PKG_RELEASE
)),,
354 $(call HostPatchDir
,$(HOST_PYTHON3_PKG_DIR
),.
/patches-host-pip
,)
355 touch
$(HOST_PYTHON3_PKG_DIR
)/.pip_installed_
$(PYTHON3_PIP_VERSION
)-$(PYTHON3_PIP_PKG_RELEASE
)
359 $(eval
$(call HostBuild
))
361 $(foreach package
, $(PYTHON3_PACKAGES
), \
362 $(eval
$(call Py3Package
,$(package
))) \
363 $(eval
$(call BuildPackage
,$(package
))) \
364 $(eval
$(call BuildPackage
,$(package
)-src
)) \
367 $(eval
$(call BuildPackage
,libpython3
))
368 $(eval
$(call BuildPackage
,python3
))
370 $(eval
$(call Py3Package
,python3-base
))
371 $(eval
$(call Py3Package
,python3-light
))
373 $(eval
$(call BuildPackage
,python3-base
))
374 $(eval
$(call BuildPackage
,python3-light
))
376 $(eval
$(call BuildPackage
,python3-base-src
))
377 $(eval
$(call BuildPackage
,python3-light-src
))