Drop Python2 support. Round 4
This commit is contained in:
27
python/001-3.4-dbm-cygwin.patch
Normal file
27
python/001-3.4-dbm-cygwin.patch
Normal file
@@ -0,0 +1,27 @@
|
||||
--- Python-3.4.3/setup.py.orig 2015-02-25 05:27:46.000000000 -0600
|
||||
+++ Python-3.4.3/setup.py 2015-05-05 11:18:04.030880000 -0500
|
||||
@@ -1241,7 +1241,7 @@ class PyBuildExt(build_ext):
|
||||
dbm_setup_debug = False # verbose debug prints from this script?
|
||||
dbm_order = ['gdbm']
|
||||
# The standard Unix dbm module:
|
||||
- if host_platform not in ['cygwin']:
|
||||
+ if host_platform not in ['win32']:
|
||||
config_args = [arg.strip("'")
|
||||
for arg in sysconfig.get_config_var("CONFIG_ARGS").split()]
|
||||
dbm_args = [arg for arg in config_args
|
||||
@@ -1296,6 +1296,15 @@ class PyBuildExt(build_ext):
|
||||
],
|
||||
libraries = gdbm_libs)
|
||||
break
|
||||
+ if find_file("ndbm.h", inc_dirs, []) is not None:
|
||||
+ if dbm_setup_debug: print("building dbm using gdbm")
|
||||
+ dbmext = Extension(
|
||||
+ '_dbm', ['_dbmmodule.c'],
|
||||
+ define_macros=[
|
||||
+ ('HAVE_NDBM_H', None),
|
||||
+ ],
|
||||
+ libraries = gdbm_libs)
|
||||
+ break
|
||||
elif cand == "bdb":
|
||||
if dblibs:
|
||||
if dbm_setup_debug: print("building dbm using bdb")
|
||||
15
python/00155-avoid-ctypes-thunks.patch
Normal file
15
python/00155-avoid-ctypes-thunks.patch
Normal file
@@ -0,0 +1,15 @@
|
||||
diff -up Python-3.2.3/Lib/ctypes/__init__.py.rhbz814391 Python-3.2.3/Lib/ctypes/__init__.py
|
||||
--- Python-3.2.3/Lib/ctypes/__init__.py.rhbz814391 2012-04-20 15:12:49.017867692 -0400
|
||||
+++ Python-3.2.3/Lib/ctypes/__init__.py 2012-04-20 15:15:09.501111408 -0400
|
||||
@@ -266,11 +266,6 @@ def _reset_cache():
|
||||
# _SimpleCData.c_char_p_from_param
|
||||
POINTER(c_char).from_param = c_char_p.from_param
|
||||
_pointer_type_cache[None] = c_void_p
|
||||
- # XXX for whatever reasons, creating the first instance of a callback
|
||||
- # function is needed for the unittests on Win64 to succeed. This MAY
|
||||
- # be a compiler bug, since the problem occurs only when _ctypes is
|
||||
- # compiled with the MS SDK compiler. Or an uninitialized variable?
|
||||
- CFUNCTYPE(c_int)(lambda: None)
|
||||
|
||||
def create_unicode_buffer(init, size=None):
|
||||
"""create_unicode_buffer(aString) -> character array
|
||||
311
python/00170-gc-assertions.patch
Normal file
311
python/00170-gc-assertions.patch
Normal file
@@ -0,0 +1,311 @@
|
||||
diff --git a/Include/object.h b/Include/object.h
|
||||
index c772dea..5729797 100644
|
||||
--- a/Include/object.h
|
||||
+++ b/Include/object.h
|
||||
@@ -1098,6 +1098,49 @@ PyAPI_FUNC(void)
|
||||
_PyObject_DebugTypeStats(FILE *out);
|
||||
#endif /* ifndef Py_LIMITED_API */
|
||||
|
||||
+/*
|
||||
+ Define a pair of assertion macros.
|
||||
+
|
||||
+ These work like the regular C assert(), in that they will abort the
|
||||
+ process with a message on stderr if the given condition fails to hold,
|
||||
+ but compile away to nothing if NDEBUG is defined.
|
||||
+
|
||||
+ However, before aborting, Python will also try to call _PyObject_Dump() on
|
||||
+ the given object. This may be of use when investigating bugs in which a
|
||||
+ particular object is corrupt (e.g. buggy a tp_visit method in an extension
|
||||
+ module breaking the garbage collector), to help locate the broken objects.
|
||||
+
|
||||
+ The WITH_MSG variant allows you to supply an additional message that Python
|
||||
+ will attempt to print to stderr, after the object dump.
|
||||
+*/
|
||||
+#ifdef NDEBUG
|
||||
+/* No debugging: compile away the assertions: */
|
||||
+#define PyObject_ASSERT_WITH_MSG(obj, expr, msg) ((void)0)
|
||||
+#else
|
||||
+/* With debugging: generate checks: */
|
||||
+#define PyObject_ASSERT_WITH_MSG(obj, expr, msg) \
|
||||
+ ((expr) \
|
||||
+ ? (void)(0) \
|
||||
+ : _PyObject_AssertFailed((obj), \
|
||||
+ (msg), \
|
||||
+ (__STRING(expr)), \
|
||||
+ (__FILE__), \
|
||||
+ (__LINE__), \
|
||||
+ (__PRETTY_FUNCTION__)))
|
||||
+#endif
|
||||
+
|
||||
+#define PyObject_ASSERT(obj, expr) \
|
||||
+ PyObject_ASSERT_WITH_MSG(obj, expr, NULL)
|
||||
+
|
||||
+/*
|
||||
+ Declare and define the entrypoint even when NDEBUG is defined, to avoid
|
||||
+ causing compiler/linker errors when building extensions without NDEBUG
|
||||
+ against a Python built with NDEBUG defined
|
||||
+*/
|
||||
+PyAPI_FUNC(void) _PyObject_AssertFailed(PyObject *, const char *,
|
||||
+ const char *, const char *, int,
|
||||
+ const char *);
|
||||
+
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
diff --git a/Lib/test/test_gc.py b/Lib/test/test_gc.py
|
||||
index 8d806db..dc8bb16 100644
|
||||
--- a/Lib/test/test_gc.py
|
||||
+++ b/Lib/test/test_gc.py
|
||||
@@ -1,10 +1,12 @@
|
||||
import unittest
|
||||
from test.support import (verbose, refcount_test, run_unittest,
|
||||
strip_python_stderr, cpython_only, start_threads,
|
||||
- temp_dir, requires_type_collecting, TESTFN, unlink)
|
||||
+ temp_dir, requires_type_collecting, TESTFN, unlink,
|
||||
+ import_module)
|
||||
from test.support.script_helper import assert_python_ok, make_script
|
||||
|
||||
import sys
|
||||
+import sysconfig
|
||||
import time
|
||||
import gc
|
||||
import weakref
|
||||
@@ -46,6 +48,8 @@ class GC_Detector(object):
|
||||
# gc collects it.
|
||||
self.wr = weakref.ref(C1055820(666), it_happened)
|
||||
|
||||
+BUILD_WITH_NDEBUG = ('-DNDEBUG' in sysconfig.get_config_vars()['PY_CFLAGS'])
|
||||
+
|
||||
@with_tp_del
|
||||
class Uncollectable(object):
|
||||
"""Create a reference cycle with multiple __del__ methods.
|
||||
@@ -878,6 +882,50 @@ class GCCallbackTests(unittest.TestCase):
|
||||
self.assertEqual(len(gc.garbage), 0)
|
||||
|
||||
|
||||
+ @unittest.skipIf(BUILD_WITH_NDEBUG,
|
||||
+ 'built with -NDEBUG')
|
||||
+ def test_refcount_errors(self):
|
||||
+ self.preclean()
|
||||
+ # Verify the "handling" of objects with broken refcounts
|
||||
+ import_module("ctypes") #skip if not supported
|
||||
+
|
||||
+ import subprocess
|
||||
+ code = '''if 1:
|
||||
+ a = []
|
||||
+ b = [a]
|
||||
+
|
||||
+ # Simulate the refcount of "a" being too low (compared to the
|
||||
+ # references held on it by live data), but keeping it above zero
|
||||
+ # (to avoid deallocating it):
|
||||
+ import ctypes
|
||||
+ ctypes.pythonapi.Py_DecRef(ctypes.py_object(a))
|
||||
+
|
||||
+ # The garbage collector should now have a fatal error when it reaches
|
||||
+ # the broken object:
|
||||
+ import gc
|
||||
+ gc.collect()
|
||||
+ '''
|
||||
+ p = subprocess.Popen([sys.executable, "-c", code],
|
||||
+ stdout=subprocess.PIPE,
|
||||
+ stderr=subprocess.PIPE)
|
||||
+ stdout, stderr = p.communicate()
|
||||
+ p.stdout.close()
|
||||
+ p.stderr.close()
|
||||
+ # Verify that stderr has a useful error message:
|
||||
+ self.assertRegex(stderr,
|
||||
+ b'Modules/gcmodule.c:[0-9]+: visit_decref: Assertion "\(\(gc\)->gc.gc_refs >> \(1\)\) != 0" failed.')
|
||||
+ self.assertRegex(stderr,
|
||||
+ b'refcount was too small')
|
||||
+ self.assertRegex(stderr,
|
||||
+ b'object : \[\]')
|
||||
+ self.assertRegex(stderr,
|
||||
+ b'type : list')
|
||||
+ self.assertRegex(stderr,
|
||||
+ b'refcount: 1')
|
||||
+ self.assertRegex(stderr,
|
||||
+ b'address : 0x[0-9a-f]+')
|
||||
+
|
||||
+
|
||||
class GCTogglingTests(unittest.TestCase):
|
||||
def setUp(self):
|
||||
gc.enable()
|
||||
diff --git a/Modules/gcmodule.c b/Modules/gcmodule.c
|
||||
index 4d701cb..388dd78 100644
|
||||
--- a/Modules/gcmodule.c
|
||||
+++ b/Modules/gcmodule.c
|
||||
@@ -239,7 +239,8 @@ update_refs(PyGC_Head *containers)
|
||||
{
|
||||
PyGC_Head *gc = containers->gc.gc_next;
|
||||
for (; gc != containers; gc = gc->gc.gc_next) {
|
||||
- assert(_PyGCHead_REFS(gc) == GC_REACHABLE);
|
||||
+ PyObject_ASSERT(FROM_GC(gc),
|
||||
+ _PyGCHead_REFS(gc) == GC_REACHABLE);
|
||||
_PyGCHead_SET_REFS(gc, Py_REFCNT(FROM_GC(gc)));
|
||||
/* Python's cyclic gc should never see an incoming refcount
|
||||
* of 0: if something decref'ed to 0, it should have been
|
||||
@@ -259,7 +260,8 @@ update_refs(PyGC_Head *containers)
|
||||
* so serious that maybe this should be a release-build
|
||||
* check instead of an assert?
|
||||
*/
|
||||
- assert(_PyGCHead_REFS(gc) != 0);
|
||||
+ PyObject_ASSERT(FROM_GC(gc),
|
||||
+ _PyGCHead_REFS(gc) != 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -274,7 +276,9 @@ visit_decref(PyObject *op, void *data)
|
||||
* generation being collected, which can be recognized
|
||||
* because only they have positive gc_refs.
|
||||
*/
|
||||
- assert(_PyGCHead_REFS(gc) != 0); /* else refcount was too small */
|
||||
+ PyObject_ASSERT_WITH_MSG(FROM_GC(gc),
|
||||
+ _PyGCHead_REFS(gc) != 0,
|
||||
+ "refcount was too small"); /* else refcount was too small */
|
||||
if (_PyGCHead_REFS(gc) > 0)
|
||||
_PyGCHead_DECREF(gc);
|
||||
}
|
||||
@@ -334,9 +338,10 @@ visit_reachable(PyObject *op, PyGC_Head *reachable)
|
||||
* If gc_refs == GC_UNTRACKED, it must be ignored.
|
||||
*/
|
||||
else {
|
||||
- assert(gc_refs > 0
|
||||
- || gc_refs == GC_REACHABLE
|
||||
- || gc_refs == GC_UNTRACKED);
|
||||
+ PyObject_ASSERT(FROM_GC(gc),
|
||||
+ gc_refs > 0
|
||||
+ || gc_refs == GC_REACHABLE
|
||||
+ || gc_refs == GC_UNTRACKED);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
@@ -378,7 +383,7 @@ move_unreachable(PyGC_Head *young, PyGC_Head *unreachable)
|
||||
*/
|
||||
PyObject *op = FROM_GC(gc);
|
||||
traverseproc traverse = Py_TYPE(op)->tp_traverse;
|
||||
- assert(_PyGCHead_REFS(gc) > 0);
|
||||
+ PyObject_ASSERT(op, _PyGCHead_REFS(gc) > 0);
|
||||
_PyGCHead_SET_REFS(gc, GC_REACHABLE);
|
||||
(void) traverse(op,
|
||||
(visitproc)visit_reachable,
|
||||
@@ -441,7 +446,7 @@ move_legacy_finalizers(PyGC_Head *unreachable, PyGC_Head *finalizers)
|
||||
for (gc = unreachable->gc.gc_next; gc != unreachable; gc = next) {
|
||||
PyObject *op = FROM_GC(gc);
|
||||
|
||||
- assert(IS_TENTATIVELY_UNREACHABLE(op));
|
||||
+ PyObject_ASSERT(op, IS_TENTATIVELY_UNREACHABLE(op));
|
||||
next = gc->gc.gc_next;
|
||||
|
||||
if (has_legacy_finalizer(op)) {
|
||||
@@ -517,7 +522,7 @@ handle_weakrefs(PyGC_Head *unreachable, PyGC_Head *old)
|
||||
PyWeakReference **wrlist;
|
||||
|
||||
op = FROM_GC(gc);
|
||||
- assert(IS_TENTATIVELY_UNREACHABLE(op));
|
||||
+ PyObject_ASSERT(op, IS_TENTATIVELY_UNREACHABLE(op));
|
||||
next = gc->gc.gc_next;
|
||||
|
||||
if (! PyType_SUPPORTS_WEAKREFS(Py_TYPE(op)))
|
||||
@@ -538,9 +543,9 @@ handle_weakrefs(PyGC_Head *unreachable, PyGC_Head *old)
|
||||
* the callback pointer intact. Obscure: it also
|
||||
* changes *wrlist.
|
||||
*/
|
||||
- assert(wr->wr_object == op);
|
||||
+ PyObject_ASSERT(wr->wr_object, wr->wr_object == op);
|
||||
_PyWeakref_ClearRef(wr);
|
||||
- assert(wr->wr_object == Py_None);
|
||||
+ PyObject_ASSERT(wr->wr_object, wr->wr_object == Py_None);
|
||||
if (wr->wr_callback == NULL)
|
||||
continue; /* no callback */
|
||||
|
||||
@@ -574,7 +579,7 @@ handle_weakrefs(PyGC_Head *unreachable, PyGC_Head *old)
|
||||
*/
|
||||
if (IS_TENTATIVELY_UNREACHABLE(wr))
|
||||
continue;
|
||||
- assert(IS_REACHABLE(wr));
|
||||
+ PyObject_ASSERT(op, IS_REACHABLE(wr));
|
||||
|
||||
/* Create a new reference so that wr can't go away
|
||||
* before we can process it again.
|
||||
@@ -583,7 +588,8 @@ handle_weakrefs(PyGC_Head *unreachable, PyGC_Head *old)
|
||||
|
||||
/* Move wr to wrcb_to_call, for the next pass. */
|
||||
wrasgc = AS_GC(wr);
|
||||
- assert(wrasgc != next); /* wrasgc is reachable, but
|
||||
+ PyObject_ASSERT(op, wrasgc != next);
|
||||
+ /* wrasgc is reachable, but
|
||||
next isn't, so they can't
|
||||
be the same */
|
||||
gc_list_move(wrasgc, &wrcb_to_call);
|
||||
@@ -599,11 +605,11 @@ handle_weakrefs(PyGC_Head *unreachable, PyGC_Head *old)
|
||||
|
||||
gc = wrcb_to_call.gc.gc_next;
|
||||
op = FROM_GC(gc);
|
||||
- assert(IS_REACHABLE(op));
|
||||
- assert(PyWeakref_Check(op));
|
||||
+ PyObject_ASSERT(op, IS_REACHABLE(op));
|
||||
+ PyObject_ASSERT(op, PyWeakref_Check(op));
|
||||
wr = (PyWeakReference *)op;
|
||||
callback = wr->wr_callback;
|
||||
- assert(callback != NULL);
|
||||
+ PyObject_ASSERT(op, callback != NULL);
|
||||
|
||||
/* copy-paste of weakrefobject.c's handle_callback() */
|
||||
temp = PyObject_CallFunctionObjArgs(callback, wr, NULL);
|
||||
@@ -717,12 +723,14 @@ check_garbage(PyGC_Head *collectable)
|
||||
for (gc = collectable->gc.gc_next; gc != collectable;
|
||||
gc = gc->gc.gc_next) {
|
||||
_PyGCHead_SET_REFS(gc, Py_REFCNT(FROM_GC(gc)));
|
||||
- assert(_PyGCHead_REFS(gc) != 0);
|
||||
+ PyObject_ASSERT(FROM_GC(gc),
|
||||
+ _PyGCHead_REFS(gc) != 0);
|
||||
}
|
||||
subtract_refs(collectable);
|
||||
for (gc = collectable->gc.gc_next; gc != collectable;
|
||||
gc = gc->gc.gc_next) {
|
||||
- assert(_PyGCHead_REFS(gc) >= 0);
|
||||
+ PyObject_ASSERT(FROM_GC(gc),
|
||||
+ _PyGCHead_REFS(gc) >= 0);
|
||||
if (_PyGCHead_REFS(gc) != 0)
|
||||
return -1;
|
||||
}
|
||||
diff --git a/Objects/object.c b/Objects/object.c
|
||||
index 220aa90..f6c7161 100644
|
||||
--- a/Objects/object.c
|
||||
+++ b/Objects/object.c
|
||||
@@ -2177,6 +2177,35 @@ _PyTrash_thread_destroy_chain(void)
|
||||
--tstate->trash_delete_nesting;
|
||||
}
|
||||
|
||||
+PyAPI_FUNC(void)
|
||||
+_PyObject_AssertFailed(PyObject *obj, const char *msg, const char *expr,
|
||||
+ const char *file, int line, const char *function)
|
||||
+{
|
||||
+ fprintf(stderr,
|
||||
+ "%s:%d: %s: Assertion \"%s\" failed.\n",
|
||||
+ file, line, function, expr);
|
||||
+ if (msg) {
|
||||
+ fprintf(stderr, "%s\n", msg);
|
||||
+ }
|
||||
+
|
||||
+ fflush(stderr);
|
||||
+
|
||||
+ if (obj) {
|
||||
+ /* This might succeed or fail, but we're about to abort, so at least
|
||||
+ try to provide any extra info we can: */
|
||||
+ _PyObject_Dump(obj);
|
||||
+ }
|
||||
+ else {
|
||||
+ fprintf(stderr, "NULL object\n");
|
||||
+ }
|
||||
+
|
||||
+ fflush(stdout);
|
||||
+ fflush(stderr);
|
||||
+
|
||||
+ /* Terminate the process: */
|
||||
+ abort();
|
||||
+}
|
||||
+
|
||||
#ifndef Py_TRACE_REFS
|
||||
/* For Py_LIMITED_API, we need an out-of-line version of _Py_Dealloc.
|
||||
Define this here, so we can undefine the macro. */
|
||||
13
python/002-3.1-enable-new-dtags.patch
Normal file
13
python/002-3.1-enable-new-dtags.patch
Normal file
@@ -0,0 +1,13 @@
|
||||
Cygwin ld (as of binutils-2.19.51) does not understand --enable-new-dtags.
|
||||
|
||||
--- Python-3.1/Lib/distutils/unixccompiler.py.orig 2009-05-09 06:55:12.000000000 -0500
|
||||
+++ Python-3.1/Lib/distutils/unixccompiler.py 2009-08-19 22:46:55.222993300 -0500
|
||||
@@ -224,7 +224,7 @@ class UnixCCompiler(CCompiler):
|
||||
# the configuration data stored in the Python installation, so
|
||||
# we use this hack.
|
||||
compiler = os.path.basename(sysconfig.get_config_var("CC"))
|
||||
- if sys.platform[:6] == "darwin":
|
||||
+ if sys.platform[:6] == "darwin" or sys.platform[:6] == "cygwin":
|
||||
# MacOSX's linker doesn't understand the -R flag at all
|
||||
return "-L" + dir
|
||||
elif sys.platform[:7] == "freebsd":
|
||||
27
python/003-3.4-tkinter-cygwin.patch
Normal file
27
python/003-3.4-tkinter-cygwin.patch
Normal file
@@ -0,0 +1,27 @@
|
||||
--- Python-3.4.3/setup.py.orig 2015-02-25 05:27:46.000000000 -0600
|
||||
+++ Python-3.4.3/setup.py 2015-05-05 11:18:04.030880000 -0500
|
||||
@@ -1849,12 +1849,6 @@ class PyBuildExt(build_ext):
|
||||
include_dirs.append('/usr/X11/include')
|
||||
added_lib_dirs.append('/usr/X11/lib')
|
||||
|
||||
- # If Cygwin, then verify that X is installed before proceeding
|
||||
- if host_platform == 'cygwin':
|
||||
- x11_inc = find_file('X11/Xlib.h', [], include_dirs)
|
||||
- if x11_inc is None:
|
||||
- return
|
||||
-
|
||||
# Check for BLT extension
|
||||
if self.compiler.find_library_file(lib_dirs + added_lib_dirs,
|
||||
'BLT8.0'):
|
||||
@@ -1872,9 +1866,8 @@ class PyBuildExt(build_ext):
|
||||
if host_platform in ['aix3', 'aix4']:
|
||||
libs.append('ld')
|
||||
|
||||
- # Finally, link with the X11 libraries (not appropriate on cygwin)
|
||||
- if host_platform != "cygwin":
|
||||
- libs.append('X11')
|
||||
+ # Finally, link with the X11 libraries
|
||||
+ libs.append('X11')
|
||||
|
||||
ext = Extension('_tkinter', ['_tkinter.c', 'tkappinit.c'],
|
||||
define_macros=[('WITH_APPINIT', 1)] + defs,
|
||||
51
python/004-3.4-ctypes-cygwin.patch
Normal file
51
python/004-3.4-ctypes-cygwin.patch
Normal file
@@ -0,0 +1,51 @@
|
||||
--- Python-3.4.3/Lib/ctypes/__init__.py.orig 2015-02-25 05:27:44.000000000 -0600
|
||||
+++ Python-3.4.3/Lib/ctypes/__init__.py 2015-05-05 11:39:39.945940300 -0500
|
||||
@@ -431,7 +431,8 @@ pydll = LibraryLoader(PyDLL)
|
||||
if _os.name == "nt":
|
||||
pythonapi = PyDLL("python dll", None, _sys.dllhandle)
|
||||
elif _sys.platform == "cygwin":
|
||||
- pythonapi = PyDLL("libpython%d.%d.dll" % _sys.version_info[:2])
|
||||
+ pythonapi = PyDLL("libpython%d.%d%s.dll" % \
|
||||
+ (_sys.version_info[:2] + tuple(_sys.abiflags)))
|
||||
else:
|
||||
pythonapi = PyDLL(None)
|
||||
|
||||
--- Python-3.4.3/Lib/ctypes/util.py.orig 2015-02-25 05:27:44.000000000 -0600
|
||||
+++ Python-3.4.3/Lib/ctypes/util.py 2015-05-05 11:10:45.202655900 -0500
|
||||
@@ -80,6 +80,25 @@ if os.name == "posix" and sys.platform =
|
||||
continue
|
||||
return None
|
||||
|
||||
+elif sys.platform == "cygwin":
|
||||
+ def find_library(name):
|
||||
+ for libdir in ['/usr/lib', '/usr/local/lib']:
|
||||
+ for libext in ['lib%s.dll.a' % name, 'lib%s.a' % name]:
|
||||
+ implib = os.path.join(libdir, libext)
|
||||
+ if not os.path.exists(implib):
|
||||
+ continue
|
||||
+ cmd = "dlltool -I " + implib + " 2>/dev/null"
|
||||
+ f = os.popen(cmd)
|
||||
+ try:
|
||||
+ data = f.read()
|
||||
+ finally:
|
||||
+ f.close()
|
||||
+ res = data.replace("\n","")
|
||||
+ if not res:
|
||||
+ continue
|
||||
+ return res
|
||||
+ return None
|
||||
+
|
||||
elif os.name == "posix":
|
||||
# Andreas Degert's find functions, using gcc, /sbin/ldconfig, objdump
|
||||
import re, tempfile
|
||||
@@ -328,6 +347,10 @@ def test():
|
||||
print(cdll.LoadLibrary("libcrypto.dylib"))
|
||||
print(cdll.LoadLibrary("libSystem.dylib"))
|
||||
print(cdll.LoadLibrary("System.framework/System"))
|
||||
+ elif sys.platform == "cygwin":
|
||||
+ print(cdll.LoadLibrary("cygbz2-1.dll"))
|
||||
+ print(cdll.LoadLibrary("cygcrypt-0.dll"))
|
||||
+ print(find_library("crypt"))
|
||||
# issue-26439 - fix broken test call for AIX
|
||||
elif sys.platform.startswith("aix"):
|
||||
from ctypes import CDLL
|
||||
12
python/005-3.6-PATH_MAX.patch
Normal file
12
python/005-3.6-PATH_MAX.patch
Normal file
@@ -0,0 +1,12 @@
|
||||
--- Python-3.6.0/Modules/main.c.orig 2017-02-08 04:28:31.840450700 -0500
|
||||
+++ Python-3.6.0/Modules/main.c 2017-02-08 04:31:01.757513100 -0500
|
||||
@@ -12,6 +12,9 @@
|
||||
#endif
|
||||
#ifdef HAVE_FCNTL_H
|
||||
#include <fcntl.h>
|
||||
+#ifndef PATH_MAX
|
||||
+#define PATH_MAX MAXPATHLEN
|
||||
+#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
16
python/006-3.1-ncurses-abi6.patch
Normal file
16
python/006-3.1-ncurses-abi6.patch
Normal file
@@ -0,0 +1,16 @@
|
||||
--- Python-3.1.2/Include/py_curses.h.orig 2009-09-06 16:26:46.000000000 -0500
|
||||
+++ Python-3.1.2/Include/py_curses.h 2010-05-03 01:25:11.226933700 -0500
|
||||
@@ -17,6 +17,13 @@
|
||||
#endif
|
||||
#endif /* __APPLE__ */
|
||||
|
||||
+#ifdef __CYGWIN__
|
||||
+/* the following define is necessary for Cygwin; without it, the
|
||||
+ Cygwin-supplied ncurses.h sets NCURSES_OPAQUE to 1, and then Python
|
||||
+ can't get at the WINDOW flags field. */
|
||||
+#define NCURSES_INTERNALS
|
||||
+#endif /* __CYGWIN__ */
|
||||
+
|
||||
/* On FreeBSD, [n]curses.h and stdlib.h/wchar.h use different guards
|
||||
against multiple definition of wchar_t and wint_t. */
|
||||
#if defined(__FreeBSD__) && defined(_XOPEN_SOURCE_EXTENDED)
|
||||
11
python/007-3.2-export-PySignal_SetWakeupFd.patch
Normal file
11
python/007-3.2-export-PySignal_SetWakeupFd.patch
Normal file
@@ -0,0 +1,11 @@
|
||||
--- Python-3.2/Include/pyerrors.h.orig
|
||||
+++ Python-3.2/Include/pyerrors.h
|
||||
@@ -358,7 +358,7 @@ PyAPI_FUNC(int) PyErr_CheckSignals(void)
|
||||
|
||||
/* In signalmodule.c */
|
||||
#ifndef Py_LIMITED_API
|
||||
-int PySignal_SetWakeupFd(int fd);
|
||||
+PyAPI_FUNC(int) PySignal_SetWakeupFd(int fd);
|
||||
#endif
|
||||
|
||||
/* Support for adding program text to SyntaxErrors */
|
||||
26
python/009-3.2-distutils-shlibext.patch
Normal file
26
python/009-3.2-distutils-shlibext.patch
Normal file
@@ -0,0 +1,26 @@
|
||||
This is necessary for find_library_file to work where a library has only
|
||||
an implib but no static lib (e.g. sqlite3).
|
||||
|
||||
--- Python-3.2.3/Lib/distutils/cygwinccompiler.py.orig 2012-04-11 01:54:02.000000000 -0500
|
||||
+++ Python-3.2.3/Lib/distutils/cygwinccompiler.py 2012-06-22 19:37:11.740576800 -0500
|
||||
@@ -92,9 +92,7 @@ class CygwinCCompiler(UnixCCompiler):
|
||||
compiler_type = 'cygwin'
|
||||
obj_extension = ".o"
|
||||
static_lib_extension = ".a"
|
||||
- shared_lib_extension = ".dll"
|
||||
- static_lib_format = "lib%s%s"
|
||||
- shared_lib_format = "%s%s"
|
||||
+ shared_lib_extension = ".dll.a"
|
||||
exe_extension = ".exe"
|
||||
|
||||
def __init__(self, verbose=0, dry_run=0, force=0):
|
||||
--- Python-3.2.5/Lib/distutils/unixccompiler.py.orig 2013-07-30 16:39:21.092550800 -0500
|
||||
+++ Python-3.2.5/Lib/distutils/unixccompiler.py 2013-07-30 20:01:52.168552600 -0500
|
||||
@@ -81,6 +81,7 @@ class UnixCCompiler(CCompiler):
|
||||
xcode_stub_lib_format = dylib_lib_format
|
||||
if sys.platform == "cygwin":
|
||||
exe_extension = ".exe"
|
||||
+ dylib_lib_extension = ".dll.a"
|
||||
|
||||
def preprocess(self, source, output_file=None, macros=None,
|
||||
include_dirs=None, extra_preargs=None, extra_postargs=None):
|
||||
22
python/010-3.6-pep3149-cygwin.patch
Normal file
22
python/010-3.6-pep3149-cygwin.patch
Normal file
@@ -0,0 +1,22 @@
|
||||
--- Python-3.4.3/Python/dynload_shlib.c.orig 2015-02-25 05:27:46.000000000 -0600
|
||||
+++ Python-3.4.3/Python/dynload_shlib.c 2015-05-05 11:25:41.882019700 -0500
|
||||
@@ -34,6 +34,8 @@
|
||||
|
||||
const char *_PyImport_DynLoadFiletab[] = {
|
||||
#ifdef __CYGWIN__
|
||||
+ "." SOABI ".dll",
|
||||
+ ".abi" PYTHON_ABI_STRING ".dll",
|
||||
".dll",
|
||||
#else /* !__CYGWIN__ */
|
||||
"." SOABI ".so",
|
||||
--- Python-3.6.0/configure.ac.orig 2017-02-08 04:39:39.793333600 -0500
|
||||
+++ Python-3.6.0/configure.ac 2017-02-08 04:45:44.649752400 -0500
|
||||
@@ -4614,7 +4614,7 @@
|
||||
|
||||
AC_SUBST(EXT_SUFFIX)
|
||||
case $ac_sys_system in
|
||||
- Linux*|GNU*|Darwin)
|
||||
+ Linux*|GNU*|Darwin|CYGWIN*)
|
||||
EXT_SUFFIX=.${SOABI}${SHLIB_SUFFIX};;
|
||||
*)
|
||||
EXT_SUFFIX=${SHLIB_SUFFIX};;
|
||||
88
python/011-3.6-thread-cygwin64.patch
Normal file
88
python/011-3.6-thread-cygwin64.patch
Normal file
@@ -0,0 +1,88 @@
|
||||
--- Python-3.4.3/Include/pythread.h.orig 2015-02-25 05:27:44.000000000 -0600
|
||||
+++ Python-3.4.3/Include/pythread.h 2015-05-05 11:27:20.117994100 -0500
|
||||
@@ -74,11 +74,11 @@ PyAPI_FUNC(int) PyThread_set_stacksize(s
|
||||
platforms, but it is not POSIX-compliant. Therefore, the new TSS API uses
|
||||
opaque data type to represent TSS keys to be compatible (see PEP 539).
|
||||
*/
|
||||
-PyAPI_FUNC(int) PyThread_create_key(void) Py_DEPRECATED(3.7);
|
||||
-PyAPI_FUNC(void) PyThread_delete_key(int key) Py_DEPRECATED(3.7);
|
||||
-PyAPI_FUNC(int) PyThread_set_key_value(int key, void *value) Py_DEPRECATED(3.7);
|
||||
-PyAPI_FUNC(void *) PyThread_get_key_value(int key) Py_DEPRECATED(3.7);
|
||||
-PyAPI_FUNC(void) PyThread_delete_key_value(int key) Py_DEPRECATED(3.7);
|
||||
+PyAPI_FUNC(long) PyThread_create_key(void) Py_DEPRECATED(3.7);
|
||||
+PyAPI_FUNC(void) PyThread_delete_key(long key) Py_DEPRECATED(3.7);
|
||||
+PyAPI_FUNC(int) PyThread_set_key_value(long key, void *value) Py_DEPRECATED(3.7);
|
||||
+PyAPI_FUNC(void *) PyThread_get_key_value(long key) Py_DEPRECATED(3.7);
|
||||
+PyAPI_FUNC(void) PyThread_delete_key_value(long key) Py_DEPRECATED(3.7);
|
||||
|
||||
/* Cleanup after a fork */
|
||||
PyAPI_FUNC(void) PyThread_ReInitTLS(void) Py_DEPRECATED(3.7);
|
||||
--- Python-3.6.0/Python/thread_pthread.h.orig 2016-12-22 21:21:22.000000000 -0500
|
||||
+++ Python-3.6.0/Python/thread_pthread.h 2017-02-08 05:18:45.791168100 -0500
|
||||
@@ -603,44 +603,47 @@
|
||||
removing this API.
|
||||
*/
|
||||
|
||||
-int
|
||||
+long
|
||||
PyThread_create_key(void)
|
||||
{
|
||||
#ifdef PTHREAD_KEY_T_IS_COMPATIBLE_WITH_INT
|
||||
pthread_key_t key;
|
||||
int fail = pthread_key_create(&key, NULL);
|
||||
if (fail)
|
||||
- return -1;
|
||||
- if (key > INT_MAX) {
|
||||
+ return -1L;
|
||||
+#ifndef __CYGWIN__
|
||||
+ /* Cygwin pthread types are pointers, which may "overflow" signed long */
|
||||
+ if (key > LONG_MAX) {
|
||||
/* Issue #22206: handle integer overflow */
|
||||
pthread_key_delete(key);
|
||||
errno = ENOMEM;
|
||||
- return -1;
|
||||
+ return -1L;
|
||||
}
|
||||
- return (int)key;
|
||||
+ return (long)key;
|
||||
+#endif
|
||||
#else
|
||||
- return -1; /* never return valid key value. */
|
||||
+ return -1L; /* never return valid key value. */
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
-PyThread_delete_key(int key)
|
||||
+PyThread_delete_key(long key)
|
||||
{
|
||||
#ifdef PTHREAD_KEY_T_IS_COMPATIBLE_WITH_INT
|
||||
pthread_key_delete(key);
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
-PyThread_delete_key_value(int key)
|
||||
+PyThread_delete_key_value(long key)
|
||||
{
|
||||
#ifdef PTHREAD_KEY_T_IS_COMPATIBLE_WITH_INT
|
||||
pthread_setspecific(key, NULL);
|
||||
#endif
|
||||
}
|
||||
|
||||
int
|
||||
-PyThread_set_key_value(int key, void *value)
|
||||
+PyThread_set_key_value(long key, void *value)
|
||||
{
|
||||
#ifdef PTHREAD_KEY_T_IS_COMPATIBLE_WITH_INT
|
||||
int fail;
|
||||
@@ -640,7 +640,7 @@ PyThread_set_key_value(int key, void *va
|
||||
}
|
||||
|
||||
void *
|
||||
-PyThread_get_key_value(int key)
|
||||
+PyThread_get_key_value(long key)
|
||||
{
|
||||
#ifdef PTHREAD_KEY_T_IS_COMPATIBLE_WITH_INT
|
||||
return pthread_getspecific(key);
|
||||
#else
|
||||
31
python/012-3.2-getpath-exe-extension.patch
Normal file
31
python/012-3.2-getpath-exe-extension.patch
Normal file
@@ -0,0 +1,31 @@
|
||||
--- Python-3.2.3/Modules/getpath.c.orig 2012-04-11 02:54:07.000000000 -0400
|
||||
+++ Python-3.2.3/Modules/getpath.c 2012-06-14 13:33:30.179375000 -0400
|
||||
@@ -551,6 +551,28 @@
|
||||
break;
|
||||
}
|
||||
|
||||
+#ifdef __CYGWIN__
|
||||
+ /*
|
||||
+ * Cygwin automatically removes the ".exe" extension from argv[0]
|
||||
+ * to make programs feel like they are in a more Unix-like
|
||||
+ * environment. Unfortunately, this can make it problemmatic for
|
||||
+ * Cygwin to distinguish between a directory and an executable with
|
||||
+ * the same name excluding the ".exe" extension. For example, the
|
||||
+ * Cygwin Python build directory has a "Python" directory and a
|
||||
+ * "python.exe" executable. This causes isxfile() to erroneously
|
||||
+ * return false. If isdir() returns true and there is enough space
|
||||
+ * to append the ".exe" extension, then we try again with the
|
||||
+ * extension appended.
|
||||
+ */
|
||||
+#define EXE L".exe"
|
||||
+ if (isdir(program_full_path) && wcslen(program_full_path) + wcslen(EXE) <= MAXPATHLEN)
|
||||
+ {
|
||||
+ wcscat(program_full_path, EXE);
|
||||
+ if (isxfile(program_full_path))
|
||||
+ break;
|
||||
+ }
|
||||
+#endif /* __CYGWIN__ */
|
||||
+
|
||||
if (!delim) {
|
||||
program_full_path[0] = L'\0';
|
||||
break;
|
||||
36
python/013-3.4-select-cygwin.patch
Normal file
36
python/013-3.4-select-cygwin.patch
Normal file
@@ -0,0 +1,36 @@
|
||||
--- Python-3.4.3/Modules/selectmodule.c.orig 2015-02-25 05:27:46.000000000 -0600
|
||||
+++ Python-3.4.3/Modules/selectmodule.c 2015-05-05 13:58:58.914394500 -0500
|
||||
@@ -8,6 +8,16 @@
|
||||
#define _GNU_SOURCE
|
||||
#endif
|
||||
|
||||
+/* Windows #defines FD_SETSIZE to 64 if FD_SETSIZE isn't already defined.
|
||||
+ 64 is too small (too many people have bumped into that limit).
|
||||
+ Here we boost it.
|
||||
+ Users who want even more than the boosted limit should #define
|
||||
+ FD_SETSIZE higher before this; e.g., via compiler /D switch.
|
||||
+*/
|
||||
+#if (defined(MS_WINDOWS) || defined(__CYGWIN__)) && !defined(FD_SETSIZE)
|
||||
+#define FD_SETSIZE 512
|
||||
+#endif
|
||||
+
|
||||
#include "Python.h"
|
||||
#include <structmember.h>
|
||||
|
||||
@@ -26,16 +36,6 @@
|
||||
#undef HAVE_BROKEN_POLL
|
||||
#endif
|
||||
|
||||
-/* Windows #defines FD_SETSIZE to 64 if FD_SETSIZE isn't already defined.
|
||||
- 64 is too small (too many people have bumped into that limit).
|
||||
- Here we boost it.
|
||||
- Users who want even more than the boosted limit should #define
|
||||
- FD_SETSIZE higher before this; e.g., via compiler /D switch.
|
||||
-*/
|
||||
-#if defined(MS_WINDOWS) && !defined(FD_SETSIZE)
|
||||
-#define FD_SETSIZE 512
|
||||
-#endif
|
||||
-
|
||||
#if defined(HAVE_POLL_H)
|
||||
#include <poll.h>
|
||||
#elif defined(HAVE_SYS_POLL_H)
|
||||
14
python/016-3.6-ftm.patch
Normal file
14
python/016-3.6-ftm.patch
Normal file
@@ -0,0 +1,14 @@
|
||||
--- Python-3.6.1rc1/configure.ac 2017-03-12 14:28:34.395001700 -0500
|
||||
+++ Python-3.6.1rc1/configure.ac 2017-03-21 00:27:44.595584900 -0500
|
||||
@@ -138,11 +138,6 @@ AC_DEFINE(_GNU_SOURCE, 1, [Define on Lin
|
||||
AC_DEFINE(_NETBSD_SOURCE, 1, [Define on NetBSD to activate all library features])
|
||||
|
||||
# The later defininition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables
|
||||
-# certain features on FreeBSD, so we need __BSD_VISIBLE to re-enable
|
||||
-# them.
|
||||
-AC_DEFINE(__BSD_VISIBLE, 1, [Define on FreeBSD to activate all library features])
|
||||
-
|
||||
-# The later defininition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables
|
||||
# certain features on Mac OS X, so we need _DARWIN_C_SOURCE to re-enable
|
||||
# them.
|
||||
AC_DEFINE(_DARWIN_C_SOURCE, 1, [Define on Darwin to activate all library features])
|
||||
11
python/017-3.6-mpdec-cygwin.patch
Normal file
11
python/017-3.6-mpdec-cygwin.patch
Normal file
@@ -0,0 +1,11 @@
|
||||
--- a/setup.py
|
||||
+++ b/setup.py
|
||||
@@ -2061,7 +2061,7 @@ class PyBuildExt(build_ext):
|
||||
undef_macros = []
|
||||
if '--with-system-libmpdec' in sysconfig.get_config_var("CONFIG_ARGS"):
|
||||
include_dirs = []
|
||||
- libraries = [':libmpdec.so.2']
|
||||
+ libraries = [':libmpdec.dll.a']
|
||||
sources = ['_decimal/_decimal.c']
|
||||
depends = ['_decimal/docstrings.h']
|
||||
else:
|
||||
@@ -0,0 +1,36 @@
|
||||
diff -urN a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py
|
||||
--- a/Lib/distutils/sysconfig.py 2014-10-11 14:19:27.487874300 +0100
|
||||
+++ b/Lib/distutils/sysconfig.py 2014-10-11 14:19:30.049020800 +0100
|
||||
@@ -156,7 +156,23 @@
|
||||
Mainly needed on Unix, so we can plug in the information that
|
||||
varies across Unices and is stored in Python's Makefile.
|
||||
"""
|
||||
- if compiler.compiler_type == "unix":
|
||||
+ global _config_vars
|
||||
+ if compiler.compiler_type in ["cygwin", "mingw32"]:
|
||||
+ # Note that cygwin use posix build and 'unix' compiler.
|
||||
+ # If build is not based on posix then we must predefine
|
||||
+ # some environment variables corresponding to posix
|
||||
+ # build rules and defaults.
|
||||
+ if not 'GCC' in sys.version:
|
||||
+ _config_vars['CC'] = "gcc"
|
||||
+ _config_vars['CXX'] = "g++"
|
||||
+ _config_vars['OPT'] = "-fwrapv -O3 -Wall -Wstrict-prototypes"
|
||||
+ _config_vars['CFLAGS'] = ""
|
||||
+ _config_vars['CCSHARED'] = ""
|
||||
+ _config_vars['LDSHARED'] = "gcc -shared -Wl,--enable-auto-image-base"
|
||||
+ _config_vars['AR'] = "ar"
|
||||
+ _config_vars['ARFLAGS'] = "rc"
|
||||
+
|
||||
+ if compiler.compiler_type in ["unix", "cygwin", "mingw32"]:
|
||||
if sys.platform == "darwin":
|
||||
# Perform first-time customization of compiler-related
|
||||
# config vars on OS X now that we know we need a compiler.
|
||||
@@ -166,7 +182,6 @@
|
||||
# that Python itself was built on. Also the user OS
|
||||
# version and build tools may not support the same set
|
||||
# of CPU architectures for universal builds.
|
||||
- global _config_vars
|
||||
# Use get_config_var() to ensure _config_vars is initialized.
|
||||
if not get_config_var('CUSTOMIZED_OSX_COMPILER'):
|
||||
import _osx_support
|
||||
19
python/3.6-getrandom.patch
Normal file
19
python/3.6-getrandom.patch
Normal file
@@ -0,0 +1,19 @@
|
||||
getrandom(2) without GRND_RANDOM is broken prior to Cygwin 2.8.0:
|
||||
|
||||
https://sourceware.org/git/?p=newlib-cygwin.git;a=commitdiff;h=6c420fa
|
||||
|
||||
--- origsrc/Python-3.6.1/configure.ac 2017-03-21 21:36:53.153779000 -0500
|
||||
+++ src/Python-3.6.1/configure.ac 2017-03-21 21:42:30.270960000 -0500
|
||||
@@ -5372,6 +5372,12 @@ AC_MSG_CHECKING(for the getrandom() func
|
||||
AC_LINK_IFELSE(
|
||||
[
|
||||
AC_LANG_SOURCE([[
|
||||
+ #ifdef __CYGWIN__
|
||||
+ #include <cygwin/version.h>
|
||||
+ #if CYGWIN_VERSION_DLL_MAJOR < 2008
|
||||
+ #error getrandom(2) is broken prior to Cygwin 2.8.0
|
||||
+ #endif
|
||||
+ #endif
|
||||
#include <sys/random.h>
|
||||
|
||||
int main() {
|
||||
516
python/900-msysize.patch
Normal file
516
python/900-msysize.patch
Normal file
@@ -0,0 +1,516 @@
|
||||
diff -Naur Python-3.7.0-orig/config.guess Python-3.7.0/config.guess
|
||||
--- Python-3.7.0-orig/config.guess 2015-02-25 14:27:46.000000000 +0300
|
||||
+++ Python-3.7.0/config.guess 2015-05-07 09:58:31.810000000 +0300
|
||||
@@ -866,6 +866,9 @@
|
||||
amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
|
||||
echo x86_64-unknown-cygwin
|
||||
exit ;;
|
||||
+ amd64:MSYS*:*:* | x86_64:MSYS*:*:*)
|
||||
+ echo x86_64-unknown-msys
|
||||
+ exit ;;
|
||||
prep*:SunOS:5.*:*)
|
||||
echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
|
||||
exit ;;
|
||||
diff -Naur Python-3.6.0/configure.ac.orig Python-3.6.0/configure.ac
|
||||
--- Python-3.6.0/configure.ac.orig 2017-02-08 09:14:49.544766100 -0500
|
||||
+++ Python-3.6.0/configure.ac 2017-02-08 09:23:26.742594900 -0500
|
||||
@@ -383,6 +383,9 @@
|
||||
*-*-cygwin*)
|
||||
ac_sys_system=Cygwin
|
||||
;;
|
||||
+ *-*-msys*)
|
||||
+ ac_sys_system=Msys
|
||||
+ ;;
|
||||
*)
|
||||
# for now, limit cross builds to known configurations
|
||||
MACHDEP="unknown"
|
||||
@@ -407,6 +410,7 @@
|
||||
case $MACHDEP in
|
||||
linux*) MACHDEP="linux";;
|
||||
cygwin*) MACHDEP="cygwin";;
|
||||
+ msys*) MACHDEP="msys";;
|
||||
darwin*) MACHDEP="darwin";;
|
||||
irix646) MACHDEP="irix6";;
|
||||
'') MACHDEP="unknown";;
|
||||
@@ -428,6 +432,9 @@
|
||||
*-*-cygwin*)
|
||||
_host_cpu=
|
||||
;;
|
||||
+ *-*-msys*)
|
||||
+ _host_cpu=
|
||||
+ ;;
|
||||
*)
|
||||
# for now, limit cross builds to known configurations
|
||||
MACHDEP="unknown"
|
||||
@@ -1087,7 +1094,7 @@
|
||||
if test -z "$enable_shared"
|
||||
then
|
||||
case $ac_sys_system in
|
||||
- CYGWIN*)
|
||||
+ CYGWIN*|MSYS*)
|
||||
enable_shared="yes";;
|
||||
*)
|
||||
enable_shared="no";;
|
||||
@@ -1142,6 +1149,10 @@
|
||||
LDLIBRARY='libpython$(LDVERSION).dll.a'
|
||||
DLLLIBRARY='libpython$(LDVERSION).dll'
|
||||
;;
|
||||
+ MSYS*)
|
||||
+ LDLIBRARY='libpython$(LDVERSION).dll.a'
|
||||
+ DLLLIBRARY='msys-python$(LDVERSION).dll'
|
||||
+ ;;
|
||||
SunOS*)
|
||||
LDLIBRARY='libpython$(LDVERSION).so'
|
||||
BLDLIBRARY='-Wl,-R,$(LIBDIR) -L. -lpython$(LDVERSION)'
|
||||
@@ -1188,7 +1200,7 @@
|
||||
else # shared is disabled
|
||||
PY_ENABLE_SHARED=0
|
||||
case $ac_sys_system in
|
||||
- CYGWIN*)
|
||||
+ CYGWIN*|MSYS*)
|
||||
BLDLIBRARY='$(LIBRARY)'
|
||||
LDLIBRARY='libpython$(LDVERSION).dll.a'
|
||||
;;
|
||||
@@ -1238,7 +1250,7 @@
|
||||
AC_SUBST(LN)
|
||||
if test -z "$LN" ; then
|
||||
case $ac_sys_system in
|
||||
- CYGWIN*) LN="ln -s";;
|
||||
+ CYGWIN*|MSYS*) LN="ln -s";;
|
||||
*) LN=ln;;
|
||||
esac
|
||||
fi
|
||||
@@ -2380,7 +2392,7 @@
|
||||
*) SHLIB_SUFFIX=.sl;;
|
||||
esac
|
||||
;;
|
||||
- CYGWIN*) SHLIB_SUFFIX=.dll;;
|
||||
+ CYGWIN*|MSYS*) SHLIB_SUFFIX=.dll;;
|
||||
*) SHLIB_SUFFIX=.so;;
|
||||
esac
|
||||
fi
|
||||
@@ -2518,7 +2530,7 @@
|
||||
SCO_SV*)
|
||||
LDSHARED='$(CC) -Wl,-G,-Bexport'
|
||||
LDCXXSHARED='$(CXX) -Wl,-G,-Bexport';;
|
||||
- CYGWIN*)
|
||||
+ CYGWIN*|MSYS*)
|
||||
LDSHARED="gcc -shared -Wl,--enable-auto-image-base"
|
||||
LDCXXSHARED="g++ -shared -Wl,--enable-auto-image-base";;
|
||||
*) LDSHARED="ld";;
|
||||
@@ -2606,7 +2618,7 @@
|
||||
LINKFORSHARED="-Xlinker --export-dynamic"
|
||||
fi;;
|
||||
esac;;
|
||||
- CYGWIN*)
|
||||
+ CYGWIN*|MSYS*)
|
||||
if test $enable_shared = "no"
|
||||
then
|
||||
LINKFORSHARED='-Wl,--out-implib=$(LDLIBRARY)'
|
||||
@@ -2628,7 +2640,7 @@
|
||||
if test ! "$LIBRARY" = "$LDLIBRARY"
|
||||
then
|
||||
case $ac_sys_system in
|
||||
- CYGWIN*)
|
||||
+ CYGWIN*|MSYS*)
|
||||
# Cygwin needs CCSHARED when building extension DLLs
|
||||
# but not when building the interpreter DLL.
|
||||
CFLAGSFORSHARED='';;
|
||||
@@ -3061,7 +3073,7 @@
|
||||
fi
|
||||
AC_CHECK_FUNCS(pthread_sigmask,
|
||||
[case $ac_sys_system in
|
||||
- CYGWIN*)
|
||||
+ CYGWIN*|MSYS*)
|
||||
AC_DEFINE(HAVE_BROKEN_PTHREAD_SIGMASK, 1,
|
||||
[Define if pthread_sigmask() does not work on your system.])
|
||||
;;
|
||||
@@ -4609,7 +4621,7 @@
|
||||
|
||||
AC_SUBST(EXT_SUFFIX)
|
||||
case $ac_sys_system in
|
||||
- Linux*|GNU*|Darwin|CYGWIN*)
|
||||
+ Linux*|GNU*|Darwin|CYGWIN*|MSYS*)
|
||||
EXT_SUFFIX=.${SOABI}${SHLIB_SUFFIX};;
|
||||
*)
|
||||
EXT_SUFFIX=${SHLIB_SUFFIX};;
|
||||
diff -Naur Python-3.6.0/Lib/asyncio/base_events.py.orig Python-3.6.0/Lib/asyncio/base_events.py
|
||||
--- Python-3.6.0/Lib/asyncio/base_events.py.orig 2016-12-22 21:21:19.000000000 -0500
|
||||
+++ Python-3.6.0/Lib/asyncio/base_events.py 2017-02-08 08:59:15.247005800 -0500
|
||||
@@ -895,7 +895,7 @@
|
||||
exceptions = []
|
||||
|
||||
if reuse_address is None:
|
||||
- reuse_address = os.name == 'posix' and sys.platform != 'cygwin'
|
||||
+ reuse_address = os.name == 'posix' and sys.platform != 'cygwin' and sys.platform != 'msys'
|
||||
|
||||
for ((family, proto),
|
||||
(local_address, remote_address)) in addr_pairs_info:
|
||||
@@ -997,7 +997,7 @@
|
||||
|
||||
AF_INET6 = getattr(socket, 'AF_INET6', 0)
|
||||
if reuse_address is None:
|
||||
- reuse_address = os.name == 'posix' and sys.platform != 'cygwin'
|
||||
+ reuse_address = os.name == 'posix' and sys.platform != 'cygwin' and sys.platform != 'msys'
|
||||
sockets = []
|
||||
if host == '':
|
||||
hosts = [None]
|
||||
diff -Naur Python-3.7.0-orig/Lib/ctypes/__init__.py Python-3.7.0/Lib/ctypes/__init__.py
|
||||
--- Python-3.7.0-orig/Lib/ctypes/__init__.py 2015-05-07 09:55:34.078000000 +0300
|
||||
+++ Python-3.7.0/Lib/ctypes/__init__.py 2015-05-07 09:58:31.825600000 +0300
|
||||
@@ -1,6 +1,6 @@
|
||||
"""create and manipulate C data types in Python"""
|
||||
|
||||
-import os as _os, sys as _sys
|
||||
+import os as _os, sys as _sys, sysconfig as _sysconfig
|
||||
|
||||
__version__ = "1.1.0"
|
||||
|
||||
@@ -430,9 +430,8 @@
|
||||
|
||||
if _os.name == "nt":
|
||||
pythonapi = PyDLL("python dll", None, _sys.dllhandle)
|
||||
-elif _sys.platform == "cygwin":
|
||||
- pythonapi = PyDLL("libpython%d.%d%s.dll" % \
|
||||
- (_sys.version_info[:2] + tuple(_sys.abiflags)))
|
||||
+elif _sys.platform in ['cygwin', 'msys']:
|
||||
+ pythonapi = PyDLL(_sysconfig.get_config_var('DLLLIBRARY'))
|
||||
else:
|
||||
pythonapi = PyDLL(None)
|
||||
|
||||
diff -Naur Python-3.7.0-orig/Lib/ctypes/test/test_loading.py Python-3.7.0/Lib/ctypes/test/test_loading.py
|
||||
--- Python-3.7.0-orig/Lib/ctypes/test/test_loading.py 2015-02-25 14:27:44.000000000 +0300
|
||||
+++ Python-3.7.0/Lib/ctypes/test/test_loading.py 2015-05-07 09:58:31.841200000 +0300
|
||||
@@ -13,6 +13,8 @@
|
||||
libc_name = find_library("c")
|
||||
elif sys.platform == "cygwin":
|
||||
libc_name = "cygwin1.dll"
|
||||
+ elif sys.platform == "msys":
|
||||
+ libc_name = "msys-2.0.dll"
|
||||
else:
|
||||
libc_name = find_library("c")
|
||||
|
||||
diff -Naur Python-3.7.0-orig/Lib/ctypes/util.py Python-3.7.0/Lib/ctypes/util.py
|
||||
--- Python-3.7.0-orig/Lib/ctypes/util.py 2015-05-07 09:55:34.078000000 +0300
|
||||
+++ Python-3.7.0/Lib/ctypes/util.py 2015-05-07 10:01:40.261800000 +0300
|
||||
@@ -80,7 +80,7 @@
|
||||
continue
|
||||
return None
|
||||
|
||||
-elif sys.platform == "cygwin":
|
||||
+elif sys.platform in ["cygwin", "msys"]:
|
||||
def find_library(name):
|
||||
for libdir in ['/usr/lib', '/usr/local/lib']:
|
||||
for libext in ['lib%s.dll.a' % name, 'lib%s.a' % name]:
|
||||
@@ -351,6 +351,10 @@
|
||||
print(cdll.LoadLibrary("cygbz2-1.dll"))
|
||||
print(cdll.LoadLibrary("cygcrypt-0.dll"))
|
||||
print(find_library("crypt"))
|
||||
+ elif sys.platform == "msys":
|
||||
+ print(cdll.LoadLibrary("msys-bz2-1.dll"))
|
||||
+ print(cdll.LoadLibrary("msys-crypt-0.dll"))
|
||||
+ print(find_library("crypt"))
|
||||
# issue-26439 - fix broken test call for AIX
|
||||
elif sys.platform.startswith("aix"):
|
||||
from ctypes import CDLL
|
||||
diff -Naur Python-3.7.0-orig/Lib/distutils/ccompiler.py Python-3.7.0/Lib/distutils/ccompiler.py
|
||||
--- Python-3.7.0-orig/Lib/distutils/ccompiler.py 2015-02-25 14:27:44.000000000 +0300
|
||||
+++ Python-3.7.0/Lib/distutils/ccompiler.py 2015-05-07 09:58:31.841200000 +0300
|
||||
@@ -926,6 +926,7 @@
|
||||
# on a cygwin built python we can use gcc like an ordinary UNIXish
|
||||
# compiler
|
||||
('cygwin.*', 'unix'),
|
||||
+ ('msys.*', 'unix'),
|
||||
|
||||
# OS name mappings
|
||||
('posix', 'unix'),
|
||||
@@ -963,6 +964,8 @@
|
||||
"Microsoft Visual C++"),
|
||||
'cygwin': ('cygwinccompiler', 'CygwinCCompiler',
|
||||
"Cygwin port of GNU C Compiler for Win32"),
|
||||
+ 'msys': ('cygwinccompiler', 'CygwinCCompiler',
|
||||
+ "Cygwin port of GNU C Compiler for Win32"),
|
||||
'mingw32': ('cygwinccompiler', 'Mingw32CCompiler',
|
||||
"Mingw32 port of GNU C Compiler for Win32"),
|
||||
'bcpp': ('bcppcompiler', 'BCPPCompiler',
|
||||
diff -Naur Python-3.7.0-orig/Lib/distutils/command/build_ext.py Python-3.7.0/Lib/distutils/command/build_ext.py
|
||||
--- Python-3.7.0-orig/Lib/distutils/command/build_ext.py 2015-05-07 09:55:34.811200000 +0300
|
||||
+++ Python-3.7.0/Lib/distutils/command/build_ext.py 2015-05-07 09:58:31.856800000 +0300
|
||||
@@ -217,7 +217,7 @@
|
||||
|
||||
# For extensions under Cygwin, Python's library directory must be
|
||||
# appended to library_dirs
|
||||
- if sys.platform[:6] == 'cygwin':
|
||||
+ if sys.platform[:6] == 'cygwin' or sys.platform[:4] == 'msys':
|
||||
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",
|
||||
diff -Naur Python-3.7.0-orig/Lib/distutils/cygwinccompiler.py Python-3.7.0/Lib/distutils/cygwinccompiler.py
|
||||
--- Python-3.7.0-orig/Lib/distutils/cygwinccompiler.py 2015-05-07 09:55:43.001200000 +0300
|
||||
+++ Python-3.7.0/Lib/distutils/cygwinccompiler.py 2015-05-07 09:58:31.856800000 +0300
|
||||
@@ -400,4 +400,4 @@
|
||||
def is_cygwingcc():
|
||||
'''Try to determine if the gcc that would be used is from cygwin.'''
|
||||
out_string = check_output(['gcc', '-dumpmachine'])
|
||||
- return out_string.strip().endswith(b'cygwin')
|
||||
+ return (out_string.strip().endswith(b'cygwin') or out_string.strip().endswith(b'msys'))
|
||||
diff -Naur Python-3.7.0-orig/Lib/distutils/sysconfig.py Python-3.7.0/Lib/distutils/sysconfig.py
|
||||
--- Python-3.7.0-orig/Lib/distutils/sysconfig.py 2015-05-07 09:55:46.604800000 +0300
|
||||
+++ Python-3.7.0/Lib/distutils/sysconfig.py 2015-05-07 10:07:03.222600000 +0300
|
||||
@@ -157,7 +157,7 @@
|
||||
varies across Unices and is stored in Python's Makefile.
|
||||
"""
|
||||
global _config_vars
|
||||
- if compiler.compiler_type in ["cygwin", "mingw32"]:
|
||||
+ if compiler.compiler_type in ["cygwin", "msys", "mingw32"]:
|
||||
# Note that cygwin use posix build and 'unix' compiler.
|
||||
# If build is not based on posix then we must predefine
|
||||
# some environment variables corresponding to posix
|
||||
@@ -172,7 +172,7 @@
|
||||
_config_vars['AR'] = "ar"
|
||||
_config_vars['ARFLAGS'] = "rc"
|
||||
|
||||
- if compiler.compiler_type in ["unix", "cygwin", "mingw32"]:
|
||||
+ if compiler.compiler_type in ["unix", "cygwin", "msys", "mingw32"]:
|
||||
if sys.platform == "darwin":
|
||||
# Perform first-time customization of compiler-related
|
||||
# config vars on OS X now that we know we need a compiler.
|
||||
diff -Naur Python-3.7.0-orig/Lib/distutils/tests/support.py Python-3.7.0/Lib/distutils/tests/support.py
|
||||
--- Python-3.7.0-orig/Lib/distutils/tests/support.py 2015-02-25 14:27:44.000000000 +0300
|
||||
+++ Python-3.7.0/Lib/distutils/tests/support.py 2015-05-07 09:58:31.856800000 +0300
|
||||
@@ -65,7 +65,7 @@
|
||||
super().tearDown()
|
||||
while self.tempdirs:
|
||||
d = self.tempdirs.pop()
|
||||
- shutil.rmtree(d, os.name in ('nt', 'cygwin'))
|
||||
+ shutil.rmtree(d, os.name in ('nt', 'cygwin', 'msys'))
|
||||
|
||||
def mkdtemp(self):
|
||||
"""Create a temporary directory that will be cleaned up.
|
||||
diff -Naur Python-3.6.0/Lib/distutils/unixccompiler.py.orig Python-3.6.0/Lib/distutils/unixccompiler.py
|
||||
--- Python-3.6.0/Lib/distutils/unixccompiler.py.orig 2017-02-08 08:22:40.592815800 -0500
|
||||
+++ Python-3.6.0/Lib/distutils/unixccompiler.py 2017-02-08 08:32:38.946960100 -0500
|
||||
@@ -79,7 +79,7 @@
|
||||
xcode_stub_lib_extension = ".tbd"
|
||||
static_lib_format = shared_lib_format = dylib_lib_format = "lib%s%s"
|
||||
xcode_stub_lib_format = dylib_lib_format
|
||||
- if sys.platform == "cygwin":
|
||||
+ if sys.platform in ["cygwin", "msys"]:
|
||||
exe_extension = ".exe"
|
||||
dylib_lib_extension = ".dll.a"
|
||||
|
||||
@@ -225,7 +225,7 @@
|
||||
# the configuration data stored in the Python installation, so
|
||||
# we use this hack.
|
||||
compiler = os.path.basename(sysconfig.get_config_var("CC"))
|
||||
- if sys.platform[:6] == "darwin" or sys.platform[:6] == "cygwin":
|
||||
+ if sys.platform[:6] == "darwin" or sys.platform[:6] == "cygwin" or sys.platform[:4] == "msys":
|
||||
# MacOSX's linker doesn't understand the -R flag at all
|
||||
return "-L" + dir
|
||||
elif sys.platform[:7] == "freebsd":
|
||||
diff -Naur Python-3.7.0-orig/Lib/distutils/util.py Python-3.7.0/Lib/distutils/util.py
|
||||
--- Python-3.7.0-orig/Lib/distutils/util.py 2015-02-25 14:27:44.000000000 +0300
|
||||
+++ Python-3.7.0/Lib/distutils/util.py 2015-05-07 09:58:31.872400000 +0300
|
||||
@@ -97,6 +97,12 @@
|
||||
m = rel_re.match(release)
|
||||
if m:
|
||||
release = m.group()
|
||||
+ elif osname[:4] == "msys":
|
||||
+ osname = "msys"
|
||||
+ rel_re = re.compile (r'[\d.]+', re.ASCII)
|
||||
+ m = rel_re.match(release)
|
||||
+ if m:
|
||||
+ release = m.group()
|
||||
elif osname[:6] == "darwin":
|
||||
import _osx_support, distutils.sysconfig
|
||||
osname, release, machine = _osx_support.get_platform_osx(
|
||||
diff -Naur Python-3.6.0/Lib/importlib/_bootstrap_external.py.orig Python-3.6.0/Lib/importlib/_bootstrap_external.py
|
||||
--- Python-3.6.0/Lib/importlib/_bootstrap_external.py.orig 2017-02-08 08:43:48.316520300 -0500
|
||||
+++ Python-3.6.0/Lib/importlib/_bootstrap_external.py 2017-02-08 08:44:28.339129300 -0500
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
# Bootstrap-related code ######################################################
|
||||
_CASE_INSENSITIVE_PLATFORMS_STR_KEY = 'win',
|
||||
-_CASE_INSENSITIVE_PLATFORMS_BYTES_KEY = 'cygwin', 'darwin'
|
||||
+_CASE_INSENSITIVE_PLATFORMS_BYTES_KEY = 'cygwin', 'msys', 'darwin'
|
||||
_CASE_INSENSITIVE_PLATFORMS = (_CASE_INSENSITIVE_PLATFORMS_BYTES_KEY
|
||||
+ _CASE_INSENSITIVE_PLATFORMS_STR_KEY)
|
||||
|
||||
diff -Naur Python-3.7.0-orig/Lib/sysconfig.py Python-3.7.0/Lib/sysconfig.py
|
||||
--- Python-3.7.0-orig/Lib/sysconfig.py 2015-02-25 14:27:44.000000000 +0300
|
||||
+++ Python-3.7.0/Lib/sysconfig.py 2015-05-07 09:58:34.087600000 +0300
|
||||
@@ -683,6 +683,13 @@
|
||||
m = rel_re.match(release)
|
||||
if m:
|
||||
release = m.group()
|
||||
+ elif osname[:4] == "msys":
|
||||
+ osname = "msys"
|
||||
+ import re
|
||||
+ rel_re = re.compile (r'[\d.]+')
|
||||
+ m = rel_re.match(release)
|
||||
+ if m:
|
||||
+ release = m.group()
|
||||
elif osname[:6] == "darwin":
|
||||
import _osx_support
|
||||
osname, release, machine = _osx_support.get_platform_osx(
|
||||
diff -Naur Python-3.7.0-orig/Lib/tempfile.py Python-3.7.0/Lib/tempfile.py
|
||||
--- Python-3.7.0-orig/Lib/tempfile.py 2015-02-25 14:27:44.000000000 +0300
|
||||
+++ Python-3.7.0/Lib/tempfile.py 2015-05-07 09:58:35.086000000 +0300
|
||||
@@ -557,7 +557,7 @@
|
||||
_os.close(fd)
|
||||
raise
|
||||
|
||||
-if _os.name != 'posix' or _os.sys.platform == 'cygwin':
|
||||
+if _os.name != 'posix' or _os.sys.platform == 'cygwin' or _os.sys.platform == 'msys':
|
||||
# On non-POSIX and Cygwin systems, assume that we cannot unlink a file
|
||||
# while it is open.
|
||||
TemporaryFile = NamedTemporaryFile
|
||||
diff -Naur Python-3.7.0-orig/Lib/test/test_curses.py Python-3.7.0/Lib/test/test_curses.py
|
||||
--- Python-3.7.0-orig/Lib/test/test_curses.py 2015-02-25 14:27:45.000000000 +0300
|
||||
+++ Python-3.7.0/Lib/test/test_curses.py 2015-05-07 09:58:35.086000000 +0300
|
||||
@@ -40,6 +40,8 @@
|
||||
"$TERM=%r, calling initscr() may cause exit" % term)
|
||||
@unittest.skipIf(sys.platform == "cygwin",
|
||||
"cygwin's curses mostly just hangs")
|
||||
+@unittest.skipIf(sys.platform == "msys",
|
||||
+ "msys's curses mostly just hangs")
|
||||
class TestCurses(unittest.TestCase):
|
||||
|
||||
@classmethod
|
||||
diff -Naur Python-3.7.0-orig/Lib/test/test_importlib/util.py Python-3.7.0/Lib/test/test_importlib/util.py
|
||||
--- Python-3.7.0-orig/Lib/test/test_importlib/util.py 2015-02-25 14:27:45.000000000 +0300
|
||||
+++ Python-3.7.0/Lib/test/test_importlib/util.py 2015-05-07 09:58:35.086000000 +0300
|
||||
@@ -85,7 +85,7 @@
|
||||
CASE_INSENSITIVE_FS = True
|
||||
# Windows is the only OS that is *always* case-insensitive
|
||||
# (OS X *can* be case-sensitive).
|
||||
-if sys.platform not in ('win32', 'cygwin'):
|
||||
+if sys.platform not in ('win32', 'cygwin', 'msys'):
|
||||
changed_name = __file__.upper()
|
||||
if changed_name == __file__:
|
||||
changed_name = __file__.lower()
|
||||
diff -Naur Python-3.7.0-orig/Lib/test/test_mailbox.py Python-3.7.0/Lib/test/test_mailbox.py
|
||||
--- Python-3.7.0-orig/Lib/test/test_mailbox.py 2015-02-25 14:27:45.000000000 +0300
|
||||
+++ Python-3.7.0/Lib/test/test_mailbox.py 2015-05-07 09:58:35.086000000 +0300
|
||||
@@ -591,7 +591,7 @@
|
||||
|
||||
def setUp(self):
|
||||
TestMailbox.setUp(self)
|
||||
- if (os.name == 'nt') or (sys.platform == 'cygwin'):
|
||||
+ if (os.name == 'nt') or (sys.platform == 'cygwin') or (sys.platform == 'msys'):
|
||||
self._box.colon = '!'
|
||||
|
||||
def assertMailboxEmpty(self):
|
||||
diff -Naur Python-3.7.0-orig/Lib/test/test_netrc.py Python-3.7.0/Lib/test/test_netrc.py
|
||||
--- Python-3.7.0-orig/Lib/test/test_netrc.py 2015-02-25 14:27:45.000000000 +0300
|
||||
+++ Python-3.7.0/Lib/test/test_netrc.py 2015-05-07 09:58:35.117200000 +0300
|
||||
@@ -8,7 +8,7 @@
|
||||
def make_nrc(self, test_data):
|
||||
test_data = textwrap.dedent(test_data)
|
||||
mode = 'w'
|
||||
- if sys.platform != 'cygwin':
|
||||
+ if sys.platform not in ['cygwin', 'msys']:
|
||||
mode += 't'
|
||||
with open(temp_filename, mode) as fp:
|
||||
fp.write(test_data)
|
||||
diff -Naur Python-3.7.0-orig/Lib/test/test_shutil.py Python-3.7.0/Lib/test/test_shutil.py
|
||||
--- Python-3.7.0-orig/Lib/test/test_shutil.py 2015-02-25 14:27:45.000000000 +0300
|
||||
+++ Python-3.7.0/Lib/test/test_shutil.py 2015-05-07 09:58:35.117200000 +0300
|
||||
@@ -97,7 +97,7 @@
|
||||
super(TestShutil, self).tearDown()
|
||||
while self.tempdirs:
|
||||
d = self.tempdirs.pop()
|
||||
- shutil.rmtree(d, os.name in ('nt', 'cygwin'))
|
||||
+ shutil.rmtree(d, os.name in ('nt', 'cygwin', 'msys'))
|
||||
|
||||
|
||||
def mkdtemp(self):
|
||||
@@ -196,7 +196,7 @@
|
||||
|
||||
|
||||
@unittest.skipUnless(hasattr(os, 'chmod'), 'requires os.chmod()')
|
||||
- @unittest.skipIf(sys.platform[:6] == 'cygwin',
|
||||
+ @unittest.skipIf(sys.platform[:6] == 'cygwin' or sys.platform[:4] == 'msys',
|
||||
"This test can't be run on Cygwin (issue #1071513).")
|
||||
@unittest.skipIf(hasattr(os, 'geteuid') and os.geteuid() == 0,
|
||||
"This test can't be run reliably as root (issue #1076467).")
|
||||
diff -Naur Python-3.7.0-orig/Lib/_pyio.py Python-3.7.0/Lib/_pyio.py
|
||||
--- Python-3.7.0-orig/Lib/_pyio.py 2015-02-25 14:27:45.000000000 +0300
|
||||
+++ Python-3.7.0/Lib/_pyio.py 2015-05-07 09:58:35.117200000 +0300
|
||||
@@ -10,7 +10,7 @@
|
||||
import sys
|
||||
# Import _thread instead of threading to reduce startup cost
|
||||
from _thread import allocate_lock as Lock
|
||||
-if sys.platform in {'win32', 'cygwin'}:
|
||||
+if sys.platform in {'win32', 'cygwin', 'msys'}:
|
||||
from msvcrt import setmode as _setmode
|
||||
else:
|
||||
_setmode = None
|
||||
diff -Naur Python-3.7.0-orig/Lib/tkinter/test/test_tkinter/test_loadtk.py Python-3.7.0/Lib/tkinter/test/test_tkinter/test_loadtk.py
|
||||
--- Python-3.7.0-orig/Lib/tkinter/test/test_tkinter/test_loadtk.py 2015-02-25 14:27:45.000000000 +0300
|
||||
+++ Python-3.7.0/Lib/tkinter/test/test_tkinter/test_loadtk.py 2015-05-07 09:58:35.117200000 +0300
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
def testLoadTkFailure(self):
|
||||
old_display = None
|
||||
- if sys.platform.startswith(('win', 'darwin', 'cygwin')):
|
||||
+ if sys.platform.startswith(('win', 'darwin', 'cygwin', 'msys')):
|
||||
# no failure possible on windows?
|
||||
|
||||
# XXX Maybe on tk older than 8.4.13 it would be possible,
|
||||
diff -Naur Python-3.7.0-orig/Modules/makesetup Python-3.7.0/Modules/makesetup
|
||||
--- Python-3.7.0-orig/Modules/makesetup 2015-05-07 09:55:42.954400000 +0300
|
||||
+++ Python-3.7.0/Modules/makesetup 2015-05-07 09:58:35.132800000 +0300
|
||||
@@ -86,7 +86,7 @@
|
||||
# Setup to link with extra libraries when making shared extensions.
|
||||
# Currently, only Cygwin needs this baggage.
|
||||
case `uname -s` in
|
||||
-CYGWIN*) if test $libdir = .
|
||||
+CYGWIN*|MSYS*) if test $libdir = .
|
||||
then
|
||||
ExtraLibDir=.
|
||||
else
|
||||
diff -Naur Python-3.7.0-orig/setup.py Python-3.7.0/setup.py
|
||||
--- Python-3.7.0-orig/setup.py 2015-05-07 09:55:33.329200000 +0300
|
||||
+++ Python-3.7.0/setup.py 2015-05-07 09:58:35.132800000 +0300
|
||||
@@ -361,7 +361,7 @@
|
||||
|
||||
# Workaround for Cygwin: Cygwin currently has fork issues when many
|
||||
# modules have been imported
|
||||
- if host_platform == 'cygwin':
|
||||
+ if host_platform in ['cygwin', 'msys']:
|
||||
self.announce('WARNING: skipping import check for Cygwin-based "%s"'
|
||||
% ext.name)
|
||||
return
|
||||
@@ -1577,6 +1577,10 @@
|
||||
macros = dict()
|
||||
libraries = []
|
||||
|
||||
+ elif host_platform == 'msys': # MSYS
|
||||
+ macros = dict()
|
||||
+ libraries = []
|
||||
+
|
||||
elif host_platform.startswith('openbsd'):
|
||||
macros = dict()
|
||||
libraries = []
|
||||
@@ -2223,7 +2223,7 @@
|
||||
return ext
|
||||
|
||||
def _detect_nis(self, inc_dirs, lib_dirs):
|
||||
- if host_platform in {'win32', 'cygwin', 'qnx6'}:
|
||||
+ if host_platform in {'win32', 'cygwin', 'msys', 'qnx6'}:
|
||||
return None
|
||||
|
||||
libs = []
|
||||
diff -aur Python-3.6.0/Lib/test/test_asyncio/test_base_events.py.orig Python-3.6.0/Lib/test/test_asyncio/test_base_events.py
|
||||
--- Python-3.6.0/Lib/test/test_asyncio/test_base_events.py.orig 2017-02-08 15:03:29.184676300 -0500
|
||||
+++ Python-3.6.0/Lib/test/test_asyncio/test_base_events.py 2017-02-08 15:49:05.932013200 -0500
|
||||
@@ -1576,7 +1576,7 @@
|
||||
sock = transport.get_extra_info('socket')
|
||||
|
||||
reuse_address_default_on = (
|
||||
- os.name == 'posix' and sys.platform != 'cygwin')
|
||||
+ os.name == 'posix' and sys.platform != 'cygwin' and sys.platform != 'msys')
|
||||
reuseport_supported = hasattr(socket, 'SO_REUSEPORT')
|
||||
|
||||
if reuse_address_default_on:
|
||||
29
python/920-allow-win-drives-in-os-path-isabs.patch
Normal file
29
python/920-allow-win-drives-in-os-path-isabs.patch
Normal file
@@ -0,0 +1,29 @@
|
||||
--- a/Lib/posixpath.py 2013-11-27 06:57:57.000000000 +0000
|
||||
+++ b/Lib/posixpath.py 2014-02-21 10:43:34.423932700 +0000
|
||||
@@ -42,6 +42,12 @@
|
||||
else:
|
||||
return '/'
|
||||
|
||||
+def _get_altsep(path):
|
||||
+ if isinstance(path, bytes):
|
||||
+ return b'\\'
|
||||
+ else:
|
||||
+ return '\\'
|
||||
+
|
||||
# Normalize the case of a pathname. Trivial in Posix, string.lower on Mac.
|
||||
# On MS-DOS this may also turn slashes into backslashes; however, other
|
||||
# normalizations (such as optimizing '../' away) are not allowed
|
||||
@@ -63,7 +69,12 @@
|
||||
"""Test whether a path is absolute"""
|
||||
s = os.fspath(s)
|
||||
sep = _get_sep(s)
|
||||
- return s.startswith(sep)
|
||||
+ altsep = _get_altsep(s)
|
||||
+ return s.startswith(sep) or \
|
||||
+ (sys.platform == 'msys' and \
|
||||
+ len(s) > 2 and \
|
||||
+ s[1] == ':' and \
|
||||
+ (s[2] == sep or s[2] == altsep))
|
||||
|
||||
|
||||
# Join pathnames.
|
||||
174
python/PKGBUILD
Normal file
174
python/PKGBUILD
Normal file
@@ -0,0 +1,174 @@
|
||||
# Maintainer: Alexey Pavlov <Alexpux@gmail.com>
|
||||
# Contributor: Ray Donnelly <mingw.android@gmail.com>
|
||||
|
||||
pkgbase=python3
|
||||
pkgname=python
|
||||
pkgver=3.7.4
|
||||
pkgrel=1
|
||||
_pybasever=3.7
|
||||
pkgdesc="Next generation of the python high-level scripting language"
|
||||
arch=('i686' 'x86_64')
|
||||
license=('custom')
|
||||
url="https://www.python.org/"
|
||||
depends=('libbz2' 'libexpat' 'libffi' 'liblzma' 'ncurses' 'libopenssl' 'libreadline' 'mpdecimal' 'libsqlite' 'zlib')
|
||||
makedepends=('libbz2-devel' 'libexpat-devel' 'mpdecimal-devel' 'libsqlite-devel' 'libffi-devel' 'ncurses-devel' 'libreadline-devel' 'liblzma-devel' 'openssl-devel' 'zlib-devel')
|
||||
#optdepends=('tk: for tkinter' 'sqlite')
|
||||
provides=('python3')
|
||||
replaces=('python3')
|
||||
options=('!makeflags')
|
||||
source=(https://www.python.org/ftp/python/${pkgver%rc*}/Python-${pkgver}.tar.xz
|
||||
001-3.4-dbm-cygwin.patch
|
||||
002-3.1-enable-new-dtags.patch
|
||||
003-3.4-tkinter-cygwin.patch
|
||||
004-3.4-ctypes-cygwin.patch
|
||||
006-3.1-ncurses-abi6.patch
|
||||
007-3.2-export-PySignal_SetWakeupFd.patch
|
||||
009-3.2-distutils-shlibext.patch
|
||||
010-3.6-pep3149-cygwin.patch
|
||||
011-3.6-thread-cygwin64.patch
|
||||
012-3.2-getpath-exe-extension.patch
|
||||
013-3.4-select-cygwin.patch
|
||||
016-3.6-ftm.patch
|
||||
017-3.6-mpdec-cygwin.patch
|
||||
025-MINGW-compiler-customize-mingw-cygwin-compilers.patch
|
||||
900-msysize.patch
|
||||
920-allow-win-drives-in-os-path-isabs.patch
|
||||
dont-make-libpython-readonly.patch
|
||||
00155-avoid-ctypes-thunks.patch
|
||||
00170-gc-assertions.patch)
|
||||
sha256sums=('fb799134b868199930b75f26678f18932214042639cd52b16da7fd134cd9b13f'
|
||||
'de52e4722a6902e09dd6f343fdac0e7d45339f89386c8096b9c582c31aeb82e7'
|
||||
'b5a787f02811f46800f98bf242448770492643a4431771bb4283e6ae97016263'
|
||||
'4d7601b62e73c04553d22d480a873983a28b11df1f06be6898014453ce04afc3'
|
||||
'ff56bfe8dc1808484926c338fb5515d2d8cef36e95cc64d4940642a72276620f'
|
||||
'23bbe23afe90d5085ba7c27956c2df4ceee2acdfdc1d06a289070f045003fa09'
|
||||
'1ab20d38926aa85e638317620c29c484fcbbc228cd7cdf9543c29b750556d23f'
|
||||
'6ead37259110c28b16e35e05c93c82b46aa0fbb5152ff61bdaf1eea5f1ad01da'
|
||||
'f5b67408d39d3fda539ea90b12c48a05bd950b38460ec3e6a688e3377b071ed3'
|
||||
'b1d5a000bd5c9ec0a54f79e5487901d950e7685c57f50a5cea1a87012c034b4c'
|
||||
'4a6a4cdd0b3c8f0c3ae563005cc0a398d352c98bcb1826600f1ab4c3e0c24219'
|
||||
'e668b749e5f0bc584262add2cd7fffb2f6f32393a14918029d791012eda930f3'
|
||||
'879ef890846d900132c4283ea65351b060bc4760ca40fbe5e80ba5acbe98370c'
|
||||
'e3ef181333d5c9d20297849a46a68271a2190b7fc611c40c68c1ae240fa7ec36'
|
||||
'5b1083e9b50e149d623d863dee38ac1fb8d142f1bb78c8a01dcb09bfd97f4118'
|
||||
'35bf549bca1147a2a596132639d94f7b3a40de774780933e6a7f7fd9b0d309e3'
|
||||
'387a2b7931fb4958e2526991760d85677f44fa13cff0aeb0f41a267f1f7fd214'
|
||||
'f8b15d7079bfa1707e5bea78f600a0fca2077c25428c2bac5793b19b408f276e'
|
||||
'7a3f8f43b9c9eecb65d80b60c875344950a8b55082401830599d091548a3a985'
|
||||
'd8170bb446e5f3022bcc0eeb49f01d7c880161f1e115f4606e34554bf5ad0314')
|
||||
|
||||
apply_patch_with_msg() {
|
||||
for _patch in "$@"
|
||||
do
|
||||
msg2 "Applying $_patch"
|
||||
patch -Nbp1 -i "${srcdir}/$_patch"
|
||||
done
|
||||
}
|
||||
|
||||
del_file_exists() {
|
||||
for _fname in "$@"
|
||||
do
|
||||
if [ -f $_fname ]; then
|
||||
rm -rf $_fname
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
prepare() {
|
||||
cd "${srcdir}/Python-${pkgver}"
|
||||
|
||||
# FS#23997
|
||||
sed -i -e "s|^#.* /usr/local/bin/python|#!/usr/bin/python|" Lib/cgi.py
|
||||
|
||||
apply_patch_with_msg \
|
||||
001-3.4-dbm-cygwin.patch \
|
||||
002-3.1-enable-new-dtags.patch \
|
||||
003-3.4-tkinter-cygwin.patch \
|
||||
004-3.4-ctypes-cygwin.patch \
|
||||
006-3.1-ncurses-abi6.patch \
|
||||
007-3.2-export-PySignal_SetWakeupFd.patch \
|
||||
009-3.2-distutils-shlibext.patch \
|
||||
010-3.6-pep3149-cygwin.patch \
|
||||
011-3.6-thread-cygwin64.patch \
|
||||
012-3.2-getpath-exe-extension.patch \
|
||||
013-3.4-select-cygwin.patch \
|
||||
016-3.6-ftm.patch \
|
||||
017-3.6-mpdec-cygwin.patch \
|
||||
025-MINGW-compiler-customize-mingw-cygwin-compilers.patch \
|
||||
900-msysize.patch \
|
||||
920-allow-win-drives-in-os-path-isabs.patch
|
||||
|
||||
#archlinux
|
||||
apply_patch_with_msg dont-make-libpython-readonly.patch
|
||||
#fedora
|
||||
apply_patch_with_msg \
|
||||
00155-avoid-ctypes-thunks.patch \
|
||||
00170-gc-assertions.patch
|
||||
|
||||
# Incomplete patch from Ray Donnelly
|
||||
# patch -p1 -i ${srcdir}/3.3.2-allow-windows-paths-for-executable.patch
|
||||
|
||||
# Ensure that we are using the system copy of various libraries (expat, zlib and libffi),
|
||||
# rather than copies shipped in the tarball
|
||||
rm -r Modules/expat
|
||||
rm -r Modules/_ctypes/{darwin,libffi}*
|
||||
rm -r Modules/_decimal/libmpdec
|
||||
autoreconf -fiv
|
||||
}
|
||||
|
||||
build() {
|
||||
cd "${srcdir}/Python-${pkgver}"
|
||||
|
||||
CPPFLAGS+=" -I/usr/include/ncursesw"
|
||||
LDFLAGS+=" -L."
|
||||
|
||||
CXX=/usr/bin/g++ \
|
||||
./configure \
|
||||
--prefix=/usr \
|
||||
--build=${CHOST} \
|
||||
--host=${CHOST} \
|
||||
--enable-shared \
|
||||
--enable-ipv6 \
|
||||
--with-dbmliborder=gdbm \
|
||||
--with-libc= \
|
||||
--with-libm= \
|
||||
--with-system-expat \
|
||||
--with-system-ffi \
|
||||
--with-system-libmpdec \
|
||||
--enable-loadable-sqlite-extensions \
|
||||
--without-ensurepip \
|
||||
ac_cv_func_bind_textdomain_codeset=yes
|
||||
|
||||
LC_CTYPE=en_US.UTF-8 make EXTRA_CFLAGS="$CFLAGS"
|
||||
}
|
||||
|
||||
check() {
|
||||
cd "${srcdir}/Python-${pkgver}"
|
||||
"${srcdir}/Python-${pkgver}/python" -m test.regrtest -x test_posixpath test_logging
|
||||
}
|
||||
|
||||
package() {
|
||||
cd "${srcdir}/Python-${pkgver}"
|
||||
make DESTDIR="${pkgdir}" EXTRA_CFLAGS="$CFLAGS" install maninstall
|
||||
|
||||
# Why are these not done by default...
|
||||
ln -sf python3 "${pkgdir}"/usr/bin/python.exe
|
||||
ln -sf python3-config "${pkgdir}"/usr/bin/python-config
|
||||
ln -sf idle3 "${pkgdir}"/usr/bin/idle
|
||||
ln -sf pydoc3 "${pkgdir}"/usr/bin/pydoc
|
||||
ln -sf pyvenv-${_pybasever} "${pkgdir}"/usr/bin/pyvenv3
|
||||
ln -sf python${_pybasever}.1 "${pkgdir}"/usr/share/man/man1/python3.1
|
||||
ln -sf python${_pybasever}.1 "${pkgdir}"/usr/share/man/man1/python.1
|
||||
|
||||
# Fix FS#22552
|
||||
cp -f "${pkgdir}"/usr/lib/python${_pybasever}/config-${_pybasever}m/libpython${_pybasever}m.dll.a "${pkgdir}"/usr/lib/libpython${_pybasever}m.dll.a
|
||||
|
||||
# Clean-up reference to build directory
|
||||
sed -i "s|$srcdir/Python-${pkgver}:||" "${pkgdir}/usr/lib/python${_pybasever}/config-${_pybasever}m/Makefile"
|
||||
|
||||
# License
|
||||
install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
|
||||
|
||||
# fix permissons
|
||||
find ${pkgdir}/usr -type f \( -name *.dll -o -name *.exe \) | xargs chmod 0755
|
||||
}
|
||||
13
python/dont-make-libpython-readonly.patch
Normal file
13
python/dont-make-libpython-readonly.patch
Normal file
@@ -0,0 +1,13 @@
|
||||
diff --git a/Makefile.pre.in b/Makefile.pre.in
|
||||
index ce2c0aa..7d6dcf7 100644
|
||||
--- a/Makefile.pre.in
|
||||
+++ b/Makefile.pre.in
|
||||
@@ -70,7 +70,7 @@ INSTALL_DATA= @INSTALL_DATA@
|
||||
# Shared libraries must be installed with executable mode on some systems;
|
||||
# rather than figuring out exactly which, we always give them executable mode.
|
||||
# Also, making them read-only seems to be a good idea...
|
||||
-INSTALL_SHARED= ${INSTALL} -m 555
|
||||
+INSTALL_SHARED= ${INSTALL} -m 755
|
||||
|
||||
MKDIR_P= @MKDIR_P@
|
||||
|
||||
Reference in New Issue
Block a user