diff --git a/config/functions b/config/functions index fd37397c44..3449d58590 100644 --- a/config/functions +++ b/config/functions @@ -22,6 +22,11 @@ setup_toolchain() { export PKG_CONFIG_LIBDIR="$TARGET_PKG_CONFIG_LIBDIR" export PKG_CONFIG_SYSROOT_DIR="$TARGET_PKG_CONFIG_SYSROOT_DIR" + # set python defaults + export _python_sysroot="$SYSROOT_PREFIX" + export _python_prefix=/usr + export _python_exec_prefix=/usr + # set CMAKE configfile for target export CMAKE_CONF=$ROOT/$TOOLCHAIN/etc/cmake-$TARGET_NAME.conf diff --git a/packages/lang/Python/package.mk b/packages/lang/Python/package.mk index cb3a88c70e..c8655f105a 100644 --- a/packages/lang/Python/package.mk +++ b/packages/lang/Python/package.mk @@ -31,7 +31,7 @@ PKG_SHORTDESC="python: The Python programming language" PKG_LONGDESC="Python is an interpreted object-oriented programming language, and is often compared with Tcl, Perl, Java or Scheme." PKG_IS_ADDON="no" -PKG_AUTORECONF="no" +PKG_AUTORECONF="yes" PY_DISABLED_MODULES="readline _curses _curses_panel _tkinter nis gdbm bsddb ossaudiodev" @@ -77,10 +77,8 @@ make_host() { PYTHON_MODULES_LIB="$HOST_LIBDIR" \ PYTHON_DISABLE_MODULES="$PY_DISABLED_MODULES" - sed -e "s|$ROOT/$TOOLCHAIN/include|$SYSROOT_PREFIX/usr/include|g" \ - -e "s|$ROOT/$TOOLCHAIN/lib|$SYSROOT_PREFIX/usr/lib|g" \ - -e "s|$ROOT/$TOOLCHAIN/bin/host-gcc|${TARGET_PREFIX}gcc|g" \ - -i build/lib.linux-$(uname -m)-2.7/_sysconfigdata.py + # python distutils per default adds -L$LIBDIR when linking binary extensions + sed -e "s|^ 'LIBDIR':.*| 'LIBDIR': '/usr/lib',|g" -i $(cat pybuilddir.txt)/_sysconfigdata.py } makeinstall_host() { @@ -120,10 +118,6 @@ makeinstall_target() { PYTHON_MODULES_LIB="$TARGET_LIBDIR" \ install - # python distutils per default adds -L$LIBDIR when linking binary extensions - sed -e "s|^LIBDIR=.*|LIBDIR= $SYSROOT_PREFIX/usr/lib|" \ - -i $SYSROOT_PREFIX/usr/lib/python*/config/Makefile - make -j1 CC="$TARGET_CC" \ DESTDIR=$INSTALL \ PYTHON_DISABLE_MODULES="$PY_DISABLED_MODULES" \ diff --git a/packages/lang/Python/patches/Python-2.7.11-008-distutils-use-python-sysroot.patch b/packages/lang/Python/patches/Python-2.7.11-008-distutils-use-python-sysroot.patch new file mode 100644 index 0000000000..7cd748761a --- /dev/null +++ b/packages/lang/Python/patches/Python-2.7.11-008-distutils-use-python-sysroot.patch @@ -0,0 +1,54 @@ +Adjust library/header paths for cross-compilation + +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. + +The _python_sysroot variable is also used to prefix the LIBDIR value +taken from the sysconfigdata module. + +Signed-off-by: Thomas Petazzoni + +Index: b/Lib/distutils/sysconfig.py +=================================================================== +--- a/Lib/distutils/sysconfig.py ++++ b/Lib/distutils/sysconfig.py +@@ -19,8 +19,13 @@ + from distutils.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) ++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')) ++else: ++ PREFIX = os.path.normpath(sys.prefix) ++ EXEC_PREFIX = os.path.normpath(sys.exec_prefix) + + # Path to the base directory of the project. On Windows the binary may + # live in project/PCBuild9. If we're dealing with an x64 Windows build, +Index: b/Lib/distutils/command/build_ext.py +=================================================================== +--- a/Lib/distutils/command/build_ext.py ++++ b/Lib/distutils/command/build_ext.py +@@ -237,7 +237,10 @@ + 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('.')