You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by pf...@apache.org on 2016/01/02 16:17:19 UTC

svn commit: r1722635 [1/2] - in /openoffice/trunk/main: ./ python/ python/prj/

Author: pfg
Date: Sat Jan  2 15:17:18 2016
New Revision: 1722635

URL: http://svn.apache.org/viewvc?rev=1722635&view=rev
Log:
Update Python bundled version to 2.7.8

Highlights include:

- A regression in the mimetypes module on Windows has been fixed.
- A possible overflow in the buffer type has been fixed.
- A bug in the CGIHTTPServer module which allows arbitrary execution of 
code in the server root has been patched.
- A regression in the handling of UNC paths in os.path.join has been 
fixed.
- Many bugfixes.

As a side note: building with mingw remains supported and, given that 
the status of clang in Windows keeps improving, it is very likely to
disappear in the future.

Added:
    openoffice/trunk/main/python/python-2.7.8-mingw.patch
    openoffice/trunk/main/python/python-2.7.8-nohardlink.patch
    openoffice/trunk/main/python/python-2.7.8-pcbuild.patch
    openoffice/trunk/main/python/python-2.7.8-sysbase.patch
Removed:
    openoffice/trunk/main/python/python-2.7.6-mingw.patch
    openoffice/trunk/main/python/python-2.7.6-nohardlink.patch
    openoffice/trunk/main/python/python-2.7.6-pcbuild.patch
    openoffice/trunk/main/python/python-2.7.6-sysbase.patch
Modified:
    openoffice/trunk/main/external_deps.lst
    openoffice/trunk/main/python/makefile.mk
    openoffice/trunk/main/python/prj/d.lst
    openoffice/trunk/main/python/python-freebsd.patch
    openoffice/trunk/main/python/python-md5.patch
    openoffice/trunk/main/python/python-solaris.patch
    openoffice/trunk/main/python/python-solver-before-std.patch
    openoffice/trunk/main/python/python-ssl.patch
    openoffice/trunk/main/python/pyversion.mk

Modified: openoffice/trunk/main/external_deps.lst
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/external_deps.lst?rev=1722635&r1=1722634&r2=1722635&view=diff
==============================================================================
--- openoffice/trunk/main/external_deps.lst (original)
+++ openoffice/trunk/main/external_deps.lst Sat Jan  2 15:17:18 2016
@@ -204,9 +204,9 @@ if (ENABLE_MEDIAWIKI == YES)
     URL2 = $(OOO_EXTRAS)$(MD5)-$(name)
 
 if (SYSTEM_PYTHON != YES)
-    MD5 = 1d8728eb0dfcac72a0fd99c17ec7f386
-    name = Python-2.7.6.tgz
-    URL1 = http://www.python.org/ftp/python/2.7.6/Python-2.7.6.tgz
+    MD5 = d4bca0159acb0b44a781292b5231936f
+    name = Python-2.7.8.tgz
+    URL1 = http://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz
     URL2 = $(OOO_EXTRAS)$(MD5)-$(name)
 
 if (SYSTEM_BOOST != YES)

Modified: openoffice/trunk/main/python/makefile.mk
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/python/makefile.mk?rev=1722635&r1=1722634&r2=1722635&view=diff
==============================================================================
--- openoffice/trunk/main/python/makefile.mk (original)
+++ openoffice/trunk/main/python/makefile.mk Sat Jan  2 15:17:18 2016
@@ -42,7 +42,7 @@ all:
 
 
 TARFILE_NAME=Python-$(PYVERSION)
-TARFILE_MD5=1d8728eb0dfcac72a0fd99c17ec7f386
+TARFILE_MD5=d4bca0159acb0b44a781292b5231936f
 PATCH_FILES=\
 	python-solaris.patch \
 	python-freebsd.patch \

Modified: openoffice/trunk/main/python/prj/d.lst
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/python/prj/d.lst?rev=1722635&r1=1722634&r2=1722635&view=diff
==============================================================================
--- openoffice/trunk/main/python/prj/d.lst (original)
+++ openoffice/trunk/main/python/prj/d.lst Sat Jan  2 15:17:18 2016
@@ -36,51 +36,51 @@ mkdir: %_DEST%\lib%_EXT%\python\multipro
 mkdir: %_DEST%\lib%_EXT%\python\unittest
 mkdir: %_DEST%\lib%_EXT%\python\python2.7\config
 
