=== modified file 'Lib/distutils/command/build_ext.py'
*** Lib/distutils/command/build_ext.py
--- Lib/distutils/command/build_ext.py
***************
*** 612,617 ****
--- 612,619 ----
              ext_path[len(ext_path) - 1] = ext_path[len(ext_path) - 1][:8]
          # extensions in debug_mode are named 'module_d.pyd' under windows
          so_ext = get_config_var('SO')
+         if os.environ.get('CROSS_COMPILING') == 'yes':
+             so_ext = os.environ.get('SO')
          if os.name == 'nt' and self.debug:
              return apply(os.path.join, ext_path) + '_d' + so_ext
          return apply(os.path.join, ext_path) + so_ext
=== modified file 'Makefile.pre.in'
*** Makefile.pre.in
--- Makefile.pre.in
***************
*** 70,75 ****
--- 70,85 ----
  # C flags used for building the interpreter object files
  PY_CFLAGS=	$(CFLAGS) $(CPPFLAGS) $(CFLAGSFORSHARED) -DPy_BUILD_CORE
  
+ # For cross compile: build compiler options
+ CC_FOR_BUILD=	@CC_FOR_BUILD@
+ CROSS_COMPILING=	@cross_compiling@
+ EXEEXT_FOR_BUILD=	@EXEEXT_FOR_BUILD@
+ O_FOR_BUILD=	@O_FOR_BUILD@
+ 
+ CFLAGS_FOR_BUILD=	@CFLAGS_FOR_BUILD@
+ CPPFLAGS_FOR_BUILD=	@CPPFLAGS_FOR_BUILD@ -I$(srcdir)/Include
+ LDFLAGS_FOR_BUILD=	@LDFLAGS_FOR_BUILD@
+ LIBS_FOR_BUILD=	@LIBS_FOR_BUILD@
  
  # Machine-dependent subdirectories
  MACHDEP=	@MACHDEP@
***************
*** 164,170 ****
  UNICODE_OBJS=   @UNICODE_OBJS@
  
  PYTHON=		python$(EXE)
! BUILDPYTHON=	python$(BUILDEXE)
  
  # === Definitions added by makesetup ===
  
--- 174,181 ----
  UNICODE_OBJS=   @UNICODE_OBJS@
  
  PYTHON=		python$(EXE)
! BUILDPYTHON=	python$(EXE)
! PYTHON_FOR_BUILD=	@PYTHON_FOR_BUILD@
  
  # === Definitions added by makesetup ===
  
***************
*** 190,196 ****
  
  ##########################################################################
  # Parser
! PGEN=		Parser/pgen$(EXE)
  
  POBJS=		\
  		Parser/acceler.o \
--- 201,207 ----
  
  ##########################################################################
  # Parser
! PGEN_FOR_BUILD=	Parser/pgen$(EXEEXT_FOR_BUILD)
  
  POBJS=		\
  		Parser/acceler.o \
***************
*** 207,220 ****
  
  PARSER_OBJS=	$(POBJS) Parser/myreadline.o Parser/tokenizer.o
  
! PGOBJS=		\
! 		Objects/obmalloc.o \
! 		Python/mysnprintf.o \
! 		Parser/tokenizer_pgen.o \
! 		Parser/printgrammar.o \
! 		Parser/pgenmain.o
  
! PGENOBJS=	$(PGENMAIN) $(POBJS) $(PGOBJS)
  
  ##########################################################################
  # AST
--- 218,244 ----
  
  PARSER_OBJS=	$(POBJS) Parser/myreadline.o Parser/tokenizer.o
  
! POBJS_FOR_BUILD=		\
! 		Parser/acceler.$(O_FOR_BUILD) \
! 		Parser/grammar1.$(O_FOR_BUILD) \
! 		Parser/listnode.$(O_FOR_BUILD) \
! 		Parser/node.$(O_FOR_BUILD) \
! 		Parser/parser.$(O_FOR_BUILD) \
! 		Parser/parsetok.$(O_FOR_BUILD) \
! 		Parser/bitset.$(O_FOR_BUILD) \
! 		Parser/metagrammar.$(O_FOR_BUILD) \
! 		Parser/firstsets.$(O_FOR_BUILD) \
! 		Parser/grammar.$(O_FOR_BUILD) \
! 		Parser/pgen.$(O_FOR_BUILD)
! 
! PGOBJS_FOR_BUILD=		\
! 		Objects/obmalloc.$(O_FOR_BUILD) \
! 		Python/mysnprintf.$(O_FOR_BUILD) \
! 		Parser/tokenizer_pgen.$(O_FOR_BUILD) \
! 		Parser/printgrammar.$(O_FOR_BUILD) \
! 		Parser/pgenmain.$(O_FOR_BUILD)
  
