python3: Fix/expand platform triplet detection
[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:=2
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:=2f0e409df2ab57aa9fc4cbddfb976af44e4e55bf6f619eee6bc5c2297264a7f6
20
21 PKG_MAINTAINER:=Jeffery To <jeffery.to@gmail.com>
22 PKG_LICENSE:=PSF-2.0
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 # Do not link with libbsd for flock
166 # https://github.com/openwrt/packages/issues/21161
167 CONFIGURE_VARS += \
168 ac_cv_lib_bsd_flock=no
169
170 # Disable stdlib modules
171 # Check for a better way in the future: https://github.com/python/cpython/issues/98558
172 CONFIGURE_VARS += \
173 py_cv_module__tkinter=n/a \
174 py_cv_module_nis=n/a
175
176 # Workaround for hardfloat mips
177 # https://bugs.python.org/issue46265
178 ifneq ($(findstring mips,$(CONFIG_ARCH)),)
179 ifeq ($(CONFIG_HAS_FPU),y)
180 CONFIGURE_VARS += \
181 ax_cv_check_cflags___fno_semantic_interposition=no
182 endif
183 endif
184
185 MAKE_VARS += \
186 PYTHONSTRICTEXTENSIONBUILD=1
187
188 CONFIGURE_ARGS += \
189 --enable-optimizations \
190 --enable-shared \
191 --disable-test-modules \
192 --with-build-python \
193 --with-system-ffi \
194 --without-cxx-main \
195 --without-ensurepip \
196 $(if $(CONFIG_IPV6),--enable-ipv6) \
197 $(if $(findstring mips,$(CONFIG_ARCH)),,--with-lto)
198
199 define Build/Install
200 $(call Build/Install/Default,)
201
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
205 endef
206
207 define Build/InstallDev
208 $(INSTALL_DIR) $(1)/usr/include $(1)/usr/lib $(1)/usr/lib/pkgconfig
209 $(INSTALL_DIR) $(2)/bin
210 $(CP) \
211 $(PKG_INSTALL_DIR)/usr/include/python$(PYTHON3_VERSION) \
212 $(1)/usr/include/
213 $(CP) \
214 $(PKG_INSTALL_DIR)/usr/lib/python$(PYTHON3_VERSION) \
215 $(PKG_INSTALL_DIR)/usr/lib/libpython$(PYTHON3_VERSION).so* \
216 $(1)/usr/lib/
217 grep \
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
221 $(CP) \
222 $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/python*.pc \
223 $(1)/usr/lib/pkgconfig
224 $(INSTALL_BIN) \
225 $(PKG_INSTALL_DIR)/usr/bin/python$(PYTHON3_VERSION)-config \
226 $(2)/bin/
227 $(SED) \
228 's|^prefix_real=.*$$$$|prefix_real="$(PYTHON3_DIR)"|' \
229 $(2)/bin/python$(PYTHON3_VERSION)-config
230 endef
231
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
247
248 PYTHON3_LIB_FILES_DEL+=$(PYTHON3_BASE_LIB_FILES)
249
250 define Py3Package/python3-base/filespec
251 +|/usr/bin/python$(PYTHON3_VERSION)
252 $(foreach lib_file,$(PYTHON3_BASE_LIB_FILES),
253 +|$(lib_file)
254 )
255 endef
256
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)),
266 -|$(lib_file)
267 )
268 endef
269
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/
274 endef
275
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
280 endef
281
282 Py3Package/python3-light/install:=:
283 Package/python3/install:=:
284
285 # libuuid is provided by e2fsprogs and uuid/uuid.h is moved into
286 # $(STAGING_DIR_HOST)/include/e2fsprogs
287 HOST_CFLAGS += \
288 -I$(STAGING_DIR_HOST)/include/e2fsprogs
289 HOST_CPPFLAGS += \
290 -I$(STAGING_DIR_HOST)/include/e2fsprogs
291
292 HOST_LDFLAGS += \
293 -Wl$(comma)-rpath$(comma)$(STAGING_DIR_HOSTPKG)/lib
294
295 ifeq ($(HOST_OS),Linux)
296 HOST_LDFLAGS += \
297 -Wl,--no-as-needed -lrt
298 endif
299
300 # Would be nice to be able to do this, but hosts are very fiddly
301 # HOST_MAKE_VARS += \
302 # PYTHONSTRICTEXTENSIONBUILD=1
303
304 # Bypass configure test
305 HOST_CONFIGURE_VARS += \
306 ac_cv_working_openssl_hashlib=yes
307
308 ifeq ($(HOST_OS),Darwin)
309 HOST_CONFIGURE_VARS += \
310 ac_cv_header_libintl_h=no
311 HOST_MAKE_VARS += \
312 USE_PYTHON_CONFIG_PY=1
313 endif
314
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 \
321 --without-cxx-main
322
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
328 endef
329
330 define Host/Install
331 $(if $(wildcard $(HOST_PYTHON3_PKG_DIR)/.setuptools_installed_$(PYTHON3_SETUPTOOLS_VERSION)-$(PYTHON3_SETUPTOOLS_PKG_RELEASE)),,
332 rm -rf \
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_*
338 )
339 $(if $(wildcard $(HOST_PYTHON3_PKG_DIR)/.pip_installed_$(PYTHON3_PIP_VERSION)-$(PYTHON3_PIP_PKG_RELEASE)),,
340 rm -rf \
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_*
345 )
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)
350 )
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)
354 )
355 endef
356
357 $(eval $(call HostBuild))
358
359 $(foreach package, $(PYTHON3_PACKAGES), \
360 $(eval $(call Py3Package,$(package))) \
361 $(eval $(call BuildPackage,$(package))) \
362 $(eval $(call BuildPackage,$(package)-src)) \
363 )
364
365 $(eval $(call BuildPackage,libpython3))
366 $(eval $(call BuildPackage,python3))
367
368 $(eval $(call Py3Package,python3-base))
369 $(eval $(call Py3Package,python3-light))
370
371 $(eval $(call BuildPackage,python3-base))
372 $(eval $(call BuildPackage,python3-light))
373
374 $(eval $(call BuildPackage,python3-base-src))
375 $(eval $(call BuildPackage,python3-light-src))