2013-06-06 01:53:30 +02:00
|
|
|
################################################################################
|
2012-11-07 06:01:21 +01:00
|
|
|
#
|
|
|
|
# python3
|
|
|
|
#
|
2013-06-06 01:53:30 +02:00
|
|
|
################################################################################
|
2013-06-06 01:53:25 +02:00
|
|
|
|
python3: bump to 3.5.1
The major changes in terms of Buildroot packaging are:
- Due to PEP488, Python no longer generates .pyc (unoptimized) and
.pyo (optimized) byte-code files. Instead, it generates <foo>.pyc,
<foo>.opt-1.pyc and <foo>.opt-2.pyc. Therefore, we removed the
--disable-pyo-build option and kept only the --disable-pyc-build
option, which completely disables building all .pyc files. In
addition, since the optimized .opt-X.pyc files don't work if the
corresponding un-optimized .pyc file is not present, we are for the
moment unconditionally removing the optimized ones (keeping both
the unoptimized and optimized ones doubles the required filesystem
size!). So basically we preserve the behavior we had before this
commit:
BR2_PACKAGE_PYTHON3_PY_ONLY -> only *.py
BR2_PACKAGE_PYTHON3_PYC_ONLY -> only non-optimized *.pyc
BR2_PACKAGE_PYTHON3_PY_PYC -> both the *.py and non-optimized *.pyc
To achieve this, the TARGET_FINALIZE_HOOKS are reworked:
PYTHON3_REMOVE_PY_FILES is responsible for removing *.py files in
the BR2_PACKAGE_PYTHON3_PYC_ONLY case.
PYTHON3_REMOVE_PYC_FILES is responsible for removing *.pyc files
in the BR2_PACKAGE_PYTHON3_PY_ONLY case.
PYTHON3_REMOVE_OPTIMIZED_PYC_FILES is responsible for removing the
optimized *.opt-1.pyc and *.opt-2.pyc files, which is done
unconditionally.
- The PEP3147 disabling patch had to be significantly reworked due to
the code having changed heavily. The code was moved into a
_bootstrap_external.py, which is a "frozen" Python module, i.e a
module generated into a .h file at compile time using the
_freeze_importlib program.
- Due to the above, we now need to regenerate importlib.h at build
time. Unfortunately, for the target Python _freeze_importlib is
built for the target, so we can't run it on the build machine. To
fix this, we copy the _freeze_importlib program from the
host-python in $(HOST_DIR), and then patch the target python to use
it. Since the same solution can be used for 'pgen', we do it, and
avoid having to touch the graminit.{c,h} files.
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Reviewed-by: Samuel Martin <s.martin49@gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2016-05-01 22:15:12 +02:00
|
|
|
PYTHON3_VERSION_MAJOR = 3.5
|
2016-06-29 20:48:32 +02:00
|
|
|
PYTHON3_VERSION = $(PYTHON3_VERSION_MAJOR).2
|
2014-03-26 23:22:06 +01:00
|
|
|
PYTHON3_SOURCE = Python-$(PYTHON3_VERSION).tar.xz
|
|
|
|
PYTHON3_SITE = http://python.org/ftp/python/$(PYTHON3_VERSION)
|
2014-07-23 20:33:20 +02:00
|
|
|
PYTHON3_LICENSE = Python software foundation license v2, others
|
|
|
|
PYTHON3_LICENSE_FILES = LICENSE
|
2012-11-07 06:01:21 +01:00
|
|
|
|
2014-12-28 21:54:52 +01:00
|
|
|
# Python itself doesn't use libtool, but it includes the source code
|
|
|
|
# of libffi, which uses libtool. Unfortunately, it uses a beta version
|
|
|
|
# of libtool for which we don't have a matching patch. However, this
|
|
|
|
# is not a problem, because we don't use the libffi copy included in
|
|
|
|
# the Python sources, but instead use an external libffi library.
|
|
|
|
PYTHON3_LIBTOOL_PATCH = NO
|
|
|
|
|
2012-11-07 06:01:21 +01:00
|
|
|
# Python needs itself and a "pgen" program to build itself, both being
|
|
|
|
# provided in the Python sources. So in order to cross-compile Python,
|
|
|
|
# we need to build a host Python first. This host Python is also
|
|
|
|
# installed in $(HOST_DIR), as it is needed when cross-compiling
|
|
|
|
# third-party Python modules.
|
|
|
|
|
2014-09-27 21:32:44 +02:00
|
|
|
HOST_PYTHON3_CONF_OPTS += \
|
2014-02-18 21:40:01 +01:00
|
|
|
--without-ensurepip \
|
2012-11-07 06:01:21 +01:00
|
|
|
--without-cxx-main \
|
|
|
|
--disable-sqlite3 \
|
|
|
|
--disable-tk \
|
|
|
|
--with-expat=system \
|
|
|
|
--disable-curses \
|
|
|
|
--disable-codecs-cjk \
|
|
|
|
--disable-nis \
|
2014-02-18 21:40:05 +01:00
|
|
|
--enable-unicodedata \
|
2012-11-07 06:01:21 +01:00
|
|
|
--disable-test-modules \
|
2014-02-18 21:40:01 +01:00
|
|
|
--disable-idle3 \
|
python3: bump to 3.5.1
The major changes in terms of Buildroot packaging are:
- Due to PEP488, Python no longer generates .pyc (unoptimized) and
.pyo (optimized) byte-code files. Instead, it generates <foo>.pyc,
<foo>.opt-1.pyc and <foo>.opt-2.pyc. Therefore, we removed the
--disable-pyo-build option and kept only the --disable-pyc-build
option, which completely disables building all .pyc files. In
addition, since the optimized .opt-X.pyc files don't work if the
corresponding un-optimized .pyc file is not present, we are for the
moment unconditionally removing the optimized ones (keeping both
the unoptimized and optimized ones doubles the required filesystem
size!). So basically we preserve the behavior we had before this
commit:
BR2_PACKAGE_PYTHON3_PY_ONLY -> only *.py
BR2_PACKAGE_PYTHON3_PYC_ONLY -> only non-optimized *.pyc
BR2_PACKAGE_PYTHON3_PY_PYC -> both the *.py and non-optimized *.pyc
To achieve this, the TARGET_FINALIZE_HOOKS are reworked:
PYTHON3_REMOVE_PY_FILES is responsible for removing *.py files in
the BR2_PACKAGE_PYTHON3_PYC_ONLY case.
PYTHON3_REMOVE_PYC_FILES is responsible for removing *.pyc files
in the BR2_PACKAGE_PYTHON3_PY_ONLY case.
PYTHON3_REMOVE_OPTIMIZED_PYC_FILES is responsible for removing the
optimized *.opt-1.pyc and *.opt-2.pyc files, which is done
unconditionally.
- The PEP3147 disabling patch had to be significantly reworked due to
the code having changed heavily. The code was moved into a
_bootstrap_external.py, which is a "frozen" Python module, i.e a
module generated into a .h file at compile time using the
_freeze_importlib program.
- Due to the above, we now need to regenerate importlib.h at build
time. Unfortunately, for the target Python _freeze_importlib is
built for the target, so we can't run it on the build machine. To
fix this, we copy the _freeze_importlib program from the
host-python in $(HOST_DIR), and then patch the target python to use
it. Since the same solution can be used for 'pgen', we do it, and
avoid having to touch the graminit.{c,h} files.
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Reviewed-by: Samuel Martin <s.martin49@gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2016-05-01 22:15:12 +02:00
|
|
|
--disable-ossaudiodev
|
2012-11-07 06:01:21 +01:00
|
|
|
|
2014-03-05 00:29:49 +01:00
|
|
|
# Make sure that LD_LIBRARY_PATH overrides -rpath.
|
|
|
|
# This is needed because libpython may be installed at the same time that
|
|
|
|
# python is called.
|
2016-08-31 22:38:29 +02:00
|
|
|
# Make python believe we don't have 'hg', so that it doesn't try to
|
|
|
|
# communicate over the network during the build.
|
2014-03-05 00:29:49 +01:00
|
|
|
HOST_PYTHON3_CONF_ENV += \
|
2016-08-31 22:38:29 +02:00
|
|
|
LDFLAGS="$(HOST_LDFLAGS) -Wl,--enable-new-dtags" \
|
|
|
|
ac_cv_prog_HAS_HG=/bin/false
|
2014-03-05 00:29:49 +01:00
|
|
|
|
.mk files: bulk aligment and whitespace cleanup of assignments
The Buildroot coding style defines one space around make assignments and
does not align the assignment symbols.
This patch does a bulk fix of offending packages. The package
infrastructures (or more in general assignments to calculated variable
names, like $(2)_FOO) are not touched.
Alignment of line continuation characters (\) is kept as-is.
The sed command used to do this replacement is:
find * -name "*.mk" | xargs sed -i \
-e 's#^\([A-Z0-9a-z_]\+\)\s*\([?:+]\?=\)\s*$#\1 \2#'
-e 's#^\([A-Z0-9a-z_]\+\)\s*\([?:+]\?=\)\s*\([^\\]\+\)$#\1 \2 \3#'
-e 's#^\([A-Z0-9a-z_]\+\)\s*\([?:+]\?=\)\s*\([^\\ \t]\+\s*\\\)\s*$#\1 \2 \3#'
-e 's#^\([A-Z0-9a-z_]\+\)\s*\([?:+]\?=\)\(\s*\\\)#\1 \2\3#'
Brief explanation of this command:
^\([A-Z0-9a-z_]\+\) a regular variable at the beginning of the line
\([?:+]\?=\) any assignment character =, :=, ?=, +=
\([^\\]\+\) any string not containing a line continuation
\([^\\ \t]\+\s*\\\) string, optional whitespace, followed by a
line continuation character
\(\s*\\\) optional whitespace, followed by a line
continuation character
Hence, the first subexpression handles empty assignments, the second
handles regular assignments, the third handles regular assignments with
line continuation, and the fourth empty assignments with line
continuation.
This expression was tested on following test text: (initial tab not
included)
FOO = spaces before
FOO = spaces before and after
FOO = tab before
FOO = tab and spaces before
FOO = tab after
FOO = tab and spaces after
FOO = spaces and tab after
FOO = \
FOO = bar \
FOO = bar space \
FOO = \
GENIMAGE_DEPENDENCIES = host-pkgconf libconfuse
FOO += spaces before
FOO ?= spaces before and after
FOO :=
FOO =
FOO =
FOO =
FOO =
$(MAKE1) CROSS_COMPILE=$(TARGET_CROSS) -C
AT91BOOTSTRAP3_DEFCONFIG = \
AXEL_DISABLE_I18N=--i18n=0
After this bulk change, following manual fixups were done:
- fix line continuation alignment in cegui06 and spice (the sed
expression leaves the number of whitespace between the value and line
continuation character intact, but the whitespace before that could have
changed, causing misalignment.
- qt5base was reverted, as this package uses extensive alignment which
actually makes the code more readable.
Finally, the end result was manually reviewed.
Signed-off-by: Thomas De Schampheleire <thomas.de.schampheleire@gmail.com>
Cc: Yann E. Morin <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2014-10-07 09:06:03 +02:00
|
|
|
PYTHON3_DEPENDENCIES = host-python3 libffi
|
2012-11-07 06:01:21 +01:00
|
|
|
|
|
|
|
HOST_PYTHON3_DEPENDENCIES = host-expat host-zlib
|
|
|
|
|
|
|
|
PYTHON3_INSTALL_STAGING = YES
|
|
|
|
|
|
|
|
ifeq ($(BR2_PACKAGE_PYTHON3_READLINE),y)
|
|
|
|
PYTHON3_DEPENDENCIES += readline
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq ($(BR2_PACKAGE_PYTHON3_CURSES),y)
|
|
|
|
PYTHON3_DEPENDENCIES += ncurses
|
2013-05-29 10:36:57 +02:00
|
|
|
else
|
2014-09-27 21:32:44 +02:00
|
|
|
PYTHON3_CONF_OPTS += --disable-curses
|
2012-11-07 06:01:21 +01:00
|
|
|
endif
|
|
|
|
|
2014-07-23 20:33:19 +02:00
|
|
|
ifeq ($(BR2_PACKAGE_PYTHON3_DECIMAL),y)
|
|
|
|
PYTHON3_DEPENDENCIES += mpdecimal
|
2014-09-27 21:32:44 +02:00
|
|
|
PYTHON3_CONF_OPTS += --with-libmpdec=system
|
2014-07-23 20:33:19 +02:00
|
|
|
else
|
2014-09-27 21:32:44 +02:00
|
|
|
PYTHON3_CONF_OPTS += --with-libmpdec=none
|
2014-07-23 20:33:19 +02:00
|
|
|
endif
|
|
|
|
|
2012-11-07 06:01:21 +01:00
|
|
|
ifeq ($(BR2_PACKAGE_PYTHON3_PYEXPAT),y)
|
|
|
|
PYTHON3_DEPENDENCIES += expat
|
2014-09-27 21:32:44 +02:00
|
|
|
PYTHON3_CONF_OPTS += --with-expat=system
|
2012-11-07 06:01:21 +01:00
|
|
|
else
|
2014-09-27 21:32:44 +02:00
|
|
|
PYTHON3_CONF_OPTS += --with-expat=none
|
2012-11-07 06:01:21 +01:00
|
|
|
endif
|
|
|
|
|
2013-01-27 16:38:56 +01:00
|
|
|
ifeq ($(BR2_PACKAGE_PYTHON3_PYC_ONLY),y)
|
2014-09-27 21:32:44 +02:00
|
|
|
PYTHON3_CONF_OPTS += --enable-old-stdlib-cache
|
2013-01-27 16:38:56 +01:00
|
|
|
endif
|
|
|
|
|
2012-11-07 06:01:21 +01:00
|
|
|
ifeq ($(BR2_PACKAGE_PYTHON3_SQLITE),y)
|
|
|
|
PYTHON3_DEPENDENCIES += sqlite
|
2013-05-29 10:36:57 +02:00
|
|
|
else
|
2014-09-27 21:32:44 +02:00
|
|
|
PYTHON3_CONF_OPTS += --disable-sqlite3
|
2012-11-07 06:01:21 +01:00
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq ($(BR2_PACKAGE_PYTHON3_SSL),y)
|
2013-05-29 10:36:57 +02:00
|
|
|
PYTHON3_DEPENDENCIES += openssl
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifneq ($(BR2_PACKAGE_PYTHON3_CODECSCJK),y)
|
2014-09-27 21:32:44 +02:00
|
|
|
PYTHON3_CONF_OPTS += --disable-codecs-cjk
|
2013-05-29 10:36:57 +02:00
|
|
|
endif
|
|
|
|
|
|
|
|
ifneq ($(BR2_PACKAGE_PYTHON3_UNICODEDATA),y)
|
2014-09-27 21:32:44 +02:00
|
|
|
PYTHON3_CONF_OPTS += --disable-unicodedata
|
2012-11-07 06:01:21 +01:00
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq ($(BR2_PACKAGE_PYTHON3_BZIP2),y)
|
2013-05-29 10:36:57 +02:00
|
|
|
PYTHON3_DEPENDENCIES += bzip2
|
2012-11-07 06:01:21 +01:00
|
|
|
endif
|
|
|
|
|
2016-10-09 14:46:16 +02:00
|
|
|
ifeq ($(BR2_PACKAGE_PYTHON3_XZ),y)
|
|
|
|
PYTHON3_DEPENDENCIES += xz
|
|
|
|
endif
|
|
|
|
|
2012-11-07 06:01:21 +01:00
|
|
|
ifeq ($(BR2_PACKAGE_PYTHON3_ZLIB),y)
|
|
|
|
PYTHON3_DEPENDENCIES += zlib
|
|
|
|
endif
|
|
|
|
|
2015-01-10 16:32:48 +01:00
|
|
|
ifeq ($(BR2_PACKAGE_PYTHON3_OSSAUDIODEV),y)
|
|
|
|
PYTHON3_CONF_OPTS += --enable-ossaudiodev
|
|
|
|
else
|
|
|
|
PYTHON3_CONF_OPTS += --disable-ossaudiodev
|
|
|
|
endif
|
|
|
|
|
2016-08-31 22:38:29 +02:00
|
|
|
# Make python believe we don't have 'hg', so that it doesn't try to
|
|
|
|
# communicate over the network during the build.
|
2012-11-07 06:01:21 +01:00
|
|
|
PYTHON3_CONF_ENV += \
|
|
|
|
ac_cv_have_long_long_format=yes \
|
|
|
|
ac_cv_file__dev_ptmx=yes \
|
|
|
|
ac_cv_file__dev_ptc=yes \
|
2016-08-31 22:38:29 +02:00
|
|
|
ac_cv_working_tzset=yes \
|
|
|
|
ac_cv_prog_HAS_HG=/bin/false
|
2012-11-07 06:01:21 +01:00
|
|
|
|
2014-11-13 22:23:23 +01:00
|
|
|
# uClibc is known to have a broken wcsftime() implementation, so tell
|
|
|
|
# Python 3 to fall back to strftime() instead.
|
|
|
|
ifeq ($(BR2_TOOLCHAIN_USES_UCLIBC),y)
|
|
|
|
PYTHON3_CONF_ENV += ac_cv_func_wcsftime=no
|
|
|
|
endif
|
|
|
|
|
2014-09-27 21:32:44 +02:00
|
|
|
PYTHON3_CONF_OPTS += \
|
2014-02-18 21:40:01 +01:00
|
|
|
--without-ensurepip \
|
2012-11-07 06:01:21 +01:00
|
|
|
--without-cxx-main \
|
|
|
|
--with-system-ffi \
|
|
|
|
--disable-pydoc \
|
|
|
|
--disable-test-modules \
|
|
|
|
--disable-lib2to3 \
|
|
|
|
--disable-tk \
|
|
|
|
--disable-nis \
|
2016-05-17 23:19:15 +02:00
|
|
|
--disable-idle3 \
|
|
|
|
--disable-pyc-build
|
python3: bump to 3.5.1
The major changes in terms of Buildroot packaging are:
- Due to PEP488, Python no longer generates .pyc (unoptimized) and
.pyo (optimized) byte-code files. Instead, it generates <foo>.pyc,
<foo>.opt-1.pyc and <foo>.opt-2.pyc. Therefore, we removed the
--disable-pyo-build option and kept only the --disable-pyc-build
option, which completely disables building all .pyc files. In
addition, since the optimized .opt-X.pyc files don't work if the
corresponding un-optimized .pyc file is not present, we are for the
moment unconditionally removing the optimized ones (keeping both
the unoptimized and optimized ones doubles the required filesystem
size!). So basically we preserve the behavior we had before this
commit:
BR2_PACKAGE_PYTHON3_PY_ONLY -> only *.py
BR2_PACKAGE_PYTHON3_PYC_ONLY -> only non-optimized *.pyc
BR2_PACKAGE_PYTHON3_PY_PYC -> both the *.py and non-optimized *.pyc
To achieve this, the TARGET_FINALIZE_HOOKS are reworked:
PYTHON3_REMOVE_PY_FILES is responsible for removing *.py files in
the BR2_PACKAGE_PYTHON3_PYC_ONLY case.
PYTHON3_REMOVE_PYC_FILES is responsible for removing *.pyc files
in the BR2_PACKAGE_PYTHON3_PY_ONLY case.
PYTHON3_REMOVE_OPTIMIZED_PYC_FILES is responsible for removing the
optimized *.opt-1.pyc and *.opt-2.pyc files, which is done
unconditionally.
- The PEP3147 disabling patch had to be significantly reworked due to
the code having changed heavily. The code was moved into a
_bootstrap_external.py, which is a "frozen" Python module, i.e a
module generated into a .h file at compile time using the
_freeze_importlib program.
- Due to the above, we now need to regenerate importlib.h at build
time. Unfortunately, for the target Python _freeze_importlib is
built for the target, so we can't run it on the build machine. To
fix this, we copy the _freeze_importlib program from the
host-python in $(HOST_DIR), and then patch the target python to use
it. Since the same solution can be used for 'pgen', we do it, and
avoid having to touch the graminit.{c,h} files.
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Reviewed-by: Samuel Martin <s.martin49@gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2016-05-01 22:15:12 +02:00
|
|
|
|
|
|
|
# Python builds two tools to generate code: 'pgen' and
|
|
|
|
# '_freeze_importlib'. Unfortunately, for the target Python, they are
|
|
|
|
# built for the target, while we need to run them at build time. So
|
|
|
|
# when installing host-python, we copy them to
|
|
|
|
# $(HOST_DIR)/usr/bin. And then, when building the target python
|
|
|
|
# package, we tell the configure script where they are located.
|
|
|
|
define HOST_PYTHON3_INSTALL_TOOLS
|
|
|
|
cp $(@D)/Parser/pgen $(HOST_DIR)/usr/bin/python-pgen
|
|
|
|
cp $(@D)/Programs/_freeze_importlib $(HOST_DIR)/usr/bin/python-freeze-importlib
|
2015-11-14 16:54:30 +01:00
|
|
|
endef
|
python3: bump to 3.5.1
The major changes in terms of Buildroot packaging are:
- Due to PEP488, Python no longer generates .pyc (unoptimized) and
.pyo (optimized) byte-code files. Instead, it generates <foo>.pyc,
<foo>.opt-1.pyc and <foo>.opt-2.pyc. Therefore, we removed the
--disable-pyo-build option and kept only the --disable-pyc-build
option, which completely disables building all .pyc files. In
addition, since the optimized .opt-X.pyc files don't work if the
corresponding un-optimized .pyc file is not present, we are for the
moment unconditionally removing the optimized ones (keeping both
the unoptimized and optimized ones doubles the required filesystem
size!). So basically we preserve the behavior we had before this
commit:
BR2_PACKAGE_PYTHON3_PY_ONLY -> only *.py
BR2_PACKAGE_PYTHON3_PYC_ONLY -> only non-optimized *.pyc
BR2_PACKAGE_PYTHON3_PY_PYC -> both the *.py and non-optimized *.pyc
To achieve this, the TARGET_FINALIZE_HOOKS are reworked:
PYTHON3_REMOVE_PY_FILES is responsible for removing *.py files in
the BR2_PACKAGE_PYTHON3_PYC_ONLY case.
PYTHON3_REMOVE_PYC_FILES is responsible for removing *.pyc files
in the BR2_PACKAGE_PYTHON3_PY_ONLY case.
PYTHON3_REMOVE_OPTIMIZED_PYC_FILES is responsible for removing the
optimized *.opt-1.pyc and *.opt-2.pyc files, which is done
unconditionally.
- The PEP3147 disabling patch had to be significantly reworked due to
the code having changed heavily. The code was moved into a
_bootstrap_external.py, which is a "frozen" Python module, i.e a
module generated into a .h file at compile time using the
_freeze_importlib program.
- Due to the above, we now need to regenerate importlib.h at build
time. Unfortunately, for the target Python _freeze_importlib is
built for the target, so we can't run it on the build machine. To
fix this, we copy the _freeze_importlib program from the
host-python in $(HOST_DIR), and then patch the target python to use
it. Since the same solution can be used for 'pgen', we do it, and
avoid having to touch the graminit.{c,h} files.
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Reviewed-by: Samuel Martin <s.martin49@gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2016-05-01 22:15:12 +02:00
|
|
|
HOST_PYTHON3_POST_INSTALL_HOOKS += HOST_PYTHON3_INSTALL_TOOLS
|
2015-11-14 16:54:30 +01:00
|
|
|
|
python3: bump to 3.5.1
The major changes in terms of Buildroot packaging are:
- Due to PEP488, Python no longer generates .pyc (unoptimized) and
.pyo (optimized) byte-code files. Instead, it generates <foo>.pyc,
<foo>.opt-1.pyc and <foo>.opt-2.pyc. Therefore, we removed the
--disable-pyo-build option and kept only the --disable-pyc-build
option, which completely disables building all .pyc files. In
addition, since the optimized .opt-X.pyc files don't work if the
corresponding un-optimized .pyc file is not present, we are for the
moment unconditionally removing the optimized ones (keeping both
the unoptimized and optimized ones doubles the required filesystem
size!). So basically we preserve the behavior we had before this
commit:
BR2_PACKAGE_PYTHON3_PY_ONLY -> only *.py
BR2_PACKAGE_PYTHON3_PYC_ONLY -> only non-optimized *.pyc
BR2_PACKAGE_PYTHON3_PY_PYC -> both the *.py and non-optimized *.pyc
To achieve this, the TARGET_FINALIZE_HOOKS are reworked:
PYTHON3_REMOVE_PY_FILES is responsible for removing *.py files in
the BR2_PACKAGE_PYTHON3_PYC_ONLY case.
PYTHON3_REMOVE_PYC_FILES is responsible for removing *.pyc files
in the BR2_PACKAGE_PYTHON3_PY_ONLY case.
PYTHON3_REMOVE_OPTIMIZED_PYC_FILES is responsible for removing the
optimized *.opt-1.pyc and *.opt-2.pyc files, which is done
unconditionally.
- The PEP3147 disabling patch had to be significantly reworked due to
the code having changed heavily. The code was moved into a
_bootstrap_external.py, which is a "frozen" Python module, i.e a
module generated into a .h file at compile time using the
_freeze_importlib program.
- Due to the above, we now need to regenerate importlib.h at build
time. Unfortunately, for the target Python _freeze_importlib is
built for the target, so we can't run it on the build machine. To
fix this, we copy the _freeze_importlib program from the
host-python in $(HOST_DIR), and then patch the target python to use
it. Since the same solution can be used for 'pgen', we do it, and
avoid having to touch the graminit.{c,h} files.
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Reviewed-by: Samuel Martin <s.martin49@gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2016-05-01 22:15:12 +02:00
|
|
|
PYTHON3_CONF_ENV += \
|
|
|
|
PGEN_FOR_BUILD=$(HOST_DIR)/usr/bin/python-pgen \
|
|
|
|
FREEZE_IMPORTLIB_FOR_BUILD=$(HOST_DIR)/usr/bin/python-freeze-importlib
|
2012-11-07 06:01:21 +01:00
|
|
|
|
|
|
|
#
|
|
|
|
# Remove useless files. In the config/ directory, only the Makefile
|
|
|
|
# and the pyconfig.h files are needed at runtime.
|
|
|
|
#
|
|
|
|
define PYTHON3_REMOVE_USELESS_FILES
|
2013-06-30 21:29:08 +02:00
|
|
|
rm -f $(TARGET_DIR)/usr/bin/python$(PYTHON3_VERSION_MAJOR)-config
|
|
|
|
rm -f $(TARGET_DIR)/usr/bin/python$(PYTHON3_VERSION_MAJOR)m-config
|
|
|
|
rm -f $(TARGET_DIR)/usr/bin/python3-config
|
2013-07-10 20:39:18 +02:00
|
|
|
rm -f $(TARGET_DIR)/usr/bin/smtpd.py.3
|
2014-02-18 21:40:00 +01:00
|
|
|
for i in `find $(TARGET_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR)/config-$(PYTHON3_VERSION_MAJOR)m/ \
|
2012-11-07 06:01:21 +01:00
|
|
|
-type f -not -name pyconfig.h -a -not -name Makefile` ; do \
|
|
|
|
rm -f $$i ; \
|
|
|
|
done
|
2014-09-30 23:38:57 +02:00
|
|
|
rm -rf $(TARGET_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR)/__pycache__/
|
|
|
|
rm -rf $(TARGET_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR)/lib-dynload/sysconfigdata/__pycache__
|
|
|
|
rm -rf $(TARGET_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR)/collections/__pycache__
|
|
|
|
rm -rf $(TARGET_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR)/importlib/__pycache__
|
2012-11-07 06:01:21 +01:00
|
|
|
endef
|
|
|
|
|
|
|
|
PYTHON3_POST_INSTALL_TARGET_HOOKS += PYTHON3_REMOVE_USELESS_FILES
|
|
|
|
|
2014-02-18 21:40:07 +01:00
|
|
|
#
|
|
|
|
# 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
|
|
|
|
|
2012-11-07 06:01:21 +01:00
|
|
|
PYTHON3_AUTORECONF = YES
|
|
|
|
|
2013-01-18 05:06:12 +01:00
|
|
|
define PYTHON3_INSTALL_SYMLINK
|
|
|
|
ln -fs python3 $(TARGET_DIR)/usr/bin/python
|
|
|
|
endef
|
|
|
|
|
|
|
|
ifneq ($(BR2_PACKAGE_PYTHON),y)
|
|
|
|
PYTHON3_POST_INSTALL_TARGET_HOOKS += PYTHON3_INSTALL_SYMLINK
|
|
|
|
endif
|
2013-01-18 05:06:14 +01:00
|
|
|
|
2014-03-05 23:04:41 +01:00
|
|
|
# Some packages may have build scripts requiring python3, whatever is the
|
|
|
|
# python version chosen for the target.
|
|
|
|
# Only install the python symlink in the host tree if python3 is enabled
|
|
|
|
# for the target.
|
|
|
|
ifeq ($(BR2_PACKAGE_PYTHON3),y)
|
2014-02-18 21:39:58 +01:00
|
|
|
define HOST_PYTHON3_INSTALL_SYMLINK
|
|
|
|
ln -fs python3 $(HOST_DIR)/usr/bin/python
|
2014-03-05 23:04:41 +01:00
|
|
|
ln -fs python3-config $(HOST_DIR)/usr/bin/python-config
|
2013-01-18 05:06:14 +01:00
|
|
|
endef
|
|
|
|
|
2014-02-18 21:39:58 +01:00
|
|
|
HOST_PYTHON3_POST_INSTALL_HOOKS += HOST_PYTHON3_INSTALL_SYMLINK
|
2014-03-05 23:04:41 +01:00
|
|
|
endif
|
2013-01-18 05:06:14 +01:00
|
|
|
|
2014-02-18 21:40:02 +01:00
|
|
|
# Provided to other packages
|
2014-04-12 23:03:10 +02:00
|
|
|
PYTHON3_PATH = $(TARGET_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR)/sysconfigdata/:$(TARGET_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR)/site-packages/
|
2013-01-18 05:06:14 +01:00
|
|
|
|
2012-11-07 06:01:21 +01:00
|
|
|
$(eval $(autotools-package))
|
|
|
|
$(eval $(host-autotools-package))
|
2014-09-30 23:39:01 +02:00
|
|
|
|
2016-05-17 23:19:15 +02:00
|
|
|
define PYTHON3_CREATE_PYC_FILES
|
|
|
|
PYTHONPATH="$(PYTHON3_PATH)" \
|
|
|
|
$(HOST_DIR)/usr/bin/python$(PYTHON3_VERSION_MAJOR) \
|
|
|
|
support/scripts/pycompile.py \
|
|
|
|
$(TARGET_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR)
|
|
|
|
endef
|
|
|
|
|
|
|
|
ifeq ($(BR2_PACKAGE_PYTHON3_PYC_ONLY)$(BR2_PACKAGE_PYTHON3_PY_PYC),y)
|
2016-06-22 21:07:37 +02:00
|
|
|
PYTHON3_TARGET_FINALIZE_HOOKS += PYTHON3_CREATE_PYC_FILES
|
2016-05-17 23:19:15 +02:00
|
|
|
endif
|
|
|
|
|
2014-09-30 23:39:01 +02:00
|
|
|
ifeq ($(BR2_PACKAGE_PYTHON3_PYC_ONLY),y)
|
python3: bump to 3.5.1
The major changes in terms of Buildroot packaging are:
- Due to PEP488, Python no longer generates .pyc (unoptimized) and
.pyo (optimized) byte-code files. Instead, it generates <foo>.pyc,
<foo>.opt-1.pyc and <foo>.opt-2.pyc. Therefore, we removed the
--disable-pyo-build option and kept only the --disable-pyc-build
option, which completely disables building all .pyc files. In
addition, since the optimized .opt-X.pyc files don't work if the
corresponding un-optimized .pyc file is not present, we are for the
moment unconditionally removing the optimized ones (keeping both
the unoptimized and optimized ones doubles the required filesystem
size!). So basically we preserve the behavior we had before this
commit:
BR2_PACKAGE_PYTHON3_PY_ONLY -> only *.py
BR2_PACKAGE_PYTHON3_PYC_ONLY -> only non-optimized *.pyc
BR2_PACKAGE_PYTHON3_PY_PYC -> both the *.py and non-optimized *.pyc
To achieve this, the TARGET_FINALIZE_HOOKS are reworked:
PYTHON3_REMOVE_PY_FILES is responsible for removing *.py files in
the BR2_PACKAGE_PYTHON3_PYC_ONLY case.
PYTHON3_REMOVE_PYC_FILES is responsible for removing *.pyc files
in the BR2_PACKAGE_PYTHON3_PY_ONLY case.
PYTHON3_REMOVE_OPTIMIZED_PYC_FILES is responsible for removing the
optimized *.opt-1.pyc and *.opt-2.pyc files, which is done
unconditionally.
- The PEP3147 disabling patch had to be significantly reworked due to
the code having changed heavily. The code was moved into a
_bootstrap_external.py, which is a "frozen" Python module, i.e a
module generated into a .h file at compile time using the
_freeze_importlib program.
- Due to the above, we now need to regenerate importlib.h at build
time. Unfortunately, for the target Python _freeze_importlib is
built for the target, so we can't run it on the build machine. To
fix this, we copy the _freeze_importlib program from the
host-python in $(HOST_DIR), and then patch the target python to use
it. Since the same solution can be used for 'pgen', we do it, and
avoid having to touch the graminit.{c,h} files.
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Reviewed-by: Samuel Martin <s.martin49@gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2016-05-01 22:15:12 +02:00
|
|
|
define PYTHON3_REMOVE_PY_FILES
|
2016-05-17 23:19:13 +02:00
|
|
|
find $(TARGET_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR) -name '*.py' -print0 | \
|
|
|
|
xargs -0 --no-run-if-empty rm -f
|
2014-09-30 23:39:01 +02:00
|
|
|
endef
|
2016-06-22 21:07:37 +02:00
|
|
|
PYTHON3_TARGET_FINALIZE_HOOKS += PYTHON3_REMOVE_PY_FILES
|
2014-09-30 23:39:01 +02:00
|
|
|
endif
|
|
|
|
|
2016-05-17 23:19:15 +02:00
|
|
|
# Normally, *.pyc files should not have been compiled, but just in
|
|
|
|
# case, we make sure we remove all of them.
|
2014-09-30 23:39:01 +02:00
|
|
|
ifeq ($(BR2_PACKAGE_PYTHON3_PY_ONLY),y)
|
python3: bump to 3.5.1
The major changes in terms of Buildroot packaging are:
- Due to PEP488, Python no longer generates .pyc (unoptimized) and
.pyo (optimized) byte-code files. Instead, it generates <foo>.pyc,
<foo>.opt-1.pyc and <foo>.opt-2.pyc. Therefore, we removed the
--disable-pyo-build option and kept only the --disable-pyc-build
option, which completely disables building all .pyc files. In
addition, since the optimized .opt-X.pyc files don't work if the
corresponding un-optimized .pyc file is not present, we are for the
moment unconditionally removing the optimized ones (keeping both
the unoptimized and optimized ones doubles the required filesystem
size!). So basically we preserve the behavior we had before this
commit:
BR2_PACKAGE_PYTHON3_PY_ONLY -> only *.py
BR2_PACKAGE_PYTHON3_PYC_ONLY -> only non-optimized *.pyc
BR2_PACKAGE_PYTHON3_PY_PYC -> both the *.py and non-optimized *.pyc
To achieve this, the TARGET_FINALIZE_HOOKS are reworked:
PYTHON3_REMOVE_PY_FILES is responsible for removing *.py files in
the BR2_PACKAGE_PYTHON3_PYC_ONLY case.
PYTHON3_REMOVE_PYC_FILES is responsible for removing *.pyc files
in the BR2_PACKAGE_PYTHON3_PY_ONLY case.
PYTHON3_REMOVE_OPTIMIZED_PYC_FILES is responsible for removing the
optimized *.opt-1.pyc and *.opt-2.pyc files, which is done
unconditionally.
- The PEP3147 disabling patch had to be significantly reworked due to
the code having changed heavily. The code was moved into a
_bootstrap_external.py, which is a "frozen" Python module, i.e a
module generated into a .h file at compile time using the
_freeze_importlib program.
- Due to the above, we now need to regenerate importlib.h at build
time. Unfortunately, for the target Python _freeze_importlib is
built for the target, so we can't run it on the build machine. To
fix this, we copy the _freeze_importlib program from the
host-python in $(HOST_DIR), and then patch the target python to use
it. Since the same solution can be used for 'pgen', we do it, and
avoid having to touch the graminit.{c,h} files.
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Reviewed-by: Samuel Martin <s.martin49@gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2016-05-01 22:15:12 +02:00
|
|
|
define PYTHON3_REMOVE_PYC_FILES
|
2016-05-17 23:19:13 +02:00
|
|
|
find $(TARGET_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR) -name '*.pyc' -print0 | \
|
|
|
|
xargs -0 --no-run-if-empty rm -f
|
2014-09-30 23:39:01 +02:00
|
|
|
endef
|
2016-06-22 21:07:37 +02:00
|
|
|
PYTHON3_TARGET_FINALIZE_HOOKS += PYTHON3_REMOVE_PYC_FILES
|
2014-09-30 23:39:01 +02:00
|
|
|
endif
|
|
|
|
|
python3: bump to 3.5.1
The major changes in terms of Buildroot packaging are:
- Due to PEP488, Python no longer generates .pyc (unoptimized) and
.pyo (optimized) byte-code files. Instead, it generates <foo>.pyc,
<foo>.opt-1.pyc and <foo>.opt-2.pyc. Therefore, we removed the
--disable-pyo-build option and kept only the --disable-pyc-build
option, which completely disables building all .pyc files. In
addition, since the optimized .opt-X.pyc files don't work if the
corresponding un-optimized .pyc file is not present, we are for the
moment unconditionally removing the optimized ones (keeping both
the unoptimized and optimized ones doubles the required filesystem
size!). So basically we preserve the behavior we had before this
commit:
BR2_PACKAGE_PYTHON3_PY_ONLY -> only *.py
BR2_PACKAGE_PYTHON3_PYC_ONLY -> only non-optimized *.pyc
BR2_PACKAGE_PYTHON3_PY_PYC -> both the *.py and non-optimized *.pyc
To achieve this, the TARGET_FINALIZE_HOOKS are reworked:
PYTHON3_REMOVE_PY_FILES is responsible for removing *.py files in
the BR2_PACKAGE_PYTHON3_PYC_ONLY case.
PYTHON3_REMOVE_PYC_FILES is responsible for removing *.pyc files
in the BR2_PACKAGE_PYTHON3_PY_ONLY case.
PYTHON3_REMOVE_OPTIMIZED_PYC_FILES is responsible for removing the
optimized *.opt-1.pyc and *.opt-2.pyc files, which is done
unconditionally.
- The PEP3147 disabling patch had to be significantly reworked due to
the code having changed heavily. The code was moved into a
_bootstrap_external.py, which is a "frozen" Python module, i.e a
module generated into a .h file at compile time using the
_freeze_importlib program.
- Due to the above, we now need to regenerate importlib.h at build
time. Unfortunately, for the target Python _freeze_importlib is
built for the target, so we can't run it on the build machine. To
fix this, we copy the _freeze_importlib program from the
host-python in $(HOST_DIR), and then patch the target python to use
it. Since the same solution can be used for 'pgen', we do it, and
avoid having to touch the graminit.{c,h} files.
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Reviewed-by: Samuel Martin <s.martin49@gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2016-05-01 22:15:12 +02:00
|
|
|
# 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
|
2016-05-17 23:19:13 +02:00
|
|
|
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
|
python3: bump to 3.5.1
The major changes in terms of Buildroot packaging are:
- Due to PEP488, Python no longer generates .pyc (unoptimized) and
.pyo (optimized) byte-code files. Instead, it generates <foo>.pyc,
<foo>.opt-1.pyc and <foo>.opt-2.pyc. Therefore, we removed the
--disable-pyo-build option and kept only the --disable-pyc-build
option, which completely disables building all .pyc files. In
addition, since the optimized .opt-X.pyc files don't work if the
corresponding un-optimized .pyc file is not present, we are for the
moment unconditionally removing the optimized ones (keeping both
the unoptimized and optimized ones doubles the required filesystem
size!). So basically we preserve the behavior we had before this
commit:
BR2_PACKAGE_PYTHON3_PY_ONLY -> only *.py
BR2_PACKAGE_PYTHON3_PYC_ONLY -> only non-optimized *.pyc
BR2_PACKAGE_PYTHON3_PY_PYC -> both the *.py and non-optimized *.pyc
To achieve this, the TARGET_FINALIZE_HOOKS are reworked:
PYTHON3_REMOVE_PY_FILES is responsible for removing *.py files in
the BR2_PACKAGE_PYTHON3_PYC_ONLY case.
PYTHON3_REMOVE_PYC_FILES is responsible for removing *.pyc files
in the BR2_PACKAGE_PYTHON3_PY_ONLY case.
PYTHON3_REMOVE_OPTIMIZED_PYC_FILES is responsible for removing the
optimized *.opt-1.pyc and *.opt-2.pyc files, which is done
unconditionally.
- The PEP3147 disabling patch had to be significantly reworked due to
the code having changed heavily. The code was moved into a
_bootstrap_external.py, which is a "frozen" Python module, i.e a
module generated into a .h file at compile time using the
_freeze_importlib program.
- Due to the above, we now need to regenerate importlib.h at build
time. Unfortunately, for the target Python _freeze_importlib is
built for the target, so we can't run it on the build machine. To
fix this, we copy the _freeze_importlib program from the
host-python in $(HOST_DIR), and then patch the target python to use
it. Since the same solution can be used for 'pgen', we do it, and
avoid having to touch the graminit.{c,h} files.
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Reviewed-by: Samuel Martin <s.martin49@gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2016-05-01 22:15:12 +02:00
|
|
|
endef
|
2016-06-22 21:07:37 +02:00
|
|
|
PYTHON3_TARGET_FINALIZE_HOOKS += PYTHON3_REMOVE_OPTIMIZED_PYC_FILES
|