265 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
		
		
			
		
	
	
			265 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
|   | diff -ur Python-2.7.3.orig/configure Python-2.7.3-Source/configure
 | ||
|  | --- Python-2.7.3.orig/configure	2012-04-09 19:07:36.000000000 -0400
 | ||
|  | +++ Python-2.7.3-Source/configure	2012-10-23 14:10:45.305220393 -0400
 | ||
|  | @@ -13697,7 +13697,7 @@
 | ||
|  |    $as_echo_n "(cached) " >&6 | ||
|  |  else | ||
|  |    if test "$cross_compiling" = yes; then : | ||
|  | -  ac_cv_have_long_long_format=no
 | ||
|  | +  ac_cv_have_long_long_format="cross -- assuming yes"
 | ||
|  |  else | ||
|  |    cat confdefs.h - <<_ACEOF >conftest.$ac_ext | ||
|  |  /* end confdefs.h.  */ | ||
|  | @@ -13749,7 +13749,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 | ||
|  | diff -ur Python-2.7.3.orig/Makefile.pre.in Python-2.7.3-Source/Makefile.pre.in
 | ||
|  | --- Python-2.7.3.orig/Makefile.pre.in	2012-04-09 19:07:33.000000000 -0400
 | ||
|  | +++ Python-2.7.3-Source/Makefile.pre.in	2012-10-23 14:10:45.305220393 -0400
 | ||
|  | @@ -182,6 +182,7 @@
 | ||
|  |   | ||
|  |  PYTHON=		python$(EXE) | ||
|  |  BUILDPYTHON=	python$(BUILDEXE) | ||
|  | +HOSTPYTHON=     ./$(BUILDPYTHON)
 | ||
|  |   | ||
|  |  # 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 | ||
|  | @@ -215,6 +216,8 @@
 | ||
|  |  # Parser | ||
|  |  PGEN=		Parser/pgen$(EXE) | ||
|  |   | ||
|  | +HOSTPGEN=   $(PGEN)
 | ||
|  | +
 | ||
|  |  POBJS=		\ | ||
|  |  		Parser/acceler.o \ | ||
|  |  		Parser/grammar1.o \ | ||
|  | @@ -408,8 +411,8 @@
 | ||
|  |  # 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;; \
 | ||
|  | +	*s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' PYTHONXCPREFIX='$(DESTDIR)$(prefix)' $(HOSTPYTHON) -E $(srcdir)/setup.py -q build;; \
 | ||
|  | +	*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' PYTHONXCPREFIX='$(DESTDIR)$(prefix)' $(HOSTPYTHON) -E $(srcdir)/setup.py build;; \
 | ||
|  |  	esac | ||
|  |   | ||
|  |  # Build static library | ||
|  | @@ -543,7 +546,7 @@
 | ||
|  |  $(GRAMMAR_H) $(GRAMMAR_C): Parser/pgen.stamp | ||
|  |  Parser/pgen.stamp: $(PGEN) $(GRAMMAR_INPUT) | ||
|  |  		-@$(INSTALL) -d Include | ||
|  | -		$(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
 | ||
|  | +		-$(HOSTPGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
 | ||
|  |  		-touch Parser/pgen.stamp | ||
|  |   | ||
|  |  $(PGEN):	$(PGENOBJS) | ||
|  | @@ -938,26 +941,26 @@
 | ||
|  |  		$(INSTALL_DATA) $(srcdir)/Modules/xxmodule.c \ | ||
|  |  			$(DESTDIR)$(LIBDEST)/distutils/tests ; \ | ||
|  |  	fi | ||
|  | -	PYTHONPATH=$(DESTDIR)$(LIBDEST)  $(RUNSHARED) \
 | ||
|  | -		./$(BUILDPYTHON) -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) \
 | ||
|  | -		./$(BUILDPYTHON) -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) \ | ||
|  | -		./$(BUILDPYTHON) -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) \ | ||
|  | -		./$(BUILDPYTHON) -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) \ | ||
|  | -		./$(BUILDPYTHON) -Wi -t -c "import lib2to3.pygram, lib2to3.patcomp;lib2to3.patcomp.PatternCompiler()"
 | ||
