2017-09-18 15:34:41 -07:00
|
|
|
From e359a7a3c4f9e70360a068bef19c95938fdacede Mon Sep 17 00:00:00 2001
|
2016-01-04 19:23:28 +01:00
|
|
|
From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
|
|
|
|
|
Date: Wed, 23 Dec 2015 11:33:14 +0100
|
|
|
|
|
Subject: [PATCH] Adjust library/header paths for cross-compilation
|
2014-02-18 21:40:01 +01:00
|
|
|
|
|
|
|
|
When cross-compiling third-party extensions, the get_python_inc() or
|
|
|
|
|
get_python_lib() can be called, to return the path to headers or
|
|
|
|
|
libraries. However, they use the sys.prefix of the host Python, which
|
|
|
|
|
returns incorrect paths when cross-compiling (paths pointing to host
|
|
|
|
|
headers and libraries).
|
|
|
|
|
|
|
|
|
|
In order to fix this, we introduce the _python_sysroot, _python_prefix
|
|
|
|
|
and _python_exec_prefix variables, that allow to override these
|
|
|
|
|
values, and get correct header/library paths when cross-compiling
|
|
|
|
|
third-party Python modules.
|
|
|
|
|
|
|
|
|
|
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
|
2016-01-04 19:23:28 +01:00
|
|
|
---
|
|
|
|
|
Lib/distutils/command/build_ext.py | 5 ++++-
|
|
|
|
|
Lib/distutils/sysconfig.py | 15 +++++++++++----
|
|
|
|
|
2 files changed, 15 insertions(+), 5 deletions(-)
|
2014-02-18 21:40:01 +01:00
|
|
|
|
2016-01-04 19:23:28 +01:00
|
|
|
diff --git a/Lib/distutils/command/build_ext.py b/Lib/distutils/command/build_ext.py
|
2017-09-18 15:34:41 -07:00
|
|
|
index 74de782d8a..d0c847b365 100644
|
2016-01-04 19:23:28 +01:00
|
|
|
--- a/Lib/distutils/command/build_ext.py
|
|
|
|
|
+++ b/Lib/distutils/command/build_ext.py
|
2017-03-23 08:21:12 -07:00
|
|
|
@@ -233,7 +233,10 @@ class build_ext(Command):
|
2016-01-04 19:23:28 +01:00
|
|
|
if (sysconfig.get_config_var('Py_ENABLE_SHARED')):
|
|
|
|
|
if not sysconfig.python_build:
|
|
|
|
|
# building third party extensions
|
|
|
|
|
- self.library_dirs.append(sysconfig.get_config_var('LIBDIR'))
|
|
|
|
|
+ libdir = sysconfig.get_config_var('LIBDIR')
|
|
|
|
|
+ if "_python_sysroot" in os.environ:
|
|
|
|
|
+ libdir = os.environ.get("_python_sysroot") + libdir
|
|
|
|
|
+ self.library_dirs.append(libdir)
|
|
|
|
|
else:
|
|
|
|
|
# building python standard extensions
|
|
|
|
|
self.library_dirs.append('.')
|
|
|
|
|
diff --git a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py
|
2017-09-18 15:34:41 -07:00
|
|
|
index 2bcd1dd288..422c13fa4f 100644
|
2014-02-18 21:40:01 +01:00
|
|
|
--- a/Lib/distutils/sysconfig.py
|
|
|
|
|
+++ b/Lib/distutils/sysconfig.py
|
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
|
|
|
@@ -17,10 +17,17 @@ import sys
|
2014-02-18 21:40:01 +01:00
|
|
|
from .errors import DistutilsPlatformError
|
|
|
|
|
|
|
|
|
|
# These are needed in a couple of spots, so just compute them once.
|
|
|
|
|
-PREFIX = os.path.normpath(sys.prefix)
|
|
|
|
|
-EXEC_PREFIX = os.path.normpath(sys.exec_prefix)
|
|
|
|
|
-BASE_PREFIX = os.path.normpath(sys.base_prefix)
|
|
|
|
|
-BASE_EXEC_PREFIX = os.path.normpath(sys.base_exec_prefix)
|
|
|
|
|
+if "_python_sysroot" in os.environ:
|
|
|
|
|
+ _sysroot=os.environ.get('_python_sysroot')
|
|
|
|
|
+ PREFIX = os.path.normpath(_sysroot + os.environ.get('_python_prefix'))
|
|
|
|
|
+ EXEC_PREFIX = os.path.normpath(_sysroot + os.environ.get('_python_exec_prefix'))
|
|
|
|
|
+ BASE_PREFIX = PREFIX
|
|
|
|
|
+ BASE_EXEC_PREFIX = EXEC_PREFIX
|
|
|
|
|
+else:
|
|
|
|
|
+ PREFIX = os.path.normpath(sys.prefix)
|
|
|
|
|
+ EXEC_PREFIX = os.path.normpath(sys.exec_prefix)
|
|
|
|
|
+ BASE_PREFIX = os.path.normpath(sys.base_prefix)
|
|
|
|
|
+ BASE_EXEC_PREFIX = os.path.normpath(sys.base_exec_prefix)
|
|
|
|
|
|
|
|
|
|
# Path to the base directory of the project. On Windows the binary may
|
python3: bump to 3.7.0
Other changes include:
- Refreshing all necessary patches for 3.7.0
- Add a hash for the license file.
- Python no longer has it's own internal libffi, as such, host-libffi
is now required to build host-python3, and is added as a
dependency.
- Drop PYTHON3_LIBTOOL_PATCH = NO, since there is no longer any
internal libffi copy that was causing the libtool patching process
to fail.
- A new core module "uuid" is now is added in the Config.in file, and
relies on util-linux's uuid library.
- Also, a new patch: 0030-Fix-cross-compiling-the-uuid-module.patch
is required to fix compiling the uuid module, because the include
directory search path for uuid.h is hardcoded to /usr/include/uuid,
which causes an "unsafe for cross-compilation" error during
compiling if the host pc has uuid headers installed.
- 0031-Add-an-option-to-disable-uuid-module.patch is added to allow
disabling the Python3 UUID module, so that when
BR2_PACKAGE_PYTHON3_UUID is disabled by the UUID library is
present, the uuid Python module is not built, as expected.
- 0032-fix-building-on-older-distributions.patch is added to change
os.replace by os.rename in the update_file.py script to fix
building on older Linux distributions that have older versions of
python that don't include os.replace.
os.rename acts in the same way as os.replace, but is cross-platform
compatible. Because Buildroot is guaranteed to be built in a POSIX
environment, it is safe to change replace to rename.
Tested on CentOS6 and Fedora28, All test results passed:
br-arm-full [1/6]: OK
br-arm-cortex-a9-glibc [2/6]: OK
br-arm-cortex-m4-full [3/6]: SKIPPED
br-x86-64-musl [4/6]: OK
br-arm-full-static [5/6]: SKIPPED
armv5-ctng-linux-gnueabi [6/6]: OK
6 builds, 2 skipped, 0 build failed, 0 legal-info failed
Signed-off-by: Adam Duskett <aduskett@gmail.com>
[Thomas:
- remove PYTHON3_LIBTOOL_PATCH = NO
- improve the solution in patch 0030-Fix-cross-compiling-the-uuid-module
- add patch 0031-Add-an-option-to-disable-uuid-module]
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2018-07-20 12:10:21 -04:00
|
|
|
# live in project/PCbuild/win32 or project/PCbuild/amd64.
|
2016-01-04 19:23:28 +01:00
|
|
|
--
|
2017-09-18 15:34:41 -07:00
|
|
|
2.13.5
|
2016-01-04 19:23:28 +01:00
|
|
|
|