diff options
author | Michał Górny <mgorny@gentoo.org> | 2015-08-09 10:55:54 +0200 |
---|---|---|
committer | Michał Górny <mgorny@gentoo.org> | 2015-08-09 10:55:54 +0200 |
commit | 7054cd4ff456e6ab5eab6e3b51f32dd1e1f413dd (patch) | |
tree | 82023824ef0396e3c75ee9e9bcb4554b197d5c94 | |
parent | dev-lang/python:3.2: some more cleanup (diff) | |
download | python-7054cd4ff456e6ab5eab6e3b51f32dd1e1f413dd.tar.gz python-7054cd4ff456e6ab5eab6e3b51f32dd1e1f413dd.tar.bz2 python-7054cd4ff456e6ab5eab6e3b51f32dd1e1f413dd.zip |
dev-lang/python: import 2.6 with some cleanup (still broken)
26 files changed, 2090 insertions, 0 deletions
diff --git a/dev-lang/python/Manifest b/dev-lang/python/Manifest index 513d54c..0e0bd0d 100644 --- a/dev-lang/python/Manifest +++ b/dev-lang/python/Manifest @@ -1 +1,2 @@ +DIST Python-2.6.9.tar.xz 9333664 SHA256 cae7bb995006ea5b703d9d28446f694894c441fe4bfb95d561c0ac908cd06e41 SHA512 bcd9286b6af3bfa2017f0b32c6c0f9b934224ece496d2d897ab3a61a936d306a5f61a580c060ce501034a614da374d17831a9c9be9f947b01d977b56437c023b WHIRLPOOL 0b9feb710f0c5c8726522465f26ac6fa17e8f87c0e5cda4ef0b130e5d8e213d32aad0143e0ec909c677a7b515ed63ed9e9d50a33890f22068b820a5f15ba47fd DIST Python-3.2.6.tar.xz 9243292 SHA256 1d12b501819fd26afafbf8459be1aa279b56f032b4c15412de0a713ce0de7bdc SHA512 514b46029dd5b07f2d287a1f00c6716970197186a38e3f2e1ec60c2292cf03a2dc45165ba9c217e5219c7cb6d96a09f790f5b3bdcc8d11db53f927297fe4ddc9 WHIRLPOOL b34f215e0f50123c5b2969e615ffbab99b631433de8f13cbbca525bf57cbc1bb9a159fba02616b3772be9b249be3cec36d6fd1856a678880674b828eb4ab08ed diff --git a/dev-lang/python/files/2.6/.gitattributes b/dev-lang/python/files/2.6/.gitattributes new file mode 100644 index 0000000..5e5a56d --- /dev/null +++ b/dev-lang/python/files/2.6/.gitattributes @@ -0,0 +1 @@ +Makefile export-ignore diff --git a/dev-lang/python/files/2.6/01_all_static_library_location.patch b/dev-lang/python/files/2.6/01_all_static_library_location.patch new file mode 100644 index 0000000..83231c9 --- /dev/null +++ b/dev-lang/python/files/2.6/01_all_static_library_location.patch @@ -0,0 +1,68 @@ +Install libpythonX.Y.a in /usr/lib instead of /usr/lib/pythonX.Y/config. +https://bugs.gentoo.org/show_bug.cgi?id=252372 +http://bugs.python.org/issue6103 + +--- Makefile.pre.in ++++ Makefile.pre.in +@@ -788,6 +788,19 @@ + fi; \ + else true; \ + fi ++ @if test -f $(LIBRARY) && test $(LIBRARY) != $(LDLIBRARY); then \ ++ if test "$(PYTHONFRAMEWORKDIR)" = no-framework; then \ ++ if test "$(SO)" = .dll; then \ ++ $(INSTALL_DATA) $(LDLIBRARY) $(DESTDIR)$(LIBDIR); \ ++ else \ ++ $(INSTALL_DATA) $(LIBRARY) $(DESTDIR)$(LIBDIR); \ ++ $(RANLIB) $(DESTDIR)$(LIBDIR)/$(LIBRARY); \ ++ fi; \ ++ else \ ++ echo "Skipped install of $(LIBRARY) - use make frameworkinstall"; \ ++ fi; \ ++ else true; \ ++ fi + + # Install the manual page + maninstall: +@@ -946,18 +959,6 @@ + else true; \ + fi; \ + done +- @if test -d $(LIBRARY); then :; else \ +- if test "$(PYTHONFRAMEWORKDIR)" = no-framework; then \ +- if test "$(SO)" = .dll; then \ +- $(INSTALL_DATA) $(LDLIBRARY) $(DESTDIR)$(LIBPL) ; \ +- else \ +- $(INSTALL_DATA) $(LIBRARY) $(DESTDIR)$(LIBPL)/$(LIBRARY) ; \ +- $(RANLIB) $(DESTDIR)$(LIBPL)/$(LIBRARY) ; \ +- fi; \ +- else \ +- echo Skip install of $(LIBRARY) - use make frameworkinstall; \ +- fi; \ +- fi + $(INSTALL_DATA) Modules/config.c $(DESTDIR)$(LIBPL)/config.c + $(INSTALL_DATA) Modules/python.o $(DESTDIR)$(LIBPL)/python.o + $(INSTALL_DATA) $(srcdir)/Modules/config.c.in $(DESTDIR)$(LIBPL)/config.c.in +--- Misc/python-config.in ++++ Misc/python-config.in +@@ -45,9 +45,4 @@ + elif opt in ('--libs', '--ldflags'): + libs = getvar('LIBS').split() + getvar('SYSLIBS').split() + libs.append('-lpython'+pyver) +- # add the prefix/lib/pythonX.Y/config dir, but only if there is no +- # shared library in prefix/lib/. +- if opt == '--ldflags' and not getvar('Py_ENABLE_SHARED'): +- libs.insert(0, '-L' + getvar('LIBPL')) + print ' '.join(libs) +- +--- Modules/makesetup ++++ Modules/makesetup +@@ -89,7 +89,7 @@ + then + ExtraLibDir=. + else +- ExtraLibDir='$(LIBPL)' ++ ExtraLibDir='$(LIBDIR)' + fi + ExtraLibs="-L$ExtraLibDir -lpython\$(VERSION)";; + esac diff --git a/dev-lang/python/files/2.6/02_all_disable_modules_and_ssl.patch b/dev-lang/python/files/2.6/02_all_disable_modules_and_ssl.patch new file mode 100644 index 0000000..c5de56d --- /dev/null +++ b/dev-lang/python/files/2.6/02_all_disable_modules_and_ssl.patch @@ -0,0 +1,92 @@ +--- setup.py ++++ setup.py +@@ -18,7 +18,18 @@ + from distutils.spawn import find_executable + + # This global variable is used to hold the list of modules to be disabled. +-disabled_module_list = [] ++pdm_env = "PYTHON_DISABLE_MODULES" ++if pdm_env in os.environ: ++ disabled_module_list = os.environ[pdm_env].split() ++else: ++ disabled_module_list = [] ++ ++pds_env = "PYTHON_DISABLE_SSL" ++if pds_env in os.environ: ++ disable_ssl = os.environ[pds_env] ++else: ++ disable_ssl = 0 ++ + + def add_dir_to_list(dirlist, dir): + """Add the directory 'dir' to the list 'dirlist' (at the front) if +@@ -355,6 +366,7 @@ + return sys.platform + + def detect_modules(self): ++ global disable_ssl + # 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') +@@ -697,7 +709,7 @@ + ssl_incs = find_file('openssl/ssl.h', inc_dirs, + search_for_ssl_incs_in + ) +- if ssl_incs is not None: ++ if ssl_incs is not None and not disable_ssl: + krb5_h = find_file('krb5.h', inc_dirs, + ['/usr/kerberos/include']) + if krb5_h: +@@ -708,7 +720,8 @@ + ] ) + + if (ssl_incs is not None and +- ssl_libs is not None): ++ ssl_libs is not None and ++ not disable_ssl): + exts.append( Extension('_ssl', ['_ssl.c'], + include_dirs = ssl_incs, + library_dirs = ssl_libs, +@@ -742,6 +755,7 @@ + + if (ssl_incs is not None and + ssl_libs is not None and ++ not disable_ssl and + openssl_ver >= 0x00907000): + # The _hashlib module wraps optimized implementations + # of hash functions from the OpenSSL library. +@@ -752,20 +766,22 @@ + # these aren't strictly missing since they are unneeded. + #missing.extend(['_sha', '_md5']) + else: +- # The _sha module implements the SHA1 hash algorithm. +- exts.append( Extension('_sha', ['shamodule.c']) ) +- # The _md5 module implements the RSA Data Security, Inc. MD5 +- # Message-Digest Algorithm, described in RFC 1321. The +- # necessary files md5.c and md5.h are included here. +- exts.append( Extension('_md5', +- sources = ['md5module.c', 'md5.c'], +- depends = ['md5.h']) ) + missing.append('_hashlib') + +- if (openssl_ver < 0x00908000): +- # OpenSSL doesn't do these until 0.9.8 so we'll bring our own hash +- exts.append( Extension('_sha256', ['sha256module.c']) ) +- exts.append( Extension('_sha512', ['sha512module.c']) ) ++ ### Build these unconditionally so emerge won't fail ++ ### when openssl is dropped/broken etc. ++ # The _sha module implements the SHA1 hash algorithm. ++ exts.append( Extension('_sha', ['shamodule.c']) ) ++ # The _md5 module implements the RSA Data Security, Inc. MD5 ++ # Message-Digest Algorithm, described in RFC 1321. The ++ # necessary files md5.c and md5.h are included here. ++ exts.append( Extension('_md5', ++ sources = ['md5module.c', 'md5.c'], ++ depends = ['md5.h']) ) ++ ++ exts.append( Extension('_sha256', ['sha256module.c']) ) ++ exts.append( Extension('_sha512', ['sha512module.c']) ) ++ ### + + # Modules that provide persistent dictionary-like semantics. You will + # probably want to arrange for at least one of them to be available on diff --git a/dev-lang/python/files/2.6/03_all_add_portage_search_path.patch b/dev-lang/python/files/2.6/03_all_add_portage_search_path.patch new file mode 100644 index 0000000..029284c --- /dev/null +++ b/dev-lang/python/files/2.6/03_all_add_portage_search_path.patch @@ -0,0 +1,10 @@ +--- Lib/site.py ++++ Lib/site.py +@@ -269,6 +269,7 @@ + "python" + sys.version[:3], + "site-packages")) + sitedirs.append(os.path.join(prefix, "lib", "site-python")) ++ sitedirs.append(os.path.join(prefix, "lib", "portage", "pym")) + else: + sitedirs.append(prefix) + sitedirs.append(os.path.join(prefix, "lib", "site-packages")) diff --git a/dev-lang/python/files/2.6/04_all_libdir.patch b/dev-lang/python/files/2.6/04_all_libdir.patch new file mode 100644 index 0000000..af61191 --- /dev/null +++ b/dev-lang/python/files/2.6/04_all_libdir.patch @@ -0,0 +1,119 @@ +--- Lib/distutils/command/install.py ++++ Lib/distutils/command/install.py +@@ -41,8 +41,8 @@ + + INSTALL_SCHEMES = { + 'unix_prefix': { +- 'purelib': '$base/lib/python$py_version_short/site-packages', +- 'platlib': '$platbase/lib/python$py_version_short/site-packages', ++ 'purelib': '$base/@@GENTOO_LIBDIR@@/python$py_version_short/site-packages', ++ 'platlib': '$platbase/@@GENTOO_LIBDIR@@/python$py_version_short/site-packages', + 'headers': '$base/include/python$py_version_short/$dist_name', + 'scripts': '$base/bin', + 'data' : '$base', +--- Lib/distutils/sysconfig.py ++++ Lib/distutils/sysconfig.py +@@ -120,7 +120,8 @@ + + if os.name == "posix": + libpython = os.path.join(prefix, +- "lib", "python" + get_python_version()) ++ "@@GENTOO_LIBDIR@@", ++ "python" + get_python_version()) + if standard_lib: + return libpython + else: +--- Lib/site.py ++++ Lib/site.py +@@ -265,11 +265,11 @@ + if sys.platform in ('os2emx', 'riscos'): + sitedirs.append(os.path.join(prefix, "Lib", "site-packages")) + elif os.sep == '/': +- sitedirs.append(os.path.join(prefix, "lib", ++ sitedirs.append(os.path.join(prefix, "@@GENTOO_LIBDIR@@", + "python" + sys.version[:3], + "site-packages")) +- sitedirs.append(os.path.join(prefix, "lib", "site-python")) +- sitedirs.append(os.path.join(prefix, "lib", "portage", "pym")) ++ sitedirs.append(os.path.join(prefix, "@@GENTOO_LIBDIR@@", "site-python")) ++ sitedirs.append(os.path.join(prefix, "@@GENTOO_LIBDIR@@", "portage", "pym")) + else: + sitedirs.append(prefix) + sitedirs.append(os.path.join(prefix, "lib", "site-packages")) +--- Makefile.pre.in ++++ Makefile.pre.in +@@ -91,7 +91,7 @@ + MANDIR= @mandir@ + INCLUDEDIR= @includedir@ + CONFINCLUDEDIR= $(exec_prefix)/include +-SCRIPTDIR= $(prefix)/lib ++SCRIPTDIR= $(prefix)/@@GENTOO_LIBDIR@@ + + # Detailed destination directories + BINLIBDEST= $(LIBDIR)/python$(VERSION) +--- Modules/getpath.c ++++ Modules/getpath.c +@@ -129,7 +129,7 @@ + static char exec_prefix[MAXPATHLEN+1]; + static char progpath[MAXPATHLEN+1]; + static char *module_search_path = NULL; +-static char lib_python[] = "lib/python" VERSION; ++static char lib_python[] = "@@GENTOO_LIBDIR@@/python" VERSION; + + static void + reduce(char *dir) +@@ -524,7 +524,7 @@ + } + else + strncpy(zip_path, PREFIX, MAXPATHLEN); +- joinpath(zip_path, "lib/python00.zip"); ++ joinpath(zip_path, "@@GENTOO_LIBDIR@@/python00.zip"); + bufsz = strlen(zip_path); /* Replace "00" with version */ + zip_path[bufsz - 6] = VERSION[0]; + zip_path[bufsz - 5] = VERSION[2]; +@@ -534,7 +534,7 @@ + fprintf(stderr, + "Could not find platform dependent libraries <exec_prefix>\n"); + strncpy(exec_prefix, EXEC_PREFIX, MAXPATHLEN); +- joinpath(exec_prefix, "lib/lib-dynload"); ++ joinpath(exec_prefix, "@@GENTOO_LIBDIR@@/lib-dynload"); + } + /* If we found EXEC_PREFIX do *not* reduce it! (Yet.) */ + +--- Modules/Setup.dist ++++ Modules/Setup.dist +@@ -460,7 +460,7 @@ + # Andrew Kuchling's zlib module. + # This require zlib 1.1.3 (or later). + # See http://www.gzip.org/zlib/ +-#zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz ++#zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/@@GENTOO_LIBDIR@@ -lz + + # Interface to the Expat XML parser + # +--- setup.py ++++ setup.py +@@ -420,8 +420,7 @@ + # 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', ++ '/@@GENTOO_LIBDIR@@', '/usr/@@GENTOO_LIBDIR@@', + ] + inc_dirs = self.compiler.include_dirs + ['/usr/include'] + exts = [] +@@ -674,11 +673,11 @@ + elif curses_library: + readline_libs.append(curses_library) + elif self.compiler.find_library_file(lib_dirs + +- ['/usr/lib/termcap'], ++ ['/usr/@@GENTOO_LIBDIR@@/termcap'], + 'termcap'): + readline_libs.append('termcap') + exts.append( Extension('readline', ['readline.c'], +- library_dirs=['/usr/lib/termcap'], ++ library_dirs=['/usr/@@GENTOO_LIBDIR@@/termcap'], + extra_link_args=readline_extra_link_args, + libraries=readline_libs) ) + else: diff --git a/dev-lang/python/files/2.6/05_all_verbose_building_of_extensions.patch b/dev-lang/python/files/2.6/05_all_verbose_building_of_extensions.patch new file mode 100644 index 0000000..de852be --- /dev/null +++ b/dev-lang/python/files/2.6/05_all_verbose_building_of_extensions.patch @@ -0,0 +1,10 @@ +--- Makefile.pre.in ++++ Makefile.pre.in +@@ -395,7 +395,6 @@ + # Build the shared modules + sharedmods: $(BUILDPYTHON) + @case $$MAKEFLAGS in \ +- *s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' LDFLAGS='$(LDFLAGS)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py -q build;; \ + *) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' LDFLAGS='$(LDFLAGS)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py build;; \ + esac + diff --git a/dev-lang/python/files/2.6/06_all_dbm_automagic.patch b/dev-lang/python/files/2.6/06_all_dbm_automagic.patch new file mode 100644 index 0000000..9fc1031 --- /dev/null +++ b/dev-lang/python/files/2.6/06_all_dbm_automagic.patch @@ -0,0 +1,52 @@ +--- setup.py ++++ setup.py +@@ -1137,16 +1137,11 @@ + + # The standard Unix dbm module: + if platform not in ['cygwin']: +- if find_file("ndbm.h", inc_dirs, []) is not None: +- # Some systems have -lndbm, others don't +- if self.compiler.find_library_file(lib_dirs, 'ndbm'): +- ndbm_libs = ['ndbm'] +- else: +- ndbm_libs = [] +- exts.append( Extension('dbm', ['dbmmodule.c'], +- define_macros=[('HAVE_NDBM_H',None)], +- libraries = ndbm_libs ) ) +- elif self.compiler.find_library_file(lib_dirs, 'gdbm'): ++ # To prevent automagic dependencies check for relevant modules in ++ # disabled_module_list. ++ if (self.compiler.find_library_file(lib_dirs, 'gdbm') ++ and find_file("gdbm/ndbm.h", inc_dirs, []) is not None ++ and 'gdbm' not in disabled_module_list): + gdbm_libs = ['gdbm'] + if self.compiler.find_library_file(lib_dirs, 'gdbm_compat'): + gdbm_libs.append('gdbm_compat') +@@ -1162,7 +1157,7 @@ + libraries = gdbm_libs ) ) + else: + missing.append('dbm') +- elif db_incs is not None: ++ elif db_incs is not None and 'bsddb' not in disabled_module_list: + exts.append( Extension('dbm', ['dbmmodule.c'], + library_dirs=dblib_dir, + runtime_library_dirs=dblib_dir, +@@ -1170,6 +1165,18 @@ + define_macros=[('HAVE_BERKDB_H',None), + ('DB_DBM_HSEARCH',None)], + libraries=dblibs)) ++ # Check for ndbm.h here after checking berkdb because ndbm.h is ++ # only provided by db-1* ++ elif (find_file("ndbm.h", inc_dirs, []) is not None ++ and 'bsddb' not in disabled_module_list): ++ # Some systems have -lndbm, others don't ++ if self.compiler.find_library_file(lib_dirs, 'ndbm'): ++ ndbm_libs = ['ndbm'] ++ else: ++ ndbm_libs = [] ++ exts.append( Extension('dbm', ['dbmmodule.c'], ++ define_macros=[('HAVE_NDBM_H',None)], ++ libraries = ndbm_libs ) ) + else: + missing.append('dbm') + diff --git a/dev-lang/python/files/2.6/07_all_internal_expat.patch b/dev-lang/python/files/2.6/07_all_internal_expat.patch new file mode 100644 index 0000000..3ffdae2 --- /dev/null +++ b/dev-lang/python/files/2.6/07_all_internal_expat.patch @@ -0,0 +1,33 @@ +--- setup.py ++++ setup.py +@@ -1326,18 +1326,15 @@ + # + # More information on Expat can be found at www.libexpat.org. + # +- expatinc = os.path.join(os.getcwd(), srcdir, 'Modules', 'expat') +- define_macros = [ +- ('HAVE_EXPAT_CONFIG_H', '1'), +- ] ++ # Use system expat ++ expatinc = '/usr/include' ++ define_macros = [] + + exts.append(Extension('pyexpat', + define_macros = define_macros, + include_dirs = [expatinc], ++ libraries = ['expat'], + sources = ['pyexpat.c', +- 'expat/xmlparse.c', +- 'expat/xmlrole.c', +- 'expat/xmltok.c', + ], + )) + +@@ -1349,6 +1346,7 @@ + exts.append(Extension('_elementtree', + define_macros = define_macros, + include_dirs = [expatinc], ++ libraries = ['expat'], + sources = ['_elementtree.c'], + )) + else: diff --git a/dev-lang/python/files/2.6/08_all_non-zero_exit_status_on_failure.patch b/dev-lang/python/files/2.6/08_all_non-zero_exit_status_on_failure.patch new file mode 100644 index 0000000..8d0ebe8 --- /dev/null +++ b/dev-lang/python/files/2.6/08_all_non-zero_exit_status_on_failure.patch @@ -0,0 +1,31 @@ +https://bugs.gentoo.org/show_bug.cgi?id=281968 +http://bugs.python.org/issue6731 + +--- setup.py ++++ setup.py +@@ -31,6 +31,8 @@ + disable_ssl = 0 + + ++exit_status = 0 ++ + def add_dir_to_list(dirlist, dir): + """Add the directory 'dir' to the list 'dirlist' (at the front) if + 1) 'dir' is not already in 'dirlist' +@@ -279,6 +281,8 @@ + print + + if self.failed: ++ global exit_status ++ exit_status = 1 + failed = self.failed[:] + print + print "Failed to build these modules:" +@@ -2050,6 +2054,7 @@ + 'Tools/scripts/2to3', + 'Lib/smtpd.py'] + ) ++ sys.exit(exit_status) + + # --install-platlib + if __name__ == '__main__': diff --git a/dev-lang/python/files/2.6/09_all_use_external_libffi.patch b/dev-lang/python/files/2.6/09_all_use_external_libffi.patch new file mode 100644 index 0000000..0c54246 --- /dev/null +++ b/dev-lang/python/files/2.6/09_all_use_external_libffi.patch @@ -0,0 +1,51 @@ +http://bugs.python.org/issue6943 +http://hg.python.org/cpython/rev/f02881332342 +http://hg.python.org/cpython/rev/6d9be1a97c17 + +--- configure.in ++++ configure.in +@@ -2046,11 +2046,20 @@ + ], + [AC_MSG_RESULT(no)]) + ++AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) ++ + # Check for use of the system libffi library + AC_MSG_CHECKING(for --with-system-ffi) + AC_ARG_WITH(system_ffi, + AC_HELP_STRING(--with-system-ffi, build _ctypes module using an installed ffi library)) + ++if test "$with_system_ffi" = "yes" && test -n "$PKG_CONFIG"; then ++ LIBFFI_INCLUDEDIR="`"$PKG_CONFIG" libffi --cflags-only-I 2>/dev/null | sed -e 's/^-I//;s/ *$//'`" ++else ++ LIBFFI_INCLUDEDIR="" ++fi ++AC_SUBST(LIBFFI_INCLUDEDIR) ++ + AC_MSG_RESULT($with_system_ffi) + + # Determine if signalmodule should be used. +--- Makefile.pre.in ++++ Makefile.pre.in +@@ -202,6 +202,8 @@ + GRAMMAR_INPUT= $(srcdir)/Grammar/Grammar + + ++LIBFFI_INCLUDEDIR= @LIBFFI_INCLUDEDIR@ ++ + ########################################################################## + # Parser + PGEN= Parser/pgen$(EXE) +--- setup.py ++++ setup.py +@@ -1929,7 +1929,9 @@ + # in /usr/include/ffi + inc_dirs.append('/usr/include/ffi') + +- ffi_inc = find_file('ffi.h', [], inc_dirs) ++ ffi_inc = [sysconfig.get_config_var("LIBFFI_INCLUDEDIR")] ++ if not ffi_inc: ++ ffi_inc = find_file('ffi.h', [], inc_dirs) + if ffi_inc is not None: + ffi_h = ffi_inc[0] + '/ffi.h' + fp = open(ffi_h) diff --git a/dev-lang/python/files/2.6/10_all_sys.platform_linux2.patch b/dev-lang/python/files/2.6/10_all_sys.platform_linux2.patch new file mode 100644 index 0000000..40e4080 --- /dev/null +++ b/dev-lang/python/files/2.6/10_all_sys.platform_linux2.patch @@ -0,0 +1,13 @@ +http://bugs.python.org/issue12326 +http://hg.python.org/cpython/rev/c816479f6aaf + +--- configure.in ++++ configure.in +@@ -260,6 +260,7 @@ + MACHDEP="$ac_md_system$ac_md_release" + + case $MACHDEP in ++ linux*) MACHDEP="linux2";; + cygwin*) MACHDEP="cygwin";; + darwin*) MACHDEP="darwin";; + atheos*) MACHDEP="atheos";; diff --git a/dev-lang/python/files/2.6/11_all_regenerate_platform-specific_modules.patch b/dev-lang/python/files/2.6/11_all_regenerate_platform-specific_modules.patch new file mode 100644 index 0000000..425e149 --- /dev/null +++ b/dev-lang/python/files/2.6/11_all_regenerate_platform-specific_modules.patch @@ -0,0 +1,110 @@ +http://bugs.python.org/issue12619 + +--- Lib/plat-aix4/regen ++++ Lib/plat-aix4/regen +@@ -5,4 +5,4 @@ + exit 1;; + esac + set -v +-h2py.py -i '(u_long)' /usr/include/netinet/in.h ++python$EXE ../../Tools/scripts/h2py.py -i '(u_long)' /usr/include/netinet/in.h +--- Lib/plat-linux2/regen ++++ Lib/plat-linux2/regen +@@ -5,4 +5,4 @@ + exit 1;; + esac + set -v +-h2py -i '(u_long)' /usr/include/sys/types.h /usr/include/netinet/in.h /usr/include/dlfcn.h ++python$EXE ../../Tools/scripts/h2py.py -i '(u_long)' /usr/include/sys/types.h /usr/include/netinet/in.h /usr/include/dlfcn.h /usr/include/linux/cdrom.h +--- Lib/plat-sunos5/regen ++++ Lib/plat-sunos5/regen +@@ -5,5 +5,4 @@ + exit 1;; + esac + set -v +-h2py -i '(u_long)' /usr/include/sys/types.h /usr/include/netinet/in.h /usr/include/sys/stropts.h /usr/include/dlfcn.h +- ++python$EXE ../../Tools/scripts/h2py.py -i '(u_long)' /usr/include/sys/types.h /usr/include/netinet/in.h /usr/include/sys/stropts.h /usr/include/dlfcn.h +--- Lib/plat-unixware7/regen ++++ Lib/plat-unixware7/regen +@@ -5,5 +5,5 @@ + exit 1;; + esac + set -v +-h2py -i '(u_long)' /usr/include/netinet/in.h +-h2py /usr/include/sys/stropts.h ++python$EXE ../../Tools/scripts/h2py.py -i '(u_long)' /usr/include/netinet/in.h ++python$EXE ../../Tools/scripts/h2py.py /usr/include/sys/stropts.h +--- Makefile.pre.in ++++ Makefile.pre.in +@@ -355,7 +355,7 @@ + + # Default target + all: build_all +-build_all: $(BUILDPYTHON) oldsharedmods sharedmods ++build_all: $(BUILDPYTHON) oldsharedmods sharedmods platformspecificmods + + # Compile a binary with gcc profile guided optimization. + profile-opt: +@@ -400,6 +400,26 @@ + *) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' LDFLAGS='$(LDFLAGS)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py build;; \ + esac + ++# Build the platform-specific modules ++platformspecificmods: $(BUILDPYTHON) sharedmods ++ @PLATDIR=$(PLATDIR); \ ++ if test ! -f $(srcdir)/Lib/$(PLATDIR)/regen; then \ ++ $(INSTALL) -d $(srcdir)/Lib/$(PLATDIR); \ ++ if test -f $(srcdir)/Lib/$${PLATDIR%?}/regen; then \ ++ cp $(srcdir)/Lib/$${PLATDIR%?}/regen $(srcdir)/Lib/$(PLATDIR)/regen; \ ++ else \ ++ cp $(srcdir)/Lib/plat-generic/regen $(srcdir)/Lib/$(PLATDIR)/regen; \ ++ fi \ ++ fi ++ @EXE="$(BUILDEXE)"; export EXE; \ ++ PATH="`pwd`:$$PATH"; export PATH; \ ++ PYTHONPATH="`pwd`/Lib"; export PYTHONPATH; \ ++ cd $(srcdir)/Lib/$(PLATDIR); \ ++ $(RUNSHARED) ./regen || exit 1; \ ++ for module in *.py; do \ ++ $(RUNSHARED) $(BUILDPYTHON) -c "import py_compile; py_compile.compile('$$module', cfile='/dev/null', doraise=True)" || exit 1; \ ++ done ++ + # Build static library + # avoid long command lines, same as LIBRARY_OBJS + $(LIBRARY): $(LIBRARY_OBJS) +@@ -845,7 +865,7 @@ + multiprocessing multiprocessing/dummy \ + lib-old \ + curses pydoc_data $(MACHDEPS) +-libinstall: build_all $(srcdir)/Lib/$(PLATDIR) ++libinstall: build_all + @for i in $(SCRIPTDIR) $(LIBDEST); \ + do \ + if test ! -d $(DESTDIR)$$i; then \ +@@ -920,16 +940,6 @@ + -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ + ./$(BUILDPYTHON) -Wi -t -c "import lib2to3.pygram, lib2to3.patcomp;lib2to3.patcomp.PatternCompiler()" + +-# Create the PLATDIR source directory, if one wasn't distributed.. +-$(srcdir)/Lib/$(PLATDIR): +- mkdir $(srcdir)/Lib/$(PLATDIR) +- cp $(srcdir)/Lib/plat-generic/regen $(srcdir)/Lib/$(PLATDIR)/regen +- export PATH; PATH="`pwd`:$$PATH"; \ +- export PYTHONPATH; PYTHONPATH="`pwd`/Lib"; \ +- export DYLD_FRAMEWORK_PATH; DYLD_FRAMEWORK_PATH="`pwd`"; \ +- export EXE; EXE="$(BUILDEXE)"; \ +- cd $(srcdir)/Lib/$(PLATDIR); $(RUNSHARED) ./regen +- + # Install the include files + INCLDIRSTOMAKE=$(INCLUDEDIR) $(CONFINCLUDEDIR) $(INCLUDEPY) $(CONFINCLUDEPY) + inclinstall: +@@ -1212,7 +1222,7 @@ + Python/thread.o: @THREADHEADERS@ + + # Declare targets that aren't real files +-.PHONY: all build_all sharedmods oldsharedmods test quicktest memtest ++.PHONY: all build_all sharedmods oldsharedmods platformspecificmods test quicktest memtest + .PHONY: install altinstall oldsharedinstall bininstall altbininstall + .PHONY: maninstall libinstall inclinstall libainstall sharedinstall + .PHONY: frameworkinstall frameworkinstallframework frameworkinstallstructure diff --git a/dev-lang/python/files/2.6/21_all_distutils_c++.patch b/dev-lang/python/files/2.6/21_all_distutils_c++.patch new file mode 100644 index 0000000..7e1e89a --- /dev/null +++ b/dev-lang/python/files/2.6/21_all_distutils_c++.patch @@ -0,0 +1,426 @@ +http://bugs.python.org/issue1222585 + +--- configure.in ++++ configure.in +@@ -1723,6 +1723,7 @@ + # Set info about shared libraries. + AC_SUBST(SO) + AC_SUBST(LDSHARED) ++AC_SUBST(LDCXXSHARED) + AC_SUBST(BLDSHARED) + AC_SUBST(CCSHARED) + AC_SUBST(LINKFORSHARED) +@@ -1775,36 +1776,47 @@ + IRIX/5*) LDSHARED="ld -shared";; + IRIX*/6*) LDSHARED="ld ${SGI_ABI} -shared -all";; + SunOS/5*) +- if test "$GCC" = "yes" +- then LDSHARED='$(CC) -shared' +- else LDSHARED='$(CC) -G'; ++ if test "$GCC" = "yes" ; then ++ LDSHARED='$(CC) -shared' ++ LDCXXSHARED='$(CXX) -shared' ++ else ++ LDSHARED='$(CC) -G' ++ LDCXXSHARED='$(CXX) -G' + fi ;; + hp*|HP*) +- if test "$GCC" = "yes" +- then LDSHARED='$(CC) -shared' +- else LDSHARED='ld -b'; ++ if test "$GCC" = "yes" ; then ++ LDSHARED='$(CC) -shared' ++ LDCXXSHARED='$(CXX) -shared' ++ else ++ LDSHARED='ld -b' + fi ;; + OSF*) LDSHARED="ld -shared -expect_unresolved \"*\"";; + Darwin/1.3*) + LDSHARED='$(CC) $(LDFLAGS) -bundle' ++ LDCXXSHARED='$(CXX) $(LDFLAGS) -bundle' + if test "$enable_framework" ; then + # Link against the framework. All externals should be defined. + BLDSHARED="$LDSHARED "'$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' + LDSHARED="$LDSHARED "'$(PYTHONFRAMEWORKPREFIX)/$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' ++ LDCXXSHARED="$LDCXXSHARED "'$(PYTHONFRAMEWORKPREFIX)/$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' + else + # No framework. Ignore undefined symbols, assuming they come from Python + LDSHARED="$LDSHARED -undefined suppress" ++ LDCXXSHARED="$LDCXXSHARED -undefined suppress" + fi ;; + Darwin/1.4*|Darwin/5.*|Darwin/6.*) + LDSHARED='$(CC) $(LDFLAGS) -bundle' ++ LDCXXSHARED='$(CXX) $(LDFLAGS) -bundle' + if test "$enable_framework" ; then + # Link against the framework. All externals should be defined. + BLDSHARED="$LDSHARED "'$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' + LDSHARED="$LDSHARED "'$(PYTHONFRAMEWORKPREFIX)/$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' ++ LDCXXSHARED="$LDCXXSHARED "'$(PYTHONFRAMEWORKPREFIX)/$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' + else + # No framework, use the Python app as bundle-loader + BLDSHARED="$LDSHARED "'-bundle_loader $(BUILDPYTHON)' + LDSHARED="$LDSHARED "'-bundle_loader $(BINDIR)/python$(VERSION)$(EXE)' ++ LDCXXSHARED="$LDCXXSHARED "'-bundle_loader $(BINDIR)/python$(VERSION)$(EXE)' + fi ;; + Darwin/*) + # Use -undefined dynamic_lookup whenever possible (10.3 and later). +@@ -1816,26 +1828,35 @@ + LDFLAGS="${UNIVERSAL_ARCH_FLAGS} -isysroot ${UNIVERSALSDK} ${LDFLAGS}" + fi + LDSHARED='$(CC) $(LDFLAGS) -bundle -undefined dynamic_lookup' ++ LDCXXSHARED='$(CXX) $(LDFLAGS) -bundle -undefined dynamic_lookup' + BLDSHARED="$LDSHARED" + else + LDSHARED='$(CC) $(LDFLAGS) -bundle' ++ LDCXXSHARED='$(CXX) $(LDFLAGS) -bundle' + if test "$enable_framework" ; then + # Link against the framework. All externals should be defined. + BLDSHARED="$LDSHARED "'$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' + LDSHARED="$LDSHARED "'$(PYTHONFRAMEWORKPREFIX)/$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' ++ LDCXXSHARED="$LDCXXSHARED "'$(PYTHONFRAMEWORKPREFIX)/$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' + else + # No framework, use the Python app as bundle-loader + BLDSHARED="$LDSHARED "'-bundle_loader $(BUILDPYTHON)' + LDSHARED="$LDSHARED "'-bundle_loader $(BINDIR)/python$(VERSION)$(EXE)' ++ LDCXXSHARED="$LDCXXSHARED "'-bundle_loader $(BINDIR)/python$(VERSION)$(EXE)' + fi + fi + ;; +- Linux*|GNU*|QNX*) LDSHARED='$(CC) -shared';; +- BSD/OS*/4*) LDSHARED="gcc -shared";; ++ Linux*|GNU*|QNX*) ++ LDSHARED='$(CC) -shared' ++ LDCXXSHARED='$(CXX) -shared';; ++ BSD/OS*/4*) ++ LDSHARED="gcc -shared" ++ LDCXXSHARED="g++ -shared";; + FreeBSD*) + if [[ "`$CC -dM -E - </dev/null | grep __ELF__`" != "" ]] + then + LDSHARED='$(CC) -shared ${LDFLAGS}' ++ LDCXXSHARED='$(CXX) -shared ${LDFLAGS}' + else + LDSHARED="ld -Bshareable ${LDFLAGS}" + fi;; +@@ -1843,6 +1864,7 @@ + if [[ "`$CC -dM -E - </dev/null | grep __ELF__`" != "" ]] + then + LDSHARED='$(CC) -shared $(CCSHARED) ${LDFLAGS}' ++ LDCXXSHARED='$(CXX) -shared $(CCSHARED) ${LDFLAGS}' + else + case `uname -r` in + [[01]].* | 2.[[0-7]] | 2.[[0-7]].*) +@@ -1850,23 +1872,36 @@ + ;; + *) + LDSHARED='$(CC) -shared $(CCSHARED) ${LDFLAGS}' ++ LDCXXSHARED='$(CXX) -shared $(CCSHARED) ${LDFLAGS}' + ;; + esac + fi;; +- NetBSD*|DragonFly*) LDSHARED="cc -shared ${LDFLAGS}";; ++ NetBSD*|DragonFly*) ++ LDSHARED="cc -shared ${LDFLAGS}" ++ LDCXXSHARED="c++ -shared ${LDFLAGS}";; + OpenUNIX*|UnixWare*) +- if test "$GCC" = "yes" +- then LDSHARED='$(CC) -shared' +- else LDSHARED='$(CC) -G' ++ if test "$GCC" = "yes" ; then ++ LDSHARED='$(CC) -shared' ++ LDCXXSHARED='$(CXX) -shared' ++ else ++ LDSHARED='$(CC) -G' ++ LDCXXSHARED='$(CXX) -G' + fi;; +- SCO_SV*) LDSHARED='$(CC) -Wl,-G,-Bexport';; ++ SCO_SV*) ++ LDSHARED='$(CC) -Wl,-G,-Bexport' ++ LDCXXSHARED='$(CXX) -Wl,-G,-Bexport';; + Monterey*) LDSHARED="cc -G -dy -Bdynamic -Bexport -L/usr/lib/ia64l64";; +- CYGWIN*) LDSHARED="gcc -shared -Wl,--enable-auto-image-base";; +- atheos*) LDSHARED="gcc -shared";; ++ CYGWIN*) ++ LDSHARED="gcc -shared -Wl,--enable-auto-image-base" ++ LDCXXSHARED="g++ -shared -Wl,--enable-auto-image-base";; ++ atheos*) ++ LDSHARED="gcc -shared" ++ LDCXXSHARED="g++ -shared";; + *) LDSHARED="ld";; + esac + fi + AC_MSG_RESULT($LDSHARED) ++LDCXXSHARED=${LDCXXSHARED-$LDSHARED} + BLDSHARED=${BLDSHARED-$LDSHARED} + # CCSHARED are the C *flags* used to create objects to go into a shared + # library (module) -- this is only needed for a few systems +--- Lib/distutils/cygwinccompiler.py ++++ Lib/distutils/cygwinccompiler.py +@@ -132,9 +132,13 @@ + self.set_executables(compiler='gcc -mcygwin -O -Wall', + compiler_so='gcc -mcygwin -mdll -O -Wall', + compiler_cxx='g++ -mcygwin -O -Wall', ++ compiler_so_cxx='g++ -mcygwin -mdll -O -Wall', + linker_exe='gcc -mcygwin', + linker_so=('%s -mcygwin %s' % +- (self.linker_dll, shared_option))) ++ (self.linker_dll, shared_option)), ++ linker_exe_cxx='g++ -mcygwin', ++ linker_so_cxx=('%s -mcygwin %s' % ++ (self.linker_dll, shared_option))) + + # cygwin and mingw32 need different sets of libraries + if self.gcc_version == "2.91.57": +@@ -160,8 +164,12 @@ + raise CompileError, msg + else: # for other files use the C-compiler + try: +- self.spawn(self.compiler_so + cc_args + [src, '-o', obj] + +- extra_postargs) ++ if self.detect_language(src) == 'c++': ++ self.spawn(self.compiler_so_cxx + cc_args + [src, '-o', obj] + ++ extra_postargs) ++ else: ++ self.spawn(self.compiler_so + cc_args + [src, '-o', obj] + ++ extra_postargs) + except DistutilsExecError, msg: + raise CompileError, msg + +@@ -322,10 +330,15 @@ + self.set_executables(compiler='gcc -mno-cygwin -O -Wall', + compiler_so='gcc -mno-cygwin -mdll -O -Wall', + compiler_cxx='g++ -mno-cygwin -O -Wall', ++ compiler_so_cxx='g++ -mno-cygwin -mdll -O -Wall', + linker_exe='gcc -mno-cygwin', + linker_so='%s -mno-cygwin %s %s' + % (self.linker_dll, shared_option, +- entry_point)) ++ entry_point), ++ linker_exe_cxx='g++ -mno-cygwin', ++ linker_so_cxx='%s -mno-cygwin %s %s' ++ % (self.linker_dll, shared_option, ++ entry_point)) + # Maybe we should also append -mthreads, but then the finished + # dlls need another dll (mingwm10.dll see Mingw32 docs) + # (-mthreads: Support thread-safe exception handling on `Mingw32') +--- Lib/distutils/emxccompiler.py ++++ Lib/distutils/emxccompiler.py +@@ -65,8 +65,12 @@ + # XXX optimization, warnings etc. should be customizable. + self.set_executables(compiler='gcc -Zomf -Zmt -O3 -fomit-frame-pointer -mprobe -Wall', + compiler_so='gcc -Zomf -Zmt -O3 -fomit-frame-pointer -mprobe -Wall', ++ compiler_cxx='g++ -Zomf -Zmt -O3 -fomit-frame-pointer -mprobe -Wall', ++ compiler_so_cxx='g++ -Zomf -Zmt -O3 -fomit-frame-pointer -mprobe -Wall', + linker_exe='gcc -Zomf -Zmt -Zcrtdll', +- linker_so='gcc -Zomf -Zmt -Zcrtdll -Zdll') ++ linker_so='gcc -Zomf -Zmt -Zcrtdll -Zdll', ++ linker_exe_cxx='g++ -Zomf -Zmt -Zcrtdll', ++ linker_so_cxx='g++ -Zomf -Zmt -Zcrtdll -Zdll') + + # want the gcc library statically linked (so that we don't have + # to distribute a version dependent on the compiler we have) +@@ -83,8 +87,12 @@ + raise CompileError, msg + else: # for other files use the C-compiler + try: +- self.spawn(self.compiler_so + cc_args + [src, '-o', obj] + +- extra_postargs) ++ if self.detect_language(src) == 'c++': ++ self.spawn(self.compiler_so_cxx + cc_args + [src, '-o', obj] + ++ extra_postargs) ++ else: ++ self.spawn(self.compiler_so + cc_args + [src, '-o', obj] + ++ extra_postargs) + except DistutilsExecError, msg: + raise CompileError, msg + +--- Lib/distutils/sysconfig.py ++++ Lib/distutils/sysconfig.py +@@ -167,9 +167,12 @@ + varies across Unices and is stored in Python's Makefile. + """ + if compiler.compiler_type == "unix": +- (cc, cxx, opt, cflags, ccshared, ldshared, so_ext) = \ +- get_config_vars('CC', 'CXX', 'OPT', 'CFLAGS', +- 'CCSHARED', 'LDSHARED', 'SO') ++ (cc, cxx, ccshared, ldshared, ldcxxshared, so_ext) = \ ++ get_config_vars('CC', 'CXX', 'CCSHARED', 'LDSHARED', ++ 'LDCXXSHARED', 'SO') ++ ++ cflags = '' ++ cxxflags = '' + + if 'CC' in os.environ: + cc = os.environ['CC'] +@@ -177,28 +180,40 @@ + cxx = os.environ['CXX'] + if 'LDSHARED' in os.environ: + ldshared = os.environ['LDSHARED'] ++ if 'LDCXXSHARED' in os.environ: ++ ldcxxshared = os.environ['LDCXXSHARED'] + if 'CPP' in os.environ: + cpp = os.environ['CPP'] + else: + cpp = cc + " -E" # not always + if 'LDFLAGS' in os.environ: + ldshared = ldshared + ' ' + os.environ['LDFLAGS'] ++ ldcxxshared = ldcxxshared + ' ' + os.environ['LDFLAGS'] + if 'CFLAGS' in os.environ: +- cflags = opt + ' ' + os.environ['CFLAGS'] ++ cflags = os.environ['CFLAGS'] + ldshared = ldshared + ' ' + os.environ['CFLAGS'] ++ if 'CXXFLAGS' in os.environ: ++ cxxflags = os.environ['CXXFLAGS'] ++ ldcxxshared = ldcxxshared + ' ' + os.environ['CXXFLAGS'] + if 'CPPFLAGS' in os.environ: + cpp = cpp + ' ' + os.environ['CPPFLAGS'] + cflags = cflags + ' ' + os.environ['CPPFLAGS'] ++ cxxflags = cxxflags + ' ' + os.environ['CPPFLAGS'] + ldshared = ldshared + ' ' + os.environ['CPPFLAGS'] ++ ldcxxshared = ldcxxshared + ' ' + os.environ['CPPFLAGS'] + + cc_cmd = cc + ' ' + cflags ++ cxx_cmd = cxx + ' ' + cxxflags + compiler.set_executables( + preprocessor=cpp, + compiler=cc_cmd, + compiler_so=cc_cmd + ' ' + ccshared, +- compiler_cxx=cxx, ++ compiler_cxx=cxx_cmd, ++ compiler_so_cxx=cxx_cmd + ' ' + ccshared, + linker_so=ldshared, +- linker_exe=cc) ++ linker_exe=cc, ++ linker_so_cxx=ldcxxshared, ++ linker_exe_cxx=cxx) + + compiler.shared_lib_extension = so_ext + +@@ -546,7 +561,7 @@ + for key in ('LDFLAGS', 'BASECFLAGS', 'LDSHARED', + # a number of derived variables. These need to be + # patched up as well. +- 'CFLAGS', 'PY_CFLAGS', 'BLDSHARED'): ++ 'CFLAGS', 'CXXFLAGS', 'PY_CFLAGS', 'BLDSHARED'): + flags = _config_vars[key] + flags = re.sub('-arch\s+\w+\s', ' ', flags) + flags = re.sub('-isysroot [^ \t]*', ' ', flags) +@@ -565,7 +580,7 @@ + for key in ('LDFLAGS', 'BASECFLAGS', 'LDSHARED', + # a number of derived variables. These need to be + # patched up as well. +- 'CFLAGS', 'PY_CFLAGS', 'BLDSHARED'): ++ 'CFLAGS', 'CXXFLAGS', 'PY_CFLAGS', 'BLDSHARED'): + + flags = _config_vars[key] + flags = re.sub('-arch\s+\w+\s', ' ', flags) +@@ -589,7 +604,7 @@ + for key in ('LDFLAGS', 'BASECFLAGS', 'LDSHARED', + # a number of derived variables. These need to be + # patched up as well. +- 'CFLAGS', 'PY_CFLAGS', 'BLDSHARED'): ++ 'CFLAGS', 'CXXFLAGS', 'PY_CFLAGS', 'BLDSHARED'): + + flags = _config_vars[key] + flags = re.sub('-isysroot\s+\S+(\s|$)', ' ', flags) +--- Lib/distutils/unixccompiler.py ++++ Lib/distutils/unixccompiler.py +@@ -114,14 +114,17 @@ + # are pretty generic; they will probably have to be set by an outsider + # (eg. using information discovered by the sysconfig about building + # Python extensions). +- executables = {'preprocessor' : None, +- 'compiler' : ["cc"], +- 'compiler_so' : ["cc"], +- 'compiler_cxx' : ["cc"], +- 'linker_so' : ["cc", "-shared"], +- 'linker_exe' : ["cc"], +- 'archiver' : ["ar", "-cr"], +- 'ranlib' : None, ++ executables = {'preprocessor' : None, ++ 'compiler' : ["cc"], ++ 'compiler_so' : ["cc"], ++ 'compiler_cxx' : ["c++"], ++ 'compiler_so_cxx' : ["c++"], ++ 'linker_so' : ["cc", "-shared"], ++ 'linker_exe' : ["cc"], ++ 'linker_so_cxx' : ["c++", "-shared"], ++ 'linker_exe_cxx' : ["c++"], ++ 'archiver' : ["ar", "-cr"], ++ 'ranlib' : None, + } + + if sys.platform[:6] == "darwin": +@@ -171,11 +174,18 @@ + + def _compile(self, obj, src, ext, cc_args, extra_postargs, pp_opts): + compiler_so = self.compiler_so ++ compiler_so_cxx = self.compiler_so_cxx + if sys.platform == 'darwin': + compiler_so = _darwin_compiler_fixup(compiler_so, cc_args + extra_postargs) ++ compiler_so_cxx = _darwin_compiler_fixup(compiler_so_cxx, cc_args + ++ extra_postargs) + try: +- self.spawn(compiler_so + cc_args + [src, '-o', obj] + +- extra_postargs) ++ if self.detect_language(src) == 'c++': ++ self.spawn(compiler_so_cxx + cc_args + [src, '-o', obj] + ++ extra_postargs) ++ else: ++ self.spawn(compiler_so + cc_args + [src, '-o', obj] + ++ extra_postargs) + except DistutilsExecError, msg: + raise CompileError, msg + +@@ -232,23 +242,16 @@ + ld_args.extend(extra_postargs) + self.mkpath(os.path.dirname(output_filename)) + try: +- if target_desc == CCompiler.EXECUTABLE: +- linker = self.linker_exe[:] ++ if target_lang == "c++": ++ if target_desc == CCompiler.EXECUTABLE: ++ linker = self.linker_exe_cxx[:] ++ else: ++ linker = self.linker_so_cxx[:] + else: +- linker = self.linker_so[:] +- if target_lang == "c++" and self.compiler_cxx: +- # skip over environment variable settings if /usr/bin/env +- # is used to set up the linker's environment. +- # This is needed on OSX. Note: this assumes that the +- # normal and C++ compiler have the same environment +- # settings. +- i = 0 +- if os.path.basename(linker[0]) == "env": +- i = 1 +- while '=' in linker[i]: +- i = i + 1 +- +- linker[i] = self.compiler_cxx[i] ++ if target_desc == CCompiler.EXECUTABLE: ++ linker = self.linker_exe[:] ++ else: ++ linker = self.linker_so[:] + + if sys.platform == 'darwin': + linker = _darwin_compiler_fixup(linker, ld_args) +--- Makefile.pre.in ++++ Makefile.pre.in +@@ -104,6 +104,7 @@ + SO= @SO@ + LDSHARED= @LDSHARED@ + BLDSHARED= @BLDSHARED@ ++LDCXXSHARED= @LDCXXSHARED@ + DESTSHARED= $(BINLIBDEST)/lib-dynload + + # Executable suffix (.exe on Windows and Mac OS X) +@@ -397,7 +398,7 @@ + # Build the shared modules + sharedmods: $(BUILDPYTHON) + @case $$MAKEFLAGS in \ +- *) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' LDFLAGS='$(LDFLAGS)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py build;; \ ++ *) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' LDFLAGS='$(LDFLAGS)' CFLAGS='$(CFLAGS)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py build;; \ + esac + + # Build the platform-specific modules diff --git a/dev-lang/python/files/2.6/22_all_turkish_locale.patch b/dev-lang/python/files/2.6/22_all_turkish_locale.patch new file mode 100644 index 0000000..1321c3c --- /dev/null +++ b/dev-lang/python/files/2.6/22_all_turkish_locale.patch @@ -0,0 +1,128 @@ +https://bugs.gentoo.org/show_bug.cgi?id=250075 +http://bugs.python.org/issue1813 + +--- Lib/decimal.py ++++ Lib/decimal.py +@@ -153,6 +153,13 @@ + ROUND_HALF_DOWN = 'ROUND_HALF_DOWN' + ROUND_05UP = 'ROUND_05UP' + ++import string ++ ++def ascii_upper(s): ++ trans_table = string.maketrans(string.ascii_lowercase, string.ascii_uppercase) ++ return s.translate(trans_table) ++ ++ + # Errors + + class DecimalException(ArithmeticError): +@@ -3645,7 +3652,7 @@ + if name.startswith('_round_')] + for name in rounding_functions: + # name is like _round_half_even, goes to the global ROUND_HALF_EVEN value. +- globalname = name[1:].upper() ++ globalname = ascii_upper(name[1:]) + val = globals()[globalname] + Decimal._pick_rounding_function[val] = name + +--- Lib/email/__init__.py ++++ Lib/email/__init__.py +@@ -109,15 +109,19 @@ + 'Text', + ] + ++import string ++lower_map = string.maketrans(string.ascii_uppercase, string.ascii_lowercase) ++ ++ + for _name in _LOWERNAMES: +- importer = LazyImporter(_name.lower()) ++ importer = LazyImporter(_name.translate(lower_map)) + sys.modules['email.' + _name] = importer + setattr(sys.modules['email'], _name, importer) + + + import email.mime + for _name in _MIMENAMES: +- importer = LazyImporter('mime.' + _name.lower()) ++ importer = LazyImporter('mime.' + _name.translate(lower_map)) + sys.modules['email.MIME' + _name] = importer + setattr(sys.modules['email'], 'MIME' + _name, importer) + setattr(sys.modules['email.mime'], _name, importer) +--- Lib/locale.py ++++ Lib/locale.py +@@ -313,6 +313,14 @@ + # overridden below) + _setlocale = setlocale + ++# Avoid relying on the locale-dependent .lower() method ++# (see bug #1813). ++_ascii_lower_map = ''.join( ++ chr(x + 32 if x >= ord('A') and x <= ord('Z') else x) ++ for x in range(256) ++) ++ ++ + def normalize(localename): + + """ Returns a normalized locale code for the given locale +@@ -330,7 +338,7 @@ + + """ + # Normalize the locale name and extract the encoding +- fullname = localename.lower() ++ fullname = localename.encode('ascii').translate(_ascii_lower_map) + if ':' in fullname: + # ':' is sometimes used as encoding delimiter. + fullname = fullname.replace(':', '.') +--- Lib/test/test_codecs.py ++++ Lib/test/test_codecs.py +@@ -1,5 +1,6 @@ + from test import test_support + import unittest ++import locale + import codecs + import sys, StringIO, _testcapi + +@@ -1133,6 +1134,16 @@ + self.assertRaises(LookupError, codecs.lookup, "__spam__") + self.assertRaises(LookupError, codecs.lookup, " ") + ++ def test_lookup_with_locale(self): ++ # Bug #1813: when normalizing codec name, lowercasing must be locale ++ # agnostic, otherwise the looked up codec name might end up wrong. ++ try: ++ locale.setlocale(locale.LC_CTYPE, 'tr') ++ except locale.Error: ++ # SKIPped test ++ return ++ codecs.lookup('ISO8859_1') ++ + def test_getencoder(self): + self.assertRaises(TypeError, codecs.getencoder) + self.assertRaises(LookupError, codecs.getencoder, "__spam__") +--- Python/codecs.c ++++ Python/codecs.c +@@ -45,6 +45,12 @@ + return -1; + } + ++/* isupper() forced into the ASCII locale */ ++#define ascii_isupper(x) (((x) >= 0x41) && ((x) <= 0x5A)) ++/* tolower() forced into the ASCII locale */ ++#define ascii_tolower(x) (ascii_isupper(x) ? ((x) + 0x20) : (x)) ++ ++ + /* Convert a string to a normalized Python string: all characters are + converted to lower case, spaces are replaced with underscores. */ + +@@ -70,7 +76,7 @@ + if (ch == ' ') + ch = '-'; + else +- ch = tolower(Py_CHARMASK(ch)); ++ ch = ascii_tolower(Py_CHARMASK(ch)); + p[i] = ch; + } + return v; diff --git a/dev-lang/python/files/2.6/23_all_arm_OABI.patch b/dev-lang/python/files/2.6/23_all_arm_OABI.patch new file mode 100644 index 0000000..e373281 --- /dev/null +++ b/dev-lang/python/files/2.6/23_all_arm_OABI.patch @@ -0,0 +1,185 @@ +https://bugs.gentoo.org/show_bug.cgi?id=266703 +http://bugs.python.org/issue1762561 + +--- Objects/floatobject.c ++++ Objects/floatobject.c +@@ -1691,9 +1691,18 @@ + /* this is for the benefit of the pack/unpack routines below */ + + typedef enum { +- unknown_format, ieee_big_endian_format, ieee_little_endian_format ++ unknown_format, ++ ieee_big_endian_format, ++ ieee_little_endian_format, ++ ieee_arm_mixed_endian_format + } float_format_type; + ++/* byte order of a C double for each of the recognised IEEE formats */ ++ ++static const unsigned char BIG_ENDIAN_BYTEORDER[8] = {7,6,5,4,3,2,1,0}; ++static const unsigned char LITTLE_ENDIAN_BYTEORDER[8] = {0,1,2,3,4,5,6,7}; ++static const unsigned char ARM_MIXED_ENDIAN_BYTEORDER[8] = {4,5,6,7,0,1,2,3}; ++ + static float_format_type double_format, float_format; + static float_format_type detected_double_format, detected_float_format; + +@@ -1730,6 +1739,8 @@ + return PyString_FromString("IEEE, little-endian"); + case ieee_big_endian_format: + return PyString_FromString("IEEE, big-endian"); ++ case ieee_arm_mixed_endian_format: ++ return PyString_FromString("IEEE, ARM mixed-endian"); + default: + Py_FatalError("insane float_format or double_format"); + return NULL; +@@ -1743,8 +1754,9 @@ + "used in Python's test suite.\n" + "\n" + "typestr must be 'double' or 'float'. This function returns whichever of\n" +-"'unknown', 'IEEE, big-endian' or 'IEEE, little-endian' best describes the\n" +-"format of floating point numbers used by the C type named by typestr."); ++"'unknown', 'IEEE, big-endian', 'IEEE, little-endian' or\n" ++"'IEEE, ARM mixed-endian' best describes the format of floating-point\n" ++"numbers used by the C type named by typestr."); + + static PyObject * + float_setformat(PyTypeObject *v, PyObject* args) +@@ -1782,11 +1794,15 @@ + else if (strcmp(format, "IEEE, big-endian") == 0) { + f = ieee_big_endian_format; + } ++ else if (strcmp(format, "IEEE, ARM mixed-endian") == 0 && ++ p == &double_format) { ++ f = ieee_arm_mixed_endian_format; ++ } + else { + PyErr_SetString(PyExc_ValueError, + "__setformat__() argument 2 must be " +- "'unknown', 'IEEE, little-endian' or " +- "'IEEE, big-endian'"); ++ "'unknown', 'IEEE, little-endian', " ++ "'IEEE, big-endian' or 'IEEE, ARM mixed-endian'"); + return NULL; + + } +@@ -1809,8 +1825,10 @@ + "used in Python's test suite.\n" + "\n" + "typestr must be 'double' or 'float'. fmt must be one of 'unknown',\n" +-"'IEEE, big-endian' or 'IEEE, little-endian', and in addition can only be\n" +-"one of the latter two if it appears to match the underlying C reality.\n" ++"'IEEE, big-endian', 'IEEE, little-endian' or 'IEEE, ARM mixed-endian'\n" ++"and in addition can only be one of the last three if it appears to\n" ++"match the underlying C reality. Note that the ARM mixed-endian\n" ++"format can only be set for the 'double' type, not for 'float'.\n" + "\n" + "Overrides the automatic determination of C-level floating point type.\n" + "This affects how floats are converted to and from binary strings."); +@@ -2005,7 +2023,11 @@ + Note that if we're on some whacked-out platform which uses + IEEE formats but isn't strictly little-endian or big- + endian, we will fall back to the portable shifts & masks +- method. */ ++ method. ++ ++ Addendum: We also attempt to detect the mixed-endian IEEE format ++ used by the ARM old ABI (OABI) and also used by the FPA ++ floating-point unit on some older ARM processors. */ + + #if SIZEOF_DOUBLE == 8 + { +@@ -2014,6 +2036,8 @@ + detected_double_format = ieee_big_endian_format; + else if (memcmp(&x, "\x05\x04\x03\x02\x01\xff\x3f\x43", 8) == 0) + detected_double_format = ieee_little_endian_format; ++ else if (memcmp(&x, "\x01\xff\x3f\x43\x05\x04\x03\x02", 8) == 0) ++ detected_double_format = ieee_arm_mixed_endian_format; + else + detected_double_format = unknown_format; + } +@@ -2353,17 +2377,31 @@ + } + else { + const char *s = (char*)&x; +- int i, incr = 1; ++ int i; ++ const unsigned char *byteorder; + +- if ((double_format == ieee_little_endian_format && !le) +- || (double_format == ieee_big_endian_format && le)) { +- p += 7; +- incr = -1; ++ switch (double_format) { ++ case ieee_little_endian_format: ++ byteorder = LITTLE_ENDIAN_BYTEORDER; ++ break; ++ case ieee_big_endian_format: ++ byteorder = BIG_ENDIAN_BYTEORDER; ++ break; ++ case ieee_arm_mixed_endian_format: ++ byteorder = ARM_MIXED_ENDIAN_BYTEORDER; ++ break; ++ default: ++ Py_FatalError("insane float_format or double_format"); ++ return -1; + } + +- for (i = 0; i < 8; i++) { +- *p = *s++; +- p += incr; ++ if (le) { ++ for (i = 0; i < 8; i++) ++ p[byteorder[i]] = *s++; ++ } ++ else { ++ for (i = 0; i < 8; i++) ++ p[7-byteorder[i]] = *s++; + } + return 0; + } +@@ -2522,22 +2560,33 @@ + } + else { + double x; ++ char *s = (char*)&x; ++ const unsigned char *byteorder; ++ int i; ++ ++ switch (double_format) { ++ case ieee_little_endian_format: ++ byteorder = LITTLE_ENDIAN_BYTEORDER; ++ break; ++ case ieee_big_endian_format: ++ byteorder = BIG_ENDIAN_BYTEORDER; ++ break; ++ case ieee_arm_mixed_endian_format: ++ byteorder = ARM_MIXED_ENDIAN_BYTEORDER; ++ break; ++ default: ++ Py_FatalError("insane float_format or double_format"); ++ return -1.0; ++ } + +- if ((double_format == ieee_little_endian_format && !le) +- || (double_format == ieee_big_endian_format && le)) { +- char buf[8]; +- char *d = &buf[7]; +- int i; +- +- for (i = 0; i < 8; i++) { +- *d-- = *p++; +- } +- memcpy(&x, buf, 8); ++ if (le) { ++ for (i=0; i<8; i++) ++ *s++ = p[byteorder[i]]; + } + else { +- memcpy(&x, p, 8); ++ for (i=0; i<8; i++) ++ *s++ = p[7-byteorder[i]]; + } +- + return x; + } + } diff --git a/dev-lang/python/files/2.6/24_all_ctypes_mmap_wx.patch b/dev-lang/python/files/2.6/24_all_ctypes_mmap_wx.patch new file mode 100644 index 0000000..918d97c --- /dev/null +++ b/dev-lang/python/files/2.6/24_all_ctypes_mmap_wx.patch @@ -0,0 +1,124 @@ +https://bugs.gentoo.org/show_bug.cgi?id=329499 +http://bugs.python.org/issue5504 +http://hg.python.org/cpython/rev/e13ea83e2edb + +--- Modules/_ctypes/callbacks.c ++++ Modules/_ctypes/callbacks.c +@@ -21,8 +21,8 @@ + Py_XDECREF(self->converters); + Py_XDECREF(self->callable); + Py_XDECREF(self->restype); +- if (self->pcl) +- FreeClosure(self->pcl); ++ if (self->pcl_write) ++ ffi_closure_free(self->pcl_write); + PyObject_GC_Del(self); + } + +@@ -373,7 +373,8 @@ + return NULL; + } + +- p->pcl = NULL; ++ p->pcl_exec = NULL; ++ p->pcl_write = NULL; + memset(&p->cif, 0, sizeof(p->cif)); + p->converters = NULL; + p->callable = NULL; +@@ -403,8 +404,9 @@ + + assert(CThunk_CheckExact(p)); + +- p->pcl = MallocClosure(); +- if (p->pcl == NULL) { ++ p->pcl_write = ffi_closure_alloc(sizeof(ffi_closure), ++ &p->pcl_exec); ++ if (p->pcl_write == NULL) { + PyErr_NoMemory(); + goto error; + } +@@ -449,7 +451,9 @@ + "ffi_prep_cif failed with %d", result); + goto error; + } +- result = ffi_prep_closure(p->pcl, &p->cif, closure_fcn, p); ++ result = ffi_prep_closure_loc(p->pcl_write, &p->cif, closure_fcn, ++ p, ++ p->pcl_exec); + if (result != FFI_OK) { + PyErr_Format(PyExc_RuntimeError, + "ffi_prep_closure failed with %d", result); +--- Modules/_ctypes/_ctypes.c ++++ Modules/_ctypes/_ctypes.c +@@ -3443,7 +3443,7 @@ + self->callable = callable; + + self->thunk = thunk; +- *(void **)self->b_ptr = (void *)thunk->pcl; ++ *(void **)self->b_ptr = (void *)thunk->pcl_exec; + + Py_INCREF((PyObject *)thunk); /* for KeepRef */ + if (-1 == KeepRef((CDataObject *)self, 0, (PyObject *)thunk)) { +--- Modules/_ctypes/ctypes.h ++++ Modules/_ctypes/ctypes.h +@@ -95,7 +95,8 @@ + + typedef struct { + PyObject_VAR_HEAD +- ffi_closure *pcl; /* the C callable */ ++ ffi_closure *pcl_write; /* the C callable, writeable */ ++ void *pcl_exec; /* the C callable, executable */ + ffi_cif cif; + int flags; + PyObject *converters; +@@ -427,9 +428,6 @@ + + #endif + +-extern void FreeClosure(void *); +-extern void *MallocClosure(void); +- + extern void _AddTraceback(char *, char *, int); + + extern PyObject *CData_FromBaseObj(PyObject *type, PyObject *base, Py_ssize_t index, char *adr); +--- Modules/_ctypes/malloc_closure.c ++++ Modules/_ctypes/malloc_closure.c +@@ -93,7 +93,7 @@ + /******************************************************************/ + + /* put the item back into the free list */ +-void FreeClosure(void *p) ++void ffi_closure_free(void *p) + { + ITEM *item = (ITEM *)p; + item->next = free_list; +@@ -101,7 +101,7 @@ + } + + /* return one item from the free list, allocating more if needed */ +-void *MallocClosure(void) ++void *ffi_closure_alloc(size_t ignored, void** codeloc) + { + ITEM *item; + if (!free_list) +@@ -110,5 +110,7 @@ + return NULL; + item = free_list; + free_list = item->next; +- return item; ++ *codeloc = (void *)item; ++ return (void *)item; + } ++ +--- setup.py ++++ setup.py +@@ -1885,8 +1885,7 @@ + '_ctypes/callbacks.c', + '_ctypes/callproc.c', + '_ctypes/stgdict.c', +- '_ctypes/cfield.c', +- '_ctypes/malloc_closure.c'] ++ '_ctypes/cfield.c'] + depends = ['_ctypes/ctypes.h'] + + if sys.platform == 'darwin': diff --git a/dev-lang/python/files/2.6/25_all_gdbm-1.9.patch b/dev-lang/python/files/2.6/25_all_gdbm-1.9.patch new file mode 100644 index 0000000..85c991b --- /dev/null +++ b/dev-lang/python/files/2.6/25_all_gdbm-1.9.patch @@ -0,0 +1,14 @@ +http://bugs.python.org/issue13007 +http://hg.python.org/cpython/rev/14cafb8d1480 + +--- Lib/whichdb.py ++++ Lib/whichdb.py +@@ -91,7 +91,7 @@ + return "" + + # Check for GNU dbm +- if magic == 0x13579ace: ++ if magic in (0x13579ace, 0x13579acd, 0x13579acf): + return "gdbm" + + # Check for old Berkeley db hash file format v2 diff --git a/dev-lang/python/files/2.6/26_all_expat-2.1.patch b/dev-lang/python/files/2.6/26_all_expat-2.1.patch new file mode 100644 index 0000000..9872136 --- /dev/null +++ b/dev-lang/python/files/2.6/26_all_expat-2.1.patch @@ -0,0 +1,15 @@ +http://bugs.python.org/issue9054 +http://hg.python.org/cpython/rev/5b536c90ca36 + +--- Modules/pyexpat.c ++++ Modules/pyexpat.c +@@ -456,6 +456,9 @@ + PyObject *args; + PyObject *temp; + ++ if (!have_handler(self, CharacterData)) ++ return -1; ++ + args = PyTuple_New(1); + if (args == NULL) + return -1; diff --git a/dev-lang/python/files/2.6/41_all_crosscompile.patch b/dev-lang/python/files/2.6/41_all_crosscompile.patch new file mode 100644 index 0000000..a398769 --- /dev/null +++ b/dev-lang/python/files/2.6/41_all_crosscompile.patch @@ -0,0 +1,113 @@ +--- configure.in ++++ configure.in +@@ -3905,7 +3905,7 @@ + AC_MSG_RESULT(no) + fi + +-AC_MSG_CHECKING(for %zd printf() format support) ++AC_CACHE_CHECK([for %zd printf() format support], [py_cv_has_zd_printf], [dnl + AC_TRY_RUN([#include <stdio.h> + #include <stddef.h> + #include <string.h> +@@ -3939,10 +3939,13 @@ + 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)) ++}], [py_cv_has_zd_printf="yes"], ++ [py_cv_has_zd_printf="no"], ++ [py_cv_has_zd_printf="cross -- assuming yes"] ++)]) ++if test "$py_cv_has_zd_printf" != "no" ; then ++ AC_DEFINE(PY_FORMAT_SIZE_T, "z", [Define to printf format modifier for Py_ssize_t]) ++fi + + AC_CHECK_TYPE(socklen_t,, + AC_DEFINE(socklen_t,int, +--- Makefile.pre.in ++++ Makefile.pre.in +@@ -176,6 +176,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 +@@ -209,6 +210,7 @@ + # Parser + PGEN= Parser/pgen$(EXE) + ++HOSTPGEN= $(PGEN)$(EXE) + POBJS= \ + Parser/acceler.o \ + Parser/grammar1.o \ +@@ -398,7 +400,7 @@ + # Build the shared modules + sharedmods: $(BUILDPYTHON) + @case $$MAKEFLAGS in \ +- *) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' LDFLAGS='$(LDFLAGS)' CFLAGS='$(CFLAGS)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py build;; \ ++ *) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' LDFLAGS='$(LDFLAGS)' CFLAGS='$(CFLAGS)' ./$(HOSTPYTHON) -E $(srcdir)/setup.py build;; \ + esac + + # Build the platform-specific modules +@@ -540,7 +542,7 @@ + + $(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) +@@ -923,23 +925,23 @@ + 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()" + + # Install the include files + INCLDIRSTOMAKE=$(INCLUDEDIR) $(CONFINCLUDEDIR) $(INCLUDEPY) $(CONFINCLUDEPY) +@@ -1015,7 +1017,7 @@ + # 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) \ +--- setup.py ++++ setup.py +@@ -334,6 +334,7 @@ + try: + imp.load_dynamic(ext.name, ext_filename) + except ImportError, why: ++ return + self.failed.append(ext.name) + self.announce('*** WARNING: renaming "%s" since importing it' + ' failed: %s' % (ext.name, why), level=3) diff --git a/dev-lang/python/files/2.6/62_all_xml.use_pyxml.patch b/dev-lang/python/files/2.6/62_all_xml.use_pyxml.patch new file mode 100644 index 0000000..757299b --- /dev/null +++ b/dev-lang/python/files/2.6/62_all_xml.use_pyxml.patch @@ -0,0 +1,41 @@ +--- Lib/xml/__init__.py ++++ Lib/xml/__init__.py +@@ -28,20 +28,23 @@ + _MINIMUM_XMLPLUS_VERSION = (0, 8, 4) + + +-try: ++def use_pyxml(): + import _xmlplus +-except ImportError: +- pass +-else: +- try: +- v = _xmlplus.version_info +- except AttributeError: +- # _xmlplus is too old; ignore it +- pass ++ v = _xmlplus.version_info ++ if v >= _MINIMUM_XMLPLUS_VERSION: ++ import sys ++ _xmlplus.__path__.extend(__path__) ++ sys.modules[__name__] = _xmlplus ++ cleared_modules = [] ++ redefined_modules = [] ++ for module in sys.modules: ++ if module.startswith("xml.") and not module.startswith(("xml.marshal", "xml.schema", "xml.utils", "xml.xpath", "xml.xslt")): ++ cleared_modules.append(module) ++ if module.startswith(("xml.__init__", "xml.dom", "xml.parsers", "xml.sax")) and sys.modules[module] is not None: ++ redefined_modules.append(module) ++ for module in cleared_modules: ++ del sys.modules[module] ++ for module in sorted(redefined_modules): ++ __import__(module) + else: +- if v >= _MINIMUM_XMLPLUS_VERSION: +- import sys +- _xmlplus.__path__.extend(__path__) +- sys.modules[__name__] = _xmlplus +- else: +- del v ++ raise ImportError("PyXML too old: %s" % ".".join(str(x) for x in v)) diff --git a/dev-lang/python/files/2.6/81_all_use_new_readline_function_types__closes__20374_.patch b/dev-lang/python/files/2.6/81_all_use_new_readline_function_types__closes__20374_.patch new file mode 100644 index 0000000..b63f4c7 --- /dev/null +++ b/dev-lang/python/files/2.6/81_all_use_new_readline_function_types__closes__20374_.patch @@ -0,0 +1,28 @@ +# HG changeset patch +# User Benjamin Peterson <benjamin@python.org> +# Date 1390541532 18000 +# Fri Jan 24 00:32:12 2014 -0500 +# Branch 2.7 +# Node ID 79b82ebc4fd17fda401c32840da1da0577e3c73e +# Parent f28b60141c5c417111670a22b223f0c411136c7b +use new readline function types (closes #20374) + +diff --git a/Modules/readline.c b/Modules/readline.c +--- a/Modules/readline.c ++++ b/Modules/readline.c +@@ -911,12 +911,12 @@ + rl_bind_key_in_map ('\t', rl_complete, emacs_meta_keymap); + rl_bind_key_in_map ('\033', rl_complete, emacs_meta_keymap); + /* Set our hook functions */ +- rl_startup_hook = (Function *)on_startup_hook; ++ rl_startup_hook = (rl_hook_func_t *)on_startup_hook; + #ifdef HAVE_RL_PRE_INPUT_HOOK +- rl_pre_input_hook = (Function *)on_pre_input_hook; ++ rl_pre_input_hook = (rl_hook_func_t *)on_pre_input_hook; + #endif + /* Set our completion function */ +- rl_attempted_completion_function = (CPPFunction *)flex_complete; ++ rl_attempted_completion_function = (rl_completion_func_t *)flex_complete; + /* Set Python word break characters */ + completer_word_break_characters = + rl_completer_word_break_characters = diff --git a/dev-lang/python/files/2.6/82_all_new_plan__just_remove_typecasts__closes__20374_.patch b/dev-lang/python/files/2.6/82_all_new_plan__just_remove_typecasts__closes__20374_.patch new file mode 100644 index 0000000..71ac4b1 --- /dev/null +++ b/dev-lang/python/files/2.6/82_all_new_plan__just_remove_typecasts__closes__20374_.patch @@ -0,0 +1,37 @@ +# HG changeset patch +# User Benjamin Peterson <benjamin@python.org> +# Date 1390581856 18000 +# Fri Jan 24 11:44:16 2014 -0500 +# Branch 2.7 +# Node ID 5e42e5764ac6277d61c0af231d402f59c223c91a +# Parent 79b82ebc4fd17fda401c32840da1da0577e3c73e +new plan: just remove typecasts (closes #20374) + +diff --git a/Modules/readline.c b/Modules/readline.c +--- a/Modules/readline.c ++++ b/Modules/readline.c +@@ -852,7 +852,7 @@ + * before calling the normal completer */ + + static char ** +-flex_complete(char *text, int start, int end) ++flex_complete(const char *text, int start, int end) + { + #ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER + rl_completion_append_character ='\0'; +@@ -911,12 +911,12 @@ + rl_bind_key_in_map ('\t', rl_complete, emacs_meta_keymap); + rl_bind_key_in_map ('\033', rl_complete, emacs_meta_keymap); + /* Set our hook functions */ +- rl_startup_hook = (rl_hook_func_t *)on_startup_hook; ++ rl_startup_hook = on_startup_hook; + #ifdef HAVE_RL_PRE_INPUT_HOOK +- rl_pre_input_hook = (rl_hook_func_t *)on_pre_input_hook; ++ rl_pre_input_hook = on_pre_input_hook; + #endif + /* Set our completion function */ +- rl_attempted_completion_function = (rl_completion_func_t *)flex_complete; ++ rl_attempted_completion_function = flex_complete; + /* Set Python word break characters */ + completer_word_break_characters = + rl_completer_word_break_characters = diff --git a/dev-lang/python/files/2.6/83_all_Issue__20374__Avoid_compiler_warnings_when_compiling_readline_with_libedit_.patch b/dev-lang/python/files/2.6/83_all_Issue__20374__Avoid_compiler_warnings_when_compiling_readline_with_libedit_.patch new file mode 100644 index 0000000..9934b80 --- /dev/null +++ b/dev-lang/python/files/2.6/83_all_Issue__20374__Avoid_compiler_warnings_when_compiling_readline_with_libedit_.patch @@ -0,0 +1,37 @@ +# HG changeset patch +# User Ned Deily <nad@acm.org> +# Date 1391647946 28800 +# Wed Feb 05 16:52:26 2014 -0800 +# Branch 2.7 +# Node ID 0b5b0bfcc7b1dba77ee70ec6abba9037abf93acb +# Parent 48c5c18110ae810c09b176f4cedf228cc3487451 +Issue #20374: Avoid compiler warnings when compiling readline with libedit. + +diff --git a/Modules/readline.c b/Modules/readline.c +--- a/Modules/readline.c ++++ b/Modules/readline.c +@@ -749,15 +749,24 @@ + return result; + } + ++ + static int ++#if defined(_RL_FUNCTION_TYPEDEF) + on_startup_hook(void) ++#else ++on_startup_hook() ++#endif + { + return on_hook(startup_hook); + } + + #ifdef HAVE_RL_PRE_INPUT_HOOK + static int ++#if defined(_RL_FUNCTION_TYPEDEF) + on_pre_input_hook(void) ++#else ++on_pre_input_hook() ++#endif + { + return on_hook(pre_input_hook); + } diff --git a/dev-lang/python/files/2.6/99_all_tcl86.patch b/dev-lang/python/files/2.6/99_all_tcl86.patch new file mode 100644 index 0000000..2362e98 --- /dev/null +++ b/dev-lang/python/files/2.6/99_all_tcl86.patch @@ -0,0 +1,11 @@ +--- a/setup.py ++++ b/setup.py +@@ -1518,7 +1518,7 @@ + # The versions with dots are used on Unix, and the versions without + # dots on Windows, for detection by cygwin. + tcllib = tklib = tcl_includes = tk_includes = None +- for version in ['8.5', '85', '8.4', '84', '8.3', '83', '8.2', ++ for version in ['8.6', '86', '8.5', '85', '8.4', '84', '8.3', '83', '8.2', + '82', '8.1', '81', '8.0', '80']: + tklib = self.compiler.find_library_file(lib_dirs, 'tk' + version) + tcllib = self.compiler.find_library_file(lib_dirs, 'tcl' + version) diff --git a/dev-lang/python/python-2.6.9.ebuild b/dev-lang/python/python-2.6.9.ebuild new file mode 100644 index 0000000..4fab57d --- /dev/null +++ b/dev-lang/python/python-2.6.9.ebuild @@ -0,0 +1,340 @@ +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI="5" +WANT_AUTOMAKE="none" +WANT_LIBTOOL="none" + +inherit autotools eutils flag-o-matic multilib pax-utils python-utils-r1 toolchain-funcs multiprocessing + +MY_P="Python-${PV}" + +DESCRIPTION="An interpreted, interactive, object-oriented programming language" +HOMEPAGE="http://www.python.org/" +SRC_URI="http://www.python.org/ftp/python/${PV}/${MY_P}.tar.xz" + +LICENSE="PSF-2" +SLOT="2.6" +KEYWORDS="" +IUSE="-berkdb build doc elibc_uclibc examples gdbm hardened ipv6 +ncurses +readline sqlite +ssl +threads tk +wide-unicode wininst +xml" + +# Do not add a dependency on dev-lang/python to this ebuild. +# If you need to apply a patch which requires python for bootstrapping, please +# run the bootstrap code on your dev box and include the results in the +# patchset. See bug 447752. + +RDEPEND="app-arch/bzip2 + >=sys-libs/zlib-1.1.3 + virtual/libffi + virtual/libintl + !build? ( + berkdb? ( || ( + sys-libs/db:4.7 + sys-libs/db:4.6 + sys-libs/db:4.5 + sys-libs/db:4.4 + sys-libs/db:4.3 + sys-libs/db:4.2 + ) ) + gdbm? ( sys-libs/gdbm[berkdb] ) + ncurses? ( + >=sys-libs/ncurses-5.2 + readline? ( >=sys-libs/readline-4.1 ) + ) + sqlite? ( >=dev-db/sqlite-3.3.3:3 ) + ssl? ( dev-libs/openssl ) + tk? ( + >=dev-lang/tk-8.0 + dev-tcltk/blt + ) + xml? ( >=dev-libs/expat-2.1 ) + ) + !!<sys-apps/portage-2.1.9" +DEPEND="${RDEPEND} + virtual/pkgconfig + >=sys-devel/autoconf-2.61 + !sys-devel/gcc[libffi]" +RDEPEND+=" !build? ( app-misc/mime-types ) + doc? ( dev-python/python-docs:${SLOT} )" + +S="${WORKDIR}/${MY_P}" + +pkg_setup() { + if use berkdb; then + ewarn "'bsddb' module is out-of-date and no longer maintained inside" + ewarn "dev-lang/python. 'bsddb' and 'dbhash' modules have been additionally" + ewarn "removed in Python 3. A maintained alternative of 'bsddb3' module" + ewarn "is provided by dev-python/bsddb3." + else + if has_version "=${CATEGORY}/${PN}-${PV%%.*}*[berkdb]"; then + ewarn "You are migrating from =${CATEGORY}/${PN}-${PV%%.*}*[berkdb]" + ewarn "to =${CATEGORY}/${PN}-${PV%%.*}*[-berkdb]." + ewarn "You might need to migrate your databases." + fi + fi +} + +src_prepare() { + # Ensure that internal copies of expat, libffi and zlib are not used. + rm -r Modules/expat || die + rm -r Modules/_ctypes/libffi* || die + rm -r Modules/zlib || die + + local excluded_patches + if ! tc-is-cross-compiler; then + excluded_patches="*_all_crosscompile.patch" + fi + + EPATCH_EXCLUDE="${excluded_patches}" EPATCH_SUFFIX="patch" \ + epatch "${FILESDIR}/${SLOT}" + + sed -i -e "s:@@GENTOO_LIBDIR@@:$(get_libdir):g" \ + Lib/distutils/command/install.py \ + Lib/distutils/sysconfig.py \ + Lib/site.py \ + Makefile.pre.in \ + Modules/Setup.dist \ + Modules/getpath.c \ + setup.py || die "sed failed to replace @@GENTOO_LIBDIR@@" + + epatch_user + + eautoconf + eautoheader +} + +src_configure() { + if use build; then + # Disable extraneous modules with extra dependencies. + export PYTHON_DISABLE_MODULES="dbm _bsddb gdbm _curses _curses_panel readline _sqlite3 _tkinter _elementtree pyexpat" + export PYTHON_DISABLE_SSL="1" + else + # dbm module can be linked against berkdb or gdbm. + # Defaults to gdbm when both are enabled, #204343. + local disable + use berkdb || use gdbm || disable+=" dbm" + use berkdb || disable+=" _bsddb" + use gdbm || disable+=" gdbm" + use ncurses || disable+=" _curses _curses_panel" + use readline || disable+=" readline" + use sqlite || disable+=" _sqlite3" + use ssl || export PYTHON_DISABLE_SSL="1" + use tk || disable+=" _tkinter" + use xml || disable+=" _elementtree pyexpat" # _elementtree uses pyexpat. + export PYTHON_DISABLE_MODULES="${disable}" + + if ! use xml; then + ewarn "You have configured Python without XML support." + ewarn "This is NOT a recommended configuration as you" + ewarn "may face problems parsing any XML documents." + fi + fi + + if [[ -n "${PYTHON_DISABLE_MODULES}" ]]; then + einfo "Disabled modules: ${PYTHON_DISABLE_MODULES}" + fi + + if [[ "$(gcc-major-version)" -ge 4 ]]; then + append-flags -fwrapv + fi + + filter-flags -malign-double + + [[ "${ARCH}" == "alpha" ]] && append-flags -fPIC + + # https://bugs.gentoo.org/show_bug.cgi?id=50309 + if is-flagq -O3; then + is-flagq -fstack-protector-all && replace-flags -O3 -O2 + use hardened && replace-flags -O3 -O2 + fi + + # Run the configure scripts in parallel. + multijob_init + + mkdir -p "${WORKDIR}"/{${CBUILD},${CHOST}} || die + + if tc-is-cross-compiler; then + ( + multijob_child_init + cd "${WORKDIR}"/${CBUILD} >/dev/null || die + OPT="-O1" CFLAGS="" CPPFLAGS="" LDFLAGS="" CC="" \ + "${S}"/configure \ + --{build,host}=${CBUILD} \ + || die "cross-configure failed" + ) & + multijob_post_fork + fi + + # Export CXX so it ends up in /usr/lib/python2.X/config/Makefile. + tc-export CXX + # The configure script fails to use pkg-config correctly. + # http://bugs.python.org/issue15506 + export ac_cv_path_PKG_CONFIG=$(tc-getPKG_CONFIG) + + # Set LDFLAGS so we link modules with -lpython2.6 correctly. + # Needed on FreeBSD unless Python 2.6 is already installed. + # Please query BSD team before removing this! + append-ldflags "-L." + + cd "${WORKDIR}"/${CHOST} || die + ECONF_SOURCE=${S} OPT="" \ + econf \ + --with-fpectl \ + --enable-shared \ + $(use_enable ipv6) \ + $(use_with threads) \ + $(usex wide-unicode "--enable-unicode=ucs4" || echo "--enable-unicode=ucs2" "") \ + --infodir='${prefix}/share/info' \ + --mandir='${prefix}/share/man' \ + --with-libc="" \ + --with-system-ffi + + if use threads && grep -q "#define POSIX_SEMAPHORES_NOT_ENABLED 1" pyconfig.h; then + eerror "configure has detected that the sem_open function is broken." + eerror "Please ensure that /dev/shm is mounted as a tmpfs with mode 1777." + die "Broken sem_open function (bug 496328)" + fi + + if tc-is-cross-compiler; then + # Modify the Makefile.pre so we don't regen for the host/ one. + # We need to link the host python programs into $PWD and run + # them from here because the distutils sysconfig module will + # parse Makefile/etc... from argv[0], and we need it to pick + # up the target settings, not the host ones. + sed -i \ + -e '1iHOSTPYTHONPATH = ./hostpythonpath:' \ + -e '/^HOSTPYTHON/s:=.*:= ./hostpython:' \ + -e '/^HOSTPGEN/s:=.*:= ./Parser/hostpgen:' \ + Makefile{.pre,} || die "sed failed" + fi + + multijob_finish +} + +src_compile() { + if tc-is-cross-compiler; then + cd "${WORKDIR}"/${CBUILD} + # Disable as many modules as possible -- but we need a few to install. + PYTHON_DISABLE_MODULES=$( + sed -n "/Extension('/{s:^.*Extension('::;s:'.*::;p}" "${S}"/setup.py | \ + egrep -v '(unicodedata|time|cStringIO|_struct|binascii)' + ) \ + PTHON_DISABLE_SSL="1" \ + SYSROOT= \ + emake + # See comment in src_configure about these. + ln python ../${CHOST}/hostpython || die + ln Parser/pgen ../${CHOST}/Parser/hostpgen || die + ln -s ../${CBUILD}/build/lib.*/ ../${CHOST}/hostpythonpath || die + fi + + cd "${WORKDIR}"/${CHOST} || die + default + + # Work around bug 329499. See also bug 413751. + pax-mark m python +} + +src_test() { + # Tests will not work when cross compiling. + if tc-is-cross-compiler; then + elog "Disabling tests due to crosscompiling." + return + fi + + cd "${WORKDIR}/${CHOST}" || die + + # Skip failing tests. + local skipped_tests="distutils tcl" + + for test in ${skipped_tests}; do + mv "${S}"/Lib/test/test_${test}.py "${T}" + done + + # Rerun failed tests in verbose mode (regrtest -w). + PYTHONDONTWRITEBYTECODE="" emake test EXTRATESTOPTS="-w" < /dev/tty + local result="$?" + + for test in ${skipped_tests}; do + mv "${T}/test_${test}.py" "${S}"/Lib/test || die + done + + elog "The following tests have been skipped:" + for test in ${skipped_tests}; do + elog "test_${test}.py" + done + + elog "If you would like to run them, you may:" + elog "cd '${EPREFIX}/usr/$(get_libdir)/python${SLOT}/test'" + elog "and run the tests separately." + + if [[ "${result}" -ne 0 ]]; then + die "emake test failed" + fi +} + +src_install() { + local libdir=${ED}/usr/$(get_libdir)/python${SLOT} + + cd "${WORKDIR}"/${CHOST} || die + emake DESTDIR="${D}" altinstall maninstall + + # Fix collisions between different slots of Python. + mv "${ED}usr/bin/2to3" "${ED}usr/bin/2to3-${SLOT}" || die + mv "${ED}usr/bin/pydoc" "${ED}usr/bin/pydoc${SLOT}" || die + mv "${ED}usr/bin/idle" "${ED}usr/bin/idle${SLOT}" || die + mv "${ED}usr/share/man/man1/python.1" "${ED}usr/share/man/man1/python${SLOT}.1" || die + rm -f "${ED}usr/bin/smtpd.py" || die + + if use build; then + rm -fr "${ED}usr/bin/idle${SLOT}" "${libdir}/"{bsddb,dbhash.py,idlelib,lib-tk,sqlite3,test} || die + else + use elibc_uclibc && { rm -fr "${libdir}/"{bsddb/test,test} || die; } + use berkdb || { rm -fr "${libdir}/"{bsddb,dbhash.py,test/test_bsddb*} || die; } + use sqlite || { rm -fr "${libdir}/"{sqlite3,test/test_sqlite*} || die; } + use tk || { rm -fr "${ED}usr/bin/idle${SLOT}" "${libdir}/"{idlelib,lib-tk} || die; } + fi + + use threads || { rm -fr "${libdir}/multiprocessing" || die; } + use wininst || { rm -f "${libdir}/distutils/command/"wininst-*.exe || die; } + + dodoc "${S}"/Misc/{ACKS,HISTORY,NEWS} + + if use examples; then + docinto examples + dodoc -r "${S}"/Tools/. + fi + + newconfd "${FILESDIR}/pydoc.conf" pydoc-${SLOT} || die "newconfd failed" + newinitd "${FILESDIR}/pydoc.init" pydoc-${SLOT} || die "newinitd failed" + sed \ + -e "s:@PYDOC_PORT_VARIABLE@:PYDOC${SLOT/./_}_PORT:" \ + -e "s:@PYDOC@:pydoc${SLOT}:" \ + -i "${ED}etc/conf.d/pydoc-${SLOT}" "${ED}etc/init.d/pydoc-${SLOT}" || die "sed failed" + + # for python-exec + python_export python${SLOT} EPYTHON PYTHON PYTHON_SITEDIR + + # if not using a cross-compiler, use the fresh binary + if ! tc-is-cross-compiler; then + local PYTHON=./python \ + LD_LIBRARY_PATH=${LD_LIBRARY_PATH+${LD_LIBRARY_PATH}:}. + export LD_LIBRARY_PATH + fi + + echo "EPYTHON='${EPYTHON}'" > epython.py + python_domodule epython.py +} + +pkg_postinst() { + ewarn "Please note that Python ${SLOT} is no longer supported in Gentoo." + ewarn "The interpreter is not maintained, and may contain security" + ewarn "vulnerabilities. Gentoo ebuilds will no longer be built with support" + ewarn "for Python ${SLOT}." + ewarn + ewarn "If you wish to use Python ${SLOT} for your own purposes (development," + ewarn "testing), we suggest establishing a virtualenv for this interpreter," + ewarn "and installing the necessary dependencies inside it. However, we also" + ewarn "strongly discourage using Python ${SLOT} on production systems." +} |