=== 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,1181 ---- # 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') + + print 'so_ext: ' + so_ext def install(self): outfiles = install_lib.install(self)