! PGENOBJS=	$(POBJS_FOR_BUILD) $(PGOBJS_FOR_BUILD)
  
  ##########################################################################
  # AST
***************
*** 329,343 ****
  			Modules/$(MAINOBJ) \
  			$(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST)
  
! platform: $(BUILDPYTHON)
! 	$(RUNSHARED) ./$(BUILDPYTHON) -E -c 'import sys ; from distutils.util import get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform
  
  
  # 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;; \
  	esac
  
  # buildno should really depend on something like LIBRARY_SRC
--- 353,367 ----
  			Modules/$(MAINOBJ) \
  			$(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST)
  
! platform: @CROSS_COMMENT@ $(BUILDPYTHON)
! 	$(RUNSHARED) $(PYTHON_FOR_BUILD) -E -c 'import sys ; from distutils.util import get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform
  
  
  # Build the shared modules
! sharedmods: @CROSS_COMMENT@ $(BUILDPYTHON)
  	case $$MAKEFLAGS in \
! 	*-s*) $(RUNSHARED) CC='$(CC)' CROSS_COMPILING='$(CROSS_COMPILING)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' $(PYTHON_FOR_BUILD) -E $(srcdir)/setup.py -q build;; \
! 	*) $(RUNSHARED) CC='$(CC)' CROSS_COMPILING='$(CROSS_COMPILING)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' $(PYTHON_FOR_BUILD) -E $(srcdir)/setup.py build;; \
  	esac
  
  # buildno should really depend on something like LIBRARY_SRC
***************
*** 457,467 ****
  	$(CXX) -c $(PY_CFLAGS) -o $@ $(srcdir)/Modules/ccpython.cc
  
  
