123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- 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])
|