PKG_SOURCE:=Python-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=https://www.python.org/ftp/python/$(PKG_VERSION)
-PKG_HASH:=17de3ac7da9f2519aa9d64378c603a73a0e9ad58dffa8812e45160c086de64c7
+PKG_HASH:=2f0e409df2ab57aa9fc4cbddfb976af44e4e55bf6f619eee6bc5c2297264a7f6
PKG_MAINTAINER:=Jeffery To <jeffery.to@gmail.com>
PKG_LICENSE:=PSF-2.0
include ../python3-package.mk
PKG_FIXUP:=autoreconf
-PKG_INSTALL:=1
PKG_BUILD_PARALLEL:=1
HOST_BUILD_PARALLEL:=1
+# LTO is handled here individually, see --with-lto below
+# "no-lto" prevents CONFIG_USE_LTO to add additional and interfering flags
+PKG_BUILD_FLAGS:=no-lto
PKG_BUILD_DIR:=$(BUILD_DIR)/Python-$(PKG_VERSION)
HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/Python-$(PKG_VERSION)
-PKG_CONFIG_DEPENDS:= \
- CONFIG_PACKAGE_python3-pkg-resources \
- CONFIG_PACKAGE_python3-setuptools CONFIG_PACKAGE_python3-pip
-
-PKG_BUILD_DEPENDS:=bluez python3/host
+PKG_BUILD_DEPENDS:=bluez python3/host python-build/host python-installer/host python-wheel/host
HOST_BUILD_DEPENDS:=bzip2/host libffi/host
include $(INCLUDE_DIR)/host-build.mk
SUBMENU:=Python
SECTION:=lang
CATEGORY:=Languages
- TITLE:=Python $(PYTHON3_VERSION) programming language
+ TITLE:=Python $(PYTHON3_VERSION)
URL:=https://www.python.org/
endef
define Package/python3/Default/description
- Python is a dynamic object-oriented programming language that can be used
- for many kinds of software development. It offers strong support for
- integration with other languages and tools, comes with extensive standard
- libraries, and can be learned in a few days. Many Python programmers
- report substantial productivity gains and feel the language encourages
- the development of higher quality, more maintainable code.
+Python is an interpreted, interactive, object-oriented programming
+language. It incorporates modules, exceptions, dynamic typing, very high
+level dynamic data types, and classes. It supports multiple programming
+paradigms beyond object-oriented programming, such as procedural and
+functional programming. Python combines remarkable power with very clear
+syntax. It has interfaces to many system calls and libraries, as well as
+to various window systems, and is extensible in C or C++. It is also
+usable as an extension language for applications that need a
+programmable interface. Finally, Python is portable: it runs on many
+Unix variants including Linux and macOS, and on Windows.
endef
define Package/libpython3
$(call Package/python3/Default)
- TITLE:=Python $(PYTHON3_VERSION) core library
- DEPENDS:=+libpthread +zlib
+ TITLE+= core library
+ DEPENDS:=+libpthread
ABI_VERSION:=$(PYTHON3_VERSION)
endef
define Package/libpython3/description
- This package contains only core Python library.
+$(call Package/python3/Default/description)
+
+This package contains only core Python library.
endef
define Package/python3-base
$(call Package/python3/Default)
- TITLE:=Python $(PYTHON3_VERSION) interpreter
- DEPENDS:=+libpthread +zlib +libpython3
+ TITLE+= base interpreter
+ DEPENDS:=+libpython3
endef
define Package/python3-base/description
- This package contains only the interpreter and the bare minimum
- for the interpreter to start.
+$(call Package/python3/Default/description)
+
+This package contains only the interpreter and the bare minimum for the
+interpreter to start.
endef
define Package/python3-light
$(call Package/python3/Default)
- TITLE:=Python $(PYTHON3_VERSION) light installation
- DEPENDS:=+python3-base +libffi +libbz2
+ TITLE+= light installation
+ DEPENDS:=+python3-base +libbz2 +zlib
endef
define Package/python3-light/config
endef
define Package/python3-light/description
- This package is essentially the python3-base package plus
- a few of the rarely used (and big) libraries stripped out
- into separate packages.
+$(call Package/python3/Default/description)
+
+This package installs the base interpreter package and contains the most
+commonly used parts of the standard library.
endef
PYTHON3_LIB_FILES_DEL:=
PYTHON3_PACKAGES_DEPENDS+=$(1)
endif
PYTHON3_LIB_FILES_DEL+=$(2)
- define Py3Package/$(1)/filespec
- ifneq ($(2),)
- $(subst $(space),$(newline),$(foreach lib_file,$(2),+|$(lib_file)))
- -|/usr/lib/python$(PYTHON3_VERSION)/*/test
- -|/usr/lib/python$(PYTHON3_VERSION)/*/tests
- endif
- endef
+ ifeq ($(2),)
+ Py3Package/$(1)/filespec=
+ else
+ define Py3Package/$(1)/filespec
+ $(foreach lib_file,$(2),
+ +|$(lib_file)
+ )
+ endef
+ endif
Py3Package/$(1)/install?=:
endef
define Package/python3
$(call Package/python3/Default)
+ TITLE+= programming language
DEPENDS:=+python3-light $(foreach package,$(PYTHON3_PACKAGES_DEPENDS),+$(package))
endef
define Package/python3/description
- This package contains the (almost) full Python install.
- It's python3-light + all other packages.
+$(call Package/python3/Default/description)
+
+This package installs almost all parts of the standard Python
+installation.
endef
+# Set READELF here so that the exact same readelf program name can be
+# replaced in _sysconfigdata.py (in Build/Install)
+TARGET_CONFIGURE_OPTS+= \
+ READELF="$(TARGET_CROSS)readelf"
+
EXTRA_LDFLAGS+= \
-L$(PKG_BUILD_DIR) \
-L$(STAGING_DIR)/usr/lib -L$(STAGING_DIR)/lib
+# Bypass configure tests for cross compilation
+CONFIGURE_VARS += \
+ ac_cv_buggy_getaddrinfo=no \
+ ac_cv_file__dev_ptc=no \
+ ac_cv_file__dev_ptmx=yes
+
+# Do not link with libbsd for flock
+# https://github.com/openwrt/packages/issues/21161
+CONFIGURE_VARS += \
+ ac_cv_lib_bsd_flock=no
+
+# Disable stdlib modules
+# Check for a better way in the future: https://github.com/python/cpython/issues/98558
+CONFIGURE_VARS += \
+ py_cv_module__tkinter=n/a \
+ py_cv_module_nis=n/a
+
# Workaround for hardfloat mips
# https://bugs.python.org/issue46265
ifneq ($(findstring mips,$(CONFIG_ARCH)),)
MAKE_VARS += \
PYTHONSTRICTEXTENSIONBUILD=1
-CONFIGURE_ARGS+= \
+CONFIGURE_ARGS += \
--enable-optimizations \
--enable-shared \
+ --disable-test-modules \
+ --with-build-python \
--with-system-ffi \
--without-cxx-main \
--without-ensurepip \
- --without-pymalloc \
- --disable-test-modules \
$(if $(CONFIG_IPV6),--enable-ipv6) \
- $(if $(findstring mips,$(CONFIG_ARCH)),,--with-lto) \
- CONFIG_SITE="$(PKG_BUILD_DIR)/config.site" \
- OPT="$(TARGET_CFLAGS)"
-
-define Build/Prepare
- $(call Build/Prepare/Default)
- $(CP) ./files/config.site $(PKG_BUILD_DIR)/config.site
-endef
-
-ifdef CONFIG_PACKAGE_python3-setuptools
-PYTHON3_SETUPTOOLS_BUILD:=1
-endif
-
-ifdef CONFIG_PACKAGE_python3-pkg-resources
-PYTHON3_SETUPTOOLS_BUILD:=1
-endif
+ $(if $(findstring mips,$(CONFIG_ARCH)),,--with-lto)
-ifeq ($(PYTHON3_SETUPTOOLS_BUILD),1)
-define Build/Compile/python3-setuptools
- $(HOST_PYTHON3_PIP) \
- --disable-pip-version-check \
- --cache-dir "$(DL_DIR)/pip-cache" \
- install \
- --ignore-installed \
- --root=$(PKG_BUILD_DIR)/install-setuptools \
- --prefix=/usr \
- $(PKG_BUILD_DIR)/Lib/ensurepip/_bundled/setuptools-$(PYTHON3_SETUPTOOLS_VERSION)-py3-none-any.whl
- $(call PatchDir,$(PKG_BUILD_DIR)/install-setuptools/usr/lib/python$(PYTHON3_VERSION)/site-packages,./patches-setuptools,)
-endef
-else
-define Build/Compile/python3-setuptools
- ls $(PKG_BUILD_DIR)/Lib/ensurepip/_bundled/setuptools-$(PYTHON3_SETUPTOOLS_VERSION)-py3-none-any.whl
-endef
-endif # CONFIG_PACKAGE_python3-setuptools
-
-ifdef CONFIG_PACKAGE_python3-pip
-define Build/Compile/python3-pip
- $(HOST_PYTHON3_PIP) \
- --disable-pip-version-check \
- --cache-dir "$(DL_DIR)/pip-cache" \
- install \
- --ignore-installed \
- --root=$(PKG_BUILD_DIR)/install-pip \
- --prefix=/usr \
- $(PKG_BUILD_DIR)/Lib/ensurepip/_bundled/pip-$(PYTHON3_PIP_VERSION)-py3-none-any.whl
- $(call PatchDir,$(PKG_BUILD_DIR)/install-pip/usr/lib/python$(PYTHON3_VERSION)/site-packages,./patches-pip,)
-endef
-else
-define Build/Compile/python3-pip
- ls $(PKG_BUILD_DIR)/Lib/ensurepip/_bundled/pip-$(PYTHON3_PIP_VERSION)-py3-none-any.whl
-endef
-endif # CONFIG_PACKAGE_python3-pip
+define Build/Install
+ $(call Build/Install/Default,)
-define Build/Compile
- $(call Build/Compile/Default)
- # Use host pip to install python-setuptools
- $(call Build/Compile/python3-setuptools)
- $(call Build/Compile/python3-pip)
+ $(SED) 's|$(TARGET_AR)|ar|g;s|$(TARGET_CROSS)readelf|readelf|g;s|$(TARGET_CC)|gcc|g;s|$(TARGET_CXX)|g++|g' \
+ $(PKG_INSTALL_DIR)/usr/lib/python$(PYTHON3_VERSION)/_sysconfigdata.py \
+ $(PKG_INSTALL_DIR)/usr/lib/python$(PYTHON3_VERSION)/config-$(PYTHON3_VERSION)/Makefile
endef
define Build/InstallDev
define Py3Package/python3-base/filespec
+|/usr/bin/python$(PYTHON3_VERSION)
-$(subst $(space),$(newline),$(foreach lib_file,$(PYTHON3_BASE_LIB_FILES),+|$(lib_file)))
+$(foreach lib_file,$(PYTHON3_BASE_LIB_FILES),
+ +|$(lib_file)
+)
endef
define Py3Package/python3-light/filespec
+|/usr/lib/python$(PYTHON3_VERSION)
-|/usr/lib/python$(PYTHON3_VERSION)/distutils/cygwinccompiler.py
--|/usr/lib/python$(PYTHON3_VERSION)/distutils/command/wininst*
--|/usr/lib/python$(PYTHON3_VERSION)/ensurepip
-|/usr/lib/python$(PYTHON3_VERSION)/idlelib
-|/usr/lib/python$(PYTHON3_VERSION)/tkinter
-|/usr/lib/python$(PYTHON3_VERSION)/turtledemo
--|/usr/lib/python$(PYTHON3_VERSION)/lib-dynload/_test*.so
--|/usr/lib/python$(PYTHON3_VERSION)/pdb.doc
--|/usr/lib/python$(PYTHON3_VERSION)/test
-|/usr/lib/python$(PYTHON3_VERSION)/webbrowser.py
--|/usr/lib/python$(PYTHON3_VERSION)/*/test
--|/usr/lib/python$(PYTHON3_VERSION)/*/tests
-|/usr/lib/python$(PYTHON3_VERSION)/_osx_support.py
-$(subst $(space),$(newline),$(foreach lib_file,$(PYTHON3_LIB_FILES_DEL),-|$(lib_file)))
+$(foreach lib_file,$(filter /usr/lib/python$(PYTHON3_VERSION)/%,$(PYTHON3_LIB_FILES_DEL)),
+ -|$(lib_file)
+)
endef
define Package/libpython3/install
$(INSTALL_DIR) $(1)/usr/bin
$(LN) python$(PYTHON3_VERSION) $(1)/usr/bin/python3
$(LN) python$(PYTHON3_VERSION) $(1)/usr/bin/python
- # This depends on being called before filespec is processed
- $(SED) 's|$(TARGET_AR)|ar|g;s|$(TARGET_CROSS)readelf|readelf|g;s|$(TARGET_CC)|gcc|g;s|$(TARGET_CXX)|g++|g' \
- $(PKG_INSTALL_DIR)/usr/lib/python$(PYTHON3_VERSION)/_sysconfigdata.py
endef
Py3Package/python3-light/install:=:
-Py3Package/python3/install:=:
+Package/python3/install:=:
-define Py3Package/python3/filespec
--|$(PYTHON3_PKG_DIR)
-endef
+# libuuid is provided by e2fsprogs and uuid/uuid.h is moved into
+# $(STAGING_DIR_HOST)/include/e2fsprogs
+HOST_CFLAGS += \
+ -I$(STAGING_DIR_HOST)/include/e2fsprogs
+HOST_CPPFLAGS += \
+ -I$(STAGING_DIR_HOST)/include/e2fsprogs
HOST_LDFLAGS += \
-Wl$(comma)-rpath$(comma)$(STAGING_DIR_HOSTPKG)/lib
# HOST_MAKE_VARS += \
# PYTHONSTRICTEXTENSIONBUILD=1
+# Bypass configure test
+HOST_CONFIGURE_VARS += \
+ ac_cv_working_openssl_hashlib=yes
+
ifeq ($(HOST_OS),Darwin)
HOST_CONFIGURE_VARS += \
ac_cv_header_libintl_h=no
USE_PYTHON_CONFIG_PY=1
endif
-# FIXME: remove when removing patch '028-host-python-support-ssl-with-libressl.patch'
-HOST_CFLAGS += \
- -DOPENWRT_HOST_BUILD
-
-HOST_CONFIGURE_ARGS+= \
+HOST_CONFIGURE_ARGS += \
--enable-optimizations \
+ --disable-test-modules \
--with-ensurepip=upgrade \
- --with-system-expat=$(STAGING_DIR_HOSTPKG) \
--with-ssl-default-suites=openssl \
- --without-cxx-main \
- --without-pymalloc \
- --disable-test-modules \
- CONFIG_SITE=
+ --with-system-expat \
+ --without-cxx-main
define Host/Configure
$(SED) 's/^ENABLE_USER_SITE = None$$$$/ENABLE_USER_SITE = False/' $(HOST_BUILD_DIR)/Lib/site.py
$(call Host/Configure/Default)
-endef
-
-define Host/Compile
- $(call Host/Compile/Default,python)
- $(call Host/Compile/Default,sharedmods)
+ ls $(HOST_BUILD_DIR)/Lib/ensurepip/_bundled/setuptools-$(PYTHON3_SETUPTOOLS_VERSION)-py3-none-any.whl
+ ls $(HOST_BUILD_DIR)/Lib/ensurepip/_bundled/pip-$(PYTHON3_PIP_VERSION)-py3-none-any.whl
endef
define Host/Install
)
$(call Host/Install/Default)
$(if $(wildcard $(HOST_PYTHON3_PKG_DIR)/.setuptools_installed_$(PYTHON3_SETUPTOOLS_VERSION)-$(PYTHON3_SETUPTOOLS_PKG_RELEASE)),,
- $(call HostPatchDir,$(HOST_PYTHON3_PKG_DIR),./patches-setuptools,)
+ $(call HostPatchDir,$(HOST_PYTHON3_PKG_DIR),./patches-host-setuptools,)
touch $(HOST_PYTHON3_PKG_DIR)/.setuptools_installed_$(PYTHON3_SETUPTOOLS_VERSION)-$(PYTHON3_SETUPTOOLS_PKG_RELEASE)
)
$(if $(wildcard $(HOST_PYTHON3_PKG_DIR)/.pip_installed_$(PYTHON3_PIP_VERSION)-$(PYTHON3_PIP_PKG_RELEASE)),,
- $(call HostPatchDir,$(HOST_PYTHON3_PKG_DIR),./patches-pip,)
+ $(call HostPatchDir,$(HOST_PYTHON3_PKG_DIR),./patches-host-pip,)
touch $(HOST_PYTHON3_PKG_DIR)/.pip_installed_$(PYTHON3_PIP_VERSION)-$(PYTHON3_PIP_PKG_RELEASE)
)
endef
)
$(eval $(call BuildPackage,libpython3))
+$(eval $(call BuildPackage,python3))
$(eval $(call Py3Package,python3-base))
$(eval $(call Py3Package,python3-light))
-$(eval $(call Py3Package,python3))
$(eval $(call BuildPackage,python3-base))
$(eval $(call BuildPackage,python3-light))
-$(eval $(call BuildPackage,python3))
$(eval $(call BuildPackage,python3-base-src))
$(eval $(call BuildPackage,python3-light-src))