-..\%__SRC%\misc\build\Python-2.7.6\Lib\* %_DEST%\lib%_EXT%\python\*
-..\%__SRC%\misc\build\Python-2.7.6\Lib\lib-old\* %_DEST%\lib%_EXT%\python\lib-old\*
-..\%__SRC%\misc\build\Python-2.7.6\Lib\lib-tk\* %_DEST%\lib%_EXT%\python\lib-tk\*
-..\%__SRC%\misc\build\Python-2.7.6\Lib\site-packages\* %_DEST%\lib%_EXT%\python\site-packages\*
-..\%__SRC%\misc\build\Python-2.7.6\Lib\encodings\* %_DEST%\lib%_EXT%\python\encodings\*
-..\%__SRC%\misc\build\Python-2.7.6\Lib\email\* %_DEST%\lib%_EXT%\python\email\*
-..\%__SRC%\misc\build\Python-2.7.6\Lib\email\mime\* %_DEST%\lib%_EXT%\python\email\mime\*
-..\%__SRC%\misc\build\Python-2.7.6\Lib\compiler\* %_DEST%\lib%_EXT%\python\compiler\*
-..\%__SRC%\misc\build\Python-2.7.6\Lib\hotshot\* %_DEST%\lib%_EXT%\python\hotshot\*
-..\%__SRC%\misc\build\Python-2.7.6\Lib\distutils\* %_DEST%\lib%_EXT%\python\distutils\*
-..\%__SRC%\misc\build\Python-2.7.6\Lib\distutils\command\* %_DEST%\lib%_EXT%\python\distutils\command\*
-..\%__SRC%\misc\build\Python-2.7.6\Lib\xml\* %_DEST%\lib%_EXT%\python\xml\*
-..\%__SRC%\misc\build\Python-2.7.6\Lib\xml\dom\* %_DEST%\lib%_EXT%\python\xml\dom\*
-..\%__SRC%\misc\build\Python-2.7.6\Lib\xml\parsers\* %_DEST%\lib%_EXT%\python\xml\parsers\*
-..\%__SRC%\misc\build\Python-2.7.6\Lib\xml\sax\* %_DEST%\lib%_EXT%\python\xml\sax\*
-..\%__SRC%\misc\build\Python-2.7.6\Lib\curses\* %_DEST%\lib%_EXT%\python\curses\*
-..\%__SRC%\misc\build\Python-2.7.6\Lib\plat-linux2\* %_DEST%\lib%_EXT%\python\plat-linux2\*
-..\%__SRC%\misc\build\Python-2.7.6\Lib\config\* %_DEST%\lib%_EXT%\python\config\*
-..\%__SRC%\misc\build\Python-2.7.6\Lib\bsddb\* %_DEST%\lib%_EXT%\python\bsddb\*
-..\%__SRC%\misc\build\Python-2.7.6\Lib\logging\* %_DEST%\lib%_EXT%\python\logging\*
-..\%__SRC%\misc\build\Python-2.7.6\Lib\idlelib\* %_DEST%\lib%_EXT%\python\idlelib\*
-..\%__SRC%\misc\build\Python-2.7.6\Lib\idlelib\Icons\* %_DEST%\lib%_EXT%\python\idlelib\Icons\*
-..\%__SRC%\misc\build\Python-2.7.6\Lib\wsgiref\* %_DEST%\lib%_EXT%\python\wsgiref\*
-..\%__SRC%\misc\build\Python-2.7.6\Lib\json\* %_DEST%\lib%_EXT%\python\json\*
-..\%__SRC%\misc\build\Python-2.7.6\Lib\lib2to3\* %_DEST%\lib%_EXT%\python\lib2to3\*
-..\%__SRC%\misc\build\Python-2.7.6\Lib\lib2to3\fixes\* %_DEST%\lib%_EXT%\python\lib2to3\fixes\*
-..\%__SRC%\misc\build\Python-2.7.6\Lib\lib2to3\pgen2\* %_DEST%\lib%_EXT%\python\lib2to3\pgen2\*
-..\%__SRC%\misc\build\Python-2.7.6\Lib\sqlite3\* %_DEST%\lib%_EXT%\python\sqlite3\*
-..\%__SRC%\misc\build\Python-2.7.6\Lib\ctypes\* %_DEST%\lib%_EXT%\python\ctypes\*
-..\%__SRC%\misc\build\Python-2.7.6\Lib\ctypes\macholib\* %_DEST%\lib%_EXT%\python\ctypes\macholib\*
-..\%__SRC%\misc\build\Python-2.7.6\Lib\xml\etree\* %_DEST%\lib%_EXT%\python\xml\etree
-..\%__SRC%\misc\build\Python-2.7.6\Lib\xml\etree\* %_DEST%\lib%_EXT%\python\xml\etree
-..\%__SRC%\misc\build\Python-2.7.6\Lib\importlib\* %_DEST%\lib%_EXT%\python\importlib\*
-..\%__SRC%\misc\build\Python-2.7.6\Lib\multiprocessing\* %_DEST%\lib%_EXT%\python\multiprocessing\*
-..\%__SRC%\misc\build\Python-2.7.6\Lib\multiprocessing\dummy\* %_DEST%\lib%_EXT%\python\multiprocessing\dummy\*
-..\%__SRC%\misc\build\Python-2.7.6\Lib\unittest\* %_DEST%\lib%_EXT%\python\unittest\*
-..\%__SRC%\misc\build\Python-2.7.6\Makefile %_DEST%\lib%_EXT%\python\python2.7\config\Makefile
+..\%__SRC%\misc\build\Python-2.7.8\Lib\* %_DEST%\lib%_EXT%\python\*
+..\%__SRC%\misc\build\Python-2.7.8\Lib\lib-old\* %_DEST%\lib%_EXT%\python\lib-old\*
+..\%__SRC%\misc\build\Python-2.7.8\Lib\lib-tk\* %_DEST%\lib%_EXT%\python\lib-tk\*
+..\%__SRC%\misc\build\Python-2.7.8\Lib\site-packages\* %_DEST%\lib%_EXT%\python\site-packages\*
+..\%__SRC%\misc\build\Python-2.7.8\Lib\encodings\* %_DEST%\lib%_EXT%\python\encodings\*
+..\%__SRC%\misc\build\Python-2.7.8\Lib\email\* %_DEST%\lib%_EXT%\python\email\*
+..\%__SRC%\misc\build\Python-2.7.8\Lib\email\mime\* %_DEST%\lib%_EXT%\python\email\mime\*
+..\%__SRC%\misc\build\Python-2.7.8\Lib\compiler\* %_DEST%\lib%_EXT%\python\compiler\*
+..\%__SRC%\misc\build\Python-2.7.8\Lib\hotshot\* %_DEST%\lib%_EXT%\python\hotshot\*
+..\%__SRC%\misc\build\Python-2.7.8\Lib\distutils\* %_DEST%\lib%_EXT%\python\distutils\*
+..\%__SRC%\misc\build\Python-2.7.8\Lib\distutils\command\* %_DEST%\lib%_EXT%\python\distutils\command\*
+..\%__SRC%\misc\build\Python-2.7.8\Lib\xml\* %_DEST%\lib%_EXT%\python\xml\*
+..\%__SRC%\misc\build\Python-2.7.8\Lib\xml\dom\* %_DEST%\lib%_EXT%\python\xml\dom\*
+..\%__SRC%\misc\build\Python-2.7.8\Lib\xml\parsers\* %_DEST%\lib%_EXT%\python\xml\parsers\*
+..\%__SRC%\misc\build\Python-2.7.8\Lib\xml\sax\* %_DEST%\lib%_EXT%\python\xml\sax\*
+..\%__SRC%\misc\build\Python-2.7.8\Lib\curses\* %_DEST%\lib%_EXT%\python\curses\*
+..\%__SRC%\misc\build\Python-2.7.8\Lib\plat-linux2\* %_DEST%\lib%_EXT%\python\plat-linux2\*
+..\%__SRC%\misc\build\Python-2.7.8\Lib\config\* %_DEST%\lib%_EXT%\python\config\*
+..\%__SRC%\misc\build\Python-2.7.8\Lib\bsddb\* %_DEST%\lib%_EXT%\python\bsddb\*
+..\%__SRC%\misc\build\Python-2.7.8\Lib\logging\* %_DEST%\lib%_EXT%\python\logging\*
+..\%__SRC%\misc\build\Python-2.7.8\Lib\idlelib\* %_DEST%\lib%_EXT%\python\idlelib\*
+..\%__SRC%\misc\build\Python-2.7.8\Lib\idlelib\Icons\* %_DEST%\lib%_EXT%\python\idlelib\Icons\*
+..\%__SRC%\misc\build\Python-2.7.8\Lib\wsgiref\* %_DEST%\lib%_EXT%\python\wsgiref\*
+..\%__SRC%\misc\build\Python-2.7.8\Lib\json\* %_DEST%\lib%_EXT%\python\json\*
+..\%__SRC%\misc\build\Python-2.7.8\Lib\lib2to3\* %_DEST%\lib%_EXT%\python\lib2to3\*
+..\%__SRC%\misc\build\Python-2.7.8\Lib\lib2to3\fixes\* %_DEST%\lib%_EXT%\python\lib2to3\fixes\*
+..\%__SRC%\misc\build\Python-2.7.8\Lib\lib2to3\pgen2\* %_DEST%\lib%_EXT%\python\lib2to3\pgen2\*
+..\%__SRC%\misc\build\Python-2.7.8\Lib\sqlite3\* %_DEST%\lib%_EXT%\python\sqlite3\*
+..\%__SRC%\misc\build\Python-2.7.8\Lib\ctypes\* %_DEST%\lib%_EXT%\python\ctypes\*
+..\%__SRC%\misc\build\Python-2.7.8\Lib\ctypes\macholib\* %_DEST%\lib%_EXT%\python\ctypes\macholib\*
+..\%__SRC%\misc\build\Python-2.7.8\Lib\xml\etree\* %_DEST%\lib%_EXT%\python\xml\etree
+..\%__SRC%\misc\build\Python-2.7.8\Lib\xml\etree\* %_DEST%\lib%_EXT%\python\xml\etree
+..\%__SRC%\misc\build\Python-2.7.8\Lib\importlib\* %_DEST%\lib%_EXT%\python\importlib\*
+..\%__SRC%\misc\build\Python-2.7.8\Lib\multiprocessing\* %_DEST%\lib%_EXT%\python\multiprocessing\*
+..\%__SRC%\misc\build\Python-2.7.8\Lib\multiprocessing\dummy\* %_DEST%\lib%_EXT%\python\multiprocessing\dummy\*
+..\%__SRC%\misc\build\Python-2.7.8\Lib\unittest\* %_DEST%\lib%_EXT%\python\unittest\*
+..\%__SRC%\misc\build\Python-2.7.8\Makefile %_DEST%\lib%_EXT%\python\python2.7\config\Makefile
 ..\%__SRC%\misc\build\python-inst\lib\python2.7\_sysconfigdata.py %_DEST%\lib%_EXT%\python\_sysconfigdata.py
 ..\pyversion.mk %_DEST%\inc%_EXT%\pyversion.mk
 
-..\%__SRC%\misc\build\Python-2.7.6\Include\* %_DEST%\inc%_EXT%\python\*
+..\%__SRC%\misc\build\Python-2.7.8\Include\* %_DEST%\inc%_EXT%\python\*
 
 #unix ONLY !
 ..\%__SRC%\misc\build\python-inst\bin\python %_DEST%\bin%_EXT%\python
-..\%__SRC%\misc\build\Python-2.7.6\pyconfig.h %_DEST%\inc%_EXT%\python\pyconfig.h
+..\%__SRC%\misc\build\Python-2.7.8\pyconfig.h %_DEST%\inc%_EXT%\python\pyconfig.h
 ..\%__SRC%\misc\build\python-inst\lib\python2.7\lib-dynload\* %_DEST%\lib%_EXT%\python\lib-dynload\*
 ..\%__SRC%\misc\build\python-inst\bin\python2.7 %_DEST%\bin%_EXT%\python
 ..\%__SRC%\misc\build\python-inst\lib\libpython2.7.so.1.0 %_DEST%\lib%_EXT%\libpython2.7.so.1.0
@@ -91,24 +91,24 @@ symlink: %_DEST%\lib%_EXT%\libpython2.7.
 
 #MingW ONLY !
 ..\%__SRC%\misc\build\python-inst\bin\python.exe %_DEST%\bin%_EXT%\python.exe
-..\%__SRC%\misc\build\Python-2.7.6\libpython2.7.dll %_DEST%\bin%_EXT%\libpython2.7.dll
+..\%__SRC%\misc\build\Python-2.7.8\libpython2.7.dll %_DEST%\bin%_EXT%\libpython2.7.dll
 
 # WINDOWS ONLY !
 ..\%__SRC%\misc\build\pyconfig.h %_DEST%\inc%_EXT%\python\pyconfig.h
