mirror of
https://git.yoctoproject.org/poky
synced 2026-04-20 23:39:22 +00:00
python: Resolve intermediate staging issues
Its bad practise to poke into the sysroot without knowledge of sstate. This adds a patch to python allowing us to account for cross compiling and allow it to find the Makefile/pyconfig.h files without needing them in the sysroot for do_compile/do_install to complete. Tested on two architectures and compared with buildhistory with no significant delta. (From OE-Core rev: 16da4f75a75dc8020803df9ea73a2a7ead88cc5a) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
@@ -15,6 +15,7 @@ SRC_URI += "file://04-default-is-optimized.patch \
|
|||||||
file://nohostlibs.patch \
|
file://nohostlibs.patch \
|
||||||
file://multilib.patch \
|
file://multilib.patch \
|
||||||
file://add-md5module-support.patch \
|
file://add-md5module-support.patch \
|
||||||
|
file://builddir.patch \
|
||||||
"
|
"
|
||||||
S = "${WORKDIR}/Python-${PV}"
|
S = "${WORKDIR}/Python-${PV}"
|
||||||
|
|
||||||
|
|||||||
55
meta/recipes-devtools/python/python/builddir.patch
Normal file
55
meta/recipes-devtools/python/python/builddir.patch
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
When cross compiling python, we used to need to install the Makefile, pyconfig.h
|
||||||
|
and the python library to their final location before being able to compile the
|
||||||
|
rest of python. This change allows us to point python at its own source when
|
||||||
|
building, avoiding a variety of sysroot staging issues and simplifying the main
|
||||||
|
python recipe.
|
||||||
|
|
||||||
|
Upstream-Status: Inappropriate
|
||||||
|
RP 2012/11/13
|
||||||
|
|
||||||
|
Index: Python-2.7.3/Lib/sysconfig.py
|
||||||
|
===================================================================
|
||||||
|
--- Python-2.7.3.orig/Lib/sysconfig.py 2012-11-13 14:36:08.429167199 +0000
|
||||||
|
+++ Python-2.7.3/Lib/sysconfig.py 2012-11-13 21:58:31.788551800 +0000
|
||||||
|
@@ -93,6 +93,7 @@
|
||||||
|
_EXEC_PREFIX = os.path.normpath(sys.exec_prefix)
|
||||||
|
_CONFIG_VARS = None
|
||||||
|
_USER_BASE = None
|
||||||
|
+_PYTHONBUILDDIR = os.environ.get("PYTHONBUILDDIR", None)
|
||||||
|
|
||||||
|
def _safe_realpath(path):
|
||||||
|
try:
|
||||||
|
@@ -100,7 +102,9 @@
|
||||||
|
except OSError:
|
||||||
|
return path
|
||||||
|
|
||||||
|
-if sys.executable:
|
||||||
|
+if _PYTHONBUILDDIR:
|
||||||
|
+ _PROJECT_BASE = _PYTHONBUILDDIR
|
||||||
|
+elif sys.executable:
|
||||||
|
_PROJECT_BASE = os.path.dirname(_safe_realpath(sys.executable))
|
||||||
|
else:
|
||||||
|
# sys.executable can be empty if argv[0] has been changed and Python is
|
||||||
|
Index: Python-2.7.3/Lib/distutils/sysconfig.py
|
||||||
|
===================================================================
|
||||||
|
--- Python-2.7.3.orig/Lib/distutils/sysconfig.py 2012-11-13 14:36:08.005167209 +0000
|
||||||
|
+++ Python-2.7.3/Lib/distutils/sysconfig.py 2012-11-13 22:07:05.644540695 +0000
|
||||||
|
@@ -26,6 +26,9 @@
|
||||||
|
# live in project/PCBuild9. If we're dealing with an x64 Windows build,
|
||||||
|
# it'll live in project/PCbuild/amd64.
|
||||||
|
project_base = os.path.dirname(os.path.abspath(sys.executable))
|
||||||
|
+_PYTHONBUILDDIR = os.environ.get("PYTHONBUILDDIR", None)
|
||||||
|
+if _PYTHONBUILDDIR:
|
||||||
|
+ project_base = _PYTHONBUILDDIR
|
||||||
|
if os.name == "nt" and "pcbuild" in project_base[-8:].lower():
|
||||||
|
project_base = os.path.abspath(os.path.join(project_base, os.path.pardir))
|
||||||
|
# PC/VS7.1
|
||||||
|
@@ -247,7 +250,7 @@
|
||||||
|
def get_makefile_filename():
|
||||||
|
"""Return full pathname of installed Makefile from the Python build."""
|
||||||
|
if python_build:
|
||||||
|
- return os.path.join(os.path.dirname(sys.executable), "Makefile")
|
||||||
|
+ return os.path.join(project_base, "Makefile")
|
||||||
|
lib_dir = get_python_lib(plat_specific=1, standard_lib=1)
|
||||||
|
return os.path.join(lib_dir, "config", "Makefile")
|
||||||
|
|
||||||
@@ -27,6 +27,7 @@ SRC_URI += "\
|
|||||||
file://avoid_warning_for_sunos_specific_module.patch \
|
file://avoid_warning_for_sunos_specific_module.patch \
|
||||||
file://python-2.7.3-berkeley-db-5.3.patch \
|
file://python-2.7.3-berkeley-db-5.3.patch \
|
||||||
file://python-2.7.3-remove-bsdb-rpath.patch \
|
file://python-2.7.3-remove-bsdb-rpath.patch \
|
||||||
|
file://builddir.patch \
|
||||||
"
|
"
|
||||||
|
|
||||||
S = "${WORKDIR}/Python-${PV}"
|
S = "${WORKDIR}/Python-${PV}"
|
||||||
@@ -55,17 +56,6 @@ do_compile() {
|
|||||||
sed -e 's,${STAGING_DIR_HOST},,g' -i *.py
|
sed -e 's,${STAGING_DIR_HOST},,g' -i *.py
|
||||||
cd -
|
cd -
|
||||||
|
|
||||||
#
|
|
||||||
# Copy config.h and an appropriate Makefile for distutils.sysconfig,
|
|
||||||
# which laters uses the information out of these to compile extensions
|
|
||||||
#
|
|
||||||
# The following part (until python compilation) should probably moved to an
|
|
||||||
# -initial recipe to handle staging better
|
|
||||||
#
|
|
||||||
install -d ${STAGING_INCDIR}/python${PYTHON_MAJMIN}/
|
|
||||||
install -d ${STAGING_LIBDIR}/python${PYTHON_MAJMIN}/config/
|
|
||||||
install -m 0644 pyconfig.h ${STAGING_INCDIR}/python${PYTHON_MAJMIN}/
|
|
||||||
|
|
||||||
# remove hardcoded ccache, see http://bugs.openembedded.net/show_bug.cgi?id=4144
|
# remove hardcoded ccache, see http://bugs.openembedded.net/show_bug.cgi?id=4144
|
||||||
sed -i -e s,ccache,'$(CCACHE)', Makefile
|
sed -i -e s,ccache,'$(CCACHE)', Makefile
|
||||||
|
|
||||||
@@ -83,22 +73,12 @@ do_compile() {
|
|||||||
-e 's,^INCLUDEDIR=.*,INCLUDE=${STAGING_INCDIR},g' \
|
-e 's,^INCLUDEDIR=.*,INCLUDE=${STAGING_INCDIR},g' \
|
||||||
-e 's,^CONFINCLUDEDIR=.*,CONFINCLUDE=${STAGING_INCDIR},g' \
|
-e 's,^CONFINCLUDEDIR=.*,CONFINCLUDE=${STAGING_INCDIR},g' \
|
||||||
Makefile
|
Makefile
|
||||||
install -m 0644 Makefile ${STAGING_LIBDIR}/python${PYTHON_MAJMIN}/config/
|
|
||||||
# save copy of it now, because if we do it in do_install and
|
# save copy of it now, because if we do it in do_install and
|
||||||
# then call do_install twice we get Makefile.orig == Makefile.sysroot
|
# then call do_install twice we get Makefile.orig == Makefile.sysroot
|
||||||
install -m 0644 Makefile Makefile.sysroot
|
install -m 0644 Makefile Makefile.sysroot
|
||||||
|
|
||||||
export CROSS_COMPILE="${TARGET_PREFIX}"
|
export CROSS_COMPILE="${TARGET_PREFIX}"
|
||||||
|
export PYTHONBUILDDIR="${S}"
|
||||||
oe_runmake HOSTPGEN=${STAGING_BINDIR_NATIVE}/python-native/pgen \
|
|
||||||
HOSTPYTHON=${STAGING_BINDIR_NATIVE}/python-native/python \
|
|
||||||
STAGING_LIBDIR=${STAGING_LIBDIR} \
|
|
||||||
STAGING_BASELIBDIR=${STAGING_BASELIBDIR} \
|
|
||||||
STAGING_INCDIR=${STAGING_INCDIR} \
|
|
||||||
BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \
|
|
||||||
OPT="${CFLAGS}" libpython${PYTHON_MAJMIN}.so
|
|
||||||
|
|
||||||
oe_libinstall -so libpython${PYTHON_MAJMIN} ${STAGING_LIBDIR}
|
|
||||||
|
|
||||||
oe_runmake HOSTPGEN=${STAGING_BINDIR_NATIVE}/python-native/pgen \
|
oe_runmake HOSTPGEN=${STAGING_BINDIR_NATIVE}/python-native/pgen \
|
||||||
HOSTPYTHON=${STAGING_BINDIR_NATIVE}/python-native/python \
|
HOSTPYTHON=${STAGING_BINDIR_NATIVE}/python-native/python \
|
||||||
@@ -115,6 +95,7 @@ do_install() {
|
|||||||
install -m 0644 Makefile.orig Makefile
|
install -m 0644 Makefile.orig Makefile
|
||||||
|
|
||||||
export CROSS_COMPILE="${TARGET_PREFIX}"
|
export CROSS_COMPILE="${TARGET_PREFIX}"
|
||||||
|
export PYTHONBUILDDIR="${S}"
|
||||||
|
|
||||||
oe_runmake HOSTPGEN=${STAGING_BINDIR_NATIVE}/python-native/pgen \
|
oe_runmake HOSTPGEN=${STAGING_BINDIR_NATIVE}/python-native/pgen \
|
||||||
HOSTPYTHON=${STAGING_BINDIR_NATIVE}/python-native/python \
|
HOSTPYTHON=${STAGING_BINDIR_NATIVE}/python-native/python \
|
||||||
|
|||||||
Reference in New Issue
Block a user