|  | +		./$(HOSTPYTHON) -Wi -t -c "import lib2to3.pygram, lib2to3.patcomp;lib2to3.patcomp.PatternCompiler()"
 | ||
|  |   | ||
|  |  # Create the PLATDIR source directory, if one wasn't distributed.. | ||
|  |  $(srcdir)/Lib/$(PLATDIR): | ||
|  | @@ -1062,7 +1065,9 @@
 | ||
|  |  # Install the dynamically loadable modules | ||
|  |  # This goes into $(exec_prefix) | ||
|  |  sharedinstall: sharedmods | ||
|  | -	$(RUNSHARED) ./$(BUILDPYTHON) -E $(srcdir)/setup.py install \
 | ||
|  | +	CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' \
 | ||
|  | +	$(RUNSHARED) $(HOSTPYTHON) -E $(srcdir)/setup.py install \
 | ||
|  | +		--skip-build \
 | ||
|  |  	   	--prefix=$(prefix) \ | ||
|  |  		--install-scripts=$(BINDIR) \ | ||
|  |  		--install-platlib=$(DESTSHARED) \ | ||
|  | diff -ur Python-2.7.3.orig/setup.py Python-2.7.3-Source/setup.py
 | ||
|  | --- Python-2.7.3.orig/setup.py	2012-04-09 19:07:36.000000000 -0400
 | ||
|  | +++ Python-2.7.3-Source/setup.py	2012-10-23 14:10:56.085220237 -0400
 | ||
|  | @@ -145,6 +145,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): | ||
|  |   | ||
|  | @@ -278,6 +279,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: | ||
|  | @@ -369,9 +378,10 @@
 | ||
|  |   | ||
|  |      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')
 | ||
|  | -        self.add_multiarch_paths()
 | ||
|  | +        if 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')
 | ||
|  | +            self.add_multiarch_paths()
 | ||
|  |   | ||
|  |          # Add paths specified in the environment variables LDFLAGS and | ||
|  |          # CPPFLAGS for header and library files. | ||
|  | @@ -408,7 +418,8 @@
 | ||
|  |                          add_dir_to_list(dir_list, directory) | ||
|  |   | ||
|  |          if os.path.normpath(sys.prefix) != '/usr' \ | ||
|  | -                and not sysconfig.get_config_var('PYTHONFRAMEWORK'):
 | ||
|  | +                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 | ||
|  | @@ -426,11 +437,23 @@
 | ||
|  |          # 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 = self.compiler.library_dirs
 | ||
|  | +        inc_dirs = self.compiler.include_dirs
 | ||
|  | +        if not self.cross_compile:
 | ||
|  | +            lib_dirs += [
 | ||
|  | +                '/lib64', '/usr/lib64',
 | ||
|  | +                '/lib', '/usr/lib',
 | ||
|  | +                ]
 | ||
|  | +            inc_dirs += ['/usr/include']
 | ||
|  | +        else:
 | ||
|  | +            # The common install prefix of 3rd party libraries used during
 | ||
|  | +            # cross compilation
 | ||
|  | +            mydir = os.environ.get('PYTHON_XCOMPILE_DEPENDENCIES_PREFIX')
 | ||
|  | +            if mydir:
 | ||
|  | +                inc_dirs += [mydir + '/include' ]
 | ||
|  | +                inc_dirs += [mydir + '/lib/libffi-3.0.10/include']
 | ||
|  | +                lib_dirs += [mydir + '/lib' ]
 | ||
|  | +
 | ||
|  |          exts = [] | ||
|  |          missing = [] | ||
|  |   | ||
|  | @@ -1004,13 +1027,24 @@
 | ||
