Very partial patches to build Python3.
[fedora-mingw.git] / python3 / mingw32-python-3.1-cross-build.patch
diff --git a/python3/mingw32-python-3.1-cross-build.patch b/python3/mingw32-python-3.1-cross-build.patch
new file mode 100644 (file)
index 0000000..67120ef
--- /dev/null
@@ -0,0 +1,589 @@
+Index: configure.in
+===================================================================
+--- configure.in       (revision 67686)
++++ configure.in       (working copy)
+@@ -12,6 +12,11 @@
+ 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([
+@@ -212,8 +217,8 @@
+ # Set name for machine-dependent library files
+ AC_SUBST(MACHDEP)
+ AC_MSG_CHECKING(MACHDEP)
+-if test -z "$MACHDEP"
+-then
++if test -z "$MACHDEP"; then
++    if test "$cross_compiling" = "no"; 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
+@@ -221,6 +226,23 @@
+       else
+               ac_sys_release=`uname -r`
+       fi
++    else
++      m=`$CC -dumpmachine`
++      changequote(<<, >>)#dnl
++      ac_sys_system=`expr "$m" : "[^-]*-\([^-]*\)"`
++      changequote([, ])#dnl
++
++
++      case $ac_sys_system in
++      cygwin*) ac_sys_system=`echo $ac_sys_system | sed s/cygwin/CYGWIN/g `;;
++      darwin*) ac_sys_system=`echo $ac_sys_system | sed s/darwin/Darwin/g `;;
++      freebsd*) ac_sys_system=`echo $ac_sys_system | sed s/freebsd/FreeBSD/g `;;
++      linux*) ac_sys_system=`echo $ac_sys_system | sed s/linux/Linux/g `;;
++      esac
++      
++
++    fi
++    
+       ac_md_system=`echo $ac_sys_system |
+                          tr -d '[/ ]' | tr '[[A-Z]]' '[[a-z]]'`
+       ac_md_release=`echo $ac_sys_release |
+@@ -442,8 +464,8 @@
+ if test -z "$CXX"
+ then
+         case "$CC" in
+-        gcc)    AC_PATH_PROG(CXX, [g++], [g++], [notfound]) ;;
+-        cc)     AC_PATH_PROG(CXX, [c++], [c++], [notfound]) ;;
++        gcc)    AC_CHECK_TOOL(CXX, [g++], [notfound]) ;;
++        cc)     AC_CHECK_TOOL(CXX, [c++], [notfound]) ;;
+         esac
+       if test "$CXX" = "notfound"
+       then
+@@ -452,7 +474,7 @@
+ fi
+ if test -z "$CXX"
+ then
+-      AC_CHECK_PROGS(CXX, $CCC c++ g++ gcc CC cxx cc++ cl, notfound)
++      AC_CHECK_TOOLS(CXX, $CCC c++ g++ gcc CC cxx cc++ cl, notfound)
+       if test "$CXX" = "notfound"
+       then
+               CXX=""
+@@ -503,9 +525,11 @@
+ then
+     AC_MSG_RESULT(yes)
+     BUILDEXEEXT=.exe
++    case_sensitive=no
+ else
+-      AC_MSG_RESULT(no)
+-      BUILDEXEEXT=$EXEEXT
++    AC_MSG_RESULT(no)
++    BUILDEXEEXT=$EXEEXT
++    case_sensitive=yes
+ fi
+ rmdir CaseSensitiveTestDir
+@@ -705,9 +729,9 @@
+ AC_MSG_RESULT($LDLIBRARY)
+-AC_PROG_RANLIB
+-AC_SUBST(AR)
+-AC_CHECK_PROGS(AR, ar aal, ar)
++# find tools while respecting --host setting
++AC_CHECK_TOOL(RANLIB,ranlib)
++AC_CHECK_TOOLS(AR,ar aal,ar)
+ AC_SUBST(SVNVERSION)
+ AC_CHECK_PROG(SVNVERSION, svnversion, found, not-found)
+@@ -833,7 +857,7 @@
+      AC_TRY_RUN([int main() { return 0; }],
+      ac_cv_no_strict_aliasing_ok=yes,
+      ac_cv_no_strict_aliasing_ok=no,
+-     ac_cv_no_strict_aliasing_ok=no)
++     ac_cv_no_strict_aliasing_ok=yes)
+      CC="$ac_save_cc"
+     AC_MSG_RESULT($ac_cv_no_strict_aliasing_ok)
+     if test $ac_cv_no_strict_aliasing_ok = yes
+@@ -2473,7 +2498,7 @@
+ # On Tru64, chflags seems to be present, but calling it will
+ # exit Python
+ AC_MSG_CHECKING(for chflags)
+-AC_TRY_RUN([
++AC_TRY_COMPILE([
+ #include <sys/stat.h>
+ #include <unistd.h>
+ int main(int argc, char*argv[])
+@@ -2482,13 +2507,14 @@
+     return 1;
+   return 0;
+ }
+-],AC_DEFINE(HAVE_CHFLAGS, 1, Define to 1 if you have the `chflags' function.)
++], void* p = chflags,
++  AC_DEFINE(HAVE_CHFLAGS, 1, Define to 1 if you have the `chflags' function.)
+   AC_MSG_RESULT(yes),
+   AC_MSG_RESULT(no)
+ )
+ AC_MSG_CHECKING(for lchflags)
+-AC_TRY_RUN([
++AC_TRY_COMPILE([
+ #include <sys/stat.h>
+ #include <unistd.h>
+ int main(int argc, char*argv[])
+@@ -2497,7 +2523,8 @@
+     return 1;
+   return 0;
+ }
+-],AC_DEFINE(HAVE_LCHFLAGS, 1, Define to 1 if you have the `lchflags' function.)
++], void* p = lchflags,
++  AC_DEFINE(HAVE_LCHFLAGS, 1, Define to 1 if you have the `lchflags' function.)
+   AC_MSG_RESULT(yes),
+   AC_MSG_RESULT(no)
+ )
+@@ -3523,30 +3550,19 @@
+   AC_MSG_RESULT(no)
+ )
+-AC_MSG_CHECKING(for /dev/ptmx)
++AC_CHECK_FILE(/dev/ptmx,
++      [AC_DEFINE(HAVE_DEV_PTMX, 1,
++         [Define if we have /dev/ptmx.])],
++      [])
+-if test -r /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_CHECK_FILE(/dev/ptc,
++      [AC_DEFINE(HAVE_DEV_PTC, 1,
++         [Define if we have /dev/ptc.])],
++      [])
+-AC_MSG_CHECKING(for /dev/ptc)
+-
+-if test -r /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_MSG_CHECKING(for %zd printf() format support)
+-AC_TRY_RUN([#include <stdio.h>
++AC_CACHE_VAL(ac_cv_printf_zd_format,
++                  AC_TRY_RUN([#include <stdio.h>
+ #include <stddef.h>
+ #include <string.h>
+@@ -3582,7 +3598,7 @@
+ }],
+ [AC_MSG_RESULT(yes)
+  AC_DEFINE(PY_FORMAT_SIZE_T, "z", [Define to printf format modifier for Py_ssize_t])],
+- AC_MSG_RESULT(no))
++ AC_MSG_RESULT(no)))
+ AC_CHECK_TYPE(socklen_t,,
+   AC_DEFINE(socklen_t,int,
+@@ -3633,6 +3649,63 @@
+ done
+ AC_MSG_RESULT(done)
++# Cross compiling
++AC_SUBST(cross_compiling)
++
++if test "$cross_compiling" = "yes"; then
++    AC_MSG_CHECKING(cc for build)
++    CC_FOR_BUILD="${CC_FOR_BUILD-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}"
++    PYTHON_FOR_BUILD=`which $PYTHON_FOR_BUILD`
++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-}
++    CPPFLAGS_FOR_BUILD=${CPPFLAGS_FOR_BUILD- -I.}
++    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="MACHDEP=$ac_sys_system SRCDIR=$srcdir SO=${SO}"
++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
+Index: setup.py
+===================================================================
+--- setup.py   (revision 67686)
++++ setup.py   (working copy)
+@@ -16,8 +16,17 @@
+ from distutils.command.install_lib import install_lib
+ # This global variable is used to hold the list of modules to be disabled.
+-disabled_module_list = []
++disabled_module_list = os.environ.get('DISABLED_MODULE_LIST', []).split()
++import os
++
++if os.environ.get('CROSS_COMPILING') == 'yes':
++    sysconfig.get_config_vars()
++    sysconfig._config_vars.update (os.environ)
++else:
++    sysconfig.get_config_vars()
++    sysconfig._config_vars['srcdir'] = os.environ['srcdir']
++    
+ def add_dir_to_list(dirlist, dir):
+     """Add the directory 'dir' to the list 'dirlist' (at the front) if
+     1) 'dir' is not already in 'dirlist'
+@@ -260,6 +269,10 @@
+             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)))
+@@ -301,16 +314,21 @@
+             self.failed.append(ext.name)
+     def get_platform(self):
+-        # Get value of sys.platform
+-        for platform in ['cygwin', 'darwin', 'atheos', 'osf1']:
+-            if sys.platform.startswith(platform):
++        # Get value of target's sys.platform
++        p = sys.platform
++        if os.environ.get('CROSS_COMPILING') == 'yes':
++            p = os.environ.get('MACHDEP').lower()
++
++        for platform in ['cygwin', 'mingw', 'beos', 'darwin', 'atheos', 'osf1']:
++            if p.startswith(platform):
+                 return platform
+-        return sys.platform
++        return p
+     def detect_modules(self):
+         # Ensure that /usr/local is always used
+-        add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
+-        add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
++        if os.environ.get('CROSS_COMPILING') != 'yes':
++            add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
++            add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
+         # Add paths specified in the environment variables LDFLAGS and
+         # CPPFLAGS for header and library files.
+@@ -355,11 +373,15 @@
+         # lib_dirs and inc_dirs are used to search for files;
+         # if a file is found in one of those directories, it can
+         # be assumed that no additional -I,-L directives are needed.
+-        lib_dirs = self.compiler.library_dirs + [
+-            '/lib64', '/usr/lib64',
+-            '/lib', '/usr/lib',
+-            ]
+-        inc_dirs = self.compiler.include_dirs + ['/usr/include']
++        lib_dirs = []
++        inc_dirs = []
++        if os.environ.get('CROSS_COMPILING') != 'yes':
++            lib_dirs = self.compiler.library_dirs + [
++                '/lib64', '/usr/lib64',
++                '/lib', '/usr/lib',
++                ]
++            inc_dirs = self.compiler.include_dirs + ['/usr/include']
++            
+         exts = []
+         missing = []
+@@ -694,6 +716,9 @@
+         MIN_SQLITE_VERSION = ".".join([str(x)
+                                     for x in MIN_SQLITE_VERSION_NUMBER])
++        if os.environ.get('CROSS_COMPILING') == 'yes':
++            sqlite_inc_paths = []
++
+         # Scan the default include directories before the SQLite specific
+         # ones. This allows one to override the copy of sqlite on OSX,
+         # where /usr/include contains an old version of sqlite.
+Index: Makefile.pre.in
+===================================================================
+--- Makefile.pre.in    (revision 67686)
++++ Makefile.pre.in    (working copy)
+@@ -27,6 +27,7 @@
+ VERSION=      @VERSION@
+ srcdir=               @srcdir@
+ VPATH=                @srcdir@
++export srcdir
+ CC=           @CC@
+ CXX=          @CXX@
+@@ -72,7 +73,17 @@
+ # 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@
+@@ -173,7 +184,8 @@
+ LIBOBJS=      @LIBOBJS@
+ PYTHON=               python$(EXE)
+-BUILDPYTHON=  python$(BUILDEXE)
++BUILDPYTHON=  python$(EXE)
++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
+@@ -203,7 +215,7 @@
+ ##########################################################################
+ # Parser
+-PGEN=         Parser/pgen$(EXE)
++PGEN_FOR_BUILD=       Parser/pgen$(EXEEXT_FOR_BUILD)
+ POBJS=                \
+               Parser/acceler.o \
+@@ -220,19 +232,33 @@
+ 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
++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)
++
+ PARSER_HEADERS= \
+               Parser/parser.h \
+               Parser/tokenizer.h
+-PGENOBJS=     $(PGENMAIN) $(POBJS) $(PGOBJS)
++PGENOBJS=     $(POBJS_FOR_BUILD) $(PGOBJS_FOR_BUILD)
++
+ ##########################################################################
+ # AST
+ AST_H_DIR=    $(srcdir)/Include
+@@ -385,15 +411,17 @@
+                       Modules/python.o \
+                       $(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
++platform: $(PYTHON_FOR_BUILD)
++      $(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: $(BUILDPYTHON)
++sharedmods: $(PYTHON_FOR_BUILD)
+       @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) CROSS_COMPILING=$(CROSS_COMPILING) CC='$(CC)' \
++              LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(PYTHON_FOR_BUILD) -E $(srcdir)/setup.py -q build;; \
++      *) $(RUNSHARED) CROSS_COMPILING=$(CROSS_COMPILING) CC='$(CC)' \
++              LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(PYTHON_FOR_BUILD) -E $(srcdir)/setup.py build;; \
+       esac
+ # Build static library
+@@ -508,13 +536,12 @@
+ Modules/python.o: $(srcdir)/Modules/python.c
+       $(MAINCC) -c $(PY_CFLAGS) -o $@ $(srcdir)/Modules/python.c
+-
+-$(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT)
++$(GRAMMAR_H) $(GRAMMAR_C): $(PGEN_FOR_BUILD) $(GRAMMAR_INPUT)
+               -@$(INSTALL) -d Include
+-              -$(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
++              -$(PGEN_FOR_BUILD) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
+-$(PGEN):      $(PGENOBJS)
+-              $(CC) $(OPT) $(LDFLAGS) $(PGENOBJS) $(LIBS) -o $(PGEN)
++$(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 \
+@@ -569,6 +596,14 @@
+ ############################################################################
++# Cross compile rules
++
++# .x is a native object file during cross-compile. 
++.SUFFIXES: .x 
++.c.x:
++      $(CC_FOR_BUILD) -c $(CPPFLAGS_FOR_BUILD) $(CFLAGS_FOR_BUILD) -o $@ $<
++
++############################################################################
+ # Header files
+ PYTHON_HEADERS= \
+@@ -665,7 +700,7 @@
+ TESTOPTS=     -l $(EXTRATESTOPTS)
+ TESTPROG=     $(srcdir)/Lib/test/regrtest.py
+-TESTPYTHON=   $(RUNSHARED) ./$(BUILDPYTHON) -E -bb
++TESTPYTHON=   $(RUNSHARED) ./$(PYTHON_FOR_BUILD) -E -bb
+ test:         all platform
+               -find $(srcdir)/Lib -name '*.py[co]' -print | xargs rm -f
+               -$(TESTPYTHON) $(TESTPROG) $(TESTOPTS)
+@@ -688,7 +723,7 @@
+               -find $(srcdir)/Lib -name '*.py[co]' -print | xargs rm -f
+               -$(TESTPYTHON) $(TESTPROG) $(TESTOPTS) -uall
+               $(TESTPYTHON) $(TESTPROG) $(TESTOPTS) -uall
+-              $(RUNSHARED) /usr/libexec/oah/translate ./$(BUILDPYTHON) -E $(TESTPROG) $(TESTOPTS) -uall
++              $(RUNSHARED) /usr/libexec/oah/translate ./$(PYTHON_FOR_BUILD) -E $(TESTPROG) $(TESTOPTS) -uall
+ # Like testall, but with a single pass only
+@@ -816,7 +851,7 @@
+               setuptools setuptools/command setuptools/tests setuptools.egg-info \
+               multiprocessing multiprocessing/dummy \
+               curses $(MACHDEPS)
+-libinstall:   build_all $(srcdir)/Lib/$(PLATDIR)
++libinstall: $(srcdir)/Lib/$(PLATDIR) $(PYTHON_FOR_BUILD)
+       @for i in $(SCRIPTDIR) $(LIBDEST); \
+       do \
+               if test ! -d $(DESTDIR)$$i; then \
+@@ -873,23 +908,23 @@
+       done
+       $(INSTALL_DATA) $(srcdir)/LICENSE $(DESTDIR)$(LIBDEST)/LICENSE.txt
+       -PYTHONPATH=$(DESTDIR)$(LIBDEST)  $(RUNSHARED) \
+-              ./$(BUILDPYTHON) -Wi $(DESTDIR)$(LIBDEST)/compileall.py \
++              ./$(PYTHON_FOR_BUILD) -Wi $(DESTDIR)$(LIBDEST)/compileall.py \
+               -d $(LIBDEST) -f \
+               -x 'bad_coding|badsyntax|site-packages' $(DESTDIR)$(LIBDEST)
+       -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
+-              ./$(BUILDPYTHON) -Wi -O $(DESTDIR)$(LIBDEST)/compileall.py \
++              ./$(PYTHON_FOR_BUILD) -Wi -O $(DESTDIR)$(LIBDEST)/compileall.py \
+               -d $(LIBDEST) -f \
+               -x 'bad_coding|badsyntax|site-packages' $(DESTDIR)$(LIBDEST)
+       -PYTHONPATH=$(DESTDIR)$(LIBDEST)  $(RUNSHARED) \
+-              ./$(BUILDPYTHON) -Wi $(DESTDIR)$(LIBDEST)/compileall.py \
++              ./$(PYTHON_FOR_BUILD) -Wi $(DESTDIR)$(LIBDEST)/compileall.py \
+               -d $(LIBDEST)/site-packages -f \
+               -x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
+       -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
+-              ./$(BUILDPYTHON) -Wi -O $(DESTDIR)$(LIBDEST)/compileall.py \
++              ./$(PYTHON_FOR_BUILD) -Wi -O $(DESTDIR)$(LIBDEST)/compileall.py \
+               -d $(LIBDEST)/site-packages -f \
+               -x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
+       -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
+-              ./$(BUILDPYTHON) -Wi -c "import lib2to3.pygram, lib2to3.patcomp;lib2to3.patcomp.PatternCompiler()"
++              ./$(PYTHON_FOR_BUILD) -Wi -c "import lib2to3.pygram, lib2to3.patcomp;lib2to3.patcomp.PatternCompiler()"
+ # Create the PLATDIR source directory, if one wasn't distributed..
+ $(srcdir)/Lib/$(PLATDIR):
+@@ -976,8 +1011,9 @@
+ # Install the dynamically loadable modules
+ # This goes into $(exec_prefix)
+ sharedinstall:
+-      $(RUNSHARED) ./$(BUILDPYTHON) -E $(srcdir)/setup.py install \
+-              --prefix=$(prefix) \
++      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)
+@@ -1054,8 +1090,8 @@
+ # This installs a few of the useful scripts in Tools/scripts
+ scriptsinstall:
+-      SRCDIR=$(srcdir) $(RUNSHARED) \
+-      ./$(BUILDPYTHON) $(srcdir)/Tools/scripts/setup.py install \
++      $(RUNSHARED) \
++      $(PYTHON_FOR_BUILD) $(srcdir)/Tools/scripts/setup.py install \
+       --prefix=$(prefix) \
+       --install-scripts=$(BINDIR) \
+       --root=/$(DESTDIR)
+@@ -1130,11 +1166,12 @@
+       find . -name '*.gc??' -exec rm -f {} ';'
+ clobber: clean profile-removal
+-      -rm -f $(BUILDPYTHON) $(PGEN) $(LIBRARY) $(LDLIBRARY) $(DLLLIBRARY) \
++      -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]