Merge pull request #22041 from jefferyto/python-cryptodomex-3.18.0
[feed/packages.git] / lang / python / python3 / Makefile
1 #
2 # Copyright (C) 2006-2016 OpenWrt.org
3 #
4 # This is free software, licensed under the GNU General Public License v2.
5 # See /LICENSE for more information.
6 #
7
8 include $(TOPDIR)/rules.mk
9
10 # The file included below defines PYTHON3_VERSION
11 include ../python3-version.mk
12
13 PKG_NAME:=python3
14 PKG_RELEASE:=1
15 PKG_VERSION:=$(PYTHON3_VERSION).$(PYTHON3_VERSION_MICRO)
16
17 PKG_SOURCE:=Python-$(PKG_VERSION).tar.xz
18 PKG_SOURCE_URL:=https://www.python.org/ftp/python/$(PKG_VERSION)
19 PKG_HASH:=85cd12e9cf1d6d5a45f17f7afe1cebe7ee628d3282281c492e86adf636defa3f
20
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
25
26 # This file provides the necsessary host build variables
27 include ../python3-host.mk
28
29 # For Py3Package
30 PYTHON3_PKG_BUILD:=0
31 include ../python3-package.mk
32
33 PKG_FIXUP:=autoreconf
34 PKG_BUILD_PARALLEL:=1
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
39
40 PKG_BUILD_DIR:=$(BUILD_DIR)/Python-$(PKG_VERSION)
41 HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/Python-$(PKG_VERSION)
42
43 PKG_BUILD_DEPENDS:=bluez python3/host python-build/host python-installer/host python-wheel/host
44 HOST_BUILD_DEPENDS:=bzip2/host libffi/host
45
46 include $(INCLUDE_DIR)/host-build.mk
47 include $(INCLUDE_DIR)/package.mk
48
49 define Package/python3/Default
50 SUBMENU:=Python
51 SECTION:=lang
52 CATEGORY:=Languages
53 TITLE:=Python $(PYTHON3_VERSION)
54 URL:=https://www.python.org/
55 endef
56
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.
68 endef
69
70 define Package/libpython3
71 $(call Package/python3/Default)
72 TITLE+= core library
73 DEPENDS:=+libpthread
74 ABI_VERSION:=$(PYTHON3_VERSION)
75 endef
76
77 define Package/libpython3/description
78 $(call Package/python3/Default/description)
79
80 This package contains only core Python library.
81 endef
82
83 define Package/python3-base
84 $(call Package/python3/Default)
85 TITLE+= base interpreter
86 DEPENDS:=+libpython3
87 endef
88
89 define Package/python3-base/description
90 $(call Package/python3/Default/description)
91
92 This package contains only the interpreter and the bare minimum for the
93 interpreter to start.
94 endef
95
96 define Package/python3-light
97 $(call Package/python3/Default)
98 TITLE+= light installation
99 DEPENDS:=+python3-base +libbz2 +zlib
100 endef
101
102 define Package/python3-light/config
103 source "$(SOURCE)/Config-python3-light.in"
104 endef
105
106 define Package/python3-light/description
107 $(call Package/python3/Default/description)
108
109 This package installs the base interpreter package and contains the most
110 commonly used parts of the standard library.
111 endef
112
113 PYTHON3_LIB_FILES_DEL:=
114 PYTHON3_PACKAGES:=
115 PYTHON3_SO_SUFFIX:=cpython-$(PYTHON3_VERSION_MAJOR)$(PYTHON3_VERSION_MINOR)-*.so
116 PYTHON3_PACKAGES_DEPENDS:=
117 define Py3BasePackage
118 PYTHON3_PACKAGES+=$(1)
119 ifeq ($(3),)
120 PYTHON3_PACKAGES_DEPENDS+=$(1)
121 endif
122 PYTHON3_LIB_FILES_DEL+=$(2)
123 ifeq ($(2),)
124 Py3Package/$(1)/filespec=
125 else
126 define Py3Package/$(1)/filespec
127 $(foreach lib_file,$(2),
128 +|$(lib_file)
129 )
130 endef
131 endif
132 Py3Package/$(1)/install?=:
133 endef
134
135 include ./files/python3-package-*.mk
136
137 define Package/python3
138 $(call Package/python3/Default)
139 TITLE+= programming language
140 DEPENDS:=+python3-light $(foreach package,$(PYTHON3_PACKAGES_DEPENDS),+$(package))
141 endef
142
143 define Package/python3/description
144 $(call Package/python3/Default/description)
145
146 This package installs almost all parts of the standard Python
147 installation.
148 endef
149
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"
154
155 EXTRA_LDFLAGS+= \
156 -L$(PKG_BUILD_DIR) \
157 -L$(STAGING_DIR)/usr/lib -L$(STAGING_DIR)/lib
158
159 # Bypass configure tests for cross compilation
160 CONFIGURE_VARS += \
161 ac_cv_buggy_getaddrinfo=no \
162 ac_cv_file__dev_ptc=no \
163 ac_cv_file__dev_ptmx=yes
164
165 # Disable stdlib modules
166 # Check for a better way in the future: https://github.com/python/cpython/issues/98558
167 CONFIGURE_VARS += \
168 py_cv_module__tkinter=n/a \
169 py_cv_module_nis=n/a
170
171 # Workaround for hardfloat mips
172 # https://bugs.python.org/issue46265
173 ifneq ($(findstring mips,$(CONFIG_ARCH)),)
174 ifeq ($(CONFIG_HAS_FPU),y)
175 CONFIGURE_VARS += \
176 ax_cv_check_cflags___fno_semantic_interposition=no
177 endif
178 endif
179
180 MAKE_VARS += \
181 PYTHONSTRICTEXTENSIONBUILD=1
182
183 CONFIGURE_ARGS += \
184 --enable-optimizations \
185 --enable-shared \
186 --disable-test-modules \
187 --with-build-python \
188 --with-system-ffi \
189 --without-cxx-main \
190 --without-ensurepip \
191 $(if $(CONFIG_IPV6),--enable-ipv6) \
192 $(if $(findstring mips,$(CONFIG_ARCH)),,--with-lto)
193
194 define Build/Install
195 $(call Build/Install/Default,)
196
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
200 endef
201
202 define Build/InstallDev
203 $(INSTALL_DIR) $(1)/usr/include
204 $(CP) \
205 $(PKG_INSTALL_DIR)/usr/include/python$(PYTHON3_VERSION) \
206 $(1)/usr/include/
207
208 $(INSTALL_DIR) $(1)/usr/lib
209 $(CP) \
210 $(PKG_INSTALL_DIR)/usr/lib/python$(PYTHON3_VERSION) \
211 $(PKG_INSTALL_DIR)/usr/lib/libpython$(PYTHON3_VERSION).so* \
212 $(1)/usr/lib/
213
214 $(INSTALL_DIR) $(1)/usr/lib/python$(PYTHON3_VERSION)/openwrt
215 grep -E \
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
219
220 $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
221 $(CP) \
222 $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/python*.pc \
223 $(1)/usr/lib/pkgconfig
224
225 $(INSTALL_DIR) $(2)/bin
226 $(INSTALL_BIN) \
227 $(PKG_INSTALL_DIR)/usr/bin/python$(PYTHON3_VERSION)-config \
228 $(2)/bin/
229 $(SED) \
230 's|^prefix_real=.*$$$$|prefix_real="$(PYTHON3_DIR)"|' \
231 $(2)/bin/python$(PYTHON3_VERSION)-config
232 endef
233
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
249
250 PYTHON3_LIB_FILES_DEL+=$(PYTHON3_BASE_LIB_FILES)
251
252 define Py3Package/python3-base/filespec
253 +|/usr/bin/python$(PYTHON3_VERSION)
254 $(foreach lib_file,$(PYTHON3_BASE_LIB_FILES),
255 +|$(lib_file)
256 )
257 endef
258
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)),
268 -|$(lib_file)
269 )
270 endef
271
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/
276 endef
277
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
282 endef
283
284 Py3Package/python3-light/install:=:
285 Package/python3/install:=:
286
287 # libuuid is provided by e2fsprogs and uuid/uuid.h is moved into
288 # $(STAGING_DIR_HOST)/include/e2fsprogs
289 HOST_CFLAGS += \
290 -I$(STAGING_DIR_HOST)/include/e2fsprogs
291 HOST_CPPFLAGS += \
292 -I$(STAGING_DIR_HOST)/include/e2fsprogs
293
294 HOST_LDFLAGS += \
295 -Wl$(comma)-rpath$(comma)$(STAGING_DIR_HOSTPKG)/lib
296
297 ifeq ($(HOST_OS),Linux)
298 HOST_LDFLAGS += \
299 -Wl,--no-as-needed -lrt
300 endif
301
302 # Would be nice to be able to do this, but hosts are very fiddly
303 # HOST_MAKE_VARS += \
304 # PYTHONSTRICTEXTENSIONBUILD=1
305
306 # Bypass configure test
307 HOST_CONFIGURE_VARS += \
308 ac_cv_working_openssl_hashlib=yes
309
310 ifeq ($(HOST_OS),Darwin)
311 HOST_CONFIGURE_VARS += \
312 ac_cv_header_libintl_h=no
313 HOST_MAKE_VARS += \
314 USE_PYTHON_CONFIG_PY=1
315 endif
316
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 \
323 --without-cxx-main
324
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
330 endef
331
332 define Host/Install
333 $(if $(wildcard $(HOST_PYTHON3_PKG_DIR)/.setuptools_installed_$(PYTHON3_SETUPTOOLS_VERSION)-$(PYTHON3_SETUPTOOLS_PKG_RELEASE)),,
334 rm -rf \
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_*
340 )
341 $(if $(wildcard $(HOST_PYTHON3_PKG_DIR)/.pip_installed_$(PYTHON3_PIP_VERSION)-$(PYTHON3_PIP_PKG_RELEASE)),,
342 rm -rf \
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_*
347 )
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)
352 )
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)
356 )
357 endef
358
359 $(eval $(call HostBuild))
360
361 $(foreach package, $(PYTHON3_PACKAGES), \
362 $(eval $(call Py3Package,$(package))) \
363 $(eval $(call BuildPackage,$(package))) \
364 $(eval $(call BuildPackage,$(package)-src)) \
365 )
366
367 $(eval $(call BuildPackage,libpython3))
368 $(eval $(call BuildPackage,python3))
369
370 $(eval $(call Py3Package,python3-base))
371 $(eval $(call Py3Package,python3-light))
372
373 $(eval $(call BuildPackage,python3-base))
374 $(eval $(call BuildPackage,python3-light))
375
376 $(eval $(call BuildPackage,python3-base-src))
377 $(eval $(call BuildPackage,python3-light-src))