Merge.
[fedora-mingw.git] / python3 / mingw32-python-3.1-cross-build.patch
1 Index: configure.in
2 ===================================================================
3 --- configure.in        (revision 67686)
4 +++ configure.in        (working copy)
5 @@ -12,6 +12,11 @@
6  AC_CONFIG_SRCDIR([Include/object.h])
7  AC_CONFIG_HEADER(pyconfig.h)
8  
9 +# find compiler while respecting --host setting
10 +AC_CANONICAL_HOST()
11 +AC_CHECK_TOOLS(CC,gcc cc)
12 +AC_CHECK_TOOLS(CXX,g++ c++)
13 +
14  dnl This is for stuff that absolutely must end up in pyconfig.h.
15  dnl Please use pyport.h instead, if possible.
16  AH_TOP([
17 @@ -212,8 +217,8 @@
18  # Set name for machine-dependent library files
19  AC_SUBST(MACHDEP)
20  AC_MSG_CHECKING(MACHDEP)
21 -if test -z "$MACHDEP"
22 -then
23 +if test -z "$MACHDEP"; then
24 +    if test "$cross_compiling" = "no"; then
25         ac_sys_system=`uname -s`
26         if test "$ac_sys_system" = "AIX" -o "$ac_sys_system" = "Monterey64" \
27         -o "$ac_sys_system" = "UnixWare" -o "$ac_sys_system" = "OpenUNIX"; then
28 @@ -221,6 +226,23 @@
29         else
30                 ac_sys_release=`uname -r`
31         fi
32 +    else
33 +       m=`$CC -dumpmachine`
34 +       changequote(<<, >>)#dnl
35 +       ac_sys_system=`expr "$m" : "[^-]*-\([^-]*\)"`
36 +       changequote([, ])#dnl
37 +
38 +
39 +       case $ac_sys_system in
40 +       cygwin*) ac_sys_system=`echo $ac_sys_system | sed s/cygwin/CYGWIN/g `;;
41 +       darwin*) ac_sys_system=`echo $ac_sys_system | sed s/darwin/Darwin/g `;;
42 +       freebsd*) ac_sys_system=`echo $ac_sys_system | sed s/freebsd/FreeBSD/g `;;
43 +       linux*) ac_sys_system=`echo $ac_sys_system | sed s/linux/Linux/g `;;
44 +       esac
45 +       
46 +
47 +    fi
48 +    
49         ac_md_system=`echo $ac_sys_system |
50                            tr -d '[/ ]' | tr '[[A-Z]]' '[[a-z]]'`
51         ac_md_release=`echo $ac_sys_release |
52 @@ -442,8 +464,8 @@
53  if test -z "$CXX"
54  then
55          case "$CC" in
56 -        gcc)    AC_PATH_PROG(CXX, [g++], [g++], [notfound]) ;;
57 -        cc)     AC_PATH_PROG(CXX, [c++], [c++], [notfound]) ;;
58 +        gcc)    AC_CHECK_TOOL(CXX, [g++], [notfound]) ;;
59 +        cc)     AC_CHECK_TOOL(CXX, [c++], [notfound]) ;;
60          esac
61         if test "$CXX" = "notfound"
62         then
63 @@ -452,7 +474,7 @@
64  fi
65  if test -z "$CXX"
66  then
67 -       AC_CHECK_PROGS(CXX, $CCC c++ g++ gcc CC cxx cc++ cl, notfound)
68 +       AC_CHECK_TOOLS(CXX, $CCC c++ g++ gcc CC cxx cc++ cl, notfound)
69         if test "$CXX" = "notfound"
70         then
71                 CXX=""
72 @@ -503,9 +525,11 @@
73  then
74      AC_MSG_RESULT(yes)
75      BUILDEXEEXT=.exe
76 +    case_sensitive=no
77  else
78 -       AC_MSG_RESULT(no)
79 -       BUILDEXEEXT=$EXEEXT
80 +    AC_MSG_RESULT(no)
81 +    BUILDEXEEXT=$EXEEXT
82 +    case_sensitive=yes
83  fi
84  rmdir CaseSensitiveTestDir
85  
86 @@ -705,9 +729,9 @@
87  
88  AC_MSG_RESULT($LDLIBRARY)
89  
90 -AC_PROG_RANLIB
91 -AC_SUBST(AR)
92 -AC_CHECK_PROGS(AR, ar aal, ar)
93 +# find tools while respecting --host setting
94 +AC_CHECK_TOOL(RANLIB,ranlib)
95 +AC_CHECK_TOOLS(AR,ar aal,ar)
96  
97  AC_SUBST(SVNVERSION)
98  AC_CHECK_PROG(SVNVERSION, svnversion, found, not-found)
99 @@ -833,7 +857,7 @@
100       AC_TRY_RUN([int main() { return 0; }],
101       ac_cv_no_strict_aliasing_ok=yes,
102       ac_cv_no_strict_aliasing_ok=no,
103 -     ac_cv_no_strict_aliasing_ok=no)
104 +     ac_cv_no_strict_aliasing_ok=yes)
105       CC="$ac_save_cc"
106      AC_MSG_RESULT($ac_cv_no_strict_aliasing_ok)
107      if test $ac_cv_no_strict_aliasing_ok = yes
108 @@ -2473,7 +2498,7 @@
109  # On Tru64, chflags seems to be present, but calling it will
110  # exit Python
111  AC_MSG_CHECKING(for chflags)
112 -AC_TRY_RUN([
113 +AC_TRY_COMPILE([
114  #include <sys/stat.h>
115  #include <unistd.h>
116  int main(int argc, char*argv[])
117 @@ -2482,13 +2507,14 @@
118      return 1;
119    return 0;
120  }
121 -],AC_DEFINE(HAVE_CHFLAGS, 1, Define to 1 if you have the `chflags' function.)
122 +], void* p = chflags,
123 +  AC_DEFINE(HAVE_CHFLAGS, 1, Define to 1 if you have the `chflags' function.)
124    AC_MSG_RESULT(yes),
125    AC_MSG_RESULT(no)
126  )
127  
128  AC_MSG_CHECKING(for lchflags)
129 -AC_TRY_RUN([
130 +AC_TRY_COMPILE([
131  #include <sys/stat.h>
132  #include <unistd.h>
133  int main(int argc, char*argv[])
134 @@ -2497,7 +2523,8 @@
135      return 1;
136    return 0;
137  }
138 -],AC_DEFINE(HAVE_LCHFLAGS, 1, Define to 1 if you have the `lchflags' function.)
139 +], void* p = lchflags,
140 +  AC_DEFINE(HAVE_LCHFLAGS, 1, Define to 1 if you have the `lchflags' function.)
141    AC_MSG_RESULT(yes),
142    AC_MSG_RESULT(no)
143  )
144 @@ -3523,30 +3550,19 @@
145    AC_MSG_RESULT(no)
146  )
147  
148 -AC_MSG_CHECKING(for /dev/ptmx)
149 +AC_CHECK_FILE(/dev/ptmx,
150 +       [AC_DEFINE(HAVE_DEV_PTMX, 1,
151 +          [Define if we have /dev/ptmx.])],
152 +       [])
153  
154 -if test -r /dev/ptmx
155 -then
156 -  AC_MSG_RESULT(yes)
157 -  AC_DEFINE(HAVE_DEV_PTMX, 1,
158 -  [Define if we have /dev/ptmx.])
159 -else
160 -  AC_MSG_RESULT(no)
161 -fi
162 +AC_CHECK_FILE(/dev/ptc,
163 +       [AC_DEFINE(HAVE_DEV_PTC, 1,
164 +          [Define if we have /dev/ptc.])],
165 +       [])
166  
167 -AC_MSG_CHECKING(for /dev/ptc)
168 -
169 -if test -r /dev/ptc
170 -then
171 -  AC_MSG_RESULT(yes)
172 -  AC_DEFINE(HAVE_DEV_PTC, 1,
173 -  [Define if we have /dev/ptc.])
174 -else
175 -  AC_MSG_RESULT(no)
176 -fi
177 -
178  AC_MSG_CHECKING(for %zd printf() format support)
179 -AC_TRY_RUN([#include <stdio.h>
180 +AC_CACHE_VAL(ac_cv_printf_zd_format,
181 +                   AC_TRY_RUN([#include <stdio.h>
182  #include <stddef.h>
183  #include <string.h>
184  
185 @@ -3582,7 +3598,7 @@
186  }],
187  [AC_MSG_RESULT(yes)
188   AC_DEFINE(PY_FORMAT_SIZE_T, "z", [Define to printf format modifier for Py_ssize_t])],
189 - AC_MSG_RESULT(no))
190 + AC_MSG_RESULT(no)))
191  
192  AC_CHECK_TYPE(socklen_t,,
193    AC_DEFINE(socklen_t,int,
194 @@ -3633,6 +3649,63 @@
195  done
196  AC_MSG_RESULT(done)
197  
198 +# Cross compiling
199 +AC_SUBST(cross_compiling)
200 +
201 +if test "$cross_compiling" = "yes"; then
202 +    AC_MSG_CHECKING(cc for build)
203 +    CC_FOR_BUILD="${CC_FOR_BUILD-cc}"
204 +else
205 +    CC_FOR_BUILD="${CC_FOR_BUILD-$CC}"
206 +fi   
207 +     
208 +if test "$cross_compiling" = "yes"; then
209 +   AC_MSG_RESULT($CC_FOR_BUILD)
210 +fi
211 +
212 +AC_ARG_VAR(CC_FOR_BUILD,[build system C compiler (default: cc)])
213 +       
214 +if test "$cross_compiling" = "yes"; then
215 +    AC_MSG_CHECKING(python for build)
216 +    PYTHON_FOR_BUILD="${PYTHON_FOR_BUILD-python}"
217 +    PYTHON_FOR_BUILD=`which $PYTHON_FOR_BUILD`
218 +else
219 +    PYTHON_FOR_BUILD='./$(BUILDPYTHON)'
220 +fi   
221 +
222 +if test "$cross_compiling" = "yes"; then
223 +    AC_MSG_RESULT($PYTHON_FOR_BUILD)
224 +fi
225 +AC_ARG_VAR(PYTHON_FOR_BUILD,[build system python (default: python)])
226 +AC_SUBST(PYTHON_FOR_BUILD)
227 +
228 +if test "$cross_compiling" = "yes"; then
229 +    CFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD-}
230 +    CPPFLAGS_FOR_BUILD=${CPPFLAGS_FOR_BUILD- -I.}
231 +    CROSS_COMMENT=#
232 +    if test "$case_sensitive" = "yes"
233 +    then
234 +        EXEEXT_FOR_BUILD=
235 +    else
236 +        EXEEXT_FOR_BUILD=.exe
237 +    fi
238 +    LDFLAGS_FOR_BUILD=${LDFLAGS_FOR_BUILD-}
239 +    LIBS_FOR_BUILD=${LIBS_FOR_BUILD-}
240 +    O_FOR_BUILD=x
241 +    RUNSHARED="MACHDEP=$ac_sys_system SRCDIR=$srcdir SO=${SO}"
242 +else
243 +    CROSS_COMMENT=
244 +    EXEEXT_FOR_BUILD=$BUILDEXEEXT
245 +    O_FOR_BUILD=o
246 +fi
247 +AC_SUBST(CFLAGS_FOR_BUILD)
248 +AC_SUBST(CPPFLAGS_FOR_BUILD)
249 +AC_SUBST(CROSS_COMMENT)
250 +AC_SUBST(EXEEXT_FOR_BUILD)
251 +AC_SUBST(LDFLAGS_FOR_BUILD)
252 +AC_SUBST(LIBS_FOR_BUILD)
253 +AC_SUBST(O_FOR_BUILD)
254 +
255  # generate output files
256  AC_CONFIG_FILES(Makefile.pre Modules/Setup.config)
257  AC_OUTPUT
258 Index: setup.py
259 ===================================================================
260 --- setup.py    (revision 67686)
261 +++ setup.py    (working copy)
262 @@ -16,8 +16,17 @@
263  from distutils.command.install_lib import install_lib
264  
265  # This global variable is used to hold the list of modules to be disabled.
266 -disabled_module_list = []
267 +disabled_module_list = os.environ.get('DISABLED_MODULE_LIST', []).split()
268  
269 +import os
270 +
271 +if os.environ.get('CROSS_COMPILING') == 'yes':
272 +    sysconfig.get_config_vars()
273 +    sysconfig._config_vars.update (os.environ)
274 +else:
275 +    sysconfig.get_config_vars()
276 +    sysconfig._config_vars['srcdir'] = os.environ['srcdir']
277 +    
278  def add_dir_to_list(dirlist, dir):
279      """Add the directory 'dir' to the list 'dirlist' (at the front) if
280      1) 'dir' is not already in 'dirlist'
281 @@ -260,6 +269,10 @@
282              self.announce('WARNING: skipping import check for Cygwin-based "%s"'
283                  % ext.name)
284              return
285 +        if os.environ.get('CROSS_COMPILING') == 'yes':
286 +            self.announce('WARNING: skipping import check for cross compiled "%s"'
287 +                % ext.name)
288 +            return
289          ext_filename = os.path.join(
290              self.build_lib,
291              self.get_ext_filename(self.get_ext_fullname(ext.name)))
292 @@ -301,16 +314,21 @@
293              self.failed.append(ext.name)
294  
295      def get_platform(self):
296 -        # Get value of sys.platform
297 -        for platform in ['cygwin', 'darwin', 'atheos', 'osf1']:
298 -            if sys.platform.startswith(platform):
299 +        # Get value of target's sys.platform
300 +        p = sys.platform
301 +        if os.environ.get('CROSS_COMPILING') == 'yes':
302 +            p = os.environ.get('MACHDEP').lower()
303 +
304 +        for platform in ['cygwin', 'mingw', 'beos', 'darwin', 'atheos', 'osf1']:
305 +            if p.startswith(platform):
306                  return platform
307 -        return sys.platform
308 +        return p
309  
310      def detect_modules(self):
311          # Ensure that /usr/local is always used
312 -        add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
313 -        add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
314 +        if os.environ.get('CROSS_COMPILING') != 'yes':
315 +            add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
316 +            add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
317  
318          # Add paths specified in the environment variables LDFLAGS and
319          # CPPFLAGS for header and library files.
320 @@ -355,11 +373,15 @@
321          # lib_dirs and inc_dirs are used to search for files;
322          # if a file is found in one of those directories, it can
323          # be assumed that no additional -I,-L directives are needed.
324 -        lib_dirs = self.compiler.library_dirs + [
325 -            '/lib64', '/usr/lib64',
326 -            '/lib', '/usr/lib',
327 -            ]
328 -        inc_dirs = self.compiler.include_dirs + ['/usr/include']
329 +        lib_dirs = []
330 +        inc_dirs = []
331 +        if os.environ.get('CROSS_COMPILING') != 'yes':
332 +            lib_dirs = self.compiler.library_dirs + [
333 +                '/lib64', '/usr/lib64',
334 +                '/lib', '/usr/lib',
335 +                ]
336 +            inc_dirs = self.compiler.include_dirs + ['/usr/include']
337 +            
338          exts = []
339          missing = []
340  
341 @@ -694,6 +716,9 @@
342          MIN_SQLITE_VERSION = ".".join([str(x)
343                                      for x in MIN_SQLITE_VERSION_NUMBER])
344  
345 +        if os.environ.get('CROSS_COMPILING') == 'yes':
346 +            sqlite_inc_paths = []
347 +
348          # Scan the default include directories before the SQLite specific
349          # ones. This allows one to override the copy of sqlite on OSX,
350          # where /usr/include contains an old version of sqlite.
351 Index: Makefile.pre.in
352 ===================================================================
353 --- Makefile.pre.in     (revision 67686)
354 +++ Makefile.pre.in     (working copy)
355 @@ -27,6 +27,7 @@
356  VERSION=       @VERSION@
357  srcdir=                @srcdir@
358  VPATH=         @srcdir@
359 +export srcdir
360  
361  CC=            @CC@
362  CXX=           @CXX@
363 @@ -72,7 +73,17 @@
364  # C flags used for building the interpreter object files
365  PY_CFLAGS=     $(CFLAGS) $(CPPFLAGS) $(CFLAGSFORSHARED) -DPy_BUILD_CORE
366  
367 +# For cross compile: build compiler options
368 +CC_FOR_BUILD=  @CC_FOR_BUILD@
369 +CROSS_COMPILING=       @cross_compiling@
370 +EXEEXT_FOR_BUILD=      @EXEEXT_FOR_BUILD@
371 +O_FOR_BUILD=   @O_FOR_BUILD@
372  
373 +CFLAGS_FOR_BUILD=      @CFLAGS_FOR_BUILD@
374 +CPPFLAGS_FOR_BUILD=    @CPPFLAGS_FOR_BUILD@ -I$(srcdir)/Include
375 +LDFLAGS_FOR_BUILD=     @LDFLAGS_FOR_BUILD@
376 +LIBS_FOR_BUILD=        @LIBS_FOR_BUILD@
377 +
378  # Machine-dependent subdirectories
379  MACHDEP=       @MACHDEP@
380  
381 @@ -173,7 +184,8 @@
382  LIBOBJS=       @LIBOBJS@
383  
384  PYTHON=                python$(EXE)
385 -BUILDPYTHON=   python$(BUILDEXE)
386 +BUILDPYTHON=   python$(EXE)
387 +PYTHON_FOR_BUILD=      @PYTHON_FOR_BUILD@
388  
389  # The task to run while instrument when building the profile-opt target
390  PROFILE_TASK=  $(srcdir)/Tools/pybench/pybench.py -n 2 --with-gc --with-syscheck
391 @@ -203,7 +215,7 @@
392  
393  ##########################################################################
394  # Parser
395 -PGEN=          Parser/pgen$(EXE)
396 +PGEN_FOR_BUILD=        Parser/pgen$(EXEEXT_FOR_BUILD)
397  
398  POBJS=         \
399                 Parser/acceler.o \
400 @@ -220,19 +232,33 @@
401  
402  PARSER_OBJS=   $(POBJS) Parser/myreadline.o Parser/tokenizer.o
403  
404 -PGOBJS=                \
405 -               Objects/obmalloc.o \
406 -               Python/mysnprintf.o \
407 -               Parser/tokenizer_pgen.o \
408 -               Parser/printgrammar.o \
409 -               Parser/pgenmain.o
410 +POBJS_FOR_BUILD=               \
411 +               Parser/acceler.$(O_FOR_BUILD) \
412 +               Parser/grammar1.$(O_FOR_BUILD) \
413 +               Parser/listnode.$(O_FOR_BUILD) \
414 +               Parser/node.$(O_FOR_BUILD) \
415 +               Parser/parser.$(O_FOR_BUILD) \
416 +               Parser/parsetok.$(O_FOR_BUILD) \
417 +               Parser/bitset.$(O_FOR_BUILD) \
418 +               Parser/metagrammar.$(O_FOR_BUILD) \
419 +               Parser/firstsets.$(O_FOR_BUILD) \
420 +               Parser/grammar.$(O_FOR_BUILD) \
421 +               Parser/pgen.$(O_FOR_BUILD)
422  
423 +PGOBJS_FOR_BUILD=              \
424 +               Objects/obmalloc.$(O_FOR_BUILD) \
425 +               Python/mysnprintf.$(O_FOR_BUILD) \
426 +               Parser/tokenizer_pgen.$(O_FOR_BUILD) \
427 +               Parser/printgrammar.$(O_FOR_BUILD) \
428 +               Parser/pgenmain.$(O_FOR_BUILD)
429 +
430  PARSER_HEADERS= \
431                 Parser/parser.h \
432                 Parser/tokenizer.h
433  
434 -PGENOBJS=      $(PGENMAIN) $(POBJS) $(PGOBJS)
435 +PGENOBJS=      $(POBJS_FOR_BUILD) $(PGOBJS_FOR_BUILD)
436  
437 +
438  ##########################################################################
439  # AST
440  AST_H_DIR=     $(srcdir)/Include
441 @@ -385,15 +411,17 @@
442                         Modules/python.o \
443                         $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST)
444  
445 -platform: $(BUILDPYTHON)
446 -       $(RUNSHARED) ./$(BUILDPYTHON) -E -c 'import sys ; from distutils.util import get_platform ; print(get_platform()+"-"+sys.version[0:3])' >platform
447 +platform: $(PYTHON_FOR_BUILD)
448 +       $(RUNSHARED) ./$(PYTHON_FOR_BUILD) -E -c 'import sys ; from distutils.util import get_platform ; print(get_platform()+"-"+sys.version[0:3])' >platform
449  
450  
451  # Build the shared modules
452 -sharedmods: $(BUILDPYTHON)
453 +sharedmods: $(PYTHON_FOR_BUILD)
454         @case $$MAKEFLAGS in \
455 -       *s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py -q build;; \
456 -       *) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py build;; \
457 +       *s*) $(RUNSHARED) CROSS_COMPILING=$(CROSS_COMPILING) CC='$(CC)' \
458 +               LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(PYTHON_FOR_BUILD) -E $(srcdir)/setup.py -q build;; \
459 +       *) $(RUNSHARED) CROSS_COMPILING=$(CROSS_COMPILING) CC='$(CC)' \
460 +               LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(PYTHON_FOR_BUILD) -E $(srcdir)/setup.py build;; \
461         esac
462  
463  # Build static library
464 @@ -508,13 +536,12 @@
465  Modules/python.o: $(srcdir)/Modules/python.c
466         $(MAINCC) -c $(PY_CFLAGS) -o $@ $(srcdir)/Modules/python.c
467  
468 -
469 -$(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT)
470 +$(GRAMMAR_H) $(GRAMMAR_C): $(PGEN_FOR_BUILD) $(GRAMMAR_INPUT)
471                 -@$(INSTALL) -d Include
472 -               -$(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
473 +               -$(PGEN_FOR_BUILD) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
474  
475 -$(PGEN):       $(PGENOBJS)
476 -               $(CC) $(OPT) $(LDFLAGS) $(PGENOBJS) $(LIBS) -o $(PGEN)
477 +$(PGEN_FOR_BUILD):     $(PGENOBJS)
478 +               $(CC_FOR_BUILD) $(OPT) $(LDFLAGS_FOR_BUILD) $(PGENOBJS) $(LIBS_FOR_BUILD) -o $(PGEN_FOR_BUILD)
479  
480  Parser/grammar.o:      $(srcdir)/Parser/grammar.c \
481                                 $(srcdir)/Include/token.h \
482 @@ -569,6 +596,14 @@
483  
484  
485  ############################################################################
486 +# Cross compile rules
487 +
488 +# .x is a native object file during cross-compile. 
489 +.SUFFIXES: .x 
490 +.c.x:
491 +       $(CC_FOR_BUILD) -c $(CPPFLAGS_FOR_BUILD) $(CFLAGS_FOR_BUILD) -o $@ $<
492 +
493 +############################################################################
494  # Header files
495  
496  PYTHON_HEADERS= \
497 @@ -665,7 +700,7 @@
498  
499  TESTOPTS=      -l $(EXTRATESTOPTS)
500  TESTPROG=      $(srcdir)/Lib/test/regrtest.py
501 -TESTPYTHON=    $(RUNSHARED) ./$(BUILDPYTHON) -E -bb
502 +TESTPYTHON=    $(RUNSHARED) ./$(PYTHON_FOR_BUILD) -E -bb
503  test:          all platform
504                 -find $(srcdir)/Lib -name '*.py[co]' -print | xargs rm -f
505                 -$(TESTPYTHON) $(TESTPROG) $(TESTOPTS)
506 @@ -688,7 +723,7 @@
507                 -find $(srcdir)/Lib -name '*.py[co]' -print | xargs rm -f
508                 -$(TESTPYTHON) $(TESTPROG) $(TESTOPTS) -uall
509                 $(TESTPYTHON) $(TESTPROG) $(TESTOPTS) -uall
510 -               $(RUNSHARED) /usr/libexec/oah/translate ./$(BUILDPYTHON) -E $(TESTPROG) $(TESTOPTS) -uall
511 +               $(RUNSHARED) /usr/libexec/oah/translate ./$(PYTHON_FOR_BUILD) -E $(TESTPROG) $(TESTOPTS) -uall
512  
513  
514  # Like testall, but with a single pass only
515 @@ -816,7 +851,7 @@
516                 setuptools setuptools/command setuptools/tests setuptools.egg-info \
517                 multiprocessing multiprocessing/dummy \
518                 curses $(MACHDEPS)
519 -libinstall:    build_all $(srcdir)/Lib/$(PLATDIR)
520 +libinstall: $(srcdir)/Lib/$(PLATDIR) $(PYTHON_FOR_BUILD)
521         @for i in $(SCRIPTDIR) $(LIBDEST); \
522         do \
523                 if test ! -d $(DESTDIR)$$i; then \
524 @@ -873,23 +908,23 @@
525         done
526         $(INSTALL_DATA) $(srcdir)/LICENSE $(DESTDIR)$(LIBDEST)/LICENSE.txt
527         -PYTHONPATH=$(DESTDIR)$(LIBDEST)  $(RUNSHARED) \
528 -               ./$(BUILDPYTHON) -Wi $(DESTDIR)$(LIBDEST)/compileall.py \
529 +               ./$(PYTHON_FOR_BUILD) -Wi $(DESTDIR)$(LIBDEST)/compileall.py \
530                 -d $(LIBDEST) -f \
531                 -x 'bad_coding|badsyntax|site-packages' $(DESTDIR)$(LIBDEST)
532         -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
533 -               ./$(BUILDPYTHON) -Wi -O $(DESTDIR)$(LIBDEST)/compileall.py \
534 +               ./$(PYTHON_FOR_BUILD) -Wi -O $(DESTDIR)$(LIBDEST)/compileall.py \
535                 -d $(LIBDEST) -f \
536                 -x 'bad_coding|badsyntax|site-packages' $(DESTDIR)$(LIBDEST)
537         -PYTHONPATH=$(DESTDIR)$(LIBDEST)  $(RUNSHARED) \
538 -               ./$(BUILDPYTHON) -Wi $(DESTDIR)$(LIBDEST)/compileall.py \
539 +               ./$(PYTHON_FOR_BUILD) -Wi $(DESTDIR)$(LIBDEST)/compileall.py \
540                 -d $(LIBDEST)/site-packages -f \
541                 -x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
542         -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
543 -               ./$(BUILDPYTHON) -Wi -O $(DESTDIR)$(LIBDEST)/compileall.py \
544 +               ./$(PYTHON_FOR_BUILD) -Wi -O $(DESTDIR)$(LIBDEST)/compileall.py \
545                 -d $(LIBDEST)/site-packages -f \
546                 -x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
547         -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
548 -               ./$(BUILDPYTHON) -Wi -c "import lib2to3.pygram, lib2to3.patcomp;lib2to3.patcomp.PatternCompiler()"
549 +               ./$(PYTHON_FOR_BUILD) -Wi -c "import lib2to3.pygram, lib2to3.patcomp;lib2to3.patcomp.PatternCompiler()"
550  
551  # Create the PLATDIR source directory, if one wasn't distributed..
552  $(srcdir)/Lib/$(PLATDIR):
553 @@ -976,8 +1011,9 @@
554  # Install the dynamically loadable modules
555  # This goes into $(exec_prefix)
556  sharedinstall:
557 -       $(RUNSHARED) ./$(BUILDPYTHON) -E $(srcdir)/setup.py install \
558 -               --prefix=$(prefix) \
559 +       CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' CROSS_COMPILING='$(CROSS_COMPILING)' \
560 +               $(RUNSHARED) $(PYTHON_FOR_BUILD) -E $(srcdir)/setup.py install \
561 +               --prefix=$(prefix) \
562                 --install-scripts=$(BINDIR) \
563                 --install-platlib=$(DESTSHARED) \
564                 --root=/$(DESTDIR)
565 @@ -1054,8 +1090,8 @@
566  
567  # This installs a few of the useful scripts in Tools/scripts
568  scriptsinstall:
569 -       SRCDIR=$(srcdir) $(RUNSHARED) \
570 -       ./$(BUILDPYTHON) $(srcdir)/Tools/scripts/setup.py install \
571 +       $(RUNSHARED) \
572 +       $(PYTHON_FOR_BUILD) $(srcdir)/Tools/scripts/setup.py install \
573         --prefix=$(prefix) \
574         --install-scripts=$(BINDIR) \
575         --root=/$(DESTDIR)
576 @@ -1130,11 +1166,12 @@
577         find . -name '*.gc??' -exec rm -f {} ';'
578  
579  clobber: clean profile-removal
580 -       -rm -f $(BUILDPYTHON) $(PGEN) $(LIBRARY) $(LDLIBRARY) $(DLLLIBRARY) \
581 +       -rm -f $(BUILDPYTHON) $(PGEN_FOR_BUILD) $(LIBRARY) $(LDLIBRARY) $(DLLLIBRARY) \
582                 tags TAGS \
583                 config.cache config.log pyconfig.h Modules/config.c
584         -rm -rf build platform
585         -rm -rf $(PYTHONFRAMEWORKDIR)
586 +       -rm -rf buildpython
587  
588  # Make things extra clean, before making a distribution:
589  # remove all generated files, even Makefile[.pre]