summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnas Nashif <anas.nashif@intel.com>2012-11-07 07:15:19 -0800
committerChanho Park <chanho61.park@samsung.com>2014-08-19 19:35:27 +0900
commit4252549b57962f6b8f1e66cea37abe4b7492b575 (patch)
treee2d9c757a3b4dd8b016f83952c09a0e860c58bd5
parentf153198bebe97a3d7576aefcec4841bc04b45ddc (diff)
downloadpython-4252549b57962f6b8f1e66cea37abe4b7492b575.tar.gz
python-4252549b57962f6b8f1e66cea37abe4b7492b575.tar.bz2
python-4252549b57962f6b8f1e66cea37abe4b7492b575.zip
add packaging
-rw-r--r--packaging/pypirc-secure.diff30
-rw-r--r--packaging/python-2.5.1-sqlite.patch12
-rw-r--r--packaging/python-2.6-gettext-plurals.patch16
-rw-r--r--packaging/python-2.6b3-curses-panel.patch11
-rw-r--r--packaging/python-2.7-dirs.patch13
-rw-r--r--packaging/python-2.7.1-distutils_test_path.patch52
-rw-r--r--packaging/python-2.7.2-fix_date_time_compiler.patch18
-rw-r--r--packaging/python-2.7.3-ssl_ca_path.patch41
-rw-r--r--packaging/python-2.7.3rc2-canonicalize2.patch0
-rw-r--r--packaging/python-2.7.3rc2-multilib.patch389
-rw-r--r--packaging/python-2.7rc2-configure.patch26
-rw-r--r--packaging/python-distutils-rpm-8.patch84
-rw-r--r--packaging/python-test_structmembers.patch21
-rw-r--r--packaging/remove-static-libpython.diff49
14 files changed, 762 insertions, 0 deletions
diff --git a/packaging/pypirc-secure.diff b/packaging/pypirc-secure.diff
new file mode 100644
index 0000000..f20c32f
--- /dev/null
+++ b/packaging/pypirc-secure.diff
@@ -0,0 +1,30 @@
+# HG changeset patch
+# User Philip Jenvey <pjenvey@underboss.org>
+# Date 1322701507 28800
+# Branch 2.7
+# Node ID e7c20a8476a0e2ca18f8040864cbc400818d8f24
+# Parent 3ecddf168f1f554a17a047384fe0b02f2d688277
+create the .pypirc securely
+
+diff -r 3ecddf168f1f -r e7c20a8476a0 Lib/distutils/config.py
+--- a/Lib/distutils/config.py Tue Nov 29 00:53:09 2011 +0100
++++ b/Lib/distutils/config.py Wed Nov 30 17:05:07 2011 -0800
+@@ -42,16 +42,8 @@
+ def _store_pypirc(self, username, password):
+ """Creates a default .pypirc file."""
+ rc = self._get_rc_file()
+- f = open(rc, 'w')
+- try:
+- f.write(DEFAULT_PYPIRC % (username, password))
+- finally:
+- f.close()
+- try:
+- os.chmod(rc, 0600)
+- except OSError:
+- # should do something better here
+- pass
++ with os.fdopen(os.open(rc, os.O_CREAT | os.O_WRONLY, 0600), 'w') as fp:
++ fp.write(DEFAULT_PYPIRC % (username, password))
+
+ def _read_pypirc(self):
+ """Reads the .pypirc file."""
diff --git a/packaging/python-2.5.1-sqlite.patch b/packaging/python-2.5.1-sqlite.patch
new file mode 100644
index 0000000..60f6ffc
--- /dev/null
+++ b/packaging/python-2.5.1-sqlite.patch
@@ -0,0 +1,12 @@
+--- Modules/_sqlite/cursor.c
++++ Modules/_sqlite/cursor.c
+@@ -782,6 +782,9 @@
+ goto error;
+ }
+
++ if (! statement)
++ break;
++
+ /* execute statement, and ignore results of SELECT statements */
+ rc = SQLITE_ROW;
+ while (rc == SQLITE_ROW) {
diff --git a/packaging/python-2.6-gettext-plurals.patch b/packaging/python-2.6-gettext-plurals.patch
new file mode 100644
index 0000000..6985442
--- /dev/null
+++ b/packaging/python-2.6-gettext-plurals.patch
@@ -0,0 +1,16 @@
+Index: Lib/gettext.py
+===================================================================
+--- Lib/gettext.py.orig
++++ Lib/gettext.py
+@@ -311,8 +311,9 @@ class GNUTranslations(NullTranslations):
+ self._charset = v.split('charset=')[1]
+ elif k == 'plural-forms':
+ v = v.split(';')
+- plural = v[1].split('plural=')[1]
+- self.plural = c2py(plural)
++ if len(v) > 1:
++ plural = v[1].split('plural=')[1]
++ self.plural = c2py(plural)
+ # Note: we unconditionally convert both msgids and msgstrs to
+ # Unicode using the character encoding specified in the charset
+ # parameter of the Content-Type header. The gettext documentation
diff --git a/packaging/python-2.6b3-curses-panel.patch b/packaging/python-2.6b3-curses-panel.patch
new file mode 100644
index 0000000..abf4b6e
--- /dev/null
+++ b/packaging/python-2.6b3-curses-panel.patch
@@ -0,0 +1,11 @@
+--- Modules/_curses_panel.c
++++ Modules/_curses_panel.c
+@@ -14,7 +14,7 @@
+
+ #include "py_curses.h"
+
+-#include <panel.h>
++#include <ncurses/panel.h>
+
+ static PyObject *PyCursesError;
+
diff --git a/packaging/python-2.7-dirs.patch b/packaging/python-2.7-dirs.patch
new file mode 100644
index 0000000..2c36f7d
--- /dev/null
+++ b/packaging/python-2.7-dirs.patch
@@ -0,0 +1,13 @@
+Index: Python-2.7/Makefile.pre.in
+===================================================================
+--- Python-2.7.orig/Makefile.pre.in
++++ Python-2.7/Makefile.pre.in
+@@ -94,7 +94,7 @@ LIBDIR= @libdir@
+ MANDIR= @mandir@
+ INCLUDEDIR= @includedir@
+ CONFINCLUDEDIR= $(exec_prefix)/include
+-SCRIPTDIR= $(prefix)/lib
++SCRIPTDIR= @libdir@
+
+ # Detailed destination directories
+ BINLIBDEST= $(LIBDIR)/python$(VERSION)
diff --git a/packaging/python-2.7.1-distutils_test_path.patch b/packaging/python-2.7.1-distutils_test_path.patch
new file mode 100644
index 0000000..9f1b6c4
--- /dev/null
+++ b/packaging/python-2.7.1-distutils_test_path.patch
@@ -0,0 +1,52 @@
+Index: Python-2.7/Lib/distutils/tests/test_build_ext.py
+===================================================================
+--- Python-2.7.orig/Lib/distutils/tests/test_build_ext.py
++++ Python-2.7/Lib/distutils/tests/test_build_ext.py
+@@ -261,20 +261,14 @@ class BuildExtTestCase(support.TempdirMa
+
+ # issue #5977 : distutils build_ext.get_outputs
+ # returns wrong result with --inplace
+- other_tmp_dir = os.path.realpath(self.mkdtemp())
+- old_wd = os.getcwd()
+- os.chdir(other_tmp_dir)
+- try:
+- cmd.inplace = 1
+- cmd.run()
+- so_file = cmd.get_outputs()[0]
+- finally:
+- os.chdir(old_wd)
++ cmd.inplace = 1
++ cmd.run()
++ so_file = cmd.get_outputs()[0]
+ self.assertTrue(os.path.exists(so_file))
+ self.assertEqual(os.path.splitext(so_file)[-1],
+ sysconfig.get_config_var('SO'))
+ so_dir = os.path.dirname(so_file)
+- self.assertEqual(so_dir, other_tmp_dir)
++ self.assertEqual(so_dir, os.getcwd())
+ cmd.compiler = None
+ cmd.inplace = 0
+ cmd.run()
+Index: Python-2.7/Lib/test/regrtest.py
+===================================================================
+--- Python-2.7.orig/Lib/test/regrtest.py
++++ Python-2.7/Lib/test/regrtest.py
+@@ -1503,16 +1503,5 @@ if __name__ == '__main__':
+ if not os.path.exists(TEMPDIR):
+ os.mkdir(TEMPDIR)
+
+- # Define a writable temp dir that will be used as cwd while running
+- # the tests. The name of the dir includes the pid to allow parallel
+- # testing (see the -j option).
+- TESTCWD = 'test_python_{}'.format(os.getpid())
+-
+- TESTCWD = os.path.join(TEMPDIR, TESTCWD)
+-
+- # Run the tests in a context manager that temporary changes the CWD to a
+- # temporary and writable directory. If it's not possible to create or
+- # change the CWD, the original CWD will be used. The original CWD is
+- # available from test_support.SAVEDCWD.
+- with test_support.temp_cwd(TESTCWD, quiet=True):
+- main()
++ # do not change directory, because it breaks distutils tests
++ main()
diff --git a/packaging/python-2.7.2-fix_date_time_compiler.patch b/packaging/python-2.7.2-fix_date_time_compiler.patch
new file mode 100644
index 0000000..5e5fd23
--- /dev/null
+++ b/packaging/python-2.7.2-fix_date_time_compiler.patch
@@ -0,0 +1,18 @@
+--- Makefile.pre.in
++++ Makefile.pre.in
+@@ -524,8 +524,15 @@
+ -DHGVERSION="\"`LC_ALL=C $(HGVERSION)`\"" \
+ -DHGTAG="\"`LC_ALL=C $(HGTAG)`\"" \
+ -DHGBRANCH="\"`LC_ALL=C $(HGBRANCH)`\"" \
++ -DDATE="\"`LC_ALL=C date -u -r Makefile.pre.in +"%b %d %Y"`\"" \
++ -DTIME="\"`LC_ALL=C date -u -r Makefile.pre.in +"%T"`\"" \
+ -o $@ $(srcdir)/Modules/getbuildinfo.c
+
++Python/getcompiler.o: $(srcdir)/Python/getcompiler.c Makefile
++ $(CC) -c $(PY_CFLAGS) \
++ -DCOMPILER='"[GCC]"' \
++ -o $@ $(srcdir)/Python/getcompiler.c
++
+ Modules/getpath.o: $(srcdir)/Modules/getpath.c Makefile
+ $(CC) -c $(PY_CFLAGS) -DPYTHONPATH='"$(PYTHONPATH)"' \
+ -DPREFIX='"$(prefix)"' \
diff --git a/packaging/python-2.7.3-ssl_ca_path.patch b/packaging/python-2.7.3-ssl_ca_path.patch
new file mode 100644
index 0000000..95ff23a
--- /dev/null
+++ b/packaging/python-2.7.3-ssl_ca_path.patch
@@ -0,0 +1,41 @@
+Index: Modules/_ssl.c
+===================================================================
+--- Modules/_ssl.c.orig
++++ Modules/_ssl.c
+@@ -271,6 +271,7 @@ newPySSLObject(PySocketSockObject *Sock,
+ char *errstr = NULL;
+ int ret;
+ int verification_mode;
++ struct stat stat_buf;
+
+ self = PyObject_New(PySSLObject, &PySSL_Type); /* Create new object */
+ if (self == NULL)
+@@ -331,11 +332,23 @@ newPySSLObject(PySocketSockObject *Sock,
+ "verification of other-side certificates.");
+ goto fail;
+ } else {
+- PySSL_BEGIN_ALLOW_THREADS
+- ret = SSL_CTX_load_verify_locations(self->ctx,
+- cacerts_file,
+- NULL);
+- PySSL_END_ALLOW_THREADS
++ /* If cacerts_file is a directory-based cert store, pass it as the
++ third parameter, CApath, instead
++ */
++ if (stat(cacerts_file, &stat_buf) == 0 && S_ISDIR(stat_buf.st_mode)) {
++ PySSL_BEGIN_ALLOW_THREADS
++ ret = SSL_CTX_load_verify_locations(self->ctx,
++ NULL,
++ cacerts_file);
++ PySSL_END_ALLOW_THREADS
++ } else {
++ PySSL_BEGIN_ALLOW_THREADS
++ ret = SSL_CTX_load_verify_locations(self->ctx,
++ cacerts_file,
++ NULL);
++ PySSL_END_ALLOW_THREADS
++ }
++
+ if (ret != 1) {
+ _setSSLError(NULL, 0, __FILE__, __LINE__);
+ goto fail;
diff --git a/packaging/python-2.7.3rc2-canonicalize2.patch b/packaging/python-2.7.3rc2-canonicalize2.patch
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/packaging/python-2.7.3rc2-canonicalize2.patch
diff --git a/packaging/python-2.7.3rc2-multilib.patch b/packaging/python-2.7.3rc2-multilib.patch
new file mode 100644
index 0000000..8ecbeef
--- /dev/null
+++ b/packaging/python-2.7.3rc2-multilib.patch
@@ -0,0 +1,389 @@
+Index: configure.in
+===================================================================
+--- configure.in.orig 2012-03-16 02:26:39.000000000 +0100
++++ configure.in 2012-03-28 20:09:13.000000000 +0200
+@@ -630,6 +630,41 @@
+ ;;
+ esac
+
++AC_SUBST(ARCH)
++AC_MSG_CHECKING(ARCH)
++ARCH=`uname -m`
++case $ARCH in
++i?86) ARCH=i386;;
++esac
++AC_MSG_RESULT($ARCH)
++
++AC_SUBST(LIB)
++AC_MSG_CHECKING(LIB)
++case $ac_sys_system in
++Linux*)
++ # Test if the compiler is 64bit
++ echo 'int i;' > conftest.$ac_ext
++ python_cv_cc_64bit_output=no
++ if AC_TRY_EVAL(ac_compile); then
++ case `/usr/bin/file conftest.$ac_objext` in
++ *"ELF 64"*)
++ python_cv_cc_64bit_output=yes
++ ;;
++ esac
++ fi
++ rm -rf conftest*
++ ;;
++esac
++
++case $ARCH:$python_cv_cc_64bit_output in
++ppc64:yes | powerpc64:yes | s390x:yes | sparc64:yes | x86_64:yes)
++ LIB="lib64"
++ ;;
++*:*)
++ LIB="lib"
++ ;;
++esac
++AC_MSG_RESULT($LIB)
+
+ AC_SUBST(LIBRARY)
+ AC_MSG_CHECKING(LIBRARY)
+Index: Include/pythonrun.h
+===================================================================
+--- Include/pythonrun.h.orig 2012-03-16 02:26:31.000000000 +0100
++++ Include/pythonrun.h 2012-03-28 20:09:13.000000000 +0200
+@@ -108,6 +108,8 @@
+ /* In their own files */
+ PyAPI_FUNC(const char *) Py_GetVersion(void);
+ PyAPI_FUNC(const char *) Py_GetPlatform(void);
++PyAPI_FUNC(const char *) Py_GetArch(void);
++PyAPI_FUNC(const char *) Py_GetLib(void);
+ PyAPI_FUNC(const char *) Py_GetCopyright(void);
+ PyAPI_FUNC(const char *) Py_GetCompiler(void);
+ PyAPI_FUNC(const char *) Py_GetBuildInfo(void);
+Index: Lib/distutils/command/install.py
+===================================================================
+--- Lib/distutils/command/install.py.orig 2012-03-28 20:09:11.000000000 +0200
++++ Lib/distutils/command/install.py 2012-03-28 20:09:13.000000000 +0200
+@@ -22,6 +22,8 @@
+ from site import USER_SITE
+
+
++libname = sys.lib
++
+ if sys.version < "2.2":
+ WINDOWS_SCHEME = {
+ 'purelib': '$base',
+@@ -42,7 +44,7 @@
+ INSTALL_SCHEMES = {
+ 'unix_prefix': {
+ 'purelib': '$base/lib/python$py_version_short/site-packages',
+- 'platlib': '$platbase/lib/python$py_version_short/site-packages',
++ 'platlib': '$platbase/'+libname+'/python$py_version_short/site-packages',
+ 'headers': '$base/include/python$py_version_short/$dist_name',
+ 'scripts': '$base/bin',
+ 'data' : '$base',
+Index: Lib/distutils/sysconfig.py
+===================================================================
+--- Lib/distutils/sysconfig.py.orig 2012-03-16 02:26:31.000000000 +0100
++++ Lib/distutils/sysconfig.py 2012-03-28 20:09:13.000000000 +0200
+@@ -114,8 +114,11 @@
+ prefix = plat_specific and EXEC_PREFIX or PREFIX
+
+ if os.name == "posix":
+- libpython = os.path.join(prefix,
+- "lib", "python" + get_python_version())
++ if plat_specific or standard_lib:
++ lib = sys.lib
++ else:
++ lib = "lib"
++ libpython = os.path.join(prefix, lib, "python" + get_python_version())
+ if standard_lib:
+ return libpython
+ else:
+Index: Lib/pydoc.py
+===================================================================
+--- Lib/pydoc.py.orig 2012-03-16 02:26:33.000000000 +0100
++++ Lib/pydoc.py 2012-03-28 20:09:13.000000000 +0200
+@@ -352,7 +352,7 @@
+
+ docloc = os.environ.get("PYTHONDOCS",
+ "http://docs.python.org/library")
+- basedir = os.path.join(sys.exec_prefix, "lib",
++ basedir = os.path.join(sys.exec_prefix, sys.lib,
+ "python"+sys.version[0:3])
+ if (isinstance(object, type(os)) and
+ (object.__name__ in ('errno', 'exceptions', 'gc', 'imp',
+Index: Lib/site.py
+===================================================================
+--- Lib/site.py.orig 2012-03-16 02:26:33.000000000 +0100
++++ Lib/site.py 2012-03-28 20:09:13.000000000 +0200
+@@ -300,13 +300,18 @@
+ if sys.platform in ('os2emx', 'riscos'):
+ sitepackages.append(os.path.join(prefix, "Lib", "site-packages"))
+ elif os.sep == '/':
+- sitepackages.append(os.path.join(prefix, "lib",
++ sitepackages.append(os.path.join(prefix, sys.lib,
+ "python" + sys.version[:3],
+ "site-packages"))
+- sitepackages.append(os.path.join(prefix, "lib", "site-python"))
++ sitepackages.append(os.path.join(prefix, sys.lib, "site-python"))
++ if sys.lib != "lib":
++ sitepackages.append(os.path.join(prefix, "lib",
++ "python" + sys.version[:3],
++ "site-packages"))
++ sitepackages.append(os.path.join(prefix, "lib", "site-python"))
+ else:
+ sitepackages.append(prefix)
+- sitepackages.append(os.path.join(prefix, "lib", "site-packages"))
++ sitepackages.append(os.path.join(prefix, sys.lib, "site-packages"))
+ if sys.platform == "darwin":
+ # for framework builds *only* we add the standard Apple
+ # locations.
+Index: Lib/sysconfig.py
+===================================================================
+--- Lib/sysconfig.py.orig 2012-03-16 02:26:33.000000000 +0100
++++ Lib/sysconfig.py 2012-03-28 20:09:13.000000000 +0200
+@@ -7,10 +7,10 @@
+
+ _INSTALL_SCHEMES = {
+ 'posix_prefix': {
+- 'stdlib': '{base}/lib/python{py_version_short}',
+- 'platstdlib': '{platbase}/lib/python{py_version_short}',
++ 'stdlib': '{base}/'+sys.lib+'/python{py_version_short}',
++ 'platstdlib': '{platbase}/'+sys.lib+'/python{py_version_short}',
+ 'purelib': '{base}/lib/python{py_version_short}/site-packages',
+- 'platlib': '{platbase}/lib/python{py_version_short}/site-packages',
++ 'platlib': '{platbase}/'+sys.lib+'/python{py_version_short}/site-packages',
+ 'include': '{base}/include/python{py_version_short}',
+ 'platinclude': '{platbase}/include/python{py_version_short}',
+ 'scripts': '{base}/bin',
+@@ -65,10 +65,10 @@
+ 'data' : '{userbase}',
+ },
+ 'posix_user': {
+- 'stdlib': '{userbase}/lib/python{py_version_short}',
+- 'platstdlib': '{userbase}/lib/python{py_version_short}',
++ 'stdlib': '{userbase}/'+sys.lib+'/python{py_version_short}',
++ 'platstdlib': '{userbase}/'+sys.lib+'/python{py_version_short}',
+ 'purelib': '{userbase}/lib/python{py_version_short}/site-packages',
+- 'platlib': '{userbase}/lib/python{py_version_short}/site-packages',
++ 'platlib': '{userbase}/'+sys.lib+'/python{py_version_short}/site-packages',
+ 'include': '{userbase}/include/python{py_version_short}',
+ 'scripts': '{userbase}/bin',
+ 'data' : '{userbase}',
+Index: Lib/test/test_dl.py
+===================================================================
+--- Lib/test/test_dl.py.orig 2012-03-16 02:26:34.000000000 +0100
++++ Lib/test/test_dl.py 2012-03-28 20:09:13.000000000 +0200
+@@ -5,10 +5,11 @@
+ import unittest
+ from test.test_support import verbose, import_module
+ dl = import_module('dl', deprecated=True)
++import sys
+
+ sharedlibs = [
+- ('/usr/lib/libc.so', 'getpid'),
+- ('/lib/libc.so.6', 'getpid'),
++ ('/usr/'+sys.lib+'/libc.so', 'getpid'),
++ ('/'+sys.lib+'/libc.so.6', 'getpid'),
+ ('/usr/bin/cygwin1.dll', 'getpid'),
+ ('/usr/lib/libc.dylib', 'getpid'),
+ ]
+Index: Lib/test/test_site.py
+===================================================================
+--- Lib/test/test_site.py.orig 2012-03-16 02:26:34.000000000 +0100
++++ Lib/test/test_site.py 2012-03-28 20:11:10.000000000 +0200
+@@ -241,12 +241,16 @@
+ self.assertEqual(dirs[2], wanted)
+ elif os.sep == '/':
+ # OS X non-framwework builds, Linux, FreeBSD, etc
+- self.assertEqual(len(dirs), 2)
+ wanted = os.path.join('xoxo', 'lib', 'python' + sys.version[:3],
+ 'site-packages')
+- self.assertEqual(dirs[0], wanted)
++ self.assertTrue(wanted in dirs)
+ wanted = os.path.join('xoxo', 'lib', 'site-python')
+- self.assertEqual(dirs[1], wanted)
++ self.assertTrue(wanted in dirs)
++ wanted = os.path.join('xoxo', sys.lib, 'python' + sys.version[:3],
++ 'site-packages')
++ self.assertTrue(wanted in dirs)
++ wanted = os.path.join('xoxo', sys.lib, 'site-python')
++ self.assertTrue(wanted in dirs)
+ else:
+ # other platforms
+ self.assertEqual(len(dirs), 2)
+Index: Lib/trace.py
+===================================================================
+--- Lib/trace.py.orig 2012-03-16 02:26:34.000000000 +0100
++++ Lib/trace.py 2012-03-28 20:09:13.000000000 +0200
+@@ -754,10 +754,10 @@
+ # should I also call expanduser? (after all, could use $HOME)
+
+ s = s.replace("$prefix",
+- os.path.join(sys.prefix, "lib",
++ os.path.join(sys.prefix, sys.lib,
+ "python" + sys.version[:3]))
+ s = s.replace("$exec_prefix",
+- os.path.join(sys.exec_prefix, "lib",
++ os.path.join(sys.exec_prefix, sys.lib,
+ "python" + sys.version[:3]))
+ s = os.path.normpath(s)
+ ignore_dirs.append(s)
+Index: Makefile.pre.in
+===================================================================
+--- Makefile.pre.in.orig 2012-03-28 20:09:11.000000000 +0200
++++ Makefile.pre.in 2012-03-28 20:09:13.000000000 +0200
+@@ -81,6 +81,8 @@
+
+ # Machine-dependent subdirectories
+ MACHDEP= @MACHDEP@
++LIB= @LIB@
++ARCH= @ARCH@
+
+ # Install prefix for architecture-independent files
+ prefix= @prefix@
+@@ -533,6 +535,7 @@
+ -DEXEC_PREFIX='"$(exec_prefix)"' \
+ -DVERSION='"$(VERSION)"' \
+ -DVPATH='"$(VPATH)"' \
++ -DARCH='"$(ARCH)"' -DLIB='"$(LIB)"' \
+ -o $@ $(srcdir)/Modules/getpath.c
+
+ Modules/python.o: $(srcdir)/Modules/python.c
+@@ -567,7 +570,7 @@
+ Python/compile.o Python/symtable.o Python/ast.o: $(GRAMMAR_H) $(AST_H)
+
+ Python/getplatform.o: $(srcdir)/Python/getplatform.c
+- $(CC) -c $(PY_CFLAGS) -DPLATFORM='"$(MACHDEP)"' -o $@ $(srcdir)/Python/getplatform.c
++ $(CC) -c $(PY_CFLAGS) -DPLATFORM='"$(MACHDEP)"' -DARCH='"$(ARCH)"' -DLIB='"$(LIB)"' -o $@ $(srcdir)/Python/getplatform.c
+
+ Python/importdl.o: $(srcdir)/Python/importdl.c
+ $(CC) -c $(PY_CFLAGS) -I$(DLINCLDIR) -o $@ $(srcdir)/Python/importdl.c
+Index: Modules/getpath.c
+===================================================================
+--- Modules/getpath.c.orig 2012-03-16 02:26:37.000000000 +0100
++++ Modules/getpath.c 2012-03-28 20:09:13.000000000 +0200
+@@ -116,9 +116,11 @@
+ #define EXEC_PREFIX PREFIX
+ #endif
+
++#define LIB_PYTHON LIB "/python" VERSION
++
+ #ifndef PYTHONPATH
+-#define PYTHONPATH PREFIX "/lib/python" VERSION ":" \
+- EXEC_PREFIX "/lib/python" VERSION "/lib-dynload"
++#define PYTHONPATH PREFIX "/" LIB_PYTHON ":" \
++ EXEC_PREFIX "/" LIB_PYTHON "/lib-dynload"
+ #endif
+
+ #ifndef LANDMARK
+@@ -129,7 +131,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[] = LIB_PYTHON;
+
+ static void
+ reduce(char *dir)
+Index: Python/getplatform.c
+===================================================================
+--- Python/getplatform.c.orig 2012-03-16 02:26:38.000000000 +0100
++++ Python/getplatform.c 2012-03-28 20:09:13.000000000 +0200
+@@ -10,3 +10,23 @@
+ {
+ return PLATFORM;
+ }
++
++#ifndef ARCH
++#define ARCH "unknown"
++#endif
++
++const char *
++Py_GetArch(void)
++{
++ return ARCH;
++}
++
++#ifndef LIB
++#define LIB "lib"
++#endif
++
++const char *
++Py_GetLib(void)
++{
++ return LIB;
++}
+Index: Python/sysmodule.c
+===================================================================
+--- Python/sysmodule.c.orig 2012-03-16 02:26:39.000000000 +0100
++++ Python/sysmodule.c 2012-03-28 20:09:13.000000000 +0200
+@@ -1419,6 +1419,10 @@
+ PyString_FromString(Py_GetCopyright()));
+ SET_SYS_FROM_STRING("platform",
+ PyString_FromString(Py_GetPlatform()));
++ SET_SYS_FROM_STRING("arch",
++ PyString_FromString(Py_GetArch()));
++ SET_SYS_FROM_STRING("lib",
++ PyString_FromString(Py_GetLib()));
+ SET_SYS_FROM_STRING("executable",
+ PyString_FromString(Py_GetProgramFullPath()));
+ SET_SYS_FROM_STRING("prefix",
+Index: setup.py
+===================================================================
+--- setup.py.orig 2012-03-16 02:26:39.000000000 +0100
++++ setup.py 2012-03-28 20:09:13.000000000 +0200
+@@ -369,7 +369,7 @@
+
+ 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.library_dirs, '/usr/local/' + sys.lib)
+ add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
+ self.add_multiarch_paths()
+
+@@ -427,8 +427,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',
++ '/' + sys.lib, '/usr/' + sys.lib,
+ ]
+ inc_dirs = self.compiler.include_dirs + ['/usr/include']
+ exts = []
+@@ -677,11 +676,11 @@
+ elif curses_library:
+ readline_libs.append(curses_library)
+ elif self.compiler.find_library_file(lib_dirs +
+- ['/usr/lib/termcap'],
++ ['/usr/'+sys.lib+'/termcap'],
+ 'termcap'):
+ readline_libs.append('termcap')
+ exts.append( Extension('readline', ['readline.c'],
+- library_dirs=['/usr/lib/termcap'],
++ library_dirs=['/usr/'+sys.lib+'/termcap'],
+ extra_link_args=readline_extra_link_args,
+ libraries=readline_libs) )
+ else:
+@@ -1753,18 +1752,17 @@
+ # Check for various platform-specific directories
+ if platform == 'sunos5':
+ include_dirs.append('/usr/openwin/include')
+- added_lib_dirs.append('/usr/openwin/lib')
++ added_lib_dirs.append('/usr/openwin/' + sys.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')
++ added_lib_dirs.append('/usr/X11R6/' + sys.lib)
+ elif os.path.exists('/usr/X11R5/include'):
+ include_dirs.append('/usr/X11R5/include')
+- added_lib_dirs.append('/usr/X11R5/lib')
++ added_lib_dirs.append('/usr/X11R5/' + sys.lib)
+ else:
+ # Assume default location for X11
+ include_dirs.append('/usr/X11/include')
+- added_lib_dirs.append('/usr/X11/lib')
++ added_lib_dirs.append('/usr/X11/' + sys.lib)
+
+ # If Cygwin, then verify that X is installed before proceeding
+ if platform == 'cygwin':
diff --git a/packaging/python-2.7rc2-configure.patch b/packaging/python-2.7rc2-configure.patch
new file mode 100644
index 0000000..dae0335
--- /dev/null
+++ b/packaging/python-2.7rc2-configure.patch
@@ -0,0 +1,26 @@
+Index: configure.in
+===================================================================
+--- configure.in.orig
++++ configure.in
+@@ -3892,9 +3892,18 @@ then
+ fi
+
+ # check for readline 4.0
+-AC_CHECK_LIB(readline, rl_pre_input_hook,
+- AC_DEFINE(HAVE_RL_PRE_INPUT_HOOK, 1,
+- [Define if you have readline 4.0]), ,$READLINE_LIBS)
++AC_MSG_CHECKING([for rl_pre_input_hook in -lreadline])
++AC_CACHE_VAL(ac_cv_have_rl_re_input_hook, [
++AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <stdio.h>
++#include <readline/readline.h>],
++ [return rl_pre_input_hook != 0])],
++ ac_cv_have_rl_re_input_hook=yes,
++ ac_cv_have_rl_re_input_hook=no)])
++AC_MSG_RESULT($ac_cv_have_rl_re_input_hook)
++if test "$ac_cv_have_rl_re_input_hook" = yes; then
++ AC_DEFINE(HAVE_RL_PRE_INPUT_HOOK, 1,
++ [Define if you have readline 4.0])
++fi
+
+ # also in 4.0
+ AC_CHECK_LIB(readline, rl_completion_display_matches_hook,
diff --git a/packaging/python-distutils-rpm-8.patch b/packaging/python-distutils-rpm-8.patch
new file mode 100644
index 0000000..a5c614b
--- /dev/null
+++ b/packaging/python-distutils-rpm-8.patch
@@ -0,0 +1,84 @@
+Index: Python-2.6.2/Lib/distutils/command/install.py
+===================================================================
+--- Python-2.6.2.orig/Lib/distutils/command/install.py
++++ Python-2.6.2/Lib/distutils/command/install.py
+@@ -168,6 +168,8 @@ class install (Command):
+
+ ('record=', None,
+ "filename in which to record list of installed files"),
++ ('record-rpm=', None,
++ "filename in which to record list of installed files and directories suitable as filelist for rpm"),
+ ]
+
+ boolean_options = ['compile', 'force', 'skip-build', 'user']
+@@ -243,6 +245,7 @@ class install (Command):
+ #self.install_info = None
+
+ self.record = None
++ self.record_rpm = None
+
+
+ # -- Option finalizing methods -------------------------------------
+@@ -592,12 +595,61 @@ class install (Command):
+ self.create_path_file()
+
+ # write list of installed files, if requested.
+- if self.record:
++ if self.record or self.record_rpm:
+ outputs = self.get_outputs()
+ if self.root: # strip any package prefix
+ root_len = len(self.root)
+ for counter in xrange(len(outputs)):
+ outputs[counter] = outputs[counter][root_len:]
++ if self.record_rpm: # add directories
++ self.record = self.record_rpm
++ dirs = []
++ # directories to reject:
++ rejectdirs = [
++ '/etc',
++ '/',
++ '',
++ self.prefix,
++ self.exec_prefix,
++ self.install_base,
++ self.install_platbase,
++ self.install_purelib,
++ self.install_platlib,
++ self.install_headers[:len(self.install_headers) - len(self.distribution.get_name()) - 1],
++ self.install_libbase,
++ self.install_scripts,
++ self.install_data,
++ os.path.join(self.install_data, 'share'),
++ os.path.join(self.install_data, 'share', 'doc'),
++ ]
++ # directories whose childs reject:
++ rejectdirs2 = [
++ os.path.join(self.install_data, 'share', 'man'),
++ ]
++ # directories whose grandsons reject:
++ rejectdirs3 = [
++ os.path.join(self.install_data, 'share', 'man'),
++ os.path.join(self.install_data, 'share', 'locale'),
++ ]
++ for counter in xrange(len(rejectdirs)):
++ if len(rejectdirs[counter]) > root_len:
++ rejectdirs[counter] = rejectdirs[counter][root_len:]
++ for counter in xrange(len(rejectdirs2)):
++ if len(rejectdirs2[counter]) > root_len:
++ rejectdirs2[counter] = rejectdirs2[counter][root_len:]
++ for counter in xrange(len(rejectdirs3)):
++ if len(rejectdirs3[counter]) > root_len:
++ rejectdirs3[counter] = rejectdirs3[counter][root_len:]
++ for counter in xrange(len(outputs)):
++ directory = os.path.dirname(outputs[counter])
++ while directory not in rejectdirs and \
++ os.path.dirname(directory) not in rejectdirs2 and \
++ os.path.dirname(os.path.dirname(directory)) not in rejectdirs3:
++ dirname = '%dir ' + directory
++ if dirname not in dirs:
++ dirs.append(dirname)
++ directory = os.path.dirname(directory)
++ outputs += dirs
+ self.execute(write_file,
+ (self.record, outputs),
+ "writing list of installed files to '%s'" %
diff --git a/packaging/python-test_structmembers.patch b/packaging/python-test_structmembers.patch
new file mode 100644
index 0000000..a250dea
--- /dev/null
+++ b/packaging/python-test_structmembers.patch
@@ -0,0 +1,21 @@
+Index: Modules/_testcapimodule.c
+===================================================================
+--- Modules/_testcapimodule.c (revision 85001)
++++ Modules/_testcapimodule.c (working copy)
+@@ -5,6 +5,7 @@
+ * standard Python regression test, via Lib/test/test_capi.py.
+ */
+
++#define PY_SSIZE_T_CLEAN
+ #include "Python.h"
+ #include <float.h>
+ #include "structmember.h"
+@@ -593,7 +594,7 @@
+ {
+ PyObject *tuple, *obj;
+ Py_UNICODE *value;
+- int len;
++ Py_ssize_t len;
+
+ /* issue4122: Undefined reference to _Py_ascii_whitespace on Windows */
+ /* Just use the macro and check that it compiles */
diff --git a/packaging/remove-static-libpython.diff b/packaging/remove-static-libpython.diff
new file mode 100644
index 0000000..b3f7805
--- /dev/null
+++ b/packaging/remove-static-libpython.diff
@@ -0,0 +1,49 @@
+--- Makefile.pre.in
++++ Makefile.pre.in
+@@ -396,7 +396,7 @@
+
+
+ # Build the interpreter
+-$(BUILDPYTHON): Modules/python.o $(LIBRARY) $(LDLIBRARY)
++$(BUILDPYTHON): Modules/python.o $(LDLIBRARY)
+ $(LINKCC) $(LDFLAGS) $(LINKFORSHARED) -o $@ \
+ Modules/python.o \
+ $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST)
+@@ -412,18 +412,6 @@
+ *) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py build;; \
+ esac
+
+-# Build static library
+-# avoid long command lines, same as LIBRARY_OBJS
+-$(LIBRARY): $(LIBRARY_OBJS)
+- -rm -f $@
+- $(AR) $(ARFLAGS) $@ Modules/getbuildinfo.o
+- $(AR) $(ARFLAGS) $@ $(PARSER_OBJS)
+- $(AR) $(ARFLAGS) $@ $(OBJECT_OBJS)
+- $(AR) $(ARFLAGS) $@ $(PYTHON_OBJS)
+- $(AR) $(ARFLAGS) $@ $(MODULE_OBJS) $(SIGNAL_OBJS)
+- $(AR) $(ARFLAGS) $@ $(MODOBJS)
+- $(RANLIB) $@
+-
+ libpython$(VERSION).so: $(LIBRARY_OBJS)
+ if test $(INSTSONAME) != $(LDLIBRARY); then \
+ $(BLDSHARED) -Wl,-h$(INSTSONAME) -o $(INSTSONAME) $(LIBRARY_OBJS) $(MODLIBS) $(SHLIBS) $(LIBC) $(LIBM) $(LDLAST); \
+@@ -1008,18 +996,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