-..\%__SRC%\misc\build\Python-2.7.6\PCbuild\python.exe %_DEST%\bin%_EXT%\python.exe
-..\%__SRC%\misc\build\Python-2.7.6\PCbuild\python27.dll %_DEST%\bin%_EXT%\python27.dll
-..\%__SRC%\misc\build\Python-2.7.6\PCbuild\python27.lib %_DEST%\lib%_EXT%\python27.lib
-..\%__SRC%\misc\build\Python-2.7.6\PCbuild\_socket.pyd %_DEST%\lib%_EXT%\python\_socket.pyd
-..\%__SRC%\misc\build\Python-2.7.6\PCbuild\_ssl.pyd %_DEST%\lib%_EXT%\python\_ssl.pyd
-..\%__SRC%\misc\build\Python-2.7.6\PCbuild\select.pyd %_DEST%\lib%_EXT%\python\select.pyd
-..\%__SRC%\misc\build\Python-2.7.6\PCbuild\unicodedata.pyd %_DEST%\lib%_EXT%\python\unicodedata.pyd
-..\%__SRC%\misc\build\Python-2.7.6\PCbuild\winsound.pyd %_DEST%\lib%_EXT%\python\winsound.pyd
-..\%__SRC%\misc\build\Python-2.7.6\PCbuild\pyexpat.pyd %_DEST%\lib%_EXT%\python\pyexpat.pyd
-..\%__SRC%\misc\build\Python-2.7.6\PCbuild\_testcapi.pyd %_DEST%\lib%_EXT%\python\_testcapi.pyd
-..\%__SRC%\misc\build\Python-2.7.6\PCbuild\_multiprocessing.pyd %_DEST%\lib%_EXT%\python\_multiprocessing.pyd
-..\%__SRC%\misc\build\Python-2.7.6\PCbuild\_msi.pyd %_DEST%\lib%_EXT%\python\_msi.pyd
-..\%__SRC%\misc\build\Python-2.7.6\PCbuild\_elementtree.pyd %_DEST%\lib%_EXT%\python\_elementtree.pyd
-..\%__SRC%\misc\build\Python-2.7.6\PCbuild\_ctypes.pyd %_DEST%\lib%_EXT%\python\_ctypes.pyd
+..\%__SRC%\misc\build\Python-2.7.8\PCbuild\python.exe %_DEST%\bin%_EXT%\python.exe
+..\%__SRC%\misc\build\Python-2.7.8\PCbuild\python27.dll %_DEST%\bin%_EXT%\python27.dll
+..\%__SRC%\misc\build\Python-2.7.8\PCbuild\python27.lib %_DEST%\lib%_EXT%\python27.lib
+..\%__SRC%\misc\build\Python-2.7.8\PCbuild\_socket.pyd %_DEST%\lib%_EXT%\python\_socket.pyd
+..\%__SRC%\misc\build\Python-2.7.8\PCbuild\_ssl.pyd %_DEST%\lib%_EXT%\python\_ssl.pyd
+..\%__SRC%\misc\build\Python-2.7.8\PCbuild\select.pyd %_DEST%\lib%_EXT%\python\select.pyd
+..\%__SRC%\misc\build\Python-2.7.8\PCbuild\unicodedata.pyd %_DEST%\lib%_EXT%\python\unicodedata.pyd
+..\%__SRC%\misc\build\Python-2.7.8\PCbuild\winsound.pyd %_DEST%\lib%_EXT%\python\winsound.pyd
+..\%__SRC%\misc\build\Python-2.7.8\PCbuild\pyexpat.pyd %_DEST%\lib%_EXT%\python\pyexpat.pyd
+..\%__SRC%\misc\build\Python-2.7.8\PCbuild\_testcapi.pyd %_DEST%\lib%_EXT%\python\_testcapi.pyd
+..\%__SRC%\misc\build\Python-2.7.8\PCbuild\_multiprocessing.pyd %_DEST%\lib%_EXT%\python\_multiprocessing.pyd
+..\%__SRC%\misc\build\Python-2.7.8\PCbuild\_msi.pyd %_DEST%\lib%_EXT%\python\_msi.pyd
+..\%__SRC%\misc\build\Python-2.7.8\PCbuild\_elementtree.pyd %_DEST%\lib%_EXT%\python\_elementtree.pyd
+..\%__SRC%\misc\build\Python-2.7.8\PCbuild\_ctypes.pyd %_DEST%\lib%_EXT%\python\_ctypes.pyd
 
 #linklib: libpython.so.*.*.*
 

