diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2012-11-14 14:31:24 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2012-11-18 16:42:07 +0000 |
commit | 89bc43e1b2dcf0d15004b0eb65ea75c6adbfcf8e (patch) | |
tree | 84ec9eb39b1bfba19d02acc2f9a26bee72c3c767 /meta/recipes-devtools/python | |
parent | dadb3a7fa70a016fd4bf2b059d37a5e0f759eef1 (diff) | |
download | poky-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.bb | 1 | ||||
-rw-r--r-- | meta/recipes-devtools/python/python/builddir.patch | 55 | ||||
-rw-r--r-- | meta/recipes-devtools/python/python_2.7.3.bb | 25 |
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 | " |
19 | S = "${WORKDIR}/Python-${PV}" | 20 | S = "${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 @@ | |||
1 | When cross compiling python, we used to need to install the Makefile, pyconfig.h | ||
2 | and the python library to their final location before being able to compile the | ||
3 | rest of python. This change allows us to point python at its own source when | ||
4 | building, avoiding a variety of sysroot staging issues and simplifying the main | ||
5 | python recipe. | ||
6 | |||
7 | Upstream-Status: Inappropriate | ||
8 | RP 2012/11/13 | ||
9 | |||
10 | Index: 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 | ||
33 | Index: 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 | ||
32 | S = "${WORKDIR}/Python-${PV}" | 33 | S = "${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 \ |