--- Python-2.7.13/configure 2016-12-17 21:05:07.000000000 +0100 +++ Python-2.7.13-modified/configure 2017-08-10 12:59:24.094953614 +0100 @@ -14927,7 +14927,7 @@ $as_echo "$ac_cv_have_long_long_format" >&6; } fi -if test "$ac_cv_have_long_long_format" = yes +if test "$ac_cv_have_long_long_format" != no then $as_echo "#define PY_FORMAT_LONG_LONG \"ll\"" >>confdefs.h --- Python-2.7.13/Makefile.pre.in 2016-12-17 21:05:06.000000000 +0100 +++ Python-2.7.13-modified/Makefile.pre.in 2017-08-11 00:17:32.557907871 +0100 @@ -199,6 +199,7 @@ PYTHON= python$(EXE) BUILDPYTHON= python$(BUILDEXE) +HOSTPYTHON= ./$(BUILDPYTHON) PYTHON_FOR_BUILD=@PYTHON_FOR_BUILD@ _PYTHON_HOST_PLATFORM=@_PYTHON_HOST_PLATFORM@ @@ -246,6 +247,8 @@ # Parser PGEN= Parser/pgen$(EXE) +HOSTPGEN= $(PGEN) + PSRCS= \ Parser/acceler.c \ Parser/grammar1.c \ @@ -314,7 +317,7 @@ OPCODETARGETS_H= \ $(srcdir)/Python/opcode_targets.h - + OPCODETARGETGEN= \ $(srcdir)/Python/makeopcodetargets.py @@ -544,8 +547,8 @@ *) quiet="";; \ esac; \ $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' \ - _TCLTK_INCLUDES='$(TCLTK_INCLUDES)' _TCLTK_LIBS='$(TCLTK_LIBS)' \ - $(PYTHON_FOR_BUILD) $(srcdir)/setup.py $$quiet build + _TCLTK_INCLUDES='$(TCLTK_INCLUDES)' _TCLTK_LIBS='$(TCLTK_LIBS)' PYTHONXCPREFIX='$(DESTDIR)$(prefix)' \ + $(HOSTPYTHON) -E $(srcdir)/setup.py $$quiet build # Build static library # avoid long command lines, same as LIBRARY_OBJS @@ -681,7 +684,7 @@ $(GRAMMAR_H): @GENERATED_COMMENT@ $(GRAMMAR_INPUT) $(PGEN) @$(MKDIR_P) Include - $(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C) + $(HOSTPGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C) $(GRAMMAR_C): @GENERATED_COMMENT@ $(GRAMMAR_H) touch $(GRAMMAR_C) @@ -1120,28 +1123,28 @@ $(INSTALL_DATA) $(srcdir)/Modules/xxmodule.c \ $(DESTDIR)$(LIBDEST)/distutils/tests ; \ fi - PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ - $(PYTHON_FOR_BUILD) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \ + -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ + $(HOSTPYTHON) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \ -d $(LIBDEST) -f \ -x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \ $(DESTDIR)$(LIBDEST) - PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ - $(PYTHON_FOR_BUILD) -Wi -tt -O $(DESTDIR)$(LIBDEST)/compileall.py \ + -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ + $(HOSTPYTHON) -Wi -tt -O $(DESTDIR)$(LIBDEST)/compileall.py \ -d $(LIBDEST) -f \ -x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \ $(DESTDIR)$(LIBDEST) -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ - $(PYTHON_FOR_BUILD) -Wi -t $(DESTDIR)$(LIBDEST)/compileall.py \ + $(HOSTPYTHON) -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 \ + $(HOSTPYTHON) -Wi -t -O $(DESTDIR)$(LIBDEST)/compileall.py \ -d $(LIBDEST)/site-packages -f \ -x badsyntax $(DESTDIR)$(LIBDEST)/site-packages -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ - $(PYTHON_FOR_BUILD) -m lib2to3.pgen2.driver $(DESTDIR)$(LIBDEST)/lib2to3/Grammar.txt + $(HOSTPYTHON) -m lib2to3.pgen2.driver $(DESTDIR)$(LIBDEST)/lib2to3/Grammar.txt -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ - $(PYTHON_FOR_BUILD) -m lib2to3.pgen2.driver $(DESTDIR)$(LIBDEST)/lib2to3/PatternGrammar.txt + $(HOSTPYTHON) -m lib2to3.pgen2.driver $(DESTDIR)$(LIBDEST)/lib2to3/PatternGrammar.txt # Create the PLATDIR source directory, if one wasn't distributed.. $(srcdir)/Lib/$(PLATDIR): @@ -1253,11 +1256,13 @@ # Install the dynamically loadable modules # This goes into $(exec_prefix) sharedinstall: sharedmods - $(RUNSHARED) $(PYTHON_FOR_BUILD) $(srcdir)/setup.py install \ + CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' \ + $(RUNSHARED) $(HOSTPYTHON) $(srcdir)/setup.py install \ + --skip-build \ --prefix=$(prefix) \ - --install-scripts=$(BINDIR) \ - --install-platlib=$(DESTSHARED) \ - --root=$(DESTDIR)/ + --install-scripts=$(DESTDIR)$(BINDIR) \ + --install-platlib=$(DESTDIR)$(DESTSHARED) \ + --root=/ -rm $(DESTDIR)$(DESTSHARED)/_sysconfigdata.py* # Here are a couple of targets for MacOSX again, to install a full --- Python-2.7.13/setup.py 2016-12-17 21:05:07.000000000 +0100 +++ Python-2.7.13-modified/setup.py 2017-08-11 00:05:55.922860254 +0100 @@ -17,7 +17,7 @@ from distutils.command.install_lib import install_lib from distutils.spawn import find_executable -cross_compiling = "_PYTHON_HOST_PLATFORM" in os.environ +cross_compiling = "_PYTHON_HOST_PLATFORM" in os.environ or ('PYTHONXCPREFIX' in os.environ) def get_platform(): # cross build @@ -175,6 +175,7 @@ def __init__(self, dist): build_ext.__init__(self, dist) self.failed = [] + self.cross_compile = os.environ.get('CROSS_COMPILE_TARGET') == 'yes' def build_extensions(self): @@ -310,6 +311,14 @@ (ext.name, sys.exc_info()[1])) self.failed.append(ext.name) return + + # Import check will not work when cross-compiling. + if os.environ.has_key('PYTHONXCPREFIX'): + self.announce( + 'WARNING: skipping import check for cross-compiled: "%s"' % + ext.name) + return + # Workaround for Mac OS X: The Carbon-based modules cannot be # reliably imported into a command-line Python if 'Carbon' in ext.extra_link_args: @@ -341,7 +350,7 @@ self.get_ext_filename(self.get_ext_fullname(ext.name))) # Don't try to load extensions for cross builds - if cross_compiling: + if cross_compiling or self.cross_compile: return try: @@ -455,11 +464,9 @@ def detect_modules(self): # Ensure that /usr/local is always used - if not cross_compiling: + if not cross_compiling or not self.cross_compile: add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib') add_dir_to_list(self.compiler.include_dirs, '/usr/local/include') - if cross_compiling: - self.add_gcc_paths() self.add_multiarch_paths() # Add paths specified in the environment variables LDFLAGS and @@ -496,16 +503,17 @@ for directory in reversed(options.dirs): add_dir_to_list(dir_list, directory) - if os.path.normpath(sys.prefix) != '/usr' \ - and not sysconfig.get_config_var('PYTHONFRAMEWORK'): + #if os.path.normpath(sys.prefix) != '/usr' \ + # and not sysconfig.get_config_var('PYTHONFRAMEWORK') \ + # and not self.cross_compile: # OSX note: Don't add LIBDIR and INCLUDEDIR to building a framework # (PYTHONFRAMEWORK is set) to avoid # linking problems when # building a framework with different architectures than # the one that is currently installed (issue #7473) - add_dir_to_list(self.compiler.library_dirs, - sysconfig.get_config_var("LIBDIR")) - add_dir_to_list(self.compiler.include_dirs, - sysconfig.get_config_var("INCLUDEDIR")) + #add_dir_to_list(self.compiler.library_dirs, + # sysconfig.get_config_var("LIBDIR")) + #add_dir_to_list(self.compiler.include_dirs, + # sysconfig.get_config_var("INCLUDEDIR")) try: have_unicode = unicode @@ -517,7 +525,7 @@ # be assumed that no additional -I,-L directives are needed. inc_dirs = self.compiler.include_dirs[:] lib_dirs = self.compiler.library_dirs[:] - if not cross_compiling: + if not cross_compiling or not self.cross_compile: for d in ( '/usr/include', ): @@ -526,7 +534,14 @@ '/lib64', '/usr/lib64', '/lib', '/usr/lib', ): - add_dir_to_list(lib_dirs, d) + add_dir_to_list(lib_dirs, d) + else: + cflags = os.environ.get('CFLAGS') + if cflags: + inc_dirs += [x[2:] for x in cflags.split() if x.startswith('-I')] + ldflags = os.environ.get('LDFLAGS') + if ldflags: + lib_dirs += [x[2:] for x in ldflags.split() if x.startswith('-L')] exts = [] missing = [] @@ -2048,8 +2063,15 @@ # Pass empty CFLAGS because we'll just append the resulting # CFLAGS to Python's; -g or -O2 is to be avoided. - cmd = "cd %s && env CFLAGS='' '%s/configure' %s" \ - % (ffi_builddir, ffi_srcdir, " ".join(config_args)) + if cross_compiling or self.cross_compile: + cmd = "cd %s && env CFLAGS='' %s/configure --host=%s --build=%s %s" \ + % (ffi_builddir, ffi_srcdir, + os.environ.get('HOSTARCH'), + os.environ.get('BUILDARCH'), + " ".join(config_args)) + else: + cmd = "cd %s && env CFLAGS='' '%s/configure' %s" \ + % (ffi_builddir, ffi_srcdir, " ".join(config_args)) res = os.system(cmd) if res or not os.path.exists(ffi_configfile):