Added: openoffice/trunk/main/python/python-2.7.8-mingw.patch
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/python/python-2.7.8-mingw.patch?rev=1722635&view=auto
==============================================================================
--- openoffice/trunk/main/python/python-2.7.8-mingw.patch (added)
+++ openoffice/trunk/main/python/python-2.7.8-mingw.patch Sat Jan  2 15:17:18 2016
@@ -0,0 +1,1056 @@
+diff -ru misc/Python-2.7.8/Include/pyport.h misc/build/Python-2.7.8/Include/pyport.h
+--- misc/Python-2.7.8/Include/pyport.h	2014-06-29 21:05:24.000000000 -0500
++++ misc/build/Python-2.7.8/Include/pyport.h	2016-01-01 17:49:55.171717963 -0500
+@@ -9,6 +9,30 @@
+ #include <inttypes.h>
+ #endif
+ 
++#if defined(__MINGW32__)
++#undef HAVE_FORKPTY
++#undef HAVE_OPENPTY
++#undef HAVE_DEV_PTMX
++#undef _POSIX_THREADS
++#undef HAVE_PTHREAD_H
++#define MS_WINDOWS
++#define MS_WIN32
++#define Py_WIN_WIDE_FILENAMES
++#ifndef PYTHONPATH
++#	define PYTHONPATH ".\\lib;.\\lib\\python" VERSION ";.\\lib\\python" VERSION "\\lib-dynload;.\\lib\\python" VERSION "\\plat-winmingw32;.\\lib\\python" VERSION "\\lib-tk"
++#endif
++#define NT_THREADS
++#define WITH_THREAD
++#define WINVER 0x0501
++#ifdef socklen_t
++#undef socklen_t
++#endif
++#define HAVE_ADDRINFO
++#define HAVE_GETADDRINFO
++#define HAVE_GETNAMEINFO
++#define HAVE_GETPEERNAME
++#endif
++
+ #ifdef HAVE_STDINT_H
+ #include <stdint.h>
+ #endif
+diff -ru misc/Python-2.7.8/Lib/distutils/ccompiler.py misc/build/Python-2.7.8/Lib/distutils/ccompiler.py
+--- misc/Python-2.7.8/Lib/distutils/ccompiler.py	2014-06-29 21:05:25.000000000 -0500
++++ misc/build/Python-2.7.8/Lib/distutils/ccompiler.py	2016-01-01 17:49:55.172717391 -0500
+@@ -895,6 +895,7 @@
+     # on a cygwin built python we can use gcc like an ordinary UNIXish
+     # compiler
+     ('cygwin.*', 'unix'),
++    ('winmingw*', 'unix'),
+     ('os2emx', 'emx'),
+ 
+     # OS name mappings
+diff -ru misc/Python-2.7.8/Lib/distutils/command/build_ext.py misc/build/Python-2.7.8/Lib/distutils/command/build_ext.py
+--- misc/Python-2.7.8/Lib/distutils/command/build_ext.py	2014-06-29 21:05:25.000000000 -0500
++++ misc/build/Python-2.7.8/Lib/distutils/command/build_ext.py	2016-01-01 17:49:55.173717798 -0500
+@@ -221,7 +221,7 @@
+ 
+         # for extensions under Cygwin and AtheOS Python's library directory must be
+         # appended to library_dirs
+-        if sys.platform[:6] == 'cygwin' or sys.platform[:6] == 'atheos':
++        if sys.platform[:6] == 'cygwin' or sys.platform[:8] == 'winmingw' or sys.platform[:6] == 'atheos':
+             if sys.executable.startswith(os.path.join(sys.exec_prefix, "bin")):
+                 # building third party extensions
+                 self.library_dirs.append(os.path.join(sys.prefix, "lib",
+@@ -723,7 +723,7 @@
+             # don't extend ext.libraries, it may be shared with other
+             # extensions, it is a reference to the original list
+             return ext.libraries + [pythonlib]
+-        elif sys.platform[:6] == "cygwin":
++        elif sys.platform[:6] == "cygwin" or sys.platform[:8] == "winmingw":
+             template = "python%d.%d"
+             pythonlib = (template %
+                    (sys.hexversion >> 24, (sys.hexversion >> 16) & 0xff))
+diff -ru misc/Python-2.7.8/Lib/distutils/command/install.py misc/build/Python-2.7.8/Lib/distutils/command/install.py
+--- misc/Python-2.7.8/Lib/distutils/command/install.py	2014-06-29 21:05:25.000000000 -0500
++++ misc/build/Python-2.7.8/Lib/distutils/command/install.py	2016-01-01 17:49:55.174717925 -0500
+@@ -348,9 +348,10 @@
+ 
+         # Convert directories from Unix /-separated syntax to the local
+         # convention.
+-        self.convert_paths('lib', 'purelib', 'platlib',
+-                           'scripts', 'data', 'headers',
+-                           'userbase', 'usersite')
++        if os.sep != '/':
++            self.convert_paths('lib', 'purelib', 'platlib',
++                               'scripts', 'data', 'headers',
++                               'userbase', 'usersite')
+ 
+         # Well, we're not actually fully completely finalized yet: we still
+         # have to deal with 'extra_path', which is the hack for allowing
+@@ -362,7 +363,7 @@
+ 
+         # If a new root directory was supplied, make all the installation
+         # dirs relative to it.
+-        if self.root is not None:
++        if self.root is not None and self.root != "":
+             self.change_roots('libbase', 'lib', 'purelib', 'platlib',
+                               'scripts', 'data', 'headers')
+ 
+@@ -501,7 +502,10 @@
+     def convert_paths (self, *names):
+         for name in names:
+             attr = "install_" + name
+-            setattr(self, attr, convert_path(getattr(self, attr)))
++            if self.root is None or self.root == "":
++                setattr(self, attr, getattr(self, attr).replace('/', os.sep))
++            else:
++                setattr(self, attr, convert_path(getattr(self, attr)))
+ 
+ 
+     def handle_extra_path (self):
+diff -ru misc/Python-2.7.8/Lib/distutils/spawn.py misc/build/Python-2.7.8/Lib/distutils/spawn.py
+--- misc/Python-2.7.8/Lib/distutils/spawn.py	2014-06-29 21:05:26.000000000 -0500
++++ misc/build/Python-2.7.8/Lib/distutils/spawn.py	2016-01-01 17:49:55.175718681 -0500
+@@ -212,7 +212,7 @@
+     paths = path.split(os.pathsep)
+     base, ext = os.path.splitext(executable)
+ 
+-    if (sys.platform == 'win32' or os.name == 'os2') and (ext != '.exe'):
++    if (sys.platform == 'win32' or sys.platform[:8] == "winmingw" or os.name == 'os2') and (ext != '.exe'):
+         executable = executable + '.exe'
+ 
+     if not os.path.isfile(executable):
+diff -ru misc/Python-2.7.8/Lib/distutils/sysconfig.py misc/build/Python-2.7.8/Lib/distutils/sysconfig.py
+--- misc/Python-2.7.8/Lib/distutils/sysconfig.py	2014-06-29 21:05:26.000000000 -0500
++++ misc/build/Python-2.7.8/Lib/distutils/sysconfig.py	2016-01-01 17:49:55.175718681 -0500
+@@ -449,6 +449,9 @@
+     global _config_vars
+     if _config_vars is None:
+         func = globals().get("_init_" + os.name)
++        if sys.platform[:8] == "winmingw":
++            func = globals().get("_init_posix")
++
+         if func:
+             func()
+         else:
+diff -ru misc/Python-2.7.8/Lib/distutils/unixccompiler.py misc/build/Python-2.7.8/Lib/distutils/unixccompiler.py
+--- misc/Python-2.7.8/Lib/distutils/unixccompiler.py	2014-06-29 21:05:26.000000000 -0500
++++ misc/build/Python-2.7.8/Lib/distutils/unixccompiler.py	2016-01-01 17:49:55.176718668 -0500
+@@ -80,7 +80,7 @@
+     shared_lib_extension = ".so"
+     dylib_lib_extension = ".dylib"
+     static_lib_format = shared_lib_format = dylib_lib_format = "lib%s%s"
+-    if sys.platform == "cygwin":
++    if sys.platform == "cygwin" or sys.platform == "winmingw":
+         exe_extension = ".exe"
+ 
+     def preprocess(self, source,
+diff -ru misc/Python-2.7.8/Lib/os.py misc/build/Python-2.7.8/Lib/os.py
+--- misc/Python-2.7.8/Lib/os.py	2014-06-29 21:05:30.000000000 -0500
++++ misc/build/Python-2.7.8/Lib/os.py	2016-01-01 17:49:55.177718586 -0500
+@@ -38,7 +38,21 @@
+     except AttributeError:
+         return [n for n in dir(module) if n[0] != '_']
+ 
+-if 'posix' in _names:
++if 'winmingw32' in _names:
++    name = 'nt'
++    linesep = '\r\n'
++    from posix import *
++    try:
++        from posix import _exit
++    except ImportError:
++        pass
++    import ntpath as path
++
++    import posix
++    __all__.extend(_get_exports_list(posix))
++    del posix
++
++elif 'posix' in _names:
+     name = 'posix'
+     linesep = '\n'
+     from posix import *
+diff -ru misc/Python-2.7.8/Lib/socket.py misc/build/Python-2.7.8/Lib/socket.py
+--- misc/Python-2.7.8/Lib/socket.py	2014-06-29 21:05:30.000000000 -0500
++++ misc/build/Python-2.7.8/Lib/socket.py	2016-01-01 17:49:55.178717595 -0500
+@@ -153,7 +153,7 @@
+     'sendall', 'setblocking',
+     'settimeout', 'gettimeout', 'shutdown')
+ 
+-if os.name == "nt":
++if os.name == "nt" and sys.platform[:8] != "winmingw":
+     _socketmethods = _socketmethods + ('ioctl',)
+ 
+ if sys.platform == "riscos":
+diff -ru misc/Python-2.7.8/Makefile.pre.in misc/build/Python-2.7.8/Makefile.pre.in
+--- misc/Python-2.7.8/Makefile.pre.in	2014-06-29 21:05:39.000000000 -0500
++++ misc/build/Python-2.7.8/Makefile.pre.in	2016-01-01 17:49:55.179718421 -0500
+@@ -121,6 +121,16 @@
+ BLDSHARED=	@BLDSHARED@ $(LDFLAGS)
+ LDCXXSHARED=	@LDCXXSHARED@
+ DESTSHARED=	$(BINLIBDEST)/lib-dynload
++ifeq (@MACHDEP@,winmingw32)
++DESTSHAREDFORRULES=	$(shell cd $(DESTSHARED) && pwd || echo DESTSHARED)
++LIBPYTHONPATH=	$(shell cd $(DESTDIR)$(LIBDEST) && cmd /c cd | sed -e s:\\\\:/:g)
++DESTPYTHONPATH=	$(LIBPYTHONPATH);$(shell cd $(DESTDIR)$(DESTSHARED) && cmd /c cd | sed -e s:\\\\:/:g)
++LIBDESTPARAM=	$(shell if test -z "$(DESTDIR)" ; then cd $(LIBDEST) && cmd /c cd | sed -e s:\\\\:/:g ; else echo $(LIBDEST) ; fi)
++PREFIXPARAM=	$(shell if test -z "$(DESTDIR)" ; then cd $(prefix) && cmd /c cd | sed -e s:\\\\:/:g ; else echo $(prefix) ; fi)
++BINDIRPARAM=	$(shell if test -z "$(DESTDIR)" ; then cd $(BINDIR) && cmd /c cd | sed -e s:\\\\:/:g ; else echo $(BINDIR) ; fi)
++DESTSHAREDPARAM=	$(shell if test -z "$(DESTDIR)" ; then cd $(DESTSHARED) && cmd /c cd | sed -e s:\\\\:/:g ; else echo $(DESTSHARED) ; fi)
++DESTDIRPARAM=	$(shell if test ! -z "$(DESTDIR)" ; then cd $(DESTDIR) && cmd /c | sed -e s:\\\\:/:g ; fi)
++endif
+ 
+ # Executable suffix (.exe on Windows and Mac OS X)
+ EXE=		@EXEEXT@
+@@ -211,7 +221,7 @@
+ # Modules
+ MODULE_OBJS=	\
+ 		Modules/config.o \
+-		Modules/getpath.o \
++		@GETPATH_OBJS@ \
+ 		Modules/main.o \
+ 		Modules/gcmodule.o
+ 
+@@ -586,6 +596,10 @@
+ 		-DVPATH='"$(VPATH)"' \
+ 		-o $@ $(srcdir)/Modules/getpath.c
+ 
++PC/getpathp.o: $(srcdir)/PC/getpathp.c Makefile
++	$(CC) -c $(PY_CFLAGS) -DVERSION='"$(VERSION)"' \
++		-o $@ $(srcdir)/PC/getpathp.c
++
+ Modules/python.o: $(srcdir)/Modules/python.c
+ 	$(MAINCC) -c $(PY_CFLAGS) -o $@ $(srcdir)/Modules/python.c
+ 
+@@ -634,6 +648,12 @@
+ Objects/unicodectype.o:	$(srcdir)/Objects/unicodectype.c \
+ 				$(srcdir)/Objects/unicodetype_db.h
+ 
++Objects/exceptions.o:	$(srcdir)/Objects/exceptions.c
++		$(CC) -c $(PY_CFLAGS) -I$(srcdir)/PC -o $@ $(srcdir)/Objects/exceptions.c
++
++PC/import_nt.o: $(srcdir)/PC/import_nt.c
++		$(CC) -c $(PY_CFLAGS) -I$(srcdir)/Python -o $@ $(srcdir)/PC/import_nt.c
++
+ STRINGLIB_HEADERS= \
+ 		$(srcdir)/Include/bytes_methods.h \
+ 		$(srcdir)/Objects/stringlib/count.h \
+@@ -829,7 +849,11 @@
+ # Install shared libraries enabled by Setup
+ DESTDIRS=	$(exec_prefix) $(LIBDIR) $(BINLIBDEST) $(DESTSHARED)
+ 
++ifeq (@MACHDEP@,winmingw32)
++oldsharedinstall: $(DESTSHAREDFORRULES) $(SHAREDMODS)
++else
+ oldsharedinstall: $(DESTSHARED) $(SHAREDMODS)
++endif
+ 		@for i in X $(SHAREDMODS); do \
+ 		  if test $$i != X; then \
+ 		    echo $(INSTALL_SHARED) $$i $(DESTSHARED)/`basename $$i`; \
+@@ -837,7 +861,11 @@
+ 		  fi; \
+ 		done
+ 
++ifeq (@MACHDEP@,winmingw32)
++$(DESTSHAREDFORRULES):
++else
+ $(DESTSHARED):
++endif
+ 		@for i in $(DESTDIRS); \
+ 		do \
+ 			if test ! -d $(DESTDIR)$$i; then \
+@@ -949,7 +977,11 @@
+ 		unittest unittest/test \
+ 		lib-old \
+ 		curses pydoc_data $(MACHDEPS)
++ifeq (@MACHDEP@,winmingw32)
++libinstall:	build_all $(srcdir)/Lib/$(PLATDIR) $(srcdir)/Modules/xxmodule.c sharedinstall
++else
+ libinstall:	build_all $(srcdir)/Lib/$(PLATDIR) $(srcdir)/Modules/xxmodule.c
++endif
+ 	@for i in $(SCRIPTDIR) $(LIBDEST); \
+ 	do \
+ 		if test ! -d $(DESTDIR)$$i; then \
+@@ -1009,6 +1041,26 @@
+ 		$(INSTALL_DATA) $(srcdir)/Modules/xxmodule.c \
+ 			$(DESTDIR)$(LIBDEST)/distutils/tests ; \
+ 	fi
++ifeq (@MACHDEP@,winmingw32)
++	PYTHONPATH="$(DESTPYTHONPATH)"  $(RUNSHARED) \
++		./$(BUILDPYTHON) -Wi -tt $(LIBPYTHONPATH)/compileall.py \
++		-d $(LIBDESTPARAM) -f \
++		-x 'bad_coding|badsyntax|site-packages' $(LIBPYTHONPATH)
++	PYTHONPATH="$(DESTPYTHONPATH)"  $(RUNSHARED) \
++		./$(BUILDPYTHON) -Wi -tt -O $(LIBPYTHONPATH)/compileall.py \
++		-d $(LIBDESTPARAM) -f \
++		-x 'bad_coding|badsyntax|site-packages' $(LIBPYTHONPATH)
++	-PYTHONPATH="$(DESTPYTHONPATH)"  $(RUNSHARED) \
++		./$(BUILDPYTHON) -Wi -t $(LIBPYTHONPATH)/compileall.py \
++		-d $(LIBDESTPARAM)/site-packages -f \
++		-x badsyntax $(LIBPYTHONPATH)/site-packages
++	-PYTHONPATH="$(DESTPYTHONPATH)"  $(RUNSHARED) \
++		./$(BUILDPYTHON) -Wi -t -O $(LIBPYTHONPATH)/compileall.py \
++		-d $(LIBDESTPARAM)/site-packages -f \
++		-x badsyntax $(LIBPYTHONPATH)/site-packages
++	-PYTHONPATH="$(DESTPYTHONPATH)"  $(RUNSHARED) \
++		./$(BUILDPYTHON) -Wi -t -c "import lib2to3.pygram, lib2to3.patcomp;lib2to3.patcomp.PatternCompiler()"
++else
+ 	PYTHONPATH=$(DESTDIR)$(LIBDEST)  $(RUNSHARED) \
+ 		$(PYTHON_FOR_BUILD) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \
+ 		-d $(LIBDEST) -f \
+@@ -1035,6 +1087,7 @@
+ # Create the PLATDIR source directory, if one wasn't distributed..
+ $(srcdir)/Lib/$(PLATDIR):
+ 	mkdir $(srcdir)/Lib/$(PLATDIR)
++ifneq (@MACHDEP@,winmingw32)
+ 	cp $(srcdir)/Lib/plat-generic/regen $(srcdir)/Lib/$(PLATDIR)/regen
+ 	export PATH; PATH="`pwd`:$$PATH"; \
+ 	export PYTHONPATH; PYTHONPATH="$(srcdir)/Lib:$(abs_builddir)/`cat pybuilddir.txt`"; \
+@@ -1048,6 +1101,7 @@
+ 	  PYTHON_FOR_BUILD="$(PYTHON_FOR_BUILD)"; \
+ 	fi; \
+ 	cd $(srcdir)/Lib/$(PLATDIR); $(RUNSHARED) ./regen
++endif
+ 
+ python-config: $(srcdir)/Misc/python-config.in
+ 	# Substitution happens here, as the completely-expanded BINDIR
+@@ -1141,6 +1195,15 @@
+ 
+ # Install the dynamically loadable modules
+ # This goes into $(exec_prefix)
++ifeq (@MACHDEP@,winmingw32)
++sharedinstall: $(DESTSHAREDFORRULES)
++       $(RUNSHARED) ./$(BUILDPYTHON) -E $(srcdir)/setup.py install \
++               --prefix=$(PREFIXPARAM) \
++               --install-scripts=$(BINDIRPARAM) \
++               --install-platlib=$(DESTSHAREDPARAM) \
++               --root=$(DESTDIRPARAM)
++else
++
+ sharedinstall: sharedmods
+ 	$(RUNSHARED) $(PYTHON_FOR_BUILD) $(srcdir)/setup.py install \
+ 	   	--prefix=$(prefix) \
+@@ -1148,6 +1211,7 @@
+ 		--install-platlib=$(DESTSHARED) \
+ 		--root=$(DESTDIR)/
+ 	-rm $(DESTDIR)$(DESTSHARED)/_sysconfigdata.py*
++endif
+ 
+ # Here are a couple of targets for MacOSX again, to install a full
+ # framework-based Python. frameworkinstall installs everything, the
+diff -ru misc/Python-2.7.8/Modules/Setup.config.in misc/build/Python-2.7.8/Modules/Setup.config.in
+--- misc/Python-2.7.8/Modules/Setup.config.in	2014-06-29 21:05:40.000000000 -0500
++++ misc/build/Python-2.7.8/Modules/Setup.config.in	2016-01-01 17:49:55.179718421 -0500
+@@ -9,5 +9,9 @@
+ # The signal module
+ @USE_SIGNAL_MODULE@signal signalmodule.c
+ 
++# The password module
++@USE_PASSWORD_MODULE@pwd pwdmodule.c	# this is needed to find out the user's home dir
++					# if $HOME is not set
++
+ # The rest of the modules previously listed in this file are built
+ # by the setup.py script in Python 2.1 and later.
+diff -ru misc/Python-2.7.8/Modules/Setup.dist misc/build/Python-2.7.8/Modules/Setup.dist
+--- misc/Python-2.7.8/Modules/Setup.dist	2014-06-29 21:05:40.000000000 -0500
++++ misc/build/Python-2.7.8/Modules/Setup.dist	2016-01-01 17:49:55.180717640 -0500
+@@ -114,7 +114,7 @@
+ 
+ posix posixmodule.c		# posix (UNIX) system calls
+ errno errnomodule.c		# posix (UNIX) errno values
+-pwd pwdmodule.c			# this is needed to find out the user's home dir
++#pwd pwdmodule.c			# this is needed to find out the user's home dir
+ 				# if $HOME is not set
+ _sre _sre.c			# Fredrik Lundh's new regular expressions
+ _codecs _codecsmodule.c		# access to the builtin codecs and codec registry
+diff -ru misc/Python-2.7.8/Modules/_ctypes/libffi/configure misc/build/Python-2.7.8/Modules/_ctypes/libffi/configure
+--- misc/Python-2.7.8/Modules/_ctypes/libffi/configure	2014-06-29 21:05:40.000000000 -0500
++++ misc/build/Python-2.7.8/Modules/_ctypes/libffi/configure	2016-01-01 17:49:55.235718066 -0500
+@@ -14855,6 +14855,12 @@
+ fi
+ 
+ 
++case $host_os in
++mingw*)
++	srcdir=`cd $srcdir && cmd /c cd | sed -e 's:\\\\:/:g'`
++	;;
++esac
++
+ ac_config_commands="$ac_config_commands include"
+ 
+ ac_config_commands="$ac_config_commands src"
+diff -ru misc/Python-2.7.8/Modules/_ctypes/libffi/configure.ac misc/build/Python-2.7.8/Modules/_ctypes/libffi/configure.ac
+--- misc/Python-2.7.8/Modules/_ctypes/libffi/configure.ac	2014-06-29 21:05:40.000000000 -0500
++++ misc/build/Python-2.7.8/Modules/_ctypes/libffi/configure.ac	2016-01-01 17:49:55.236718053 -0500
+@@ -564,6 +564,12 @@
+ fi
+ AC_SUBST(toolexeclibdir)
+ 
++case $host_os in
++mingw*)
++	srcdir=`cd $srcdir && cmd /c cd | sed -e 's:\\\\:/:g'`
++	;;
++esac
++
+ AC_CONFIG_COMMANDS(include, [test -d include || mkdir include])
+ AC_CONFIG_COMMANDS(src, [
+ test -d src || mkdir src
+diff -ru misc/Python-2.7.8/Modules/_ctypes/libffi/include/ffi.h.in misc/build/Python-2.7.8/Modules/_ctypes/libffi/include/ffi.h.in
+--- misc/Python-2.7.8/Modules/_ctypes/libffi/include/ffi.h.in	2014-06-29 21:05:40.000000000 -0500
++++ misc/build/Python-2.7.8/Modules/_ctypes/libffi/include/ffi.h.in	2016-01-01 17:49:55.236718053 -0500
+@@ -428,7 +428,11 @@
+ 			    ffi_type *rtype,
+ 			    ffi_type **atypes);
+ 
++#ifdef MS_WIN32
++int ffi_call(ffi_cif *cif,
++#else
+ void ffi_call(ffi_cif *cif,
++#endif
+ 	      void (*fn)(void),
+ 	      void *rvalue,
+ 	      void **avalue);
+diff -ru misc/Python-2.7.8/Modules/config.c.in misc/build/Python-2.7.8/Modules/config.c.in
+--- misc/Python-2.7.8/Modules/config.c.in	2014-06-29 21:05:42.000000000 -0500
++++ misc/build/Python-2.7.8/Modules/config.c.in	2016-01-01 17:49:55.237718460 -0500
+@@ -48,6 +48,9 @@
+     {"__builtin__", NULL},
+     {"sys", NULL},
+     {"exceptions", NULL},
++#ifdef __MINGW32__
++	{"winmingw32", NULL},
++#endif
+ 
+     /* This lives in gcmodule.c */
+     {"gc", initgc},
+diff -ru misc/Python-2.7.8/Modules/posixmodule.c misc/build/Python-2.7.8/Modules/posixmodule.c
+--- misc/Python-2.7.8/Modules/posixmodule.c	2014-06-29 21:05:43.000000000 -0500
++++ misc/build/Python-2.7.8/Modules/posixmodule.c	2016-01-01 17:49:55.241719248 -0500
+@@ -132,6 +132,15 @@
+ #define HAVE_FSYNC      1
+ #define fsync _commit
+ #else
++#ifdef __MINGW32__
++#define HAVE_SPAWNV	1
++#define HAVE_EXECV      1
++#define HAVE_GETCWD     1
++#define HAVE_OPENDIR    1
++#define HAVE_PIPE       1
++#define HAVE_POPEN      1
++#define HAVE_SYSTEM	1
++#else
+ #if defined(PYOS_OS2) && defined(PYCC_GCC) || defined(__VMS)
+ /* Everything needed is defined in PC/os2emx/pyconfig.h or vms/pyconfig.h */
+ #else                   /* all other compilers */
+@@ -157,6 +166,7 @@
+ #define HAVE_WAIT       1
+ #define HAVE_TTYNAME    1
+ #endif  /* PYOS_OS2 && PYCC_GCC && __VMS */
++#endif  /* __MINGW32__ */
+ #endif  /* _MSC_VER */
+ #endif  /* __BORLANDC__ */
+ #endif  /* ! __WATCOMC__ || __QNX__ */
+@@ -277,6 +287,14 @@
+ #define pclose  _pclose
+ #endif /* _MSC_VER */
+ 
++#ifdef __MINGW32__
++#include "osdefs.h"
++#include <windows.h>
++#include <shellapi.h>	/* for ShellExecute() */
++#define popen	_popen
++#define pclose	_pclose
++#endif
++
+ #if defined(PYCC_VACPP) && defined(PYOS_OS2)
+ #include <io.h>
+ #endif /* OS2 */
+@@ -575,7 +593,7 @@
+ */
+ #include <crt_externs.h>
+ static char **environ;
+-#elif !defined(_MSC_VER) && ( !defined(__WATCOMC__) || defined(__QNX__) )
++#elif !defined(_MSC_VER) && !defined(__MINGW32__) && ( !defined(__WATCOMC__) || defined(__QNX__) )
+ extern char **environ;
+ #endif /* !_MSC_VER */
+ 
+@@ -994,7 +1012,7 @@
+     int st_ctime_nsec;
+ };
+ 
+-static __int64 secs_between_epochs = 11644473600; /* Seconds between 1.1.1601 and 1.1.1970 */
++static __int64 secs_between_epochs = 11644473600LL; /* Seconds between 1.1.1601 and 1.1.1970 */
+ 
+ static void
+ FILE_TIME_to_time_t_nsec(FILETIME *in_ptr, time_t *time_out, int* nsec_out)
+@@ -1514,7 +1532,7 @@
+     return v;
+ }
+ 
+-#ifdef MS_WINDOWS
++#if defined(MS_WINDOWS) && !defined(__MINGW32__)
+ 
+ /* IsUNCRoot -- test whether the supplied path is of the form \\SERVER\SHARE\,
+    where / can be used in place of \ and the trailing slash is optional.
+diff -ru misc/Python-2.7.8/Modules/socketmodule.c misc/build/Python-2.7.8/Modules/socketmodule.c
+--- misc/Python-2.7.8/Modules/socketmodule.c	2014-06-29 21:05:43.000000000 -0500
++++ misc/build/Python-2.7.8/Modules/socketmodule.c	2016-01-01 17:49:55.244718023 -0500
+@@ -313,7 +313,7 @@
+   /* Do not include addrinfo.h for MSVC7 or greater. 'addrinfo' and
+    * EAI_* constants are defined in (the already included) ws2tcpip.h.
+    */
+-#else
++#elif !defined(__MINGW32__)
+ #  include "addrinfo.h"
+ #endif
+ 
+diff -ru misc/Python-2.7.8/PC/_winreg.c misc/build/Python-2.7.8/PC/_winreg.c
+--- misc/Python-2.7.8/PC/_winreg.c	2014-06-29 21:05:46.000000000 -0500
++++ misc/build/Python-2.7.8/PC/_winreg.c	2016-01-01 17:49:55.246717928 -0500
+@@ -1790,6 +1790,9 @@
+ }
+ 
+ #define ADD_KEY(val) inskey(d, #val, val)
++#ifndef REG_LEGAL_CHANGE_FILTER
++#define REG_LEGAL_CHANGE_FILTER (REG_NOTIFY_CHANGE_NAME|REG_NOTIFY_CHANGE_ATTRIBUTES|REG_NOTIFY_CHANGE_LAST_SET|REG_NOTIFY_CHANGE_SECURITY)
++#endif
+ 
+ PyMODINIT_FUNC init_winreg(void)
+ {
+diff -ru misc/Python-2.7.8/Python/dynload_win.c misc/build/Python-2.7.8/Python/dynload_win.c
+--- misc/Python-2.7.8/Python/dynload_win.c	2014-06-29 21:05:47.000000000 -0500
++++ misc/build/Python-2.7.8/Python/dynload_win.c	2016-01-01 17:49:55.246717928 -0500
+@@ -28,6 +28,7 @@
+ /* Case insensitive string compare, to avoid any dependencies on particular
+    C RTL implementations */
+ 
++#ifndef __MINGW32__
+ static int strcasecmp (char *string1, char *string2)
+ {
+     int first, second;
+@@ -41,6 +42,7 @@
+ 
+     return (first - second);
+ }
++#endif
+ 
+ 
+ /* Function to return the name of the "python" DLL that the supplied module
+diff -ru misc/Python-2.7.8/Python/frozenmain.c misc/build/Python-2.7.8/Python/frozenmain.c
+--- misc/Python-2.7.8/Python/frozenmain.c	2014-06-29 21:05:47.000000000 -0500
++++ misc/build/Python-2.7.8/Python/frozenmain.c	2016-01-01 17:49:55.247717915 -0500
+@@ -3,7 +3,7 @@
+ 
+ #include "Python.h"
+ 
+-#ifdef MS_WINDOWS
++#if defined(MS_WINDOWS) && !defined(__MINGW32__)
+ extern void PyWinFreeze_ExeInit(void);
+ extern void PyWinFreeze_ExeTerm(void);
+ extern int PyInitFrozenExtensions(void);
+@@ -32,12 +32,12 @@
+         setbuf(stderr, (char *)NULL);
+     }
+ 
+-#ifdef MS_WINDOWS
++#ifdef MS_WINDOWS && !defined(__MINGW32__)
+     PyInitFrozenExtensions();
+ #endif /* MS_WINDOWS */
+     Py_SetProgramName(argv[0]);
+     Py_Initialize();
+-#ifdef MS_WINDOWS
++#ifdef MS_WINDOWS && !defined(__MINGW32__)
+     PyWinFreeze_ExeInit();
+ #endif
+ 
+@@ -60,7 +60,7 @@
+     if (inspect && isatty((int)fileno(stdin)))
+         sts = PyRun_AnyFile(stdin, "<stdin>") != 0;
+ 
+-#ifdef MS_WINDOWS
++#ifdef MS_WINDOWS && !defined(__MINGW32__)
+     PyWinFreeze_ExeTerm();
+ #endif
+     Py_Finalize();
+diff -ru misc/Python-2.7.8/configure misc/build/Python-2.7.8/configure
+--- misc/Python-2.7.8/configure	2014-06-29 21:05:48.000000000 -0500
++++ misc/build/Python-2.7.8/configure	2016-01-01 17:49:55.307717091 -0500
+@@ -637,8 +637,10 @@
+ LIBOBJS
+ TRUE
+ MACHDEP_OBJS
++GETPATH_OBJS
+ DYNLOADFILE
+ DLINCLDIR
++USE_PASSWORD_MODULE
+ THREADOBJ
+ LDLAST
+ USE_THREAD_MODULE
+@@ -3359,6 +3361,13 @@
+         LDFLAGS="$SGI_ABI $LDFLAGS"
+         MACHDEP=`echo "${MACHDEP}${SGI_ABI}" | sed 's/ *//g'`
+ fi
++case $MACHDEP in
++        *mingw*|*MINGW*|*MinGW*)
++		MACHDEP="winmingw32"
++		ac_sys_system=`uname -s`
++		ac_sys_release=`uname -r`
++	;;
++esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MACHDEP" >&5
+ $as_echo "$MACHDEP" >&6; }
+ 
+@@ -5272,7 +5281,7 @@
+ if test -z "$enable_shared"
+ then
+   case $ac_sys_system in
+-  CYGWIN* | atheos*)
++  CYGWIN* | MINGW* | atheos*)
+     enable_shared="yes";;
+   *)
+     enable_shared="no";;
+@@ -5341,7 +5350,7 @@
+     BeOS*)
+           LDLIBRARY='libpython$(VERSION).so'
+           ;;
+-    CYGWIN*)
++    CYGWIN* | MINGW*)
+           LDLIBRARY='libpython$(VERSION).dll.a'
+           DLLLIBRARY='libpython$(VERSION).dll'
+           ;;
+@@ -5397,7 +5406,7 @@
+   esac
+ else # shared is disabled
+   case $ac_sys_system in
+-    CYGWIN*)
++    CYGWIN* | MINGW*)
+           BLDLIBRARY='$(LIBRARY)'
+           LDLIBRARY='libpython$(VERSION).dll.a'
+           ;;
+@@ -7812,6 +7821,10 @@
+ 
+ 
+ 
++ac_cv_sizeof_off_t=`echo $ac_cv_sizeof_off_t | tr -d '\015'`
++ac_cv_sizeof_long=`echo $ac_cv_sizeof_long | tr -d '\015'`
++ac_cv_sizeof_long_long=`echo $ac_cv_sizeof_long_long | tr -d '\015'`
++ac_cv_sizeof_short=`echo $ac_cv_sizeof_short | tr -d '\015'`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable large file support" >&5
+ $as_echo_n "checking whether to enable large file support... " >&6; }
+ if test "$have_long_long" = yes
+@@ -8128,7 +8141,7 @@
+ 	  		*)    SO=.sl;;
+ 		esac
+ 		;;
+-	CYGWIN*)   SO=.dll;;
++	CYGWIN* | MINGW*)   SO=.dll;;
+ 	*)	   SO=.so;;
+ 	esac
+ else
+@@ -8292,7 +8305,7 @@
+ 	SCO_SV*)
+ 		LDSHARED='$(CC) -Wl,-G,-Bexport'
+ 		LDCXXSHARED='$(CXX) -Wl,-G,-Bexport';;
+-	CYGWIN*)
++	CYGWIN* | MINGW*)
+ 		LDSHARED="gcc -shared -Wl,--enable-auto-image-base"
+ 		LDCXXSHARED="g++ -shared -Wl,--enable-auto-image-base";;
+ 	atheos*)
+@@ -8388,7 +8401,7 @@
+ 			LINKFORSHARED="-Xlinker --export-dynamic"
+ 		    fi;;
+ 		  esac;;
+-	CYGWIN*)
++	CYGWIN* | MINGW*)
+ 		if test $enable_shared = "no"
+ 		then
+ 			LINKFORSHARED='-Wl,--out-implib=$(LDLIBRARY)'
+@@ -8412,7 +8425,7 @@
+ if test ! "$LIBRARY" = "$LDLIBRARY"
+ then
+ 	case $ac_sys_system in
+-	CYGWIN*)
++	CYGWIN* | MINGW*)
+ 		# Cygwin needs CCSHARED when building extension DLLs
+ 		# but not when building the interpreter DLL.
+ 		CFLAGSFORSHARED='';;
+@@ -9663,7 +9676,7 @@
+ #define HAVE_PTHREAD_SIGMASK 1
+ _ACEOF
+  case $ac_sys_system in
+-        CYGWIN*)
++        CYGWIN* | MINGW*)
+ 
+ $as_echo "#define HAVE_BROKEN_PTHREAD_SIGMASK 1" >>confdefs.h
+ 
+@@ -9686,6 +9699,17 @@
+ fi
+ 
+ 
++case $MACHDEP in
++winmingw*)
++	THREADOBJ="Python/thread.o"
++	USE_THREAD_MODULE="#"
++	USE_PASSWORD_MODULE="#"
++	;;
++*)
++	USE_PASSWORD_MODULE=""
++	;;
++esac
++
+ # Check for enable-ipv6
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if --enable-ipv6 is specified" >&5
+@@ -10120,6 +10144,11 @@
+ 	# Use dynload_next.c only on 10.2 and below, which don't have native dlopen()
+ 	Darwin/[0156]\..*) DYNLOADFILE="dynload_next.o";;
+ 	atheos*) DYNLOADFILE="dynload_atheos.o";;
++	CYGWIN* | MINGW*)
++		case $MACHDEP in
++		winmingw*) DYNLOADFILE="dynload_win.o PC/import_nt.o PC/dl_nt.o";;
++		esac
++		;;
+ 	*)
+ 	# use dynload_shlib.c and dlopen() if we have it; otherwise stub
+ 	# out any dynamic loading
+@@ -10139,6 +10168,21 @@
+ 
+ fi
+ 
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking GETPATH_OBJS" >&5
++$as_echo_n "checking GETPATH_OBJS... " >&6; }
++if test -z "$GETPATH_OBJS"
++then
++	case $MACHDEP in
++	winmingw*)
++		GETPATH_OBJS='PC/getpathp.o';;
++	*)
++		GETPATH_OBJS='Modules/getpath.o';;
++	esac
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $GETPATH_OBJS" >&5
++$as_echo "$GETPATH_OBJS" >&6; }
++
+ # MACHDEP_OBJS can be set to platform-specific object files needed by Python
+ 
+ 
+@@ -11737,6 +11781,20 @@
+ 
+ fi
+ 
++case $MACHDEP in
++winmingw*)
++ac_fn_c_check_member "$LINENO" "struct stat" "st_blocks" "ac_cv_member_struct_stat_st_blocks" "$ac_includes_default"
++if test "x$ac_cv_member_struct_stat_st_blocks" = xyes; then :
++
++cat >>confdefs.h <<_ACEOF
++#define HAVE_STRUCT_STAT_ST_BLOCKS 1
++_ACEOF
++
++
++fi
++
++;;
++*)
+ ac_fn_c_check_member "$LINENO" "struct stat" "st_blocks" "ac_cv_member_struct_stat_st_blocks" "$ac_includes_default"
+ if test "x$ac_cv_member_struct_stat_st_blocks" = xyes; then :
+ 
+@@ -11757,6 +11815,8 @@
+ fi
+ 
+ 
++;;
++esac
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for time.h that defines altzone" >&5
+ $as_echo_n "checking for time.h that defines altzone... " >&6; }
+@@ -13140,6 +13200,7 @@
+ 
+ 
+ 
++ac_cv_sizeof_wchar_t=`echo $ac_cv_sizeof_wchar_t | tr -d '\015'`
+ 
+ if test "$enable_unicode" = "no"
+ then
+diff -ru misc/Python-2.7.8/configure.ac misc/build/Python-2.7.8/configure.ac
+--- misc/Python-2.7.8/configure.ac	2014-06-29 21:05:48.000000000 -0500
++++ misc/build/Python-2.7.8/configure.ac	2016-01-01 17:49:55.310717403 -0500
+@@ -488,6 +488,13 @@
+         LDFLAGS="$SGI_ABI $LDFLAGS"
+         MACHDEP=`echo "${MACHDEP}${SGI_ABI}" | sed 's/ *//g'`
+ fi
++case $MACHDEP in
++        *mingw*|*MINGW*|*MinGW*)
++		MACHDEP="winmingw32"
++		ac_sys_system=`uname -s`
++		ac_sys_release=`uname -r`
++	;;
++esac
+ AC_MSG_RESULT($MACHDEP)
+ 
+ # And add extra plat-mac for darwin
+@@ -821,7 +828,7 @@
+ if test -z "$enable_shared"
+ then 
+   case $ac_sys_system in
+-  CYGWIN* | atheos*)
++  CYGWIN* | MINGW* | atheos*)
+     enable_shared="yes";;
+   *)
+     enable_shared="no";;
+@@ -873,7 +880,7 @@
+     BeOS*)
+           LDLIBRARY='libpython$(VERSION).so'
+           ;;
+-    CYGWIN*)
++    CYGWIN* | MINGW*)
+           LDLIBRARY='libpython$(VERSION).dll.a'
+           DLLLIBRARY='libpython$(VERSION).dll'
+           ;;
+@@ -929,7 +936,7 @@
+   esac
+ else # shared is disabled
+   case $ac_sys_system in
+-    CYGWIN*)
++    CYGWIN* | MINGW*)
+           BLDLIBRARY='$(LIBRARY)'
+           LDLIBRARY='libpython$(VERSION).dll.a'
+           ;;
+@@ -1711,6 +1718,10 @@
+ #endif
+ ])
+ 
++ac_cv_sizeof_off_t=`echo $ac_cv_sizeof_off_t | tr -d '\015'`
++ac_cv_sizeof_long=`echo $ac_cv_sizeof_long | tr -d '\015'`
++ac_cv_sizeof_long_long=`echo $ac_cv_sizeof_long_long | tr -d '\015'`
++ac_cv_sizeof_short=`echo $ac_cv_sizeof_short | tr -d '\015'`
+ AC_MSG_CHECKING(whether to enable large file support)
+ if test "$have_long_long" = yes
+ then
+@@ -1916,7 +1927,7 @@
+ 	  		*)    SO=.sl;;
+ 		esac
+ 		;;
+-	CYGWIN*)   SO=.dll;;
++	CYGWIN* | MINGW*)   SO=.dll;;
+ 	*)	   SO=.so;;
+ 	esac
+ else
+@@ -2074,7 +2085,7 @@
+ 	SCO_SV*)
+ 		LDSHARED='$(CC) -Wl,-G,-Bexport'
+ 		LDCXXSHARED='$(CXX) -Wl,-G,-Bexport';;
+-	CYGWIN*)
++	CYGWIN* | MINGW*)
+ 		LDSHARED="gcc -shared -Wl,--enable-auto-image-base"
+ 		LDCXXSHARED="g++ -shared -Wl,--enable-auto-image-base";;
+ 	atheos*)
+@@ -2166,7 +2177,7 @@
+ 			LINKFORSHARED="-Xlinker --export-dynamic"
+ 		    fi;;
+ 		  esac;;
+-	CYGWIN*)
++	CYGWIN* | MINGW*)
+ 		if test $enable_shared = "no"
+ 		then
+ 			LINKFORSHARED='-Wl,--out-implib=$(LDLIBRARY)'
+@@ -2188,7 +2199,7 @@
+ if test ! "$LIBRARY" = "$LDLIBRARY"
+ then
+ 	case $ac_sys_system in
+-	CYGWIN*)
++	CYGWIN* | MINGW*)
+ 		# Cygwin needs CCSHARED when building extension DLLs
+ 		# but not when building the interpreter DLL.
+ 		CFLAGSFORSHARED='';;
+@@ -2598,7 +2609,7 @@
+       fi
+       AC_CHECK_FUNCS(pthread_sigmask,
+         [case $ac_sys_system in
+-        CYGWIN*)
++        CYGWIN* | MINGW*)
+           AC_DEFINE(HAVE_BROKEN_PTHREAD_SIGMASK, 1,
+             [Define if pthread_sigmask() does not work on your system.])
+             ;;
+@@ -2606,6 +2617,17 @@
+       AC_CHECK_FUNCS(pthread_atfork)
+ fi
+ 
++AC_SUBST(USE_PASSWORD_MODULE)
++case $MACHDEP in
++winmingw*)
++	THREADOBJ="Python/thread.o"
++	USE_THREAD_MODULE="#"
++	USE_PASSWORD_MODULE="#"
++	;;
++*)
++	USE_PASSWORD_MODULE=""
++	;;
++esac
+ 
+ # Check for enable-ipv6
+ AH_TEMPLATE(ENABLE_IPV6, [Define if --enable-ipv6 is specified])
+@@ -2877,6 +2899,11 @@
+ 	# Use dynload_next.c only on 10.2 and below, which don't have native dlopen()
+ 	Darwin/@<:@0156@:>@\..*) DYNLOADFILE="dynload_next.o";;
+ 	atheos*) DYNLOADFILE="dynload_atheos.o";;
++	CYGWIN* | MINGW*)
++		case $MACHDEP in
++		winmingw*) DYNLOADFILE="dynload_win.o PC/import_nt.o PC/dl_nt.o";;
++		esac
++		;;
+ 	*)
+ 	# use dynload_shlib.c and dlopen() if we have it; otherwise stub
+ 	# out any dynamic loading
+@@ -2894,6 +2921,19 @@
+         [Defined when any dynamic module loading is enabled.])
+ fi
+ 
++AC_SUBST(GETPATH_OBJS)
++AC_MSG_CHECKING(GETPATH_OBJS)
++if test -z "$GETPATH_OBJS"
++then
++	case $MACHDEP in
++	winmingw*)
++		GETPATH_OBJS='PC/getpathp.o';;
++	*)
++		GETPATH_OBJS='Modules/getpath.o';;
++	esac
++fi
++AC_MSG_RESULT($GETPATH_OBJS)
++
+ # MACHDEP_OBJS can be set to platform-specific object files needed by Python
+ 
+ AC_SUBST(MACHDEP_OBJS)
+@@ -3355,7 +3395,14 @@
+ AC_CHECK_MEMBERS([struct stat.st_flags])
+ AC_CHECK_MEMBERS([struct stat.st_gen])
+ AC_CHECK_MEMBERS([struct stat.st_birthtime])
++case $MACHDEP in
++winmingw*)
++AC_CHECK_MEMBERS([struct stat.st_blocks])
++;;
++*)
+ AC_STRUCT_ST_BLOCKS
++;;
++esac
+ 
+ AC_MSG_CHECKING(for time.h that defines altzone)
+ AC_CACHE_VAL(ac_cv_header_time_altzone,[
+@@ -3976,6 +4023,7 @@
+ AH_TEMPLATE(PY_UNICODE_TYPE,
+   [Define as the integral type used for Unicode representation.])
+ 
++ac_cv_sizeof_wchar_t=`echo $ac_cv_sizeof_wchar_t | tr -d '\015'`
+ AC_SUBST(UNICODE_OBJS)
+ if test "$enable_unicode" = "no"
+ then
+diff -ru misc/Python-2.7.8/setup.py misc/build/Python-2.7.8/setup.py
+--- misc/Python-2.7.8/setup.py	2014-06-29 21:05:48.000000000 -0500
++++ misc/build/Python-2.7.8/setup.py	2016-01-01 17:49:55.312719892 -0500
+@@ -285,6 +285,18 @@
+             if not self.configure_ctypes(ext):
+                 return
+ 
++        if self.get_platform() == "winmingw":
++            if ext.name == '_ctypes_test':
++                ext.libraries.append('oleaut32')
++            elif ext.name == 'select':
++                ext.libraries.append('ws2_32')
++            elif ext.name == '_socket':
++                ext.libraries.append('ws2_32')
++            if ext.name == '_ctypes':
++                ext.libraries.append('uuid')
++                ext.libraries.append('oleaut32')
++                ext.libraries.append('ole32')
++
+         try:
+             build_ext.build_extension(self, ext)
+         except (CCompilerError, DistutilsError), why:
+@@ -314,7 +326,7 @@
+ 
+         # Workaround for Cygwin: Cygwin currently has fork issues when many
+         # modules have been imported
+-        if host_platform == 'cygwin':
++        if host_platform in ['cygwin', 'winmingw']:
+             self.announce('WARNING: skipping import check for Cygwin-based "%s"'
+                 % ext.name)
+             return
+@@ -1233,7 +1245,7 @@
+ 
+         dbm_order = ['gdbm']
+         # The standard Unix dbm module:
+-        if host_platform not in ['cygwin']:
++        if host_platform not in ['cygwin', 'winmingw']:
+             config_args = [arg.strip("'")
+                            for arg in sysconfig.get_config_var("CONFIG_ARGS").split()]
+             dbm_args = [arg for arg in config_args
+@@ -1325,7 +1337,7 @@
+                 missing.append('resource')
+ 
+             # Sun yellow pages. Some systems have the functions in libc.
+-            if (host_platform not in ['cygwin', 'atheos', 'qnx6'] and
++            if (host_platform not in ['cygwin', 'winmingw', 'atheos', 'qnx6'] and
+                 find_file('rpcsvc/yp_prot.h', inc_dirs, []) is not None):
+                 if (self.compiler.find_library_file(lib_dirs, 'nsl')):
+                     libs = ['nsl']
+@@ -1547,7 +1559,7 @@
+             macros = dict()
+             libraries = []
+ 
+-        elif host_platform == 'cygwin':          # Cygwin
++        elif host_platform == 'cygwin', 'winmingw':          # Cygwin
+             macros = dict()
+             libraries = []
+ 
+@@ -1569,7 +1581,7 @@
+             macros = dict()
+             libraries = ['rt']
+ 
+-        if host_platform == 'win32':
++        if host_platform in ['win32', 'winmingw']:
+             multiprocessing_srcs = [ '_multiprocessing/multiprocessing.c',
+                                      '_multiprocessing/semaphore.c',
+                                      '_multiprocessing/pipe_connection.c',
+@@ -1588,6 +1600,7 @@
+         if sysconfig.get_config_var('WITH_THREAD'):
+             exts.append ( Extension('_multiprocessing', multiprocessing_srcs,
+                                     define_macros=macros.items(),
++                                    libraries=libraries,
+                                     include_dirs=["Modules/_multiprocessing"]))
+         else:
+             missing.append('_multiprocessing')
+@@ -1721,6 +1734,10 @@
+                                      '-framework', 'Carbon']) )
+ 
+ 
++        if platform == 'winmingw':
++            exts.append( Extension('_winreg', ['../PC/_winreg.c']) )
++            exts.append( Extension('winsound', ['../PC/winsound.c'], libraries = ['winmm']) )
++
+         self.extensions.extend(exts)
+ 
+         # Call the method for detecting whether _tkinter can be compiled
+@@ -1930,7 +1947,7 @@
+             added_lib_dirs.append('/usr/X11/lib')
+ 
+         # If Cygwin, then verify that X is installed before proceeding
+-        if host_platform == 'cygwin':
++        if host_platform in ['cygwin', 'winmingw']:
+             x11_inc = find_file('X11/Xlib.h', [], include_dirs)
+             if x11_inc is None:
+                 return
+@@ -1953,7 +1970,7 @@
+             libs.append('ld')
+ 
+         # Finally, link with the X11 libraries (not appropriate on cygwin)
+-        if host_platform != "cygwin":
++        if not host_platform in ["cygwin", "winmingw"]:
+             libs.append('X11')
+ 
+         ext = Extension('_tkinter', ['_tkinter.c', 'tkappinit.c'],
+@@ -2023,6 +2040,8 @@
+                                if (('--host=' in arg) or ('--build=' in arg))]
+                 if not self.verbose:
+                     config_args.append("-q")
++                if self.get_platform() == "winmingw":
++                    config_args.append(" --build=mingw32")
+ 
+                 # Pass empty CFLAGS because we'll just append the resulting
+                 # CFLAGS to Python's; -g or -O2 is to be avoided.

Added: openoffice/trunk/main/python/python-2.7.8-nohardlink.patch
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/python/python-2.7.8-nohardlink.patch?rev=1722635&view=auto
==============================================================================
--- openoffice/trunk/main/python/python-2.7.8-nohardlink.patch (added)
+++ openoffice/trunk/main/python/python-2.7.8-nohardlink.patch Sat Jan  2 15:17:18 2016
@@ -0,0 +1,11 @@
+--- misc/Python-2.7.8/Makefile.pre.in	2012-04-09 18:07:33.000000000 -0500
++++ misc/build/Python-2.7.8/Makefile.pre.in	2012-07-22 14:54:26.000000000 -0500
+@@ -478,7 +478,7 @@
+ libpython$(VERSION).so: $(LIBRARY_OBJS)
+ 	if test $(INSTSONAME) != $(LDLIBRARY); then \
+ 		$(BLDSHARED) -Wl,-h$(INSTSONAME) -o $(INSTSONAME) $(LIBRARY_OBJS) $(MODLIBS) $(SHLIBS) $(LIBC) $(LIBM) $(LDLAST); \
+-		$(LN) -f $(INSTSONAME) $@; \
++		$(LN) -fs $(INSTSONAME) $@; \
+ 	else \
+ 		$(BLDSHARED) -o $@ $(LIBRARY_OBJS) $(MODLIBS) $(SHLIBS) $(LIBC) $(LIBM) $(LDLAST); \
+ 	fi