summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/python
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2012-11-14 14:31:24 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2012-11-18 16:42:07 +0000
commit89bc43e1b2dcf0d15004b0eb65ea75c6adbfcf8e (patch)
tree84ec9eb39b1bfba19d02acc2f9a26bee72c3c767 /meta/recipes-devtools/python
parentdadb3a7fa70a016fd4bf2b059d37a5e0f759eef1 (diff)
downloadpoky-89bc43e1b2dcf0d15004b0eb65ea75c6adbfcf8e.tar.gz
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>
Diffstat (limited to 'meta/recipes-devtools/python')
-rw-r--r--meta/recipes-devtools/python/python-native_2.7.3.bb1
-rw-r--r--meta/recipes-devtools/python/python/builddir.patch55
-rw-r--r--meta/recipes-devtools/python/python_2.7.3.bb25
3 files changed, 59 insertions, 22 deletions
diff --git a/meta/recipes-devtools/python/python-native_2.7.3.bb b/meta/recipes-devtools/python/python-native_2.7.3.bb
index d450949326..b0b3503ed9 100644
--- a/meta/recipes-devtools/python/python-native_2.7.3.bb
+++ b/meta/recipes-devtools/python/python-native_2.7.3.bb
@@ -15,6 +15,7 @@ SRC_URI += "file://04-default-is-optimized.patch \
15 file://nohostlibs.patch \ 15 file://nohostlibs.patch \
16 file://multilib.patch \ 16 file://multilib.patch \
17 file://add-md5module-support.patch \ 17 file://add-md5module-support.patch \
18 file://builddir.patch \
18 " 19 "
19S = "${WORKDIR}/Python-${PV}" 20S = "${WORKDIR}/Python-${PV}"
20 21
diff --git a/meta/recipes-devtools/python/python/builddir.patch b/meta/recipes-devtools/python/python/builddir.patch
new file mode 100644
index 0000000000..930170b95a
--- /dev/null
+++ b/meta/recipes-devtools/python/python/builddir.patch
@@ -0,0 +1,55 @@
1When cross compiling python, we used to need to install the Makefile, pyconfig.h
2and the python library to their final location before being able to compile the
3rest of python. This change allows us to point python at its own source when
4building, avoiding a variety of sysroot staging issues and simplifying the main
5python recipe.
6
7Upstream-Status: Inappropriate
8RP 2012/11/13
9
10Index: Python-2.7.3/Lib/sysconfig.py
11===================================================================
12--- Python-2.7.3.orig/Lib/sysconfig.py 2012-11-13 14:36:08.429167199 +0000
13+++ Python-2.7.3/Lib/sysconfig.py 2012-11-13 21:58:31.788551800 +0000
14@@ -93,6 +93,7 @@
15 _EXEC_PREFIX = os.path.normpath(sys.exec_prefix)
16 _CONFIG_VARS = None
17 _USER_BASE = None
18+_PYTHONBUILDDIR = os.environ.get("PYTHONBUILDDIR", None)
19
20 def _safe_realpath(path):
21 try:
22@@ -100,7 +102,9 @@
23 except OSError:
24 return path
25
26-if sys.executable:
27+if _PYTHONBUILDDIR:
28+ _PROJECT_BASE = _PYTHONBUILDDIR
29+elif sys.executable:
30 _PROJECT_BASE = os.path.dirname(_safe_realpath(sys.executable))
31 else:
32 # sys.executable can be empty if argv[0] has been changed and Python is
33Index: Python-2.7.3/Lib/distutils/sysconfig.py
34===================================================================
35--- Python-2.7.3.orig/Lib/distutils/sysconfig.py 2012-11-13 14:36:08.005167209 +0000
36+++ Python-2.7.3/Lib/distutils/sysconfig.py 2012-11-13 22:07:05.644540695 +0000
37@@ -26,6 +26,9 @@
38 # live in project/PCBuild9. If we're dealing with an x64 Windows build,
39 # it'll live in project/PCbuild/amd64.
40 project_base = os.path.dirname(os.path.abspath(sys.executable))
41+_PYTHONBUILDDIR = os.environ.get("PYTHONBUILDDIR", None)
42+if _PYTHONBUILDDIR:
43+ project_base = _PYTHONBUILDDIR
44 if os.name == "nt" and "pcbuild" in project_base[-8:].lower():
45 project_base = os.path.abspath(os.path.join(project_base, os.path.pardir))
46 # PC/VS7.1
47@@ -247,7 +250,7 @@
48 def get_makefile_filename():
49 """Return full pathname of installed Makefile from the Python build."""
50 if python_build:
51- return os.path.join(os.path.dirname(sys.executable), "Makefile")
52+ return os.path.join(project_base, "Makefile")
53 lib_dir = get_python_lib(plat_specific=1, standard_lib=1)
54 return os.path.join(lib_dir, "config", "Makefile")
55
diff --git a/meta/recipes-devtools/python/python_2.7.3.bb b/meta/recipes-devtools/python/python_2.7.3.bb
index 3a17c85bb8..f0d5c90d30 100644
--- a/meta/recipes-devtools/python/python_2.7.3.bb
+++ b/meta/recipes-devtools/python/python_2.7.3.bb
@@ -27,6 +27,7 @@ SRC_URI += "\
27 file://avoid_warning_for_sunos_specific_module.patch \ 27 file://avoid_warning_for_sunos_specific_module.patch \
28 file://python-2.7.3-berkeley-db-5.3.patch \ 28 file://python-2.7.3-berkeley-db-5.3.patch \
29 file://python-2.7.3-remove-bsdb-rpath.patch \ 29 file://python-2.7.3-remove-bsdb-rpath.patch \
30 file://builddir.patch \
30" 31"
31 32
32S = "${WORKDIR}/Python-${PV}" 33S = "${WORKDIR}/Python-${PV}"
@@ -55,17 +56,6 @@ do_compile() {
55 sed -e 's,${STAGING_DIR_HOST},,g' -i *.py 56 sed -e 's,${STAGING_DIR_HOST},,g' -i *.py
56 cd - 57 cd -
57 58
58 #
59 # Copy config.h and an appropriate Makefile for distutils.sysconfig,
60 # which laters uses the information out of these to compile extensions
61 #
62 # The following part (until python compilation) should probably moved to an
63 # -initial recipe to handle staging better
64 #
65 install -d ${STAGING_INCDIR}/python${PYTHON_MAJMIN}/
66 install -d ${STAGING_LIBDIR}/python${PYTHON_MAJMIN}/config/
67 install -m 0644 pyconfig.h ${STAGING_INCDIR}/python${PYTHON_MAJMIN}/
68
69 # remove hardcoded ccache, see http://bugs.openembedded.net/show_bug.cgi?id=4144 59 # remove hardcoded ccache, see http://bugs.openembedded.net/show_bug.cgi?id=4144
70 sed -i -e s,ccache,'$(CCACHE)', Makefile 60 sed -i -e s,ccache,'$(CCACHE)', Makefile
71 61
@@ -83,22 +73,12 @@ do_compile() {
83 -e 's,^INCLUDEDIR=.*,INCLUDE=${STAGING_INCDIR},g' \ 73 -e 's,^INCLUDEDIR=.*,INCLUDE=${STAGING_INCDIR},g' \
84 -e 's,^CONFINCLUDEDIR=.*,CONFINCLUDE=${STAGING_INCDIR},g' \ 74 -e 's,^CONFINCLUDEDIR=.*,CONFINCLUDE=${STAGING_INCDIR},g' \
85 Makefile 75 Makefile
86 install -m 0644 Makefile ${STAGING_LIBDIR}/python${PYTHON_MAJMIN}/config/
87 # save copy of it now, because if we do it in do_install and 76 # save copy of it now, because if we do it in do_install and
88 # then call do_install twice we get Makefile.orig == Makefile.sysroot 77 # then call do_install twice we get Makefile.orig == Makefile.sysroot
89 install -m 0644 Makefile Makefile.sysroot 78 install -m 0644 Makefile Makefile.sysroot
90 79
91 export CROSS_COMPILE="${TARGET_PREFIX}" 80 export CROSS_COMPILE="${TARGET_PREFIX}"
92 81 export PYTHONBUILDDIR="${S}"
93 oe_runmake HOSTPGEN=${STAGING_BINDIR_NATIVE}/python-native/pgen \
94 HOSTPYTHON=${STAGING_BINDIR_NATIVE}/python-native/python \
95 STAGING_LIBDIR=${STAGING_LIBDIR} \
96 STAGING_BASELIBDIR=${STAGING_BASELIBDIR} \
97 STAGING_INCDIR=${STAGING_INCDIR} \
98 BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \
99 OPT="${CFLAGS}" libpython${PYTHON_MAJMIN}.so
100
101 oe_libinstall -so libpython${PYTHON_MAJMIN} ${STAGING_LIBDIR}
102 82
103 oe_runmake HOSTPGEN=${STAGING_BINDIR_NATIVE}/python-native/pgen \ 83 oe_runmake HOSTPGEN=${STAGING_BINDIR_NATIVE}/python-native/pgen \
104 HOSTPYTHON=${STAGING_BINDIR_NATIVE}/python-native/python \ 84 HOSTPYTHON=${STAGING_BINDIR_NATIVE}/python-native/python \
@@ -115,6 +95,7 @@ do_install() {
115 install -m 0644 Makefile.orig Makefile 95 install -m 0644 Makefile.orig Makefile
116 96
117 export CROSS_COMPILE="${TARGET_PREFIX}" 97 export CROSS_COMPILE="${TARGET_PREFIX}"
98 export PYTHONBUILDDIR="${S}"
118 99
119 oe_runmake HOSTPGEN=${STAGING_BINDIR_NATIVE}/python-native/pgen \ 100 oe_runmake HOSTPGEN=${STAGING_BINDIR_NATIVE}/python-native/pgen \
120 HOSTPYTHON=${STAGING_BINDIR_NATIVE}/python-native/python \ 101 HOSTPYTHON=${STAGING_BINDIR_NATIVE}/python-native/python \