| From 1522c6c00ee88eb1148d3b2021d32d819b416375 Mon Sep 17 00:00:00 2001 |
| From: Gustavo Zacarias <gustavo@zacarias.com.ar> |
| Date: Tue, 7 Mar 2017 22:23:14 +0100 |
| Subject: [PATCH] Fix python-config for cross-builds |
| |
| Add a backport of http://bugs.python.org/issue16235 so we can use |
| python-config for cross builds. |
| |
| This basically replaces the python version of python-config with a |
| pure-shell version that's already preprocessed when installed and |
| doesn't depend on the sysconfig import that usually leads to bad |
| data/results. |
| |
| Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar> |
| [Bernd: rebased for Python 2.7.15] |
| Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de> |
| [Peter: update for 2.7.16] |
| Signed-off-by: Peter Korsgaard <peter@korsgaard.com> |
| --- |
| Makefile.pre.in | 13 +++--- |
| Misc/python-config.sh.in | 102 +++++++++++++++++++++++++++++++++++++++++++++++ |
| configure.ac | 7 +++- |
| 3 files changed, 116 insertions(+), 6 deletions(-) |
| create mode 100644 Misc/python-config.sh.in |
| |
| diff --git a/Makefile.pre.in b/Makefile.pre.in |
| index c1c98ecc5a..727a92af42 100644 |
| --- a/Makefile.pre.in |
| +++ b/Makefile.pre.in |
| @@ -170,7 +170,7 @@ SRCDIRS= @SRCDIRS@ |
| SUBDIRSTOO= Include Lib Misc Demo |
| |
| # Files and directories to be distributed |
| -CONFIGFILES= configure configure.ac acconfig.h pyconfig.h.in Makefile.pre.in |
| +CONFIGFILES= configure configure.ac acconfig.h pyconfig.h.in Makefile.pre.in Misc/python-config.sh |
| DISTFILES= README ChangeLog $(CONFIGFILES) |
| DISTDIRS= $(SUBDIRS) $(SUBDIRSTOO) Ext-dummy |
| DIST= $(DISTFILES) $(DISTDIRS) |
| @@ -403,7 +403,7 @@ LIBRARY_OBJS= \ |
| |
| # Default target |
| all: @DEF_MAKE_ALL_RULE@ |
| -build_all: check-clean-src $(BUILDPYTHON) oldsharedmods sharedmods gdbhooks |
| +build_all: check-clean-src $(BUILDPYTHON) oldsharedmods sharedmods gdbhooks python-config |
| |
| # Check that the source is clean when building out of source. |
| check-clean-src: |
| @@ -1190,10 +1190,12 @@ $(srcdir)/Lib/$(PLATDIR): |
| fi; \ |
| cd $(srcdir)/Lib/$(PLATDIR); $(RUNSHARED) ./regen |
| |
| -python-config: $(srcdir)/Misc/python-config.in |
| +python-config: $(srcdir)/Misc/python-config.in Misc/python-config.sh |
| # Substitution happens here, as the completely-expanded BINDIR |
| # is not available in configure |
| - sed -e "s,@EXENAME@,$(BINDIR)/python$(VERSION)$(EXE)," < $(srcdir)/Misc/python-config.in >python-config |
| + sed -e "s,@EXENAME@,$(BINDIR)/python$(VERSION)$(EXE)," < $(srcdir)/Misc/python-config.in >python-config.py |
| + # Replace makefile compat. variable references with shell script compat. ones; $(VAR) -> ${VAR} |
| + sed -e 's,\$$(\([A-Za-z0-9_]*\)),\$$\{\1\},g' Misc/python-config.sh >python-config |
| |
| # Install the include files |
| INCLDIRSTOMAKE=$(INCLUDEDIR) $(CONFINCLUDEDIR) $(INCLUDEPY) $(CONFINCLUDEPY) |
| @@ -1252,7 +1254,7 @@ libainstall: @DEF_MAKE_RULE@ python-config |
| $(INSTALL_SCRIPT) $(srcdir)/Modules/makesetup $(DESTDIR)$(LIBPL)/makesetup |
| $(INSTALL_SCRIPT) $(srcdir)/install-sh $(DESTDIR)$(LIBPL)/install-sh |
| $(INSTALL_SCRIPT) python-config $(DESTDIR)$(BINDIR)/python$(VERSION)-config |
| - rm python-config |
| + $(INSTALL_SCRIPT) python-config.py $(DESTDIR)$(LIBPL)/python-config.py |
| @if [ -s Modules/python.exp -a \ |
| "`echo $(MACHDEP) | sed 's/^\(...\).*/\1/'`" = "aix" ]; then \ |
| echo; echo "Installing support files for building shared extension modules on AIX:"; \ |
| @@ -1434,6 +1436,7 @@ clobber: clean profile-removal |
| config.cache config.log pyconfig.h Modules/config.c |
| -rm -rf build platform |
| -rm -rf $(PYTHONFRAMEWORKDIR) |
| + -rm -f python-config.py python-config |
| |
| # Make things extra clean, before making a distribution: |
| # remove all generated files, even Makefile[.pre] |
| diff --git a/Misc/python-config.sh.in b/Misc/python-config.sh.in |
| new file mode 100644 |
| index 0000000000..10db4c12eb |
| --- /dev/null |
| +++ b/Misc/python-config.sh.in |
| @@ -0,0 +1,102 @@ |
| +#!/bin/sh |
| + |
| +exit_with_usage () |
| +{ |
| + echo "Usage: $0 --prefix|--exec-prefix|--includes|--libs|--cflags|--ldflags|--extension-suffix|--help|--configdir" |
| + exit $1 |
| +} |
| + |
| +if [ "$1" = "" ] ; then |
| + exit_with_usage 1 |
| +fi |
| + |
| +# Returns the actual prefix where this script was installed to. |
| +installed_prefix () |
| +{ |
| + RESULT=$(dirname $(cd $(dirname "$1") && pwd -P)) |
| + if which readlink >/dev/null 2>&1 ; then |
| + RESULT=$(readlink -f "$RESULT") |
| + fi |
| + echo $RESULT |
| +} |
| + |
| +prefix_build="@prefix@" |
| +prefix_real=$(installed_prefix "$0") |
| + |
| +# Use sed to fix paths from their built to locations to their installed to locations. |
| +prefix=$(echo "$prefix_build" | sed "s#$prefix_build#$prefix_real#") |
| +exec_prefix_build="@exec_prefix@" |
| +exec_prefix=$(echo "$exec_prefix_build" | sed "s#$exec_prefix_build#$prefix_real#") |
| +includedir=$(echo "@includedir@") |
| +libdir=$(echo "@libdir@" | sed "s#$prefix_build#$prefix_real#") |
| +CFLAGS=$(echo "@CFLAGS@" | sed "s#$prefix_build#$prefix_real#") |
| +VERSION="@VERSION@" |
| +LIBM="@LIBM@" |
| +LIBC="@LIBC@" |
| +SYSLIBS="$LIBM $LIBC" |
| +LIBS="@LIBS@ $SYSLIBS -lpython${VERSION}" |
| +BASECFLAGS="@BASECFLAGS@" |
| +LDLIBRARY="@LDLIBRARY@" |
| +LINKFORSHARED="@LINKFORSHARED@" |
| +OPT="@OPT@" |
| +PY_ENABLE_SHARED="@PY_ENABLE_SHARED@" |
| +LDVERSION="@LDVERSION@" |
| +LIBDEST=${prefix}/lib/python${VERSION} |
| +LIBPL=$(echo "@LIBPL@" | sed "s#$prefix_build#$prefix_real#") |
| +SO="@SO@" |
| +PYTHONFRAMEWORK="@PYTHONFRAMEWORK@" |
| +INCDIR="-I$includedir/python${VERSION}" |
| +PLATINCDIR="-I$includedir/python${VERSION}" |
| + |
| +# Scan for --help or unknown argument. |
| +for ARG in $* |
| +do |
| + case $ARG in |
| + --help) |
| + exit_with_usage 0 |
| + ;; |
| + --prefix|--exec-prefix|--includes|--libs|--cflags|--ldflags|--extension-suffix|--abiflags|--configdir) |
| + ;; |
| + *) |
| + exit_with_usage 1 |
| + ;; |
| +esac |
| +done |
| + |
| +for ARG in "$@" |
| +do |
| + case "$ARG" in |
| + --prefix) |
| + echo "$prefix" |
| + ;; |
| + --exec-prefix) |
| + echo "$exec_prefix" |
| + ;; |
| + --includes) |
| + echo "$INCDIR $PLATINCDIR" |
| + ;; |
| + --cflags) |
| + echo "$INCDIR $PLATINCDIR $BASECFLAGS $CFLAGS $OPT" |
| + ;; |
| + --libs) |
| + echo "$LIBS" |
| + ;; |
| + --ldflags) |
| + LINKFORSHAREDUSED= |
| + if [ -z "$PYTHONFRAMEWORK" ] ; then |
| + LINKFORSHAREDUSED=$LINKFORSHARED |
| + fi |
| + LIBPLUSED= |
| + if [ "$PY_ENABLE_SHARED" = "0" ] ; then |
| + LIBPLUSED="-L$LIBPL" |
| + fi |
| + echo "$LIBPLUSED -L$libdir $LIBS $LINKFORSHAREDUSED" |
| + ;; |
| + --extension-suffix) |
| + echo "$SO" |
| + ;; |
| + --configdir) |
| + echo "$LIBPL" |
| + ;; |
| +esac |
| +done |
| diff --git a/configure.ac b/configure.ac |
| index 13f90b3ddd..3f28ef1371 100644 |
| --- a/configure.ac |
| +++ b/configure.ac |
| @@ -919,6 +919,7 @@ fi |
| |
| # Other platforms follow |
| if test $enable_shared = "yes"; then |
| + PY_ENABLE_SHARED=1 |
| AC_DEFINE(Py_ENABLE_SHARED, 1, [Defined if Python is built as a shared library.]) |
| case $ac_sys_system in |
| BeOS*) |
| @@ -979,6 +980,7 @@ if test $enable_shared = "yes"; then |
| |
| esac |
| else # shared is disabled |
| + PY_ENABLE_SHARED=0 |
| case $ac_sys_system in |
| CYGWIN*) |
| BLDLIBRARY='$(LIBRARY)' |
| @@ -2128,6 +2130,9 @@ AC_SUBST(LDCXXSHARED) |
| AC_SUBST(BLDSHARED) |
| AC_SUBST(CCSHARED) |
| AC_SUBST(LINKFORSHARED) |
| +AC_SUBST(PY_ENABLE_SHARED) |
| +LIBPL="${prefix}/lib/python${VERSION}/config" |
| +AC_SUBST(LIBPL) |
| # SO is the extension of shared libraries `(including the dot!) |
| # -- usually .so, .sl on HP-UX, .dll on Cygwin |
| AC_MSG_CHECKING(SO) |
| @@ -4944,7 +4949,7 @@ AC_MSG_RESULT($ENSUREPIP) |
| AC_SUBST(ENSUREPIP) |
| |
| # generate output files |
| -AC_CONFIG_FILES(Makefile.pre Modules/Setup.config Misc/python.pc) |
| +AC_CONFIG_FILES(Makefile.pre Modules/Setup.config Misc/python.pc Misc/python-config.sh) |
| AC_CONFIG_FILES([Modules/ld_so_aix], [chmod +x Modules/ld_so_aix]) |
| AC_OUTPUT |
| |
| -- |
| 2.11.0 |
| |