2 ===================================================================
3 --- configure.in (revision 67686)
4 +++ configure.in (working copy)
6 AC_CONFIG_SRCDIR([Include/object.h])
7 AC_CONFIG_HEADER(pyconfig.h)
9 +# find compiler while respecting --host setting
11 +AC_CHECK_TOOLS(CC,gcc cc)
12 +AC_CHECK_TOOLS(CXX,g++ c++)
14 dnl This is for stuff that absolutely must end up in pyconfig.h.
15 dnl Please use pyport.h instead, if possible.
18 # Set name for machine-dependent library files
20 AC_MSG_CHECKING(MACHDEP)
21 -if test -z "$MACHDEP"
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
30 ac_sys_release=`uname -r`
33 + m=`$CC -dumpmachine`
34 + changequote(<<, >>)#dnl
35 + ac_sys_system=`expr "$m" : "[^-]*-\([^-]*\)"`
36 + changequote([, ])#dnl
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 `;;
49 ac_md_system=`echo $ac_sys_system |
50 tr -d '[/ ]' | tr '[[A-Z]]' '[[a-z]]'`
51 ac_md_release=`echo $ac_sys_release |
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]) ;;
61 if test "$CXX" = "notfound"
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"
84 rmdir CaseSensitiveTestDir
88 AC_MSG_RESULT($LDLIBRARY)
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)
98 AC_CHECK_PROG(SVNVERSION, svnversion, found, not-found)
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)
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
111 AC_MSG_CHECKING(for chflags)
114 #include <sys/stat.h>
116 int main(int argc, char*argv[])
117 @@ -2482,13 +2507,14 @@
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.)
128 AC_MSG_CHECKING(for lchflags)
131 #include <sys/stat.h>
133 int main(int argc, char*argv[])
134 @@ -2497,7 +2523,8 @@
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.)
144 @@ -3523,30 +3550,19 @@
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.])],
154 -if test -r /dev/ptmx
157 - AC_DEFINE(HAVE_DEV_PTMX, 1,
158 - [Define if we have /dev/ptmx.])
162 +AC_CHECK_FILE(/dev/ptc,
163 + [AC_DEFINE(HAVE_DEV_PTC, 1,
164 + [Define if we have /dev/ptc.])],
167 -AC_MSG_CHECKING(for /dev/ptc)
172 - AC_DEFINE(HAVE_DEV_PTC, 1,
173 - [Define if we have /dev/ptc.])
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>
185 @@ -3582,7 +3598,7 @@
188 AC_DEFINE(PY_FORMAT_SIZE_T, "z", [Define to printf format modifier for Py_ssize_t])],
190 + AC_MSG_RESULT(no)))
192 AC_CHECK_TYPE(socklen_t,,
193 AC_DEFINE(socklen_t,int,
194 @@ -3633,6 +3649,63 @@
199 +AC_SUBST(cross_compiling)
201 +if test "$cross_compiling" = "yes"; then
202 + AC_MSG_CHECKING(cc for build)
203 + CC_FOR_BUILD="${CC_FOR_BUILD-cc}"
205 + CC_FOR_BUILD="${CC_FOR_BUILD-$CC}"
208 +if test "$cross_compiling" = "yes"; then
209 + AC_MSG_RESULT($CC_FOR_BUILD)
212 +AC_ARG_VAR(CC_FOR_BUILD,[build system C compiler (default: cc)])
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`
219 + PYTHON_FOR_BUILD='./$(BUILDPYTHON)'
222 +if test "$cross_compiling" = "yes"; then
223 + AC_MSG_RESULT($PYTHON_FOR_BUILD)
225 +AC_ARG_VAR(PYTHON_FOR_BUILD,[build system python (default: python)])
226 +AC_SUBST(PYTHON_FOR_BUILD)
228 +if test "$cross_compiling" = "yes"; then
229 + CFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD-}
230 + CPPFLAGS_FOR_BUILD=${CPPFLAGS_FOR_BUILD- -I.}
232 + if test "$case_sensitive" = "yes"
236 + EXEEXT_FOR_BUILD=.exe
238 + LDFLAGS_FOR_BUILD=${LDFLAGS_FOR_BUILD-}
239 + LIBS_FOR_BUILD=${LIBS_FOR_BUILD-}
241 + RUNSHARED="MACHDEP=$ac_sys_system SRCDIR=$srcdir SO=${SO}"
244 + EXEEXT_FOR_BUILD=$BUILDEXEEXT
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)
255 # generate output files
256 AC_CONFIG_FILES(Makefile.pre Modules/Setup.config)
259 ===================================================================
260 --- setup.py (revision 67686)
261 +++ setup.py (working copy)
263 from distutils.command.install_lib import install_lib
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()
271 +if os.environ.get('CROSS_COMPILING') == 'yes':
272 + sysconfig.get_config_vars()
273 + sysconfig._config_vars.update (os.environ)
275 + sysconfig.get_config_vars()
276 + sysconfig._config_vars['srcdir'] = os.environ['srcdir']
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'
282 self.announce('WARNING: skipping import check for Cygwin-based "%s"'
285 + if os.environ.get('CROSS_COMPILING') == 'yes':
286 + self.announce('WARNING: skipping import check for cross compiled "%s"'
289 ext_filename = os.path.join(
291 self.get_ext_filename(self.get_ext_fullname(ext.name)))
292 @@ -301,16 +314,21 @@
293 self.failed.append(ext.name)
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
301 + if os.environ.get('CROSS_COMPILING') == 'yes':
302 + p = os.environ.get('MACHDEP').lower()
304 + for platform in ['cygwin', 'mingw', 'beos', 'darwin', 'atheos', 'osf1']:
305 + if p.startswith(platform):
307 - return sys.platform
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')
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',
328 - inc_dirs = self.compiler.include_dirs + ['/usr/include']
331 + if os.environ.get('CROSS_COMPILING') != 'yes':
332 + lib_dirs = self.compiler.library_dirs + [
333 + '/lib64', '/usr/lib64',
334 + '/lib', '/usr/lib',
336 + inc_dirs = self.compiler.include_dirs + ['/usr/include']
342 MIN_SQLITE_VERSION = ".".join([str(x)
343 for x in MIN_SQLITE_VERSION_NUMBER])
345 + if os.environ.get('CROSS_COMPILING') == 'yes':
346 + sqlite_inc_paths = []
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)
364 # C flags used for building the interpreter object files
365 PY_CFLAGS= $(CFLAGS) $(CPPFLAGS) $(CFLAGSFORSHARED) -DPy_BUILD_CORE
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@
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@
378 # Machine-dependent subdirectories
385 -BUILDPYTHON= python$(BUILDEXE)
386 +BUILDPYTHON= python$(EXE)
387 +PYTHON_FOR_BUILD= @PYTHON_FOR_BUILD@
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
393 ##########################################################################
395 -PGEN= Parser/pgen$(EXE)
396 +PGEN_FOR_BUILD= Parser/pgen$(EXEEXT_FOR_BUILD)
400 @@ -220,19 +232,33 @@
402 PARSER_OBJS= $(POBJS) Parser/myreadline.o Parser/tokenizer.o
405 - Objects/obmalloc.o \
406 - Python/mysnprintf.o \
407 - Parser/tokenizer_pgen.o \
408 - Parser/printgrammar.o \
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)
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)
434 -PGENOBJS= $(PGENMAIN) $(POBJS) $(PGOBJS)
435 +PGENOBJS= $(POBJS_FOR_BUILD) $(PGOBJS_FOR_BUILD)
438 ##########################################################################
440 AST_H_DIR= $(srcdir)/Include
441 @@ -385,15 +411,17 @@
443 $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST)
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
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;; \
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
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)
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)
480 Parser/grammar.o: $(srcdir)/Parser/grammar.c \
481 $(srcdir)/Include/token.h \
485 ############################################################################
486 +# Cross compile rules
488 +# .x is a native object file during cross-compile.
491 + $(CC_FOR_BUILD) -c $(CPPFLAGS_FOR_BUILD) $(CFLAGS_FOR_BUILD) -o $@ $<
493 +############################################################################
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
504 -find $(srcdir)/Lib -name '*.py[co]' -print | xargs rm -f
505 -$(TESTPYTHON) $(TESTPROG) $(TESTOPTS)
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
514 # Like testall, but with a single pass only
516 setuptools setuptools/command setuptools/tests setuptools.egg-info \
517 multiprocessing multiprocessing/dummy \
519 -libinstall: build_all $(srcdir)/Lib/$(PLATDIR)
520 +libinstall: $(srcdir)/Lib/$(PLATDIR) $(PYTHON_FOR_BUILD)
521 @for i in $(SCRIPTDIR) $(LIBDEST); \
523 if test ! -d $(DESTDIR)$$i; then \
524 @@ -873,23 +908,23 @@
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 \
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 \
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()"
551 # Create the PLATDIR source directory, if one wasn't distributed..
552 $(srcdir)/Lib/$(PLATDIR):
554 # Install the dynamically loadable modules
555 # This goes into $(exec_prefix)
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) \
565 @@ -1054,8 +1090,8 @@
567 # This installs a few of the useful scripts in Tools/scripts
569 - SRCDIR=$(srcdir) $(RUNSHARED) \
570 - ./$(BUILDPYTHON) $(srcdir)/Tools/scripts/setup.py install \
572 + $(PYTHON_FOR_BUILD) $(srcdir)/Tools/scripts/setup.py install \
574 --install-scripts=$(BINDIR) \
576 @@ -1130,11 +1166,12 @@
577 find . -name '*.gc??' -exec rm -f {} ';'
579 clobber: clean profile-removal
580 - -rm -f $(BUILDPYTHON) $(PGEN) $(LIBRARY) $(LDLIBRARY) $(DLLLIBRARY) \
581 + -rm -f $(BUILDPYTHON) $(PGEN_FOR_BUILD) $(LIBRARY) $(LDLIBRARY) $(DLLLIBRARY) \
583 config.cache config.log pyconfig.h Modules/config.c
584 -rm -rf build platform
585 -rm -rf $(PYTHONFRAMEWORKDIR)
586 + -rm -rf buildpython
588 # Make things extra clean, before making a distribution:
589 # remove all generated files, even Makefile[.pre]