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 # FIXME: if updating, get rid of [1] & [2] asap
20 PKG_HASH
:=a7f1265b6e1a5de1ec5c3ec7019ab53413469934758311e9d240c46e5ae6e177
22 PKG_MAINTAINER
:=Jeffery To
<jeffery.to@gmail.com
>
24 PKG_LICENSE_FILES
:=LICENSE Doc
/copyright.rst Doc
/license.rst Modules
/_ctypes
/darwin
/LICENSE Modules
/_ctypes
/libffi_osx
/LICENSE Modules
/expat
/COPYING
25 PKG_CPE_ID
:=cpe
:/a
:python
:python
27 # This file provides the necsessary host build variables
28 include ..
/python3-host.mk
32 include ..
/python3-package.mk
37 HOST_BUILD_PARALLEL
:=1
39 PKG_BUILD_DIR
:=$(BUILD_DIR
)/Python-
$(PKG_VERSION
)
40 HOST_BUILD_DIR
:=$(BUILD_DIR_HOST
)/Python-
$(PKG_VERSION
)
42 PKG_CONFIG_DEPENDS
:= \
43 CONFIG_PACKAGE_python3-pkg-resources \
44 CONFIG_PACKAGE_python3-setuptools CONFIG_PACKAGE_python3-pip
46 PKG_BUILD_DEPENDS
:=bluez python3
/host
47 HOST_BUILD_DEPENDS
:=bzip2
/host libffi
/host
49 include $(INCLUDE_DIR
)/host-build.mk
50 include $(INCLUDE_DIR
)/package.mk
52 define Package
/python3
/Default
56 TITLE
:=Python
$(PYTHON3_VERSION
) programming language
57 URL
:=https
://www.python.org
/
60 define Package
/python3
/Default
/description
61 Python is a dynamic object-oriented programming language that can be used
62 for many kinds of software development. It offers strong support for
63 integration with other languages and tools
, comes with extensive standard
64 libraries
, and can be learned in a few days. Many Python programmers
65 report substantial productivity gains and feel the language encourages
66 the development of higher quality
, more maintainable code.
69 define Package
/libpython3
70 $(call Package
/python3
/Default
)
71 TITLE
:=Python
$(PYTHON3_VERSION
) core library
72 DEPENDS
:=+libpthread
+zlib
73 ABI_VERSION
:=$(PYTHON3_VERSION
)
76 define Package
/libpython3
/description
77 This package contains only core Python library.
80 define Package
/python3-base
81 $(call Package
/python3
/Default
)
82 TITLE
:=Python
$(PYTHON3_VERSION
) interpreter
83 DEPENDS
:=+libpthread
+zlib
+libpython3
86 define Package
/python3-base
/description
87 This package contains only the interpreter and the bare minimum
88 for the interpreter to start.
91 define Package
/python3-light
92 $(call Package
/python3
/Default
)
93 TITLE
:=Python
$(PYTHON3_VERSION
) light installation
94 DEPENDS
:=+python3-base
+libffi
+libbz2
97 define Package
/python3-light
/config
98 source
"$(SOURCE)/Config-python3-light.in"
101 define Package
/python3-light
/description
102 This package is essentially the python3-base package plus
103 a few of the rarely used
(and big
) libraries stripped out
104 into separate packages.
107 PYTHON3_LIB_FILES_DEL
:=
109 PYTHON3_SO_SUFFIX
:=cpython-
$(PYTHON3_VERSION_MAJOR
)$(PYTHON3_VERSION_MINOR
).so
110 PYTHON3_PACKAGES_DEPENDS
:=
111 define Py3BasePackage
112 PYTHON3_PACKAGES
+=$(1)
114 PYTHON3_PACKAGES_DEPENDS
+=$(1)
116 PYTHON3_LIB_FILES_DEL
+=$(2)
117 define Py3Package
/$(1)/filespec
119 $(subst $(space
),$(newline
),$(foreach lib_file
,$(2),+|
$(lib_file
)))
120 -|
/usr
/lib
/python
$(PYTHON3_VERSION
)/*/test
121 -|
/usr
/lib
/python
$(PYTHON3_VERSION
)/*/tests
124 Py3Package
/$(1)/install?
=:
127 include .
/files
/python3-package-
*.mk
129 define Package
/python3
130 $(call Package
/python3
/Default
)
131 DEPENDS
:=+python3-light
$(foreach package
,$(PYTHON3_PACKAGES_DEPENDS
),+$(package
))
134 define Package
/python3
/description
135 This package contains the
(almost
) full Python
install.
136 It
's python3-light + all other packages.
141 -L$(STAGING_DIR)/usr/lib -L$(STAGING_DIR)/lib
143 # Workaround for hardfloat mips
144 # https://bugs.python.org/issue46265
145 ifneq ($(findstring mips,$(CONFIG_ARCH)),)
146 ifeq ($(CONFIG_HAS_FPU),y)
148 ax_cv_check_cflags___fno_semantic_interposition=no
153 PYTHONSTRICTEXTENSIONBUILD=1
156 --enable-optimizations \
160 --without-ensurepip \
162 --disable-test-modules \
163 $(if $(CONFIG_IPV6),--enable-ipv6) \
164 $(if $(findstring mips,$(CONFIG_ARCH)),,--with-lto) \
165 CONFIG_SITE="$(PKG_BUILD_DIR)/config.site" \
166 OPT="$(TARGET_CFLAGS)"
169 $(call Build/Prepare/Default)
170 $(CP) ./files/config.site $(PKG_BUILD_DIR)/config.site
173 ifdef CONFIG_PACKAGE_python3-setuptools
174 PYTHON3_SETUPTOOLS_BUILD:=1
177 ifdef CONFIG_PACKAGE_python3-pkg-resources
178 PYTHON3_SETUPTOOLS_BUILD:=1
181 ifeq ($(PYTHON3_SETUPTOOLS_BUILD),1)
182 define Build/Compile/python3-setuptools
183 $(HOST_PYTHON3_PIP) \
184 --disable-pip-version-check \
185 --cache-dir "$(DL_DIR)/pip-cache" \
188 --root=$(PKG_BUILD_DIR)/install-setuptools \
190 $(PKG_BUILD_DIR)/Lib/ensurepip/_bundled/setuptools-$(PYTHON3_SETUPTOOLS_VERSION)-py3-none-any.whl
191 $(call PatchDir,$(PKG_BUILD_DIR)/install-setuptools/usr/lib/python$(PYTHON3_VERSION)/site-packages,./patches-setuptools,)
194 define Build/Compile/python3-setuptools
195 ls $(PKG_BUILD_DIR)/Lib/ensurepip/_bundled/setuptools-$(PYTHON3_SETUPTOOLS_VERSION)-py3-none-any.whl
197 endif # CONFIG_PACKAGE_python3-setuptools
199 ifdef CONFIG_PACKAGE_python3-pip
200 define Build/Compile/python3-pip
201 $(HOST_PYTHON3_PIP) \
202 --disable-pip-version-check \
203 --cache-dir "$(DL_DIR)/pip-cache" \
206 --root=$(PKG_BUILD_DIR)/install-pip \
208 $(PKG_BUILD_DIR)/Lib/ensurepip/_bundled/pip-$(PYTHON3_PIP_VERSION)-py3-none-any.whl
209 # FIXME: [1] get rid of this asap; 'patch
' doesn't like Windows endings
, and this file is full of them...
210 # I actually tried this in a number of ways and the only way to fix this is to implement
211 # a poor-man's dos2unix using sed.
212 # The issue is with the pip package; it seems that it throws in some Windows line-endings
213 # and 'patch' won't handle them. So, we do a "dos2unix" and then patch.
214 # We can get rid of this once this is solved upstream and in pip:
215 # https://github.com/pypa/pep517/pull/130
216 sed
's/\r//' -i
$(PKG_BUILD_DIR
)/install-pip
/usr
/lib
/python
$(PYTHON3_VERSION
)/site-packages
/pip
/_vendor
/pep517
/in_process
/__init__.py
217 $(call PatchDir
,$(PKG_BUILD_DIR
)/install-pip
/usr
/lib
/python
$(PYTHON3_VERSION
)/site-packages
,.
/patches-pip
,)
220 define Build
/Compile
/python3-pip
221 ls
$(PKG_BUILD_DIR
)/Lib
/ensurepip
/_bundled
/pip-
$(PYTHON3_PIP_VERSION
)-py3-none-any.whl
223 endif # CONFIG_PACKAGE_python3-pip
226 $(call Build
/Compile
/Default
)
227 # Use host pip to install python-setuptools
228 $(call Build
/Compile
/python3-setuptools
)
229 $(call Build
/Compile
/python3-pip
)
232 define Build
/InstallDev
233 $(INSTALL_DIR
) $(1)/usr
/include $(1)/usr
/lib
$(1)/usr
/lib
/pkgconfig
234 $(INSTALL_DIR
) $(2)/bin
236 $(PKG_INSTALL_DIR
)/usr
/include/python
$(PYTHON3_VERSION
) \
239 $(PKG_INSTALL_DIR
)/usr
/lib
/python
$(PYTHON3_VERSION
) \
240 $(PKG_INSTALL_DIR
)/usr
/lib
/libpython
$(PYTHON3_VERSION
).so
* \
243 '^_PYTHON_HOST_PLATFORM=' \
244 $(PKG_INSTALL_DIR
)/usr
/lib
/python
$(PYTHON3_VERSION
)/config-
$(PYTHON3_VERSION
)/Makefile
> \
245 $(1)/usr
/lib
/python
$(PYTHON3_VERSION
)/config-
$(PYTHON3_VERSION
)/Makefile-vars
247 $(PKG_INSTALL_DIR
)/usr
/lib
/pkgconfig
/python
*.
pc \
248 $(1)/usr
/lib
/pkgconfig
250 $(PKG_INSTALL_DIR
)/usr
/bin
/python
$(PYTHON3_VERSION
)-config \
253 's|^prefix_real=.*$$$$|prefix_real="$(PYTHON3_DIR)"|' \
254 $(2)/bin
/python
$(PYTHON3_VERSION
)-config
257 PYTHON3_BASE_LIB_FILES
:= \
258 /usr
/lib
/python
$(PYTHON3_VERSION
)/encodings \
259 /usr
/lib
/python
$(PYTHON3_VERSION
)/_collections_abc.py \
260 /usr
/lib
/python
$(PYTHON3_VERSION
)/_sitebuiltins.py \
261 /usr
/lib
/python
$(PYTHON3_VERSION
)/_sysconfigdata.py \
262 /usr
/lib
/python
$(PYTHON3_VERSION
)/_weakrefset.py \
263 /usr
/lib
/python
$(PYTHON3_VERSION
)/abc.py \
264 /usr
/lib
/python
$(PYTHON3_VERSION
)/codecs.py \
265 /usr
/lib
/python
$(PYTHON3_VERSION
)/genericpath.py \
266 /usr
/lib
/python
$(PYTHON3_VERSION
)/io.py \
267 /usr
/lib
/python
$(PYTHON3_VERSION
)/os.py \
268 /usr
/lib
/python
$(PYTHON3_VERSION
)/posixpath.py \
269 /usr
/lib
/python
$(PYTHON3_VERSION
)/site.py \
270 /usr
/lib
/python
$(PYTHON3_VERSION
)/sysconfig.py \
271 /usr
/lib
/python
$(PYTHON3_VERSION
)/stat.py
273 PYTHON3_LIB_FILES_DEL
+=$(PYTHON3_BASE_LIB_FILES
)
275 define Py3Package
/python3-base
/filespec
276 +|
/usr
/bin
/python
$(PYTHON3_VERSION
)
277 $(subst $(space
),$(newline
),$(foreach lib_file
,$(PYTHON3_BASE_LIB_FILES
),+|
$(lib_file
)))
280 define Py3Package
/python3-light
/filespec
281 +|
/usr
/lib
/python
$(PYTHON3_VERSION
)
282 -|
/usr
/lib
/python
$(PYTHON3_VERSION
)/distutils
/cygwinccompiler.py
283 -|
/usr
/lib
/python
$(PYTHON3_VERSION
)/distutils
/command
/wininst
*
284 -|
/usr
/lib
/python
$(PYTHON3_VERSION
)/ensurepip
285 -|
/usr
/lib
/python
$(PYTHON3_VERSION
)/idlelib
286 -|
/usr
/lib
/python
$(PYTHON3_VERSION
)/tkinter
287 -|
/usr
/lib
/python
$(PYTHON3_VERSION
)/turtledemo
288 -|
/usr
/lib
/python
$(PYTHON3_VERSION
)/lib-dynload
/_test
*.so
289 -|
/usr
/lib
/python
$(PYTHON3_VERSION
)/pdb.doc
290 -|
/usr
/lib
/python
$(PYTHON3_VERSION
)/test
291 -|
/usr
/lib
/python
$(PYTHON3_VERSION
)/webbrowser.py
292 -|
/usr
/lib
/python
$(PYTHON3_VERSION
)/*/test
293 -|
/usr
/lib
/python
$(PYTHON3_VERSION
)/*/tests
294 -|
/usr
/lib
/python
$(PYTHON3_VERSION
)/_osx_support.py
295 $(subst $(space
),$(newline
),$(foreach lib_file
,$(PYTHON3_LIB_FILES_DEL
),-|
$(lib_file
)))
298 define Package
/libpython3
/install
299 # Adding the lib-dynload folder (even just empty) suppresses 2 warnings when starting Python
300 $(INSTALL_DIR
) $(1)/usr
/lib
/python
$(PYTHON3_VERSION
)/lib-dynload
/
301 $(CP
) $(PKG_INSTALL_DIR
)/usr
/lib
/libpython
$(PYTHON3_VERSION
).so
* $(1)/usr
/lib
/
304 define Py3Package
/python3-base
/install
305 $(INSTALL_DIR
) $(1)/usr
/bin
306 $(LN
) python
$(PYTHON3_VERSION
) $(1)/usr
/bin
/python3
307 $(LN
) python
$(PYTHON3_VERSION
) $(1)/usr
/bin
/python
308 # This depends on being called before filespec is processed
309 $(SED
) 's|$(TARGET_AR)|ar|g;s|$(TARGET_CROSS)readelf|readelf|g;s|$(TARGET_CC)|gcc|g;s|$(TARGET_CXX)|g++|g' \
310 $(PKG_INSTALL_DIR
)/usr
/lib
/python
$(PYTHON3_VERSION
)/_sysconfigdata.py
313 Py3Package
/python3-light
/install:=:
314 Py3Package
/python3
/install:=:
316 define Py3Package
/python3
/filespec
321 -Wl
$(comma
)-rpath
$(comma
)$(STAGING_DIR_HOSTPKG
)/lib
323 ifeq ($(HOST_OS
),Linux
)
325 -Wl
,--no-as-needed
-lrt
328 # Would be nice to be able to do this, but hosts are very fiddly
329 # HOST_MAKE_VARS += \
330 # PYTHONSTRICTEXTENSIONBUILD=1
332 ifeq ($(HOST_OS
),Darwin
)
333 HOST_CONFIGURE_VARS
+= \
334 ac_cv_header_libintl_h
=no
336 USE_PYTHON_CONFIG_PY
=1
339 # FIXME: remove when removing patch '028-host-python-support-ssl-with-libressl.patch'
343 HOST_CONFIGURE_ARGS
+= \
344 --enable-optimizations \
345 --with-ensurepip
=upgrade \
346 --with-system-expat
=$(STAGING_DIR_HOSTPKG
) \
347 --with-ssl-default-suites
=openssl \
350 --disable-test-modules \
353 define Host
/Configure
354 $(SED
) 's/^ENABLE_USER_SITE = None$$$$/ENABLE_USER_SITE = False/' $(HOST_BUILD_DIR
)/Lib
/site.py
355 $(call Host
/Configure
/Default
)
359 $(call Host
/Compile
/Default
,python
)
360 $(call Host
/Compile
/Default
,sharedmods
)
364 $(if
$(wildcard $(HOST_PYTHON3_PKG_DIR
)/.setuptools_installed_
$(PYTHON3_SETUPTOOLS_VERSION
)-$(PYTHON3_SETUPTOOLS_PKG_RELEASE
)),,
366 $(HOST_PYTHON3_PKG_DIR
)/pkg_resources \
367 $(HOST_PYTHON3_PKG_DIR
)/setuptools \
368 $(HOST_PYTHON3_PKG_DIR
)/setuptools-
* \
369 $(HOST_PYTHON3_PKG_DIR
)/.setuptools-patched
* \
370 $(HOST_PYTHON3_PKG_DIR
)/.setuptools_installed_
*
372 $(if
$(wildcard $(HOST_PYTHON3_PKG_DIR
)/.pip_installed_
$(PYTHON3_PIP_VERSION
)-$(PYTHON3_PIP_PKG_RELEASE
)),,
374 $(HOST_PYTHON3_PKG_DIR
)/pip \
375 $(HOST_PYTHON3_PKG_DIR
)/pip-
* \
376 $(HOST_PYTHON3_PKG_DIR
)/.pip-patched
* \
377 $(HOST_PYTHON3_PKG_DIR
)/.pip_installed_
*
379 $(call Host
/Install
/Default
)
380 $(if
$(wildcard $(HOST_PYTHON3_PKG_DIR
)/.setuptools_installed_
$(PYTHON3_SETUPTOOLS_VERSION
)-$(PYTHON3_SETUPTOOLS_PKG_RELEASE
)),,
381 $(call HostPatchDir
,$(HOST_PYTHON3_PKG_DIR
),.
/patches-setuptools
,)
382 touch
$(HOST_PYTHON3_PKG_DIR
)/.setuptools_installed_
$(PYTHON3_SETUPTOOLS_VERSION
)-$(PYTHON3_SETUPTOOLS_PKG_RELEASE
)
384 $(if
$(wildcard $(HOST_PYTHON3_PKG_DIR
)/.pip_installed_
$(PYTHON3_PIP_VERSION
)-$(PYTHON3_PIP_PKG_RELEASE
)),,
385 # FIXME: [2] get rid of this asap; same as [1]
386 sed
's/\r//' -i
$(HOST_PYTHON3_PKG_DIR
)/pip
/_vendor
/pep517
/in_process
/__init__.py
387 $(call HostPatchDir
,$(HOST_PYTHON3_PKG_DIR
),.
/patches-pip
,)
388 touch
$(HOST_PYTHON3_PKG_DIR
)/.pip_installed_
$(PYTHON3_PIP_VERSION
)-$(PYTHON3_PIP_PKG_RELEASE
)
392 $(eval
$(call HostBuild
))
394 $(foreach package
, $(PYTHON3_PACKAGES
), \
395 $(eval
$(call Py3Package
,$(package
))) \
396 $(eval
$(call BuildPackage
,$(package
))) \
397 $(eval
$(call BuildPackage
,$(package
)-src
)) \
400 $(eval
$(call BuildPackage
,libpython3
))
402 $(eval
$(call Py3Package
,python3-base
))
403 $(eval
$(call Py3Package
,python3-light
))
404 $(eval
$(call Py3Package
,python3
))
406 $(eval
$(call BuildPackage
,python3-base
))
407 $(eval
$(call BuildPackage
,python3-light
))
408 $(eval
$(call BuildPackage
,python3
))
410 $(eval
$(call BuildPackage
,python3-base-src
))
411 $(eval
$(call BuildPackage
,python3-light-src
))