mirror of
https://gitlab.com/buildroot.org/buildroot.git
synced 2026-11-07 00:58:55 -10:00
Upstream release 3.13.0 first included commitae00b810d1which removed the 2to3 program and the lib2to3 module. Buildroot commitd63e207eb8bumped the package from 3.12.9 to 3.13.2 but forgot to remove its handling. Current versions of Kodi do not need lib2to3. Signed-off-by: Bernd Kuhls <bernd@kuhls.net> [Julien: fix typo in commit log version "3.13.9" -> "3.12.9"] Signed-off-by: Julien Olivain <ju.o@free.fr>
315 lines
8.7 KiB
Makefile
315 lines
8.7 KiB
Makefile
################################################################################
|
|
#
|
|
# python3
|
|
#
|
|
################################################################################
|
|
|
|
PYTHON3_VERSION_MAJOR = 3.14
|
|
PYTHON3_VERSION = $(PYTHON3_VERSION_MAJOR).8
|
|
PYTHON3_SOURCE = Python-$(PYTHON3_VERSION).tar.xz
|
|
PYTHON3_SITE = https://python.org/ftp/python/$(PYTHON3_VERSION)
|
|
PYTHON3_LICENSE = Python-2.0, others
|
|
PYTHON3_LICENSE_FILES = LICENSE
|
|
PYTHON3_CPE_ID_VENDOR = python
|
|
PYTHON3_CPE_ID_PRODUCT = python
|
|
|
|
# This host Python is installed in $(HOST_DIR), as it is needed when
|
|
# cross-compiling third-party Python modules.
|
|
|
|
HOST_PYTHON3_CONF_OPTS += \
|
|
--without-ensurepip \
|
|
--disable-sqlite3 \
|
|
--disable-tk \
|
|
--with-expat=system \
|
|
--disable-test-modules \
|
|
--disable-idle3
|
|
|
|
# Make sure that LD_LIBRARY_PATH overrides -rpath.
|
|
# This is needed because libpython may be installed at the same time that
|
|
# python is called.
|
|
HOST_PYTHON3_CONF_ENV += \
|
|
LDFLAGS="$(HOST_LDFLAGS) -Wl,--enable-new-dtags" \
|
|
py_cv_module_unicodedata=yes \
|
|
py_cv_module__codecs_cn=n/a \
|
|
py_cv_module__codecs_hk=n/a \
|
|
py_cv_module__codecs_iso2022=n/a \
|
|
py_cv_module__codecs_jp=n/a \
|
|
py_cv_module__codecs_kr=n/a \
|
|
py_cv_module__codecs_tw=n/a \
|
|
py_cv_module__uuid=n/a
|
|
|
|
PYTHON3_DEPENDENCIES = host-python3 libffi
|
|
|
|
HOST_PYTHON3_DEPENDENCIES = \
|
|
host-autoconf-archive \
|
|
host-expat \
|
|
host-libffi \
|
|
host-pkgconf \
|
|
host-zlib
|
|
|
|
ifeq ($(BR2_PACKAGE_HOST_PYTHON3_BZIP2),y)
|
|
HOST_PYTHON3_DEPENDENCIES += host-bzip2
|
|
else
|
|
HOST_PYTHON3_CONF_ENV += py_cv_module__bz2=n/a
|
|
endif
|
|
|
|
ifeq ($(BR2_PACKAGE_HOST_PYTHON3_XZ),y)
|
|
HOST_PYTHON3_DEPENDENCIES += host-xz
|
|
else
|
|
HOST_PYTHON3_CONF_ENV += py_cv_module__lzma=n/a
|
|
endif
|
|
|
|
ifeq ($(BR2_PACKAGE_HOST_PYTHON3_CURSES),y)
|
|
HOST_PYTHON3_DEPENDENCIES += host-ncurses
|
|
else
|
|
HOST_PYTHON3_CONF_OPTS += --disable-curses
|
|
endif
|
|
|
|
ifeq ($(BR2_PACKAGE_HOST_PYTHON3_SSL),y)
|
|
HOST_PYTHON3_DEPENDENCIES += host-openssl
|
|
else
|
|
HOST_PYTHON3_CONF_ENV += \
|
|
py_cv_module__hashlib=n/a \
|
|
py_cv_module__ssl=n/a
|
|
endif
|
|
|
|
PYTHON3_INSTALL_STAGING = YES
|
|
|
|
ifeq ($(BR2_PACKAGE_PYTHON3_BERKELEYDB),y)
|
|
PYTHON3_DEPENDENCIES += berkeleydb
|
|
else
|
|
PYTHON3_CONF_ENV += py_cv_module__dbm=n/a
|
|
endif
|
|
|
|
ifeq ($(BR2_PACKAGE_PYTHON3_READLINE),y)
|
|
PYTHON3_CONF_OPTS += --with-readline
|
|
PYTHON3_DEPENDENCIES += readline
|
|
else
|
|
PYTHON3_CONF_OPTS += --without-readline
|
|
endif
|
|
|
|
ifeq ($(BR2_PACKAGE_PYTHON3_CURSES),y)
|
|
PYTHON3_DEPENDENCIES += ncurses
|
|
else
|
|
PYTHON3_CONF_OPTS += --disable-curses
|
|
endif
|
|
|
|
ifeq ($(BR2_PACKAGE_PYTHON3_DECIMAL),y)
|
|
PYTHON3_DEPENDENCIES += mpdecimal
|
|
PYTHON3_CONF_OPTS += --with-system-libmpdec
|
|
else
|
|
PYTHON3_CONF_ENV += py_cv_module__decimal=n/a
|
|
endif
|
|
|
|
ifeq ($(BR2_PACKAGE_PYTHON3_PYEXPAT),y)
|
|
PYTHON3_DEPENDENCIES += expat
|
|
PYTHON3_CONF_OPTS += --with-expat=system
|
|
else
|
|
PYTHON3_CONF_OPTS += --with-expat=none
|
|
endif
|
|
|
|
ifeq ($(BR2_PACKAGE_PYTHON3_SQLITE),y)
|
|
PYTHON3_DEPENDENCIES += sqlite
|
|
else
|
|
PYTHON3_CONF_OPTS += --disable-sqlite3
|
|
endif
|
|
|
|
ifeq ($(BR2_PACKAGE_PYTHON3_SSL),y)
|
|
PYTHON3_DEPENDENCIES += openssl
|
|
PYTHON3_CONF_OPTS += --with-openssl=$(STAGING_DIR)/usr
|
|
else
|
|
PYTHON3_CONF_ENV += \
|
|
py_cv_module__hashlib=n/a \
|
|
py_cv_module__ssl=n/a
|
|
endif
|
|
|
|
ifneq ($(BR2_PACKAGE_PYTHON3_CODECSCJK),y)
|
|
PYTHON3_CONF_ENV += \
|
|
py_cv_module__codecs_cn=n/a \
|
|
py_cv_module__codecs_hk=n/a \
|
|
py_cv_module__codecs_iso2022=n/a \
|
|
py_cv_module__codecs_jp=n/a \
|
|
py_cv_module__codecs_kr=n/a \
|
|
py_cv_module__codecs_tw=n/a
|
|
endif
|
|
|
|
ifneq ($(BR2_PACKAGE_PYTHON3_UNICODEDATA),y)
|
|
PYTHON3_CONF_ENV += py_cv_module_unicodedata=n/a
|
|
endif
|
|
|
|
# Disable auto-detection of uuid.h (util-linux)
|
|
# which would add _uuid module support, instead
|
|
# default to the pure python implementation
|
|
PYTHON3_CONF_ENV += py_cv_module__uuid=n/a
|
|
|
|
ifeq ($(BR2_PACKAGE_PYTHON3_BZIP2),y)
|
|
PYTHON3_DEPENDENCIES += bzip2
|
|
else
|
|
PYTHON3_CONF_ENV += py_cv_module__bz2=n/a
|
|
endif
|
|
|
|
ifeq ($(BR2_PACKAGE_PYTHON3_XZ),y)
|
|
PYTHON3_DEPENDENCIES += xz
|
|
else
|
|
PYTHON3_CONF_ENV += py_cv_module__lzma=n/a
|
|
endif
|
|
|
|
ifeq ($(BR2_PACKAGE_PYTHON3_ZLIB),y)
|
|
PYTHON3_DEPENDENCIES += zlib
|
|
else
|
|
PYTHON3_CONF_ENV += py_cv_module_zlib=n/a
|
|
endif
|
|
|
|
ifeq ($(BR2_PACKAGE_PYTHON3_ZSTD),y)
|
|
PYTHON3_DEPENDENCIES += zstd
|
|
else
|
|
PYTHON3_CONF_ENV += py_cv_module__zstd=n/a
|
|
endif
|
|
|
|
PYTHON3_CONF_ENV += \
|
|
ac_cv_have_long_long_format=yes \
|
|
ac_cv_buggy_getaddrinfo=no \
|
|
ac_cv_file__dev_ptmx=yes \
|
|
ac_cv_file__dev_ptc=yes \
|
|
ac_cv_working_tzset=yes
|
|
|
|
# GCC is always compliant with IEEE754
|
|
ifeq ($(BR2_ENDIAN),"LITTLE")
|
|
PYTHON3_CONF_ENV += ac_cv_little_endian_double=yes
|
|
else
|
|
PYTHON3_CONF_ENV += ac_cv_big_endian_double=yes
|
|
endif
|
|
|
|
PYTHON3_CFLAGS = $(TARGET_CFLAGS)
|
|
|
|
ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_81426),y)
|
|
PYTHON3_CFLAGS += -O0
|
|
endif
|
|
|
|
PYTHON3_CONF_ENV += \
|
|
CFLAGS="$(PYTHON3_CFLAGS)"
|
|
|
|
ifeq ($(BR2_PACKAGE_GETTEXT_PROVIDES_LIBINTL),y)
|
|
PYTHON3_DEPENDENCIES += gettext
|
|
endif
|
|
|
|
PYTHON3_CONF_OPTS += \
|
|
--without-ensurepip \
|
|
--with-build-python=$(HOST_DIR)/bin/python3 \
|
|
--disable-pydoc \
|
|
--disable-test-modules \
|
|
--disable-tk \
|
|
--disable-idle3 \
|
|
--disable-pyc-build
|
|
|
|
#
|
|
# Remove useless files. In the config/ directory, only the Makefile
|
|
# and the pyconfig.h files are needed at runtime.
|
|
#
|
|
define PYTHON3_REMOVE_USELESS_FILES
|
|
rm -f $(TARGET_DIR)/usr/bin/python$(PYTHON3_VERSION_MAJOR)-config
|
|
rm -f $(TARGET_DIR)/usr/bin/python3-config
|
|
find $(TARGET_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR)/config-$(PYTHON3_VERSION_MAJOR)*/ \
|
|
-depth -type f -not -name Makefile -exec rm -rf {} \;
|
|
find $(TARGET_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR)/ -depth -type d \
|
|
-name __pycache__ -exec rm -rf {} \;
|
|
endef
|
|
|
|
PYTHON3_POST_INSTALL_TARGET_HOOKS += PYTHON3_REMOVE_USELESS_FILES
|
|
|
|
#
|
|
# Make sure libpython gets stripped out on target
|
|
#
|
|
define PYTHON3_ENSURE_LIBPYTHON_STRIPPED
|
|
chmod u+w $(TARGET_DIR)/usr/lib/libpython$(PYTHON3_VERSION_MAJOR)*.so
|
|
endef
|
|
|
|
PYTHON3_POST_INSTALL_TARGET_HOOKS += PYTHON3_ENSURE_LIBPYTHON_STRIPPED
|
|
|
|
PYTHON3_AUTORECONF = YES
|
|
PYTHON3_AUTORECONF_OPTS = --include=$(HOST_DIR)/share/autoconf-archive
|
|
|
|
define PYTHON3_INSTALL_SYMLINK
|
|
ln -fs python3 $(TARGET_DIR)/usr/bin/python
|
|
endef
|
|
|
|
PYTHON3_POST_INSTALL_TARGET_HOOKS += PYTHON3_INSTALL_SYMLINK
|
|
|
|
define HOST_PYTHON3_INSTALL_SYMLINK
|
|
ln -fs python3 $(HOST_DIR)/bin/python
|
|
ln -fs python3-config $(HOST_DIR)/bin/python-config
|
|
endef
|
|
|
|
HOST_PYTHON3_POST_INSTALL_HOOKS += HOST_PYTHON3_INSTALL_SYMLINK
|
|
|
|
# Provided to other packages
|
|
PYTHON3_PATH = $(STAGING_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR)/
|
|
|
|
# Support for socket.AF_BLUETOOTH
|
|
ifeq ($(BR2_PACKAGE_BLUEZ5_UTILS_HEADERS),y)
|
|
PYTHON3_DEPENDENCIES += bluez5_utils-headers
|
|
endif
|
|
|
|
$(eval $(autotools-package))
|
|
$(eval $(host-autotools-package))
|
|
|
|
ifeq ($(BR2_REPRODUCIBLE),y)
|
|
define PYTHON3_FIX_TIME
|
|
find $(TARGET_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR) -name '*.py' -print0 | \
|
|
xargs -0 --no-run-if-empty touch -d @$(SOURCE_DATE_EPOCH)
|
|
endef
|
|
endif
|
|
|
|
define PYTHON3_CREATE_PYC_FILES
|
|
$(PYTHON3_FIX_TIME)
|
|
PYTHONPATH="$(PYTHON3_PATH)" \
|
|
$(HOST_DIR)/bin/python$(PYTHON3_VERSION_MAJOR) \
|
|
$(PYTHON3_DIR)/Lib/compileall.py \
|
|
$(if $(VERBOSE),,-q) \
|
|
$(if $(BR2_PACKAGE_PYTHON3_PYC_ONLY),-b) \
|
|
-s $(TARGET_DIR) \
|
|
-p / \
|
|
$(TARGET_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR)
|
|
endef
|
|
|
|
ifeq ($(BR2_PACKAGE_PYTHON3_PYC_ONLY)$(BR2_PACKAGE_PYTHON3_PY_PYC),y)
|
|
PYTHON3_TARGET_FINALIZE_HOOKS += PYTHON3_CREATE_PYC_FILES
|
|
endif
|
|
|
|
ifeq ($(BR2_PACKAGE_PYTHON3_PYC_ONLY),y)
|
|
define PYTHON3_REMOVE_PY_FILES
|
|
find $(TARGET_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR) -name '*.py' \
|
|
$(if $(strip $(KEEP_PYTHON_PY_FILES)),-not \( $(call finddirclauses,$(TARGET_DIR),$(KEEP_PYTHON_PY_FILES)) \) ) \
|
|
-print0 | \
|
|
xargs -0 --no-run-if-empty rm -f
|
|
endef
|
|
PYTHON3_TARGET_FINALIZE_HOOKS += PYTHON3_REMOVE_PY_FILES
|
|
endif
|
|
|
|
# Normally, *.pyc files should not have been compiled, but just in
|
|
# case, we make sure we remove all of them.
|
|
ifeq ($(BR2_PACKAGE_PYTHON3_PY_ONLY),y)
|
|
define PYTHON3_REMOVE_PYC_FILES
|
|
find $(TARGET_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR) -name '*.pyc' -print0 | \
|
|
xargs -0 --no-run-if-empty rm -f
|
|
endef
|
|
PYTHON3_TARGET_FINALIZE_HOOKS += PYTHON3_REMOVE_PYC_FILES
|
|
endif
|
|
|
|
# In all cases, we don't want to keep the optimized .opt-1.pyc and
|
|
# .opt-2.pyc files, since they can't work without their non-optimized
|
|
# variant.
|
|
define PYTHON3_REMOVE_OPTIMIZED_PYC_FILES
|
|
find $(TARGET_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR) -name '*.opt-1.pyc' -print0 -o -name '*.opt-2.pyc' -print0 | \
|
|
xargs -0 --no-run-if-empty rm -f
|
|
endef
|
|
PYTHON3_TARGET_FINALIZE_HOOKS += PYTHON3_REMOVE_OPTIMIZED_PYC_FILES
|
|
|
|
# uClibc without time64 support (i.e. when linux headers < 5.1) causes
|
|
# a runtime assertion in Python. Encoding this as a dependency in Config.in
|
|
# causes too many problems for propagating reverse dependencies. Therefore
|
|
# instead we do a build time check.
|
|
ifeq ($(BR_BUILDING)$(BR2_PACKAGE_PYTHON3)$(BR2_TOOLCHAIN_USES_UCLIBC)-$(BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_1),yyy-)
|
|
$(error Python3 doesn't work with uClibc and kernel headers < 5.1. Please use a different toolchain or unselect Python3.)
|
|
endif
|