Merge pull request #15866 from ja-pa/redis-6.2.4
[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:=0c5a140665436ec3dbfbb79e2dfb6d192655f26ef4a29aeffcb6d1820d716d83
20
21 PKG_MAINTAINER:=Alexandru Ardelean <ardeleanalex@gmail.com>, Jeffery To <jeffery.to@gmail.com>
22 PKG_LICENSE:=Python/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_INSTALL:=1
35 PKG_BUILD_PARALLEL:=1
36 HOST_BUILD_PARALLEL:=1
37
38 PKG_BUILD_DIR:=$(BUILD_DIR)/Python-$(PKG_VERSION)
39 HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/Python-$(PKG_VERSION)
40
41 PKG_CONFIG_DEPENDS:= \
42 CONFIG_PACKAGE_python3-pkg-resources \
43 CONFIG_PACKAGE_python3-setuptools CONFIG_PACKAGE_python3-pip \
44 CONFIG_PYTHON3_BLUETOOTH_SUPPORT
45
46 PKG_BUILD_DEPENDS:=python3/host
47 HOST_BUILD_DEPENDS:=bzip2/host expat/host libffi/host
48
49 include $(INCLUDE_DIR)/host-build.mk
50 include $(INCLUDE_DIR)/package.mk
51
52 define Package/python3/Default
53 SUBMENU:=Python
54 SECTION:=lang
55 CATEGORY:=Languages
56 TITLE:=Python $(PYTHON3_VERSION) programming language
57 URL:=https://www.python.org/
58 endef
59
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.
67 endef
68
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)
74 endef
75
76 define Package/libpython3/description
77 This package contains only core Python library.
78 endef
79
80 define Package/python3-base
81 $(call Package/python3/Default)
82 TITLE:=Python $(PYTHON3_VERSION) interpreter
83 DEPENDS:=+libpthread +zlib +libpython3
84 endef
85
86 define Package/python3-base/description
87 This package contains only the interpreter and the bare minimum
88 for the interpreter to start.
89 endef
90
91 define Package/python3-light
92 $(call Package/python3/Default)
93 TITLE:=Python $(PYTHON3_VERSION) light installation
94 DEPENDS:=+python3-base +libffi +libbz2 +PYTHON3_BLUETOOTH_SUPPORT:bluez-libs +libuuid
95 endef
96
97 define Package/python3-light/config
98 source "$(SOURCE)/Config-python3-light.in"
99 endef
100
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.
105 endef
106
107 PYTHON3_LIB_FILES_DEL:=
108 PYTHON3_PACKAGES:=
109 PYTHON3_SO_SUFFIX:=cpython-$(PYTHON3_VERSION_MAJOR)$(PYTHON3_VERSION_MINOR).so
110 PYTHON3_PACKAGES_DEPENDS:=
111 define Py3BasePackage
112 PYTHON3_PACKAGES+=$(1)
113 ifeq ($(3),)
114 PYTHON3_PACKAGES_DEPENDS+=$(1)
115 endif
116 PYTHON3_LIB_FILES_DEL+=$(2)
117 define Py3Package/$(1)/filespec
118 ifneq ($(2),)
119 $(subst $(space),$(newline),$(foreach lib_file,$(2),+|$(lib_file)))
120 -|/usr/lib/python$(PYTHON3_VERSION)/*/test
121 -|/usr/lib/python$(PYTHON3_VERSION)/*/tests
122 endif
123 endef
124 Py3Package/$(1)/install?=:
125 endef
126
127 include ./files/python3-package-*.mk
128
129 define Package/python3
130 $(call Package/python3/Default)
131 DEPENDS:=+python3-light $(foreach package,$(PYTHON3_PACKAGES_DEPENDS),+$(package))
132 endef
133
134 define Package/python3/description
135 This package contains the (almost) full Python install.
136 It's python3-light + all other packages.
137 endef
138
139 TARGET_CONFIGURE_OPTS+= \
140 READELF="$(TARGET_CROSS)readelf"
141
142 MAKE_FLAGS+=\
143 LD="$(TARGET_CC)"
144
145 EXTRA_CFLAGS+= \
146 -DNDEBUG -fno-inline
147 EXTRA_LDFLAGS+= \
148 -L$(PKG_BUILD_DIR) \
149 -L$(STAGING_DIR)/usr/lib -L$(STAGING_DIR)/lib
150
151 DISABLE_BLUETOOTH:= \
152 ac_cv_header_bluetooth_bluetooth_h=no \
153 ac_cv_header_bluetooth_h=no
154
155 CONFIGURE_ARGS+= \
156 --enable-optimizations \
157 --enable-shared \
158 --with-system-ffi \
159 --without-cxx-main \
160 --without-ensurepip \
161 --without-pymalloc \
162 $(if $(CONFIG_IPV6),--enable-ipv6) \
163 $(if $(findstring mips,$(CONFIG_ARCH)),,--with-lto) \
164 CONFIG_SITE="$(PKG_BUILD_DIR)/config.site" \
165 OPT="$(TARGET_CFLAGS)" \
166 $(if $(CONFIG_PYTHON3_BLUETOOTH_SUPPORT),,$(DISABLE_BLUETOOTH))
167
168 define Build/Prepare
169 $(call Build/Prepare/Default)
170 $(CP) ./files/config.site $(PKG_BUILD_DIR)/config.site
171 endef
172
173 ifdef CONFIG_PACKAGE_python3-setuptools
174 PYTHON3_SETUPTOOLS_BUILD:=1
175 endif
176
177 ifdef CONFIG_PACKAGE_python3-pkg-resources
178 PYTHON3_SETUPTOOLS_BUILD:=1
179 endif
180
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" \
186 install \
187 --ignore-installed \
188 --root=$(PKG_BUILD_DIR)/install-setuptools \
189 --prefix=/usr \
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,)
192 endef
193 endif # CONFIG_PACKAGE_python3-setuptools
194
195 ifdef CONFIG_PACKAGE_python3-pip
196 define Build/Compile/python3-pip
197 $(HOST_PYTHON3_PIP) \
198 --disable-pip-version-check \
199 --cache-dir "$(DL_DIR)/pip-cache" \
200 install \
201 --ignore-installed \
202 --root=$(PKG_BUILD_DIR)/install-pip \
203 --prefix=/usr \
204 $(PKG_BUILD_DIR)/Lib/ensurepip/_bundled/pip-$(PYTHON3_PIP_VERSION)-py3-none-any.whl
205 $(call PatchDir,$(PKG_BUILD_DIR)/install-pip/usr/lib/python$(PYTHON3_VERSION)/site-packages,./patches-pip,)
206 endef
207 endif # CONFIG_PACKAGE_python3-pip
208
209 define Build/Compile
210 $(call Build/Compile/Default)
211 # Use host pip to install python-setuptools
212 $(call Build/Compile/python3-setuptools)
213 $(call Build/Compile/python3-pip)
214 endef
215
216 define Build/InstallDev
217 $(INSTALL_DIR) $(1)/usr/include $(1)/usr/lib $(1)/usr/lib/pkgconfig
218 $(INSTALL_DIR) $(2)/bin
219 $(CP) \
220 $(PKG_INSTALL_DIR)/usr/include/python$(PYTHON3_VERSION) \
221 $(1)/usr/include/
222 $(CP) \
223 $(PKG_INSTALL_DIR)/usr/lib/python$(PYTHON3_VERSION) \
224 $(PKG_INSTALL_DIR)/usr/lib/libpython$(PYTHON3_VERSION).so* \
225 $(1)/usr/lib/
226 grep \
227 '^_PYTHON_HOST_PLATFORM=' \
228 $(PKG_INSTALL_DIR)/usr/lib/python$(PYTHON3_VERSION)/config-$(PYTHON3_VERSION)/Makefile > \
229 $(1)/usr/lib/python$(PYTHON3_VERSION)/config-$(PYTHON3_VERSION)/Makefile-vars
230 $(CP) \
231 $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/python*.pc \
232 $(1)/usr/lib/pkgconfig
233 $(INSTALL_BIN) \
234 $(PKG_INSTALL_DIR)/usr/bin/python$(PYTHON3_VERSION)-config \
235 $(2)/bin/
236 $(SED) \
237 's|^prefix_real=.*$$$$|prefix_real="$(PYTHON3_DIR)"|' \
238 $(2)/bin/python$(PYTHON3_VERSION)-config
239 endef
240
241 PYTHON3_BASE_LIB_FILES:= \
242 /usr/lib/python$(PYTHON3_VERSION)/encodings \
243 /usr/lib/python$(PYTHON3_VERSION)/_collections_abc.py \
244 /usr/lib/python$(PYTHON3_VERSION)/_sitebuiltins.py \
245 /usr/lib/python$(PYTHON3_VERSION)/_sysconfigdata.py \
246 /usr/lib/python$(PYTHON3_VERSION)/_weakrefset.py \
247 /usr/lib/python$(PYTHON3_VERSION)/abc.py \
248 /usr/lib/python$(PYTHON3_VERSION)/codecs.py \
249 /usr/lib/python$(PYTHON3_VERSION)/genericpath.py \
250 /usr/lib/python$(PYTHON3_VERSION)/io.py \
251 /usr/lib/python$(PYTHON3_VERSION)/os.py \
252 /usr/lib/python$(PYTHON3_VERSION)/posixpath.py \
253 /usr/lib/python$(PYTHON3_VERSION)/site.py \
254 /usr/lib/python$(PYTHON3_VERSION)/sysconfig.py \
255 /usr/lib/python$(PYTHON3_VERSION)/stat.py
256
257 PYTHON3_LIB_FILES_DEL+=$(PYTHON3_BASE_LIB_FILES)
258
259 define Py3Package/python3-base/filespec
260 +|/usr/bin/python$(PYTHON3_VERSION)
261 $(subst $(space),$(newline),$(foreach lib_file,$(PYTHON3_BASE_LIB_FILES),+|$(lib_file)))
262 endef
263
264 define Py3Package/python3-light/filespec
265 +|/usr/lib/python$(PYTHON3_VERSION)
266 -|/usr/lib/python$(PYTHON3_VERSION)/distutils/cygwinccompiler.py
267 -|/usr/lib/python$(PYTHON3_VERSION)/distutils/command/wininst*
268 -|/usr/lib/python$(PYTHON3_VERSION)/ensurepip
269 -|/usr/lib/python$(PYTHON3_VERSION)/idlelib
270 -|/usr/lib/python$(PYTHON3_VERSION)/tkinter
271 -|/usr/lib/python$(PYTHON3_VERSION)/turtledemo
272 -|/usr/lib/python$(PYTHON3_VERSION)/lib-dynload/_test*.so
273 -|/usr/lib/python$(PYTHON3_VERSION)/pdb.doc
274 -|/usr/lib/python$(PYTHON3_VERSION)/test
275 -|/usr/lib/python$(PYTHON3_VERSION)/webbrowser.py
276 -|/usr/lib/python$(PYTHON3_VERSION)/*/test
277 -|/usr/lib/python$(PYTHON3_VERSION)/*/tests
278 -|/usr/lib/python$(PYTHON3_VERSION)/_osx_support.py
279 $(subst $(space),$(newline),$(foreach lib_file,$(PYTHON3_LIB_FILES_DEL),-|$(lib_file)))
280 endef
281
282 define Package/libpython3/install
283 # Adding the lib-dynload folder (even just empty) suppresses 2 warnings when starting Python
284 $(INSTALL_DIR) $(1)/usr/lib/python$(PYTHON3_VERSION)/lib-dynload/
285 $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpython$(PYTHON3_VERSION).so* $(1)/usr/lib/
286 endef
287
288 define Py3Package/python3-base/install
289 $(INSTALL_DIR) $(1)/usr/bin
290 $(LN) python$(PYTHON3_VERSION) $(1)/usr/bin/python3
291 $(LN) python$(PYTHON3_VERSION) $(1)/usr/bin/python
292 # This depends on being called before filespec is processed
293 $(SED) 's|$(TARGET_AR)|ar|g;s|$(TARGET_CROSS)readelf|readelf|g;s|$(TARGET_CC)|gcc|g;s|$(TARGET_CXX)|g++|g' \
294 $(PKG_INSTALL_DIR)/usr/lib/python$(PYTHON3_VERSION)/_sysconfigdata.py
295 endef
296
297 Py3Package/python3-light/install:=:
298 Py3Package/python3/install:=:
299
300 define Py3Package/python3/filespec
301 -|$(PYTHON3_PKG_DIR)
302 endef
303
304 HOST_LDFLAGS += \
305 -Wl$(comma)-rpath$(comma)$(STAGING_DIR_HOSTPKG)/lib
306
307 ifeq ($(HOST_OS),Linux)
308 HOST_LDFLAGS += \
309 -Wl,--no-as-needed -lrt
310 endif
311
312 ifeq ($(HOST_OS),Darwin)
313 HOST_CONFIGURE_VARS += \
314 ac_cv_header_libintl_h=no
315 HOST_MAKE_VARS += \
316 USE_PYTHON_CONFIG_PY=1
317 endif
318
319 HOST_CONFIGURE_ARGS+= \
320 --enable-optimizations \
321 --with-ensurepip=upgrade \
322 --with-system-expat=$(STAGING_DIR_HOSTPKG) \
323 --without-cxx-main \
324 --without-pymalloc \
325 CONFIG_SITE=
326
327 define Host/Configure
328 $(SED) 's/^ENABLE_USER_SITE = None$$$$/ENABLE_USER_SITE = False/' $(HOST_BUILD_DIR)/Lib/site.py
329 $(call Host/Configure/Default)
330 endef
331
332 define Host/Compile
333 $(call Host/Compile/Default,python)
334 $(call Host/Compile/Default,sharedmods)
335 endef
336
337 define Host/Install
338 $(if $(wildcard $(HOST_PYTHON3_PKG_DIR)/.setuptools_installed_$(PYTHON3_SETUPTOOLS_VERSION)-$(PYTHON3_SETUPTOOLS_PKG_RELEASE)),,
339 rm -rf \
340 $(HOST_PYTHON3_PKG_DIR)/pkg_resources \
341 $(HOST_PYTHON3_PKG_DIR)/setuptools \
342 $(HOST_PYTHON3_PKG_DIR)/setuptools-* \
343 $(HOST_PYTHON3_PKG_DIR)/.setuptools-patched* \
344 $(HOST_PYTHON3_PKG_DIR)/.setuptools_installed_*
345 )
346 $(if $(wildcard $(HOST_PYTHON3_PKG_DIR)/.pip_installed_$(PYTHON3_PIP_VERSION)-$(PYTHON3_PIP_PKG_RELEASE)),,
347 rm -rf \
348 $(HOST_PYTHON3_PKG_DIR)/pip \
349 $(HOST_PYTHON3_PKG_DIR)/pip-* \
350 $(HOST_PYTHON3_PKG_DIR)/.pip-patched* \
351 $(HOST_PYTHON3_PKG_DIR)/.pip_installed_*
352 )
353 $(call Host/Install/Default)
354 $(if $(wildcard $(HOST_PYTHON3_PKG_DIR)/.setuptools_installed_$(PYTHON3_SETUPTOOLS_VERSION)-$(PYTHON3_SETUPTOOLS_PKG_RELEASE)),,
355 $(call HostPatchDir,$(HOST_PYTHON3_PKG_DIR),./patches-setuptools,)
356 touch $(HOST_PYTHON3_PKG_DIR)/.setuptools_installed_$(PYTHON3_SETUPTOOLS_VERSION)-$(PYTHON3_SETUPTOOLS_PKG_RELEASE)
357 )
358 $(if $(wildcard $(HOST_PYTHON3_PKG_DIR)/.pip_installed_$(PYTHON3_PIP_VERSION)-$(PYTHON3_PIP_PKG_RELEASE)),,
359 $(call HostPatchDir,$(HOST_PYTHON3_PKG_DIR),./patches-pip,)
360 touch $(HOST_PYTHON3_PKG_DIR)/.pip_installed_$(PYTHON3_PIP_VERSION)-$(PYTHON3_PIP_PKG_RELEASE)
361 )
362 endef
363
364 $(eval $(call HostBuild))
365
366 $(foreach package, $(PYTHON3_PACKAGES), \
367 $(eval $(call Py3Package,$(package))) \
368 $(eval $(call BuildPackage,$(package))) \
369 $(eval $(call BuildPackage,$(package)-src)) \
370 )
371
372 $(eval $(call BuildPackage,libpython3))
373
374 $(eval $(call Py3Package,python3-base))
375 $(eval $(call Py3Package,python3-light))
376 $(eval $(call Py3Package,python3))
377
378 $(eval $(call BuildPackage,python3-base))
379 $(eval $(call BuildPackage,python3-light))
380 $(eval $(call BuildPackage,python3))
381
382 $(eval $(call BuildPackage,python3-base-src))
383 $(eval $(call BuildPackage,python3-light-src))