| Add support in Python build system to specify host tools |
| |
| Python needs a Python interpreter and a "pgen" program to build |
| itself. Unfortunately, the Python build system assumes that it can use |
| the interpreter and pgen program it has just built to build |
| itself. Obviously, this cannot work in cross-compilation mode since |
| the interpreter and the pgen program have been built for the target. |
| |
| Therefore, this patch adds support in the Python build system for the |
| new PYTHON_FOR_BUILD and PGEN_FOR_BUILD variables, so that we can |
| point Python ./configure script to the Python interpreter and pgen |
| program that have been previously built for the host. |
| |
| Patch ported to python2.7 by Maxime Ripard <ripard@archos.com>, and |
| later significantly reworked by Thomas Petazzoni |
| <thomas.petazzoni@free-electrons.com>, with some inspiration taken |
| from the Python patches of the PTXdist project. |
| |
| Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> |
| --- |
| Makefile.pre.in | 32 +++++++++++++++++--------------- |
| configure.in | 17 +++++++++++++++++ |
| 2 files changed, 34 insertions(+), 15 deletions(-) |
| |
| Index: Python-2.7.2/Makefile.pre.in |
| =================================================================== |
| --- Python-2.7.2.orig/Makefile.pre.in |
| +++ Python-2.7.2/Makefile.pre.in |
| @@ -181,7 +181,8 @@ |
| UNICODE_OBJS= @UNICODE_OBJS@ |
| |
| PYTHON= python$(EXE) |
| -BUILDPYTHON= python$(BUILDEXE) |
| +BUILDPYTHON= ./python$(BUILDEXE) |
| +PYTHON_FOR_BUILD=@PYTHON_FOR_BUILD@ |
| |
| # The task to run while instrument when building the profile-opt target |
| PROFILE_TASK= $(srcdir)/Tools/pybench/pybench.py -n 2 --with-gc --with-syscheck |
| @@ -213,7 +214,8 @@ |
| |
| ########################################################################## |
| # Parser |
| -PGEN= Parser/pgen$(EXE) |
| +BUILDPGEN= Parser/pgen$(EXE) |
| +PGEN_FOR_BUILD=@PGEN_FOR_BUILD@ |
| |
| POBJS= \ |
| Parser/acceler.o \ |
| @@ -407,8 +409,8 @@ |
| # Build the shared modules |
| sharedmods: $(BUILDPYTHON) |
| @case $$MAKEFLAGS in \ |
| - *s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py -q build;; \ |
| - *) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py build;; \ |
| + *s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' $(PYTHON_FOR_BUILD) -E $(srcdir)/setup.py -q build;; \ |
| + *) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' $(PYTHON_FOR_BUILD) -E $(srcdir)/setup.py build;; \ |
| esac |
| |
| # Build static library |
| @@ -540,13 +542,13 @@ |
| |
| # Use a stamp file to prevent make -j invoking pgen twice |
| $(GRAMMAR_H) $(GRAMMAR_C): Parser/pgen.stamp |
| -Parser/pgen.stamp: $(PGEN) $(GRAMMAR_INPUT) |
| +Parser/pgen.stamp: $(PGEN_FOR_BUILD) $(GRAMMAR_INPUT) |
| -@$(INSTALL) -d Include |
| - $(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C) |
| + $(PGEN_FOR_BUILD) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C) |
| -touch Parser/pgen.stamp |
| |
| -$(PGEN): $(PGENOBJS) |
| - $(CC) $(OPT) $(LDFLAGS) $(PGENOBJS) $(LIBS) -o $(PGEN) |
| +$(BUILDPGEN): $(PGENOBJS) |
| + $(CC) $(OPT) $(LDFLAGS) $(PGENOBJS) $(LIBS) -o $(BUILDPGEN) |
| |
| Parser/grammar.o: $(srcdir)/Parser/grammar.c \ |
| $(srcdir)/Include/token.h \ |
| @@ -926,25 +928,25 @@ |
| done |
| $(INSTALL_DATA) $(srcdir)/LICENSE $(DESTDIR)$(LIBDEST)/LICENSE.txt |
| PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ |
| - ./$(BUILDPYTHON) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \ |
| + $(PYTHON_FOR_BUILD) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \ |
| -d $(LIBDEST) -f \ |
| -x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \ |
| $(DESTDIR)$(LIBDEST) |
| PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ |
| - ./$(BUILDPYTHON) -Wi -tt -O $(DESTDIR)$(LIBDEST)/compileall.py \ |
| + $(PYTHON_FOR_BUILD) -Wi -tt -O $(DESTDIR)$(LIBDEST)/compileall.py \ |
| -d $(LIBDEST) -f \ |
| -x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \ |
| $(DESTDIR)$(LIBDEST) |
| -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ |
| - ./$(BUILDPYTHON) -Wi -t $(DESTDIR)$(LIBDEST)/compileall.py \ |
| + $(PYTHON_FOR_BUILD) -Wi -t $(DESTDIR)$(LIBDEST)/compileall.py \ |
| -d $(LIBDEST)/site-packages -f \ |
| -x badsyntax $(DESTDIR)$(LIBDEST)/site-packages |
| -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ |
| - ./$(BUILDPYTHON) -Wi -t -O $(DESTDIR)$(LIBDEST)/compileall.py \ |
| + $(PYTHON_FOR_BUILD) -Wi -t -O $(DESTDIR)$(LIBDEST)/compileall.py \ |
| -d $(LIBDEST)/site-packages -f \ |
| -x badsyntax $(DESTDIR)$(LIBDEST)/site-packages |
| -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ |
| - ./$(BUILDPYTHON) -Wi -t -c "import lib2to3.pygram, lib2to3.patcomp;lib2to3.patcomp.PatternCompiler()" |
| + $(PYTHON_FOR_BUILD) -Wi -t -c "import lib2to3.pygram, lib2to3.patcomp;lib2to3.patcomp.PatternCompiler()" |
| |
| # Create the PLATDIR source directory, if one wasn't distributed.. |
| $(srcdir)/Lib/$(PLATDIR): |
| @@ -1049,7 +1051,7 @@ |
| # Install the dynamically loadable modules |
| # This goes into $(exec_prefix) |
| sharedinstall: sharedmods |
| - $(RUNSHARED) ./$(BUILDPYTHON) -E $(srcdir)/setup.py install \ |
| + $(RUNSHARED) $(PYTHON_FOR_BUILD) -E $(srcdir)/setup.py install \ |
| --prefix=$(prefix) \ |
| --install-scripts=$(BINDIR) \ |
| --install-platlib=$(DESTSHARED) \ |
| @@ -1188,7 +1190,7 @@ |
| find . -name '*.gc??' -exec rm -f {} ';' |
| |
| clobber: clean profile-removal |
| - -rm -f $(BUILDPYTHON) $(PGEN) $(LIBRARY) $(LDLIBRARY) $(DLLLIBRARY) \ |
| + -rm -f $(BUILDPYTHON) $(BUILDPGEN) $(LIBRARY) $(LDLIBRARY) $(DLLLIBRARY) \ |
| tags TAGS Parser/pgen.stamp \ |
| config.cache config.log pyconfig.h Modules/config.c |
| -rm -rf build platform |
| Index: Python-2.7.2/configure.in |
| =================================================================== |
| --- Python-2.7.2.orig/configure.in |
| +++ Python-2.7.2/configure.in |
| @@ -4305,6 +4305,23 @@ |
| done |
| AC_MSG_RESULT(done) |
| |
| +if test "$cross_compiling" = "yes"; then |
| + AC_MSG_CHECKING(python for build) |
| + PYTHON_FOR_BUILD="${PYTHON_FOR_BUILD}" |
| + AC_MSG_RESULT($PYTHON_FOR_BUILD) |
| + AC_MSG_CHECKING(pgen for build) |
| + PGEN_FOR_BUILD="${PGEN_FOR_BUILD}" |
| + AC_MSG_RESULT($PGEN_FOR_BUILD) |
| +else |
| + PYTHON_FOR_BUILD='$(BUILDPYTHON)' |
| + PGEN_FOR_BUILD='$(BUILDPGEN)' |
| +fi |
| + |
| +AC_SUBST(PYTHON_FOR_BUILD) |
| +AC_SUBST(PGEN_FOR_BUILD) |
| +AC_ARG_VAR(PYTHON_FOR_BUILD,[build system Python]) |
| +AC_ARG_VAR(PGEN_FOR_BUILD,[build system Python pgen]) |
| + |
| # generate output files |
| AC_CONFIG_FILES(Makefile.pre Modules/Setup.config Misc/python.pc) |
| AC_CONFIG_FILES([Modules/ld_so_aix], [chmod +x Modules/ld_so_aix]) |