|  |          # We hunt for #define SQLITE_VERSION "n.n.n" | ||
|  |          # We need to find >= sqlite version 3.0.8 | ||
|  |          sqlite_incdir = sqlite_libdir = None | ||
|  | -        sqlite_inc_paths = [ '/usr/include',
 | ||
|  | -                             '/usr/include/sqlite',
 | ||
|  | -                             '/usr/include/sqlite3',
 | ||
|  | -                             '/usr/local/include',
 | ||
|  | -                             '/usr/local/include/sqlite',
 | ||
|  | -                             '/usr/local/include/sqlite3',
 | ||
|  | -                           ]
 | ||
|  | +
 | ||
|  | +        if not self.cross_compile:
 | ||
|  | +            sqlite_inc_paths = [ '/usr/include',
 | ||
|  | +                                 '/usr/include/sqlite',
 | ||
|  | +                                 '/usr/include/sqlite3',
 | ||
|  | +                                 '/usr/local/include',
 | ||
|  | +                                 '/usr/local/include/sqlite',
 | ||
|  | +                                 '/usr/local/include/sqlite3',
 | ||
|  | +                                ]
 | ||
|  | +        else:
 | ||
|  | +            # The common install prefix of 3rd party headers used during
 | ||
|  | +            # cross compilation
 | ||
|  | +            mydir = os.environ.get('PYTHON_XCOMPILE_DEPENDENCIES_PREFIX')
 | ||
|  | +            if mydir:
 | ||
|  | +                sqlite_inc_paths = [mydir + '/include' ]
 | ||
|  | +            else:
 | ||
|  | +                sqlite_inc_paths = []
 | ||
|  | +
 | ||
|  |          MIN_SQLITE_VERSION_NUMBER = (3, 0, 8) | ||
|  |          MIN_SQLITE_VERSION = ".".join([str(x) | ||
|  |                                      for x in MIN_SQLITE_VERSION_NUMBER]) | ||
|  | @@ -1050,12 +1084,22 @@
 | ||
|  |                      print "sqlite: %s had no SQLITE_VERSION"%(f,) | ||
|  |   | ||
|  |          if sqlite_incdir: | ||
|  | -            sqlite_dirs_to_check = [
 | ||
|  | -                os.path.join(sqlite_incdir, '..', 'lib64'),
 | ||
|  | -                os.path.join(sqlite_incdir, '..', 'lib'),
 | ||
|  | -                os.path.join(sqlite_incdir, '..', '..', 'lib64'),
 | ||
|  | -                os.path.join(sqlite_incdir, '..', '..', 'lib'),
 | ||
|  | -            ]
 | ||
|  | +            if not self.cross_compile:
 | ||
|  | +                sqlite_dirs_to_check = [
 | ||
|  | +                    os.path.join(sqlite_incdir, '..', 'lib64'),
 | ||
|  | +                    os.path.join(sqlite_incdir, '..', 'lib'),
 | ||
|  | +                    os.path.join(sqlite_incdir, '..', '..', 'lib64'),
 | ||
|  | +                    os.path.join(sqlite_incdir, '..', '..', 'lib'),
 | ||
|  | +                ]
 | ||
|  | +            else:
 | ||
|  | +                # The common install prefix of 3rd party headers used during
 | ||
|  | +                # cross compilation
 | ||
|  | +                mydir = os.environ.get('PYTHON_XCOMPILE_DEPENDENCIES_PREFIX')
 | ||
|  | +                if mydir:
 | ||
|  | +                    sqlite_dirs_to_check = [mydir + '/lib' ]
 | ||
|  | +                else:
 | ||
|  | +                    sqlite_dirs_to_check = []
 | ||
|  | +
 | ||
|  |              sqlite_libfile = self.compiler.find_library_file( | ||
|  |                                  sqlite_dirs_to_check + lib_dirs, 'sqlite3') | ||
|  |              if sqlite_libfile: | ||
|  | @@ -1864,8 +1908,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 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): |