! $(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT)
! 		-$(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
  
! $(PGEN):	$(PGENOBJS)
! 		$(CC) $(OPT) $(LDFLAGS) $(PGENOBJS) $(LIBS) -o $(PGEN)
  
  Parser/grammar.o:	$(srcdir)/Parser/grammar.c \
  				$(srcdir)/Include/token.h \
--- 481,491 ----
  	$(CXX) -c $(PY_CFLAGS) -o $@ $(srcdir)/Modules/ccpython.cc
  
  
! $(GRAMMAR_H) $(GRAMMAR_C): $(PGEN_FOR_BUILD) $(GRAMMAR_INPUT)
! 		-$(PGEN_FOR_BUILD) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
  
! $(PGEN_FOR_BUILD):	$(PGENOBJS)
! 		$(CC_FOR_BUILD) $(OPT) $(LDFLAGS_FOR_BUILD) $(PGENOBJS) $(LIBS_FOR_BUILD) -o $(PGEN_FOR_BUILD)
  
  Parser/grammar.o:	$(srcdir)/Parser/grammar.c \
  				$(srcdir)/Include/token.h \
***************
*** 485,490 ****
--- 509,521 ----
  				$(srcdir)/Objects/unicodetype_db.h
  
  ############################################################################
+ # Cross compile rules
+ 
+ .SUFFIXES: .x
+ .c.x:
+ 	$(CC_FOR_BUILD) -c $(CPPFLAGS_FOR_BUILD) $(CFLAGS_FOR_BUILD) -o $@ $<
+ 				
+ ############################################################################
  # Header files
  
  PYTHON_HEADERS= \
***************
*** 556,562 ****
  
  TESTOPTS=	-l
  TESTPROG=	$(srcdir)/Lib/test/regrtest.py
! TESTPYTHON=	$(RUNSHARED) ./$(BUILDPYTHON) -E -tt
  test:		all platform
  		-find $(srcdir)/Lib -name '*.py[co]' -print | xargs rm -f
  		-$(TESTPYTHON) $(TESTPROG) $(TESTOPTS)
--- 587,593 ----
  
  TESTOPTS=	-l
  TESTPROG=	$(srcdir)/Lib/test/regrtest.py
! TESTPYTHON=	$(RUNSHARED) $(PYTHON_FOR_BUILD) -E -tt
  test:		all platform
  		-find $(srcdir)/Lib -name '*.py[co]' -print | xargs rm -f
  		-$(TESTPYTHON) $(TESTPROG) $(TESTOPTS)
***************
*** 621,627 ****
  
  # Install the interpreter with $(VERSION) affixed
  # This goes into $(exec_prefix)
! altbininstall:	$(BUILDPYTHON)
  	@if test "$(PYTHONFRAMEWORKDIR)" != no-framework; then \
  		if test ! -f $(DESTDIR)$(PYTHONFRAMEWORKINSTALLDIR)/Versions/Current/Resources/Info.plist; then \
  			echo 'Framework build: use "make frameworkinstall" in stead of "make install"'; \
--- 652,658 ----
  
  # Install the interpreter with $(VERSION) affixed
  # This goes into $(exec_prefix)
! altbininstall: @CROSS_COMMENT@ $(BUILDPYTHON)
  	@if test "$(PYTHONFRAMEWORKDIR)" != no-framework; then \
  		if test ! -f $(DESTDIR)$(PYTHONFRAMEWORKINSTALLDIR)/Versions/Current/Resources/Info.plist; then \
  			echo 'Framework build: use "make frameworkinstall" in stead of "make install"'; \
***************
*** 684,690 ****
  		logging bsddb bsddb/test csv idlelib idlelib/Icons \
  		distutils distutils/command distutils/tests $(XMLLIBSUBDIRS) \
  		curses $(MACHDEPS)
! libinstall:	$(BUILDPYTHON) $(srcdir)/Lib/$(PLATDIR)
  	@for i in $(SCRIPTDIR) $(LIBDEST); \
  	do \
  		if test ! -d $(DESTDIR)$$i; then \
--- 715,721 ----
  		logging bsddb bsddb/test csv idlelib idlelib/Icons \
  		distutils distutils/command distutils/tests $(XMLLIBSUBDIRS) \
  		curses $(MACHDEPS)
! libinstall: $(srcdir)/Lib/$(PLATDIR) @CROSS_COMMENT@ $(BUILDPYTHON)
  	@for i in $(SCRIPTDIR) $(LIBDEST); \
  	do \
  		if test ! -d $(DESTDIR)$$i; then \
***************
*** 740,758 ****
  	done
  	$(INSTALL_DATA) $(srcdir)/LICENSE $(DESTDIR)$(LIBDEST)/LICENSE.txt
  	PYTHONPATH=$(DESTDIR)$(LIBDEST)  $(RUNSHARED) \
! 		./$(BUILDPYTHON) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \
  		-d $(LIBDEST) -f \
  		-x 'bad_coding|badsyntax|site-packages' $(DESTDIR)$(LIBDEST)
  	PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
! 		./$(BUILDPYTHON) -Wi -tt -O $(DESTDIR)$(LIBDEST)/compileall.py \
  		-d $(LIBDEST) -f \
  		-x 'bad_coding|badsyntax|site-packages' $(DESTDIR)$(LIBDEST)
  	-PYTHONPATH=$(DESTDIR)$(LIBDEST)  $(RUNSHARED) \
! 		./$(BUILDPYTHON) -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 \
  		-d $(LIBDEST)/site-packages -f \
  		-x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
  
--- 771,789 ----
  	done
  	$(INSTALL_DATA) $(srcdir)/LICENSE $(DESTDIR)$(LIBDEST)/LICENSE.txt
  	PYTHONPATH=$(DESTDIR)$(LIBDEST)  $(RUNSHARED) \
! 		$(PYTHON_FOR_BUILD) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \
  		-d $(LIBDEST) -f \
  		-x 'bad_coding|badsyntax|site-packages' $(DESTDIR)$(LIBDEST)
  	PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
! 		$(PYTHON_FOR_BUILD) -Wi -tt -O $(DESTDIR)$(LIBDEST)/compileall.py \
  		-d $(LIBDEST) -f \
  		-x 'bad_coding|badsyntax|site-packages' $(DESTDIR)$(LIBDEST)
  	-PYTHONPATH=$(DESTDIR)$(LIBDEST)  $(RUNSHARED) \
! 		$(PYTHON_FOR_BUILD) -Wi -t $(DESTDIR)$(LIBDEST)/compileall.py \
  		-d $(LIBDEST)/site-packages -f \
  		-x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
  	-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
! 		$(PYTHON_FOR_BUILD) -Wi -t -O $(DESTDIR)$(LIBDEST)/compileall.py \
  		-d $(LIBDEST)/site-packages -f \
  		-x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
  
***************
*** 760,768 ****
  $(srcdir)/Lib/$(PLATDIR):
  	mkdir $(srcdir)/Lib/$(PLATDIR)
  	cp $(srcdir)/Lib/plat-generic/regen $(srcdir)/Lib/$(PLATDIR)/regen
! 	export PATH; PATH="`pwd`:$$PATH"; \
! 	export PYTHONPATH; PYTHONPATH="`pwd`/Lib"; \
! 	export DYLD_FRAMEWORK_PATH; DYLD_FRAMEWORK_PATH="`pwd`"; \
  	export EXE; EXE="$(BUILDEXE)"; \
  	cd $(srcdir)/Lib/$(PLATDIR); ./regen
  
--- 791,799 ----
  $(srcdir)/Lib/$(PLATDIR):
  	mkdir $(srcdir)/Lib/$(PLATDIR)
  	cp $(srcdir)/Lib/plat-generic/regen $(srcdir)/Lib/$(PLATDIR)/regen
! @CROSS_COMMENT@	export PATH; PATH="`pwd`:$$PATH"; \
! @CROSS_COMMENT@	export PYTHONPATH; PYTHONPATH="`pwd`/Lib"; \
! @CROSS_COMMENT@	export DYLD_FRAMEWORK_PATH; DYLD_FRAMEWORK_PATH="`pwd`"; \
  	export EXE; EXE="$(BUILDEXE)"; \
  	cd $(srcdir)/Lib/$(PLATDIR); ./regen
  
***************
*** 847,854 ****
  # Install the dynamically loadable modules
  # This goes into $(exec_prefix)
  sharedinstall:
! 	$(RUNSHARED) ./$(BUILDPYTHON) -E $(srcdir)/setup.py install \
! 	   	--prefix=$(prefix) \
  		--install-scripts=$(BINDIR) \
  		--install-platlib=$(DESTSHARED) \
  		--root=/$(DESTDIR)
--- 878,886 ----
  # Install the dynamically loadable modules
  # This goes into $(exec_prefix)
  sharedinstall:
! 	CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' CROSS_COMPILING='$(CROSS_COMPILING)' \
! 		$(RUNSHARED) $(PYTHON_FOR_BUILD) -E $(srcdir)/setup.py install \
! 		--prefix=$(prefix) \
  		--install-scripts=$(BINDIR) \
  		--install-platlib=$(DESTSHARED) \
  		--root=/$(DESTDIR)
***************
*** 896,909 ****
  # This installs Mac/Lib into the framework
  frameworkinstallmaclib:
  	$(MAKE) -f $(srcdir)/Mac/OSX/Makefile installmacsubtree \
! 		$(RUNSHARED) BUILDPYTHON=./$(BUILDPYTHON) DIRMODE=$(DIRMODE) FILEMODE=$(FILEMODE) \
  		srcdir=$(srcdir) builddir=. prefix=$(prefix) LIBDEST=$(LIBDEST) \
  		DESTDIR=$(DESTDIR)
  
  # This installs the IDE, the Launcher and other apps into /Applications
  frameworkinstallapps:
  	$(MAKE) -f $(srcdir)/Mac/OSX/Makefile installapps \
! 		$(RUNSHARED) BUILDPYTHON=./$(BUILDPYTHON) DIRMODE=$(DIRMODE) FILEMODE=$(FILEMODE) \
  		srcdir=$(srcdir) builddir=. DESTDIR=$(DESTDIR) prefix=$(prefix)
  
  # This install the unix python and pythonw tools in /usr/local/bin
--- 928,941 ----
  # This installs Mac/Lib into the framework
  frameworkinstallmaclib:
  	$(MAKE) -f $(srcdir)/Mac/OSX/Makefile installmacsubtree \
! 		$(RUNSHARED) PYTHON_FOR_BUILD=$(PYTHON_FOR_BUILD) DIRMODE=$(DIRMODE) FILEMODE=$(FILEMODE) \
  		srcdir=$(srcdir) builddir=. prefix=$(prefix) LIBDEST=$(LIBDEST) \
  		DESTDIR=$(DESTDIR)
  
  # This installs the IDE, the Launcher and other apps into /Applications
  frameworkinstallapps:
  	$(MAKE) -f $(srcdir)/Mac/OSX/Makefile installapps \
! 		$(RUNSHARED) PYTHON_FOR_BUILD=$(PYTHON_FOR_BUILD) DIRMODE=$(DIRMODE) FILEMODE=$(FILEMODE) \
  		srcdir=$(srcdir) builddir=. DESTDIR=$(DESTDIR) prefix=$(prefix)
  
  # This install the unix python and pythonw tools in /usr/local/bin
***************
*** 916,928 ****
  # It is not part of a normal frameworkinstall
  frameworkinstallextras:
  	$(MAKE) -f $(srcdir)/Mac/OSX/Makefile installextras \
! 		$(RUNSHARED) BUILDPYTHON=./$(BUILDPYTHON) DIRMODE=$(DIRMODE) FILEMODE=$(FILEMODE) \
  		srcdir=$(srcdir) builddir=. DESTDIR=$(DESTDIR)
  
  # This installs a few of the useful scripts in Tools/scripts
  scriptsinstall:
  	SRCDIR=$(srcdir) $(RUNSHARED) \
! 	./$(BUILDPYTHON) $(srcdir)/Tools/scripts/setup.py install \
  	--prefix=$(prefix) \
  	--install-scripts=$(BINDIR) \
  	--root=/$(DESTDIR)
--- 948,960 ----
  # It is not part of a normal frameworkinstall
  frameworkinstallextras:
  	$(MAKE) -f $(srcdir)/Mac/OSX/Makefile installextras \
! 		$(RUNSHARED) PYTHON_FOR_BUILD=$(PYTHON_FOR_BUILD) DIRMODE=$(DIRMODE) FILEMODE=$(FILEMODE) \
  		srcdir=$(srcdir) builddir=. DESTDIR=$(DESTDIR)
  
  # This installs a few of the useful scripts in Tools/scripts
  scriptsinstall:
  	SRCDIR=$(srcdir) $(RUNSHARED) \
! 	$(PYTHON_FOR_BUILD) $(srcdir)/Tools/scripts/setup.py install \
  	--prefix=$(prefix) \
  	--install-scripts=$(BINDIR) \
  	--root=/$(DESTDIR)
***************
*** 976,986 ****
  	find $(srcdir) -name '*.py[co]' -exec rm -f {} ';'
  
  clobber: clean
! 	-rm -f $(BUILDPYTHON) $(PGEN) $(LIBRARY) $(LDLIBRARY) $(DLLLIBRARY) \
  		tags TAGS \
  		config.cache config.log pyconfig.h Modules/config.c
  	-rm -rf build platform
  	-rm -rf $(PYTHONFRAMEWORKDIR)
  
  # Make things extra clean, before making a distribution:
  # remove all generated files, even Makefile[.pre]
--- 1008,1019 ----
  	find $(srcdir) -name '*.py[co]' -exec rm -f {} ';'
  
  clobber: clean
! 	-rm -f $(BUILDPYTHON) $(PGEN_FOR_BUILD) $(LIBRARY) $(LDLIBRARY) $(DLLLIBRARY) \
  		tags TAGS \
  		config.cache config.log pyconfig.h Modules/config.c
  	-rm -rf build platform
  	-rm -rf $(PYTHONFRAMEWORKDIR)
+ 	-rm -rf buildpython
  
  # Make things extra clean, before making a distribution:
  # remove all generated files, even Makefile[.pre]
=== modified file 'README'
*** README
--- README
***************
*** 1124,1129 ****
--- 1124,1160 ----
  do this.
  
  
+ Cross Compiling
+ ---------------
+ 
+ Python can be cross compiled by supplying different --build and --host
+ parameters to configure.  Python is compiled on the "build" system and
+ executed on the "host" system.  Cross compiling python requires a
+ native Python on the build host, and a natively compiled tool `Pgen'.
+ 
+ Before cross compiling, Python must first be compiled and installed on
+ the build host.  The configure script will use `cc' and `python', or
+ environment variables CC_FOR_BUILD or PYTHON_FOR_BUILD, eg:
+ 
+    CC_FOR_BUILD=gcc-3.3 \
+    PYTHON_FOR_BUILD=python2.4 \
+    .../configure --build=i686-linux --host=i586-mingw32
+ 
+ Cross compiling has been tested under linux, mileage may vary for
+ other platforms.
+ 
+ A few reminders on using configure to cross compile:
+ - Cross compile tools must be in PATH,
+ - Cross compile tools must be prefixed with the host type
+   (ie i586-mingw32-gcc, i586-mingw32-ranlib, ...),
+ - CC, CXX, AR, and RANLIB must be undefined when running configure,
+   they will be auto-detected.
+ 
+ If you need a cross compiler, Debian ships several several (eg: avr,
+ m68hc1x, mingw32), while dpkg-cross easily creates others.  Otherwise,
+ check out Dan Kegel's crosstool: http://www.kegel.com/crosstool .
+ 
+ 
  Miscellaneous issues
  ====================
  
=== modified file 'configure.in'
*** configure.in
--- configure.in
***************
*** 9,14 ****
--- 9,19 ----
  AC_CONFIG_SRCDIR([Include/object.h])
  AC_CONFIG_HEADER(pyconfig.h)
  
+ # find compiler while respecting --host setting
+ AC_CANONICAL_HOST()
+ AC_CHECK_TOOLS(CC,gcc cc)
+ AC_CHECK_TOOLS(CXX,g++ c++)
+ 
  dnl This is for stuff that absolutely must end up in pyconfig.h.
  dnl Please use pyport.h instead, if possible.
  AH_TOP([
***************
*** 102,110 ****
  # Set name for machine-dependent library files
  AC_SUBST(MACHDEP)
  AC_MSG_CHECKING(MACHDEP)
! if test -z "$MACHDEP"
! then
  	ac_sys_system=`uname -s`
  	if test "$ac_sys_system" = "AIX" -o "$ac_sys_system" = "Monterey64" \
  	-o "$ac_sys_system" = "UnixWare" -o "$ac_sys_system" = "OpenUNIX"; then
  		ac_sys_release=`uname -v`
--- 107,121 ----
  # Set name for machine-dependent library files
  AC_SUBST(MACHDEP)
  AC_MSG_CHECKING(MACHDEP)
! if test -z "$MACHDEP"; then
!     if test "$cross_compiling" = "no"; then
  	ac_sys_system=`uname -s`
+     else
+ 	m=`$CC -dumpmachine`
+  	changequote(<<, >>)#dnl
+ 	ac_sys_system=`expr "$m" : "[^-]*-\([^-]*\)"`
+  	changequote([, ])#dnl
+     fi
  	if test "$ac_sys_system" = "AIX" -o "$ac_sys_system" = "Monterey64" \
  	-o "$ac_sys_system" = "UnixWare" -o "$ac_sys_system" = "OpenUNIX"; then
  		ac_sys_release=`uname -v`
***************
*** 395,403 ****
  then
      AC_MSG_RESULT(yes)
      BUILDEXEEXT=.exe
  else
! 	AC_MSG_RESULT(no)
! 	BUILDEXEEXT=$EXEEXT
  fi
  rmdir CaseSensitiveTestDir
  
--- 406,416 ----
  then
      AC_MSG_RESULT(yes)
      BUILDEXEEXT=.exe
+     case_sensitive=no
  else
!     AC_MSG_RESULT(no)
!     BUILDEXEEXT=$EXEEXT
!     case_sensitive=yes
  fi
  rmdir CaseSensitiveTestDir
  
***************
*** 604,612 ****
  
  AC_MSG_RESULT($LDLIBRARY)
  
! AC_PROG_RANLIB
! AC_SUBST(AR)
! AC_CHECK_PROGS(AR, ar aal, ar)
  
  case $MACHDEP in
  bsdos*|hp*|HP*)
--- 617,625 ----
  
  AC_MSG_RESULT($LDLIBRARY)
  
! # find tools while respecting --host setting
! AC_CHECK_TOOL(RANLIB,ranlib)
! AC_CHECK_TOOLS(AR,ar aal,ar)
  
  case $MACHDEP in
  bsdos*|hp*|HP*)
***************
*** 3096,3120 ****
  fi
  
  AC_MSG_CHECKING(for /dev/ptmx)
! 
! if test -e /dev/ptmx
  then
!   AC_MSG_RESULT(yes)
!   AC_DEFINE(HAVE_DEV_PTMX, 1,
!   [Define if we have /dev/ptmx.])
! else
!   AC_MSG_RESULT(no)
  fi
  
  AC_MSG_CHECKING(for /dev/ptc)
! 
! if test -e /dev/ptc
  then
!   AC_MSG_RESULT(yes)
!   AC_DEFINE(HAVE_DEV_PTC, 1,
!   [Define if we have /dev/ptc.])
! else
!   AC_MSG_RESULT(no)
  fi
  
  AC_CHECK_TYPE(socklen_t,,
--- 3109,3141 ----
  fi
  
  AC_MSG_CHECKING(for /dev/ptmx)
! if test -z "$ac_cv_have_dev_ptmx"
  then
!     ac_cv_have_dev_ptmx=no
!     if test "$cross_compiling" = "no" -a -e /dev/ptmx
!     then
!         ac_cv_have_dev_ptmx=yes
!     fi
! fi
! AC_MSG_RESULT($ac_cv_have_dev_ptmx)
! if test "$ac_cv_have_dev_ptmx" = "yes"
! then
!     AC_DEFINE([HAVE_DEV_PTMX], 1, [Define if we have /dev/ptmx.])
  fi
  
  AC_MSG_CHECKING(for /dev/ptc)
! if test -z "$ac_cv_have_dev_ptc"
  then
!     ac_cv_have_dev_ptc=no
!     if test "$cross_compiling" = "no" -a -e /dev/ptc
!     then
!         ac_cv_have_dev_ptc=yes
!     fi
! fi
! AC_MSG_RESULT($ac_cv_have_dev_ptc)
! if test "$ac_cv_have_dev_ptc" = "yes"
! then
!     AC_DEFINE([HAVE_DEV_PTC], 1, [Define if we have /dev/ptc.])
  fi
  
  AC_CHECK_TYPE(socklen_t,,
***************
*** 3145,3150 ****
--- 3166,3232 ----
  done
  AC_MSG_RESULT(done)
  
+ # Cross compiling
+ AC_SUBST(cross_compiling)
+ 
+ if test "$cross_compiling" = "yes"; then
+     AC_MSG_CHECKING(cc for build)
+     ## /usr/bin/cc still uses wrong assembler
+     ## CC_FOR_BUILD="${CC_FOR_BUILD-/usr/bin/cc}"
+     CC_FOR_BUILD="${CC_FOR_BUILD-PATH=/usr/bin:$PATH cc}"
+ else
+     CC_FOR_BUILD="${CC_FOR_BUILD-$CC}"
+ fi   
+      
+ if test "$cross_compiling" = "yes"; then
+    AC_MSG_RESULT($CC_FOR_BUILD)
+ fi
+ 
+ AC_ARG_VAR(CC_FOR_BUILD,[build system C compiler (default: cc)])
+ 	
+ if test "$cross_compiling" = "yes"; then
+     AC_MSG_CHECKING(python for build)
+     PYTHON_FOR_BUILD="${PYTHON_FOR_BUILD-python}"
+ else
+     PYTHON_FOR_BUILD='$(BUILDPYTHON)'
+ fi   
+ 
+ if test "$cross_compiling" = "yes"; then
+     AC_MSG_RESULT($PYTHON_FOR_BUILD)
+ fi
+ AC_ARG_VAR(PYTHON_FOR_BUILD,[build system python (default: python)])
+ AC_SUBST(PYTHON_FOR_BUILD)
+   			
+ if test "$cross_compiling" = "yes"; then
+     CFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD-}
+     changequote(<<, >>)#dnl
+     python_include=`$PYTHON_FOR_BUILD -c 'import sys; sys.stdout.write ("%s/include/python%s" % (sys.prefix, sys.version[:3]))'`
+     changequote([, ])#dnl
+     CPPFLAGS_FOR_BUILD=${CPPFLAGS_FOR_BUILD-"-I$python_include"}
+     CROSS_COMMENT=#
+     if test "$case_sensitive" = "yes"
+     then
+         EXEEXT_FOR_BUILD=
+     else
+         EXEEXT_FOR_BUILD=.exe
+     fi
+     LDFLAGS_FOR_BUILD=${LDFLAGS_FOR_BUILD-}
+     LIBS_FOR_BUILD=${LIBS_FOR_BUILD-}
+     O_FOR_BUILD=x
+     RUNSHARED="CROSS_TARGET=$ac_sys_system SRCDIR=$srcdir SO=.dll"
+ else
+     CROSS_COMMENT=
+     EXEEXT_FOR_BUILD=$BUILDEXEEXT
+     O_FOR_BUILD=o
+ fi
+ AC_SUBST(CFLAGS_FOR_BUILD)
+ AC_SUBST(CPPFLAGS_FOR_BUILD)
+ AC_SUBST(CROSS_COMMENT)
+ AC_SUBST(EXEEXT_FOR_BUILD)
+ AC_SUBST(LDFLAGS_FOR_BUILD)
+ AC_SUBST(LIBS_FOR_BUILD)
+ AC_SUBST(O_FOR_BUILD)
+ 
  # generate output files
  AC_CONFIG_FILES(Makefile.pre Modules/Setup.config)
  AC_OUTPUT
=== modified file 'setup.py'
*** setup.py
--- setup.py
***************
*** 103,108 ****
--- 103,110 ----
          # Fix up the autodetected modules, prefixing all the source files
          # with Modules/ and adding Python's include directory to the path.
          (srcdir,) = sysconfig.get_config_vars('srcdir')
+         if os.environ.get('CROSS_COMPILING') == 'yes':
+             srcdir = os.environ.get('SRCDIR')
          if not srcdir:
              # Maybe running on Windows but not using CYGWIN?
              raise ValueError("No source directory; cannot proceed.")
***************
*** 198,203 ****
--- 200,209 ----
              self.announce('WARNING: skipping import check for Cygwin-based "%s"'
                  % ext.name)
              return
+         if os.environ.get('CROSS_COMPILING') == 'yes':
+             self.announce('WARNING: skipping import check for cross compiled "%s"'
+                 % ext.name)
+             return
          ext_filename = os.path.join(
              self.build_lib,
              self.get_ext_filename(self.get_ext_fullname(ext.name)))
***************
*** 231,241 ****
                            level=3)
  
      def get_platform(self):
!         # Get value of sys.platform
!         for platform in ['cygwin', 'beos', 'darwin', 'atheos', 'osf1']:
!             if sys.platform.startswith(platform):
                  return platform
!         return sys.platform
  
      def detect_modules(self):
          # Ensure that /usr/local is always used
--- 237,250 ----
                            level=3)
  
      def get_platform(self):
!         # Get value of target's sys.platform
!         p = sys.platform
!         if os.environ.get('CROSS_COMPILING') == 'yes':
!             p = os.environ.get('CROSS_TARGET')
!         for platform in ['cygwin', 'mingw', 'beos', 'darwin', 'atheos', 'osf1']:
!             if p.startswith(platform):
                  return platform
!         return p
  
      def detect_modules(self):
          # Ensure that /usr/local is always used
***************
*** 1163,1168 ****
--- 1172,1179 ----
      # mode 755. All installed directories will get mode 755.
  
      so_ext = sysconfig.get_config_var("SO")
+     if os.environ.get('CROSS_COMPILING') == 'yes':
+         so_ext = os.environ.get('SO')
  
      def install(self):
          outfiles = install_lib.install(self)

