Great work, thanks! Acked-by: Michael 'Mickey' Lauer <[email protected]>
Am 28.01.2010 um 23:51 schrieb Martin Jansa: > Signed-off-by: Martin Jansa <[email protected]> > --- > .../00-fix-bindir-libdir-for-cross.patch | 20 +++ > .../01-use-proper-tools-for-cross-build.patch | 116 ++++++++++++++++ > .../python-2.6.4/02-remove-test-for-cross.patch | 94 +++++++++++++ > .../python-2.6.4/03-fix-tkinter-detection.patch | 40 ++++++ > .../python-2.6.4/04-default-is-optimized.patch | 52 ++++++++ > .../05-enable-ctypes-cross-build.patch | 28 ++++ > .../python-2.6.4/99-ignore-optimization-flag.patch | 19 +++ > recipes/python/python-2.6.4/sitecustomize.py | 45 +++++++ > .../00-fix-bindir-libdir-for-cross.patch | 20 +++ > .../04-default-is-optimized.patch | 18 +++ > .../10-distutils-fix-swig-parameter.patch | 16 +++ > .../11-distutils-never-modify-shebang-line.patch | 18 +++ > ...2-distutils-prefix-is-inside-staging-area.patch | 60 +++++++++ > recipes/python/python-native-2.6.4/debug.patch | 27 ++++ > .../python/python-native-2.6.4/nohostlibs.patch | 53 ++++++++ > .../python/python-native-2.6.4/sitecustomize.py | 45 +++++++ > recipes/python/python-native_2.6.4.bb | 33 +++++ > recipes/python/python_2.6.4.bb | 139 ++++++++++++++++++++ > 18 files changed, 843 insertions(+), 0 deletions(-) > create mode 100644 > recipes/python/python-2.6.4/00-fix-bindir-libdir-for-cross.patch > create mode 100644 > recipes/python/python-2.6.4/01-use-proper-tools-for-cross-build.patch > create mode 100644 recipes/python/python-2.6.4/02-remove-test-for-cross.patch > create mode 100644 recipes/python/python-2.6.4/03-fix-tkinter-detection.patch > create mode 100644 recipes/python/python-2.6.4/04-default-is-optimized.patch > create mode 100644 > recipes/python/python-2.6.4/05-enable-ctypes-cross-build.patch > create mode 100644 > recipes/python/python-2.6.4/99-ignore-optimization-flag.patch > create mode 100644 recipes/python/python-2.6.4/sitecustomize.py > create mode 100644 > recipes/python/python-native-2.6.4/00-fix-bindir-libdir-for-cross.patch > create mode 100644 > recipes/python/python-native-2.6.4/04-default-is-optimized.patch > create mode 100644 > recipes/python/python-native-2.6.4/10-distutils-fix-swig-parameter.patch > create mode 100644 > recipes/python/python-native-2.6.4/11-distutils-never-modify-shebang-line.patch > create mode 100644 > recipes/python/python-native-2.6.4/12-distutils-prefix-is-inside-staging-area.patch > create mode 100644 recipes/python/python-native-2.6.4/debug.patch > create mode 100644 recipes/python/python-native-2.6.4/nohostlibs.patch > create mode 100644 recipes/python/python-native-2.6.4/sitecustomize.py > create mode 100644 recipes/python/python-native_2.6.4.bb > create mode 100644 recipes/python/python_2.6.4.bb > > diff --git a/recipes/python/python-2.6.4/00-fix-bindir-libdir-for-cross.patch > b/recipes/python/python-2.6.4/00-fix-bindir-libdir-for-cross.patch > new file mode 100644 > index 0000000..2559e3a > --- /dev/null > +++ b/recipes/python/python-2.6.4/00-fix-bindir-libdir-for-cross.patch > @@ -0,0 +1,20 @@ > +# $(exec_prefix) points to the wrong directory, when installing > +# a cross-build. @bindir@ and @libdir@ works better and doesn't > +# affect the native build. > +# Signed-Off: Michael 'Mickey' Lauer <[email protected]> > + > +Index: Python-2.6.1/Makefile.pre.in > +=================================================================== > +--- Python-2.6.1.orig/Makefile.pre.in > ++++ Python-2.6.1/Makefile.pre.in > +@@ -86,8 +86,8 @@ exec_prefix= @exec_prefix@ > + datarootdir= @datarootdir@ > + > + # Expanded directories > +-BINDIR= $(exec_prefix)/bin > +-LIBDIR= $(exec_prefix)/lib > ++BINDIR= @bindir@ > ++LIBDIR= @libdir@ > + MANDIR= @mandir@ > + INCLUDEDIR= @includedir@ > + CONFINCLUDEDIR= $(exec_prefix)/include > diff --git > a/recipes/python/python-2.6.4/01-use-proper-tools-for-cross-build.patch > b/recipes/python/python-2.6.4/01-use-proper-tools-for-cross-build.patch > new file mode 100644 > index 0000000..e89faa4 > --- /dev/null > +++ b/recipes/python/python-2.6.4/01-use-proper-tools-for-cross-build.patch > @@ -0,0 +1,116 @@ > +# We need to ensure our host tools get run during build, not the freshly > +# built cross-tools (this will not work), so we introduce HOSTPYTHON and > HOSTPGEN. > +# Signed-Off: Michael 'Mickey' Lauer <[email protected]> > + > +Index: Python-2.6.1/Makefile.pre.in > +=================================================================== > +--- Python-2.6.1.orig/Makefile.pre.in > ++++ Python-2.6.1/Makefile.pre.in > +@@ -175,6 +175,7 @@ UNICODE_OBJS= @UNICODE_OBJS@ > + > + 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 > +@@ -205,7 +206,7 @@ GRAMMAR_INPUT= $(srcdir)/Grammar/Grammar > + ########################################################################## > + # Parser > + PGEN= Parser/pgen$(EXE) > +- > ++HOSTPGEN= $(PGEN)$(EXE) > + POBJS= \ > + Parser/acceler.o \ > + Parser/grammar1.o \ > +@@ -394,8 +395,8 @@ platform: $(BUILDPYTHON) > + # 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)' > $(HOSTPYTHON) -E $(srcdir)/setup.py -q build;; \ > ++ *) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' > $(HOSTPYTHON) -E $(srcdir)/setup.py build;; \ > + esac > + > + # Build static library > +@@ -513,7 +514,7 @@ Modules/python.o: $(srcdir)/Modules/pyth > + > + $(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT) > + -...@$(INSTALL) -d Include > +- -$(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C) > ++ -$(HOSTPGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C) > + > + $(PGEN): $(PGENOBJS) > + $(CC) $(OPT) $(LDFLAGS) $(PGENOBJS) $(LIBS) -o $(PGEN) > +@@ -879,23 +880,23 @@ libinstall: build_all $(srcdir)/Lib/$(PL > + done > + $(INSTALL_DATA) $(srcdir)/LICENSE $(DESTDIR)$(LIBDEST)/LICENSE.txt > + PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ > +- ./$(BUILDPYTHON) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \ > ++ $(HOSTPYTHON) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \ > + -d $(LIBDEST) -f \ > + -x 'bad_coding|badsyntax|site-packages' $(DESTDIR)$(LIBDEST) > + PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ > +- ./$(BUILDPYTHON) -Wi -tt -O $(DESTDIR)$(LIBDEST)/compileall.py \ > ++ $(HOSTPYTHON) -Wi -tt -O $(DESTDIR)$(LIBDEST)/compileall.py \ > + -d $(LIBDEST) -f \ > + -x 'bad_coding|badsyntax|site-packages' $(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): > +@@ -993,7 +994,7 @@ libainstall: all > + # Install the dynamically loadable modules > + # This goes into $(exec_prefix) > + sharedinstall: > +- $(RUNSHARED) ./$(BUILDPYTHON) -E $(srcdir)/setup.py install \ > ++ $(RUNSHARED) $(HOSTPYTHON) -E $(srcdir)/setup.py install \ > + --prefix=$(prefix) \ > + --install-scripts=$(BINDIR) \ > + --install-platlib=$(DESTSHARED) \ > +Index: Python-2.6.1/setup.py > +=================================================================== > +--- Python-2.6.1.orig/setup.py > ++++ Python-2.6.1/setup.py > +@@ -276,6 +276,7 @@ class PyBuildExt(build_ext): > + self.failed.append(ext.name) > + self.announce('*** WARNING: renaming "%s" since importing it' > + ' failed: %s' % (ext.name, why), level=3) > ++ return > + assert not self.inplace > + basename, tail = os.path.splitext(ext_filename) > + newname = basename + "_failed" + tail > +@@ -310,8 +311,8 @@ class PyBuildExt(build_ext): > + > + 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') > ++ # 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. > +@@ -410,6 +411,9 @@ class PyBuildExt(build_ext): > + > + # XXX Omitted modules: gl, pure, dl, SGI-specific modules > + > ++ lib_dirs = [ os.getenv( "STAGING_LIBDIR" ) ] > ++ inc_dirs = [ os.getenv( "STAGING_INCDIR" ) ] > ++ > + # > + # The following modules are all pretty straightforward, and compile > + # on pretty much any POSIXish platform. > diff --git a/recipes/python/python-2.6.4/02-remove-test-for-cross.patch > b/recipes/python/python-2.6.4/02-remove-test-for-cross.patch > new file mode 100644 > index 0000000..48386ea > --- /dev/null > +++ b/recipes/python/python-2.6.4/02-remove-test-for-cross.patch > @@ -0,0 +1,94 @@ > +# OpenEmbedded prepopulates the autotools site cache, so if this > +# would be using AC_TRY_CACHE, we could patch it in a more sane way > +# Alas, I don't have enough autotalent to do that. > +# > +# Signed-Off: Michael 'Mickey' Lauer <[email protected]> > +Index: Python-2.6.1/configure.in > +=================================================================== > +--- Python-2.6.1.orig/configure.in > ++++ Python-2.6.1/configure.in > +@@ -2556,38 +2556,6 @@ AC_CHECK_LIB(c, inet_aton, [$ac_cv_prog_ > + AC_CHECK_LIB(resolv, inet_aton) > + ) > + > +-# On Tru64, chflags seems to be present, but calling it will > +-# exit Python > +-AC_MSG_CHECKING(for chflags) > +-AC_TRY_RUN([ > +-#include <sys/stat.h> > +-#include <unistd.h> > +-int main(int argc, char*argv[]) > +-{ > +- if(chflags(argv[0], 0) != 0) > +- return 1; > +- return 0; > +-} > +-],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([ > +-#include <sys/stat.h> > +-#include <unistd.h> > +-int main(int argc, char*argv[]) > +-{ > +- if(lchflags(argv[0], 0) != 0) > +- return 1; > +- return 0; > +-} > +-],AC_DEFINE(HAVE_LCHFLAGS, 1, Define to 1 if you have the `lchflags' > function.) > +- AC_MSG_RESULT(yes), > +- AC_MSG_RESULT(no) > +-) > +- > + dnl Check if system zlib has *Copy() functions > + dnl > + dnl On MacOSX the linker will search for dylibs on the entire linker path > +@@ -3649,45 +3617,6 @@ else > + AC_MSG_RESULT(no) > + fi > + > +-AC_MSG_CHECKING(for %zd printf() format support) > +-AC_TRY_RUN([#include <stdio.h> > +-#include <stddef.h> > +-#include <string.h> > +- > +-#ifdef HAVE_SYS_TYPES_H > +-#include <sys/types.h> > +-#endif > +- > +-#ifdef HAVE_SSIZE_T > +-typedef ssize_t Py_ssize_t; > +-#elif SIZEOF_VOID_P == SIZEOF_LONG > +-typedef long Py_ssize_t; > +-#else > +-typedef int Py_ssize_t; > +-#endif > +- > +-int main() > +-{ > +- char buffer[256]; > +- > +- if(sprintf(buffer, "%zd", (size_t)123) < 0) > +- return 1; > +- > +- if (strcmp(buffer, "123")) > +- return 1; > +- > +- if (sprintf(buffer, "%zd", (Py_ssize_t)-123) < 0) > +- return 1; > +- > +- if (strcmp(buffer, "-123")) > +- return 1; > +- > +- return 0; > +-}], > +-[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_CHECK_TYPE(socklen_t,, > + AC_DEFINE(socklen_t,int, > + Define to `int' if <sys/socket.h> does not define.),[ > diff --git a/recipes/python/python-2.6.4/03-fix-tkinter-detection.patch > b/recipes/python/python-2.6.4/03-fix-tkinter-detection.patch > new file mode 100644 > index 0000000..a1a385a > --- /dev/null > +++ b/recipes/python/python-2.6.4/03-fix-tkinter-detection.patch > @@ -0,0 +1,40 @@ > +# We need to supply STAGING_INCDIR here, otherwise the Tk headers > +# will not be found. > +# Signed-Off: Michael 'Mickey' Lauer <[email protected]> > + > +Index: Python-2.6.1/setup.py > +=================================================================== > +--- Python-2.6.1.orig/setup.py > ++++ Python-2.6.1/setup.py > +@@ -1543,7 +1543,7 @@ class PyBuildExt(build_ext): > + dotversion = dotversion[:-1] + '.' + dotversion[-1] > + tcl_include_sub = [] > + tk_include_sub = [] > +- for dir in inc_dirs: > ++ for dir in [os.getenv("STAGING_INCDIR")]: > + tcl_include_sub += [dir + os.sep + "tcl" + dotversion] > + tk_include_sub += [dir + os.sep + "tk" + dotversion] > + tk_include_sub += tcl_include_sub > +@@ -1562,22 +1562,6 @@ class PyBuildExt(build_ext): > + if dir not in include_dirs: > + include_dirs.append(dir) > + > +- # Check for various platform-specific directories > +- if platform == 'sunos5': > +- include_dirs.append('/usr/openwin/include') > +- added_lib_dirs.append('/usr/openwin/lib') > +- elif os.path.exists('/usr/X11R6/include'): > +- include_dirs.append('/usr/X11R6/include') > +- added_lib_dirs.append('/usr/X11R6/lib64') > +- added_lib_dirs.append('/usr/X11R6/lib') > +- elif os.path.exists('/usr/X11R5/include'): > +- include_dirs.append('/usr/X11R5/include') > +- added_lib_dirs.append('/usr/X11R5/lib') > +- else: > +- # Assume default location for X11 > +- include_dirs.append('/usr/X11/include') > +- added_lib_dirs.append('/usr/X11/lib') > +- > + # If Cygwin, then verify that X is installed before proceeding > + if platform == 'cygwin': > + x11_inc = find_file('X11/Xlib.h', [], include_dirs) > diff --git a/recipes/python/python-2.6.4/04-default-is-optimized.patch > b/recipes/python/python-2.6.4/04-default-is-optimized.patch > new file mode 100644 > index 0000000..805f4f6 > --- /dev/null > +++ b/recipes/python/python-2.6.4/04-default-is-optimized.patch > @@ -0,0 +1,52 @@ > +# when compiling for an embedded system, we need every bit of > +# performance we can get. default to optimized with the option > +# of opt-out. > +# Signed-Off: Michael 'Mickey' Lauer <[email protected]> > + > +Index: Python-2.6.1/Python/compile.c > +=================================================================== > +--- Python-2.6.1.orig/Python/compile.c > ++++ Python-2.6.1/Python/compile.c > +@@ -32,7 +32,7 @@ > + #include "symtable.h" > + #include "opcode.h" > + > +-int Py_OptimizeFlag = 0; > ++int Py_OptimizeFlag = 1; > + > + #define DEFAULT_BLOCK_SIZE 16 > + #define DEFAULT_BLOCKS 8 > +Index: Python-2.6.1/Modules/main.c > +=================================================================== > +--- Python-2.6.1.orig/Modules/main.c > ++++ Python-2.6.1/Modules/main.c > +@@ -40,7 +40,7 @@ static char **orig_argv; > + static int orig_argc; > + > + /* command line options */ > +-#define BASE_OPTS "3bBc:dEhiJm:OQ:sStuUvVW:xX?" > ++#define BASE_OPTS "3bBc:dEhiJm:NOQ:sStuUvVW:xX?" > + > + #ifndef RISCOS > + #define PROGRAM_OPTS BASE_OPTS > +@@ -69,8 +69,7 @@ Options and arguments (and corresponding > + static char *usage_2 = "\ > + if stdin does not appear to be a terminal; also PYTHONINSPECT=x\n\ > + -m mod : run library module as a script (terminates option list)\n\ > +--O : optimize generated bytecode slightly; also PYTHONOPTIMIZE=x\n\ > +--OO : remove doc-strings in addition to the -O optimizations\n\ > ++-N : do NOT optimize generated bytecode\n\ > + -Q arg : division options: -Qold (default), -Qwarn, -Qwarnall, -Qnew\n\ > + -s : don't add user site directory to sys.path; also PYTHONNOUSERSITE\n\ > + -S : don't imply 'import site' on initialization\n\ > +@@ -353,8 +352,8 @@ Py_Main(int argc, char **argv) > + > + /* case 'J': reserved for Jython */ > + > +- case 'O': > +- Py_OptimizeFlag++; > ++ case 'N': > ++ Py_OptimizeFlag=0; > + break; > + > + case 'B': > diff --git a/recipes/python/python-2.6.4/05-enable-ctypes-cross-build.patch > b/recipes/python/python-2.6.4/05-enable-ctypes-cross-build.patch > new file mode 100644 > index 0000000..58b8078 > --- /dev/null > +++ b/recipes/python/python-2.6.4/05-enable-ctypes-cross-build.patch > @@ -0,0 +1,28 @@ > +# CTypes need to know the actual host we are building on. > +# Signed-Off: Michael Dietrich <[email protected]> > + > +Index: Python-2.6.1/setup.py > +=================================================================== > +--- Python-2.6.1.orig/setup.py > ++++ Python-2.6.1/setup.py > +@@ -1656,16 +1656,16 @@ class PyBuildExt(build_ext): > + ffi_configfile): > + from distutils.dir_util import mkpath > + mkpath(ffi_builddir) > +- config_args = [] > ++ config_args = ['--host=%s' % os.environ["HOST_SYS"], ] > + > + # 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)) > ++ cmd = "(cd %s && autoconf -W cross) && (cd %s && env > CFLAGS='' '%s/configure' %s)" \ > ++ % (ffi_srcdir, ffi_builddir, ffi_srcdir, " > ".join(config_args)) > + > + res = os.system(cmd) > + if res or not os.path.exists(ffi_configfile): > +- print "Failed to configure _ctypes module" > ++ print "Failed to configure _ctypes module (res=%d) or > missing conffile=%s" % ( res, ffi_configfile ) > + return False > + > + fficonfig = {} > diff --git a/recipes/python/python-2.6.4/99-ignore-optimization-flag.patch > b/recipes/python/python-2.6.4/99-ignore-optimization-flag.patch > new file mode 100644 > index 0000000..02dc44c > --- /dev/null > +++ b/recipes/python/python-2.6.4/99-ignore-optimization-flag.patch > @@ -0,0 +1,19 @@ > +# Reinstate the empty -O option to fix weird mixing of native and target > +# binaries and libraries with LD_LIBRARY_PATH when host==target > +# > +# Signed-off-by: Denys Dmytriyenko <[email protected]> > + > +Index: Python-2.6.1/Modules/main.c > +=================================================================== > +--- Python-2.6.1-orig/Modules/main.c > ++++ Python-2.6.1/Modules/main.c > +@@ -352,6 +352,9 @@ Py_Main(int argc, char **argv) > + > + /* case 'J': reserved for Jython */ > + > ++ case 'O': /* ignore it */ > ++ break; > ++ > + case 'N': > + Py_OptimizeFlag=0; > + break; > diff --git a/recipes/python/python-2.6.4/sitecustomize.py > b/recipes/python/python-2.6.4/sitecustomize.py > new file mode 100644 > index 0000000..2739018 > --- /dev/null > +++ b/recipes/python/python-2.6.4/sitecustomize.py > @@ -0,0 +1,45 @@ > +# OpenEmbedded sitecustomize.py (C) 2002-2008 Michael 'Mickey' Lauer > <[email protected]> > +# GPLv2 or later > +# Version: 20081123 > +# Features: > +# * set proper default encoding > +# * enable readline completion in the interactive interpreter > +# * load command line history on startup > +# * save command line history on exit > + > +import os > + > +def __exithandler(): > + try: > + readline.write_history_file( "%s/.python-history" % os.getenv( > "HOME", "/tmp" ) ) > + except IOError: > + pass > + > +def __registerExitHandler(): > + import atexit > + atexit.register( __exithandler ) > + > +def __enableReadlineSupport(): > + readline.set_history_length( 1000 ) > + readline.parse_and_bind( "tab: complete" ) > + try: > + readline.read_history_file( "%s/.python-history" % os.getenv( > "HOME", "/tmp" ) ) > + except IOError: > + pass > + > +def __enableDefaultEncoding(): > + import sys > + try: > + sys.setdefaultencoding( "utf8" ) > + except LookupError: > + pass > + > +import sys > +try: > + import rlcompleter, readline > +except ImportError: > + pass > +else: > + __enableDefaultEncoding() > + __registerExitHandler() > + __enableReadlineSupport() > diff --git > a/recipes/python/python-native-2.6.4/00-fix-bindir-libdir-for-cross.patch > b/recipes/python/python-native-2.6.4/00-fix-bindir-libdir-for-cross.patch > new file mode 100644 > index 0000000..2559e3a > --- /dev/null > +++ b/recipes/python/python-native-2.6.4/00-fix-bindir-libdir-for-cross.patch > @@ -0,0 +1,20 @@ > +# $(exec_prefix) points to the wrong directory, when installing > +# a cross-build. @bindir@ and @libdir@ works better and doesn't > +# affect the native build. > +# Signed-Off: Michael 'Mickey' Lauer <[email protected]> > + > +Index: Python-2.6.1/Makefile.pre.in > +=================================================================== > +--- Python-2.6.1.orig/Makefile.pre.in > ++++ Python-2.6.1/Makefile.pre.in > +@@ -86,8 +86,8 @@ exec_prefix= @exec_prefix@ > + datarootdir= @datarootdir@ > + > + # Expanded directories > +-BINDIR= $(exec_prefix)/bin > +-LIBDIR= $(exec_prefix)/lib > ++BINDIR= @bindir@ > ++LIBDIR= @libdir@ > + MANDIR= @mandir@ > + INCLUDEDIR= @includedir@ > + CONFINCLUDEDIR= $(exec_prefix)/include > diff --git a/recipes/python/python-native-2.6.4/04-default-is-optimized.patch > b/recipes/python/python-native-2.6.4/04-default-is-optimized.patch > new file mode 100644 > index 0000000..5131e0b > --- /dev/null > +++ b/recipes/python/python-native-2.6.4/04-default-is-optimized.patch > @@ -0,0 +1,18 @@ > +# When compiling for an embedded system, we need every bit of > +# performance we can get. default to optimized with the option > +# of opt-out. > +# Signed-Off: Michael 'Mickey' Lauer <[email protected]> > + > +Index: Python-2.6.1/Python/compile.c > +=================================================================== > +--- Python-2.6.1.orig/Python/compile.c > ++++ Python-2.6.1/Python/compile.c > +@@ -32,7 +32,7 @@ > + #include "symtable.h" > + #include "opcode.h" > + > +-int Py_OptimizeFlag = 0; > ++int Py_OptimizeFlag = 1; > + > + #define DEFAULT_BLOCK_SIZE 16 > + #define DEFAULT_BLOCKS 8 > diff --git > a/recipes/python/python-native-2.6.4/10-distutils-fix-swig-parameter.patch > b/recipes/python/python-native-2.6.4/10-distutils-fix-swig-parameter.patch > new file mode 100644 > index 0000000..f5e852a > --- /dev/null > +++ b/recipes/python/python-native-2.6.4/10-distutils-fix-swig-parameter.patch > @@ -0,0 +1,16 @@ > +# Some versions of SWIG do not use the extension parameter. > +# Make it optional. > +# Signed-Off: Michael 'Mickey' Lauer <[email protected]> > +Index: Python-2.6.1/Lib/distutils/command/build_ext.py > +=================================================================== > +--- Python-2.6.1.orig/Lib/distutils/command/build_ext.py > ++++ Python-2.6.1/Lib/distutils/command/build_ext.py > +@@ -566,7 +566,7 @@ class build_ext (Command): > + target_lang=language) > + > + > +- def swig_sources (self, sources, extension): > ++ def swig_sources (self, sources, extension=None): > + > + """Walk the list of source files in 'sources', looking for SWIG > + interface (.i) files. Run SWIG on all that are found, and > diff --git > a/recipes/python/python-native-2.6.4/11-distutils-never-modify-shebang-line.patch > > b/recipes/python/python-native-2.6.4/11-distutils-never-modify-shebang-line.patch > new file mode 100644 > index 0000000..8354e26 > --- /dev/null > +++ > b/recipes/python/python-native-2.6.4/11-distutils-never-modify-shebang-line.patch > @@ -0,0 +1,18 @@ > +# Don't modify the she-bang line for a cross-build. > +# Otherwise it points to our hostpython (which we do not want) > +# > +# Signed-Off: Michael 'Mickey' Lauer <[email protected]> > + > +Index: Python-2.6.1/Lib/distutils/command/build_scripts.py > +=================================================================== > +--- Python-2.6.1.orig/Lib/distutils/command/build_scripts.py > ++++ Python-2.6.1/Lib/distutils/command/build_scripts.py > +@@ -87,7 +87,7 @@ class build_scripts (Command): > + continue > + > + match = first_line_re.match(first_line) > +- if match: > ++ if False: #match: > + adjust = 1 > + post_interp = match.group(1) or '' > + > diff --git > a/recipes/python/python-native-2.6.4/12-distutils-prefix-is-inside-staging-area.patch > > b/recipes/python/python-native-2.6.4/12-distutils-prefix-is-inside-staging-area.patch > new file mode 100644 > index 0000000..aa43936 > --- /dev/null > +++ > b/recipes/python/python-native-2.6.4/12-distutils-prefix-is-inside-staging-area.patch > @@ -0,0 +1,60 @@ > +# The proper prefix is inside our staging area. > +# Signed-Off: Michael 'Mickey' Lauer <[email protected]> > + > +Index: Python-2.6.1/Lib/distutils/sysconfig.py > +=================================================================== > +--- Python-2.6.1.orig/Lib/distutils/sysconfig.py > ++++ Python-2.6.1/Lib/distutils/sysconfig.py > +@@ -19,8 +19,8 @@ import sys > + from distutils.errors import DistutilsPlatformError > + > + # These are needed in a couple of spots, so just compute them once. > +-PREFIX = os.path.normpath(sys.prefix) > +-EXEC_PREFIX = os.path.normpath(sys.exec_prefix) > ++PREFIX = os.path.normpath(sys.prefix).replace( os.getenv("BUILD_SYS"), > os.getenv("HOST_SYS") ) > ++EXEC_PREFIX = os.path.normpath(sys.exec_prefix).replace( > os.getenv("BUILD_SYS"), os.getenv("HOST_SYS") ) > + > + # Path to the base directory of the project. On Windows the binary may > + # live in project/PCBuild9. If we're dealing with an x64 Windows build, > +@@ -70,7 +70,10 @@ def get_python_inc(plat_specific=0, pref > + sys.exec_prefix -- i.e., ignore 'plat_specific'. > + """ > + if prefix is None: > +- prefix = plat_specific and EXEC_PREFIX or PREFIX > ++ if plat_specific: > ++ prefix = plat_specific and > os.environ['STAGING_INCDIR'].rstrip('include') > ++ else: > ++ prefix = plat_specific and EXEC_PREFIX or PREFIX > + if os.name == "posix": > + if python_build: > + base = os.path.dirname(os.path.abspath(sys.executable)) > +@@ -112,7 +115,10 @@ def get_python_lib(plat_specific=0, stan > + sys.exec_prefix -- i.e., ignore 'plat_specific'. > + """ > + if prefix is None: > +- prefix = plat_specific and EXEC_PREFIX or PREFIX > ++ if plat_specific: > ++ prefix = plat_specific and > os.environ['STAGING_LIBDIR'].rstrip('lib') > ++ else: > ++ prefix = plat_specific and EXEC_PREFIX or PREFIX > + > + if os.name == "posix": > + libpython = os.path.join(prefix, > +@@ -218,7 +218,7 @@ def get_config_h_filename(): > + else: > + # The name of the config.h file changed in 2.2 > + config_h = 'pyconfig.h' > +- return os.path.join(inc_dir, config_h) > ++ return os.path.join(inc_dir, config_h).replace( os.getenv("BUILD_SYS"), > os.getenv("HOST_SYS") ) > + > + > + def get_makefile_filename(): > +@@ -226,7 +226,7 @@ def get_makefile_filename(): > + if python_build: > + return os.path.join(os.path.dirname(sys.executable), "Makefile") > + lib_dir = get_python_lib(plat_specific=1, standard_lib=1) > +- return os.path.join(lib_dir, "config", "Makefile") > ++ return os.path.join(lib_dir, "config", "Makefile").replace( > os.getenv("BUILD_SYS"), os.getenv("HOST_SYS") ) > + > + > + def parse_config_h(fp, g=None): > diff --git a/recipes/python/python-native-2.6.4/debug.patch > b/recipes/python/python-native-2.6.4/debug.patch > new file mode 100644 > index 0000000..beb3adc > --- /dev/null > +++ b/recipes/python/python-native-2.6.4/debug.patch > @@ -0,0 +1,27 @@ > +Index: Python-2.6.1/Lib/distutils/unixccompiler.py > +=================================================================== > +--- Python-2.6.1.orig/Lib/distutils/unixccompiler.py 2009-11-13 > 16:04:54.000000000 +0000 > ++++ Python-2.6.1/Lib/distutils/unixccompiler.py 2009-11-13 > 16:06:27.000000000 +0000 > +@@ -300,6 +300,8 @@ > + dylib_f = self.library_filename(lib, lib_type='dylib') > + static_f = self.library_filename(lib, lib_type='static') > + > ++ print "Looking in %s for %s" % (lib, dirs) > ++ > + for dir in dirs: > + shared = os.path.join(dir, shared_f) > + dylib = os.path.join(dir, dylib_f) > +@@ -309,10 +311,13 @@ > + # assuming that *all* Unix C compilers do. And of course I'm > + # ignoring even GCC's "-static" option. So sue me. > + if os.path.exists(dylib): > ++ print "Found %s" % (dylib) > + return dylib > + elif os.path.exists(shared): > ++ print "Found %s" % (shared) > + return shared > + elif os.path.exists(static): > ++ print "Found %s" % (static) > + return static > + > + # Oops, didn't find it in *any* of 'dirs' > diff --git a/recipes/python/python-native-2.6.4/nohostlibs.patch > b/recipes/python/python-native-2.6.4/nohostlibs.patch > new file mode 100644 > index 0000000..7020f3c > --- /dev/null > +++ b/recipes/python/python-native-2.6.4/nohostlibs.patch > @@ -0,0 +1,53 @@ > +Index: Python-2.6.1/setup.py > +=================================================================== > +--- Python-2.6.1.orig/setup.py 2009-11-13 16:20:47.000000000 +0000 > ++++ Python-2.6.1/setup.py 2009-11-13 16:28:00.000000000 +0000 > +@@ -310,8 +310,8 @@ > + > + 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') > ++ #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. > +@@ -347,10 +347,10 @@ > + for directory in reversed(options.dirs): > + add_dir_to_list(dir_list, directory) > + > +- if os.path.normpath(sys.prefix) != '/usr': > +- add_dir_to_list(self.compiler.library_dirs, > ++ > ++ add_dir_to_list(self.compiler.library_dirs, > + sysconfig.get_config_var("LIBDIR")) > +- add_dir_to_list(self.compiler.include_dirs, > ++ add_dir_to_list(self.compiler.include_dirs, > + sysconfig.get_config_var("INCLUDEDIR")) > + > + try: > +@@ -361,11 +361,8 @@ > + # 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 > + exts = [] > + missing = [] > + > +@@ -583,8 +580,7 @@ > + readline_libs.append('ncurses') > + elif self.compiler.find_library_file(lib_dirs, 'curses'): > + readline_libs.append('curses') > +- elif self.compiler.find_library_file(lib_dirs + > +- ['/usr/lib/termcap'], > ++ elif self.compiler.find_library_file(lib_dirs, > + 'termcap'): > + readline_libs.append('termcap') > + exts.append( Extension('readline', ['readline.c'], > diff --git a/recipes/python/python-native-2.6.4/sitecustomize.py > b/recipes/python/python-native-2.6.4/sitecustomize.py > new file mode 100644 > index 0000000..2739018 > --- /dev/null > +++ b/recipes/python/python-native-2.6.4/sitecustomize.py > @@ -0,0 +1,45 @@ > +# OpenEmbedded sitecustomize.py (C) 2002-2008 Michael 'Mickey' Lauer > <[email protected]> > +# GPLv2 or later > +# Version: 20081123 > +# Features: > +# * set proper default encoding > +# * enable readline completion in the interactive interpreter > +# * load command line history on startup > +# * save command line history on exit > + > +import os > + > +def __exithandler(): > + try: > + readline.write_history_file( "%s/.python-history" % os.getenv( > "HOME", "/tmp" ) ) > + except IOError: > + pass > + > +def __registerExitHandler(): > + import atexit > + atexit.register( __exithandler ) > + > +def __enableReadlineSupport(): > + readline.set_history_length( 1000 ) > + readline.parse_and_bind( "tab: complete" ) > + try: > + readline.read_history_file( "%s/.python-history" % os.getenv( > "HOME", "/tmp" ) ) > + except IOError: > + pass > + > +def __enableDefaultEncoding(): > + import sys > + try: > + sys.setdefaultencoding( "utf8" ) > + except LookupError: > + pass > + > +import sys > +try: > + import rlcompleter, readline > +except ImportError: > + pass > +else: > + __enableDefaultEncoding() > + __registerExitHandler() > + __enableReadlineSupport() > diff --git a/recipes/python/python-native_2.6.4.bb > b/recipes/python/python-native_2.6.4.bb > new file mode 100644 > index 0000000..ca65057 > --- /dev/null > +++ b/recipes/python/python-native_2.6.4.bb > @@ -0,0 +1,33 @@ > +require python.inc > +DEPENDS = "openssl-native bzip2-full-native zlib-native readline-native" > +PR = "${INC_PR}.2" > + > +SRC_URI = "\ > + http://www.python.org/ftp/python/${PV}/Python-${PV}.tar.bz2;name=archive \ > + file://00-fix-bindir-libdir-for-cross.patch;patch=1 \ > + file://04-default-is-optimized.patch;patch=1 \ > + file://05-enable-ctypes-cross-build.patch;patch=1 \ > + file://10-distutils-fix-swig-parameter.patch;patch=1 \ > + file://11-distutils-never-modify-shebang-line.patch;patch=1 \ > + file://12-distutils-prefix-is-inside-staging-area.patch;patch=1 \ > + file://debug.patch;patch=1 \ > + file://nohostlibs.patch;patch=1 \ > +" > +S = "${WORKDIR}/Python-${PV}" > + > +SRC_URI[archive.md5sum] = "fee5408634a54e721a93531aba37f8c1" > +SRC_URI[archive.sha256sum] = > "dad8d5575144a210d5cc4fdbc40b8a26386e9cdb1ef58941bec0be02c7cb9d89" > + > +inherit native > + > +EXTRA_OEMAKE = '\ > + BUILD_SYS="" \ > + HOST_SYS="" \ > + LIBC="" \ > + STAGING_LIBDIR=${STAGING_LIBDIR_NATIVE} \ > + STAGING_INCDIR=${STAGING_INCDIR_NATIVE} \ > +' > + > +do_stage_append() { > + install -m 0755 Parser/pgen ${STAGING_BINDIR_NATIVE}/pgen > +} > diff --git a/recipes/python/python_2.6.4.bb b/recipes/python/python_2.6.4.bb > new file mode 100644 > index 0000000..6d93c2c > --- /dev/null > +++ b/recipes/python/python_2.6.4.bb > @@ -0,0 +1,139 @@ > +require python.inc > +DEPENDS = "python-native db gdbm openssl readline sqlite3 tcl zlib\ > + $...@base_contains('DISTRO_FEATURES', 'tk', 'tk', '', d)}" > +DEPENDS_sharprom = "python-native db readline zlib gdbm openssl" > +# set to .0 on every increase of INC_PR > +PR = "${INC_PR}.0" > + > +SRC_URI = "\ > + http://www.python.org/ftp/python/${PV}/Python-${PV}.tar.bz2;name=archive \ > + file://00-fix-bindir-libdir-for-cross.patch;patch=1 \ > + file://01-use-proper-tools-for-cross-build.patch;patch=1 \ > + file://02-remove-test-for-cross.patch;patch=1 \ > + file://03-fix-tkinter-detection.patch;patch=1 \ > + file://04-default-is-optimized.patch;patch=1 \ > + file://05-enable-ctypes-cross-build.patch;patch=1 \ > + file://99-ignore-optimization-flag.patch;patch=1 \ > + \ > +# not yet pushed forward > +# sitebranding > + \ > +# file://05-install.patch;patch=1 \ > +# file://06-fix-urllib-exception.patch;patch=1 \ > +# file://16-bug1179-imageop.patch;patch=1 \ > +# file://13-set-wakeup-fix.patch;patch=1 \ > + \ > + file://sitecustomize.py \ > +" > +SRC_URI[archive.md5sum] = "fee5408634a54e721a93531aba37f8c1" > +SRC_URI[archive.sha256sum] = > "dad8d5575144a210d5cc4fdbc40b8a26386e9cdb1ef58941bec0be02c7cb9d89" > + > +S = "${WORKDIR}/Python-${PV}" > + > +inherit autotools > + > +# The 3 lines below are copied from the libffi recipe, ctypes ships its own > copy of the libffi sources > +#Somehow gcc doesn't set __SOFTFP__ when passing -mfloatabi=softp :( > +TARGET_CC_ARCH_append_armv6 = " -D__SOFTFP__" > +TARGET_CC_ARCH_append_armv7a = " -D__SOFTFP__" > + > +do_configure_prepend() { > + autoreconf -Wcross --verbose --install --force --exclude=autopoint > Modules/_ctypes/libffi || oenote "_ctypes failed to autoreconf" > +} > + > +# > +# Copy config.h and an appropriate Makefile for distutils.sysconfig, > +# which laters uses the information out of these to compile extensions > +# > +do_compile_prepend() { > + install -d ${STAGING_INCDIR}/python${PYTHON_MAJMIN}/ > + install -d ${STAGING_LIBDIR}/python${PYTHON_MAJMIN}/config/ > + install -m 0644 pyconfig.h ${STAGING_INCDIR}/python${PYTHON_MAJMIN}/ > + install -m 0644 Makefile Makefile.orig > + install -m 0644 Makefile Makefile.backup > + sed -e 's,${includedir},${STAGING_INCDIR},' < Makefile.backup > Makefile > + install -m 0644 Makefile Makefile.backup > + sed -e 's,${libdir},${STAGING_LIBDIR},' < Makefile.backup > Makefile > + install -m 0644 Makefile > ${STAGING_LIBDIR}/python${PYTHON_MAJMIN}/config/ > +} > + > +do_compile() { > + oe_runmake HOSTPGEN=${STAGING_BINDIR_NATIVE}/pgen \ > + HOSTPYTHON=${STAGING_BINDIR_NATIVE}/python \ > + STAGING_LIBDIR=${STAGING_LIBDIR} \ > + STAGING_INCDIR=${STAGING_INCDIR} \ > + BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \ > + OPT="${CFLAGS}" libpython${PYTHON_MAJMIN}.so > + > + oe_libinstall -so libpython${PYTHON_MAJMIN} ${STAGING_LIBDIR} > + > + oe_runmake HOSTPGEN=${STAGING_BINDIR_NATIVE}/pgen \ > + HOSTPYTHON=${STAGING_BINDIR_NATIVE}/python \ > + STAGING_LIBDIR=${STAGING_LIBDIR} \ > + STAGING_INCDIR=${STAGING_INCDIR} \ > + BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \ > + RUNSHARED= OPT="${CFLAGS}" > +} > + > +do_stage() { > + install -m 0644 Include/*.h ${STAGING_INCDIR}/python${PYTHON_MAJMIN}/ > + oe_libinstall -a -so libpython${PYTHON_MAJMIN} ${STAGING_LIBDIR} > +} > + > +do_install() { > + install -m 0644 Makefile.orig Makefile > + > + oe_runmake HOSTPGEN=${STAGING_BINDIR_NATIVE}/pgen \ > + HOSTPYTHON=${STAGING_BINDIR_NATIVE}/python \ > + STAGING_LIBDIR=${STAGING_LIBDIR} \ > + STAGING_INCDIR=${STAGING_INCDIR} \ > + BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \ > + DESTDIR=${D} LIBDIR=${libdir} RUNSHARED= install > + > + install -m 0644 ${WORKDIR}/sitecustomize.py > ${D}/${libdir}/python${PYTHON_MAJMIN} > + > + # remove hardcoded ccache, see > http://bugs.openembedded.net/show_bug.cgi?id=4144 > + sed -i -e s,ccache,'$(CCACHE)', > ${D}/${libdir}/python${PYTHON_MAJMIN}/config/Makefile > +} > + > +require python-${PYTHON_MAJMIN}-manifest.inc > + > +# manual dependency additions > +RPROVIDES_python-core = "python" > +RRECOMMENDS_python-core = "python-readline" > +RRECOMMENDS_python-crypt = "openssl" > + > +# add sitecustomize > +FILES_python-core += "${libdir}/python${PYTHON_MAJMIN}/sitecustomize.py" > +# ship 2to3 > +FILES_python-core += "${bindir}/2to3" > + > +# package libpython2 > +PACKAGES =+ "libpython2" > +FILES_libpython2 = "${libdir}/libpython*.so*" > + > +# additional stuff -dev > + > +FILES_${PN}-dev = "\ > + ${includedir} \ > + ${libdir}/lib*${SOLIBSDEV} \ > + ${libdir}/*.la \ > + ${libdir}/*.a \ > + ${libdir}/*.o \ > + ${libdir}/pkgconfig \ > + ${base_libdir}/*.a \ > + ${base_libdir}/*.o \ > + ${datadir}/aclocal \ > + ${datadir}/pkgconfig \ > +" > + > +# catch debug extensions (isn't that already in python-core-dbg?) > +FILES_python-dbg += "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/.debug" > + > +# catch all the rest (unsorted) > +PACKAGES += "python-misc" > +FILES_python-misc = "${libdir}/python${PYTHON_MAJMIN}" > + > +# catch manpage > +PACKAGES += "python-man" > +FILES_python-man = "${datadir}/man" > -- > 1.6.6.1 > > > _______________________________________________ > Openembedded-devel mailing list > [email protected] > http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-devel _______________________________________________ Openembedded-devel mailing list [email protected] http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-devel
