summarylogtreecommitdiffstats
path: root/0038-msys-mingw-prefer-unix-sep-if-MSYSTEM.patch
diff options
context:
space:
mode:
authoratomlong2021-10-23 17:55:22 +0800
committeratomlong2021-10-23 18:06:15 +0800
commit80096c8de4b34ec1ed8f30bb428918cd592b2424 (patch)
treeb48dd1e73de9ea35a4709fb6b93deb16331ec514 /0038-msys-mingw-prefer-unix-sep-if-MSYSTEM.patch
parent89a67c05174951d172252b1db96ff93cc4ec4bcd (diff)
downloadaur-80096c8de4b34ec1ed8f30bb428918cd592b2424.tar.gz
update to 3.9.7
Diffstat (limited to '0038-msys-mingw-prefer-unix-sep-if-MSYSTEM.patch')
-rw-r--r--0038-msys-mingw-prefer-unix-sep-if-MSYSTEM.patch397
1 files changed, 0 insertions, 397 deletions
diff --git a/0038-msys-mingw-prefer-unix-sep-if-MSYSTEM.patch b/0038-msys-mingw-prefer-unix-sep-if-MSYSTEM.patch
deleted file mode 100644
index cfe1e8cc17b2..000000000000
--- a/0038-msys-mingw-prefer-unix-sep-if-MSYSTEM.patch
+++ /dev/null
@@ -1,397 +0,0 @@
-From 8264c28205f988c0e7147f4f82c68511bb5ec611 Mon Sep 17 00:00:00 2001
-From: Ray Donnelly <mingw.android@gmail.com>
-Date: Thu, 17 Jun 2021 18:51:46 +0530
-Subject: [PATCH 038/N] msys mingw prefer unix sep if MSYSTEM
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Co-authored-by: Алексей <alexey.pawlow@gmail.com>
-Co-authored-by: Christoph Reiter <reiter.christoph@gmail.com>
----
- Include/pylifecycle.h | 6 +++
- Lib/ntpath.py | 79 +++++++++++++++++-------------
- Modules/posixmodule.c | 2 +
- Python/initconfig.c | 4 +-
- Python/pathconfig.c | 109 ++++++++++++++++++++++++++++++++++++++++++
- Python/traceback.c | 2 +-
- 6 files changed, 165 insertions(+), 37 deletions(-)
-
-diff --git a/Include/pylifecycle.h b/Include/pylifecycle.h
-index 783fcb4..4eec669 100644
---- a/Include/pylifecycle.h
-+++ b/Include/pylifecycle.h
-@@ -21,6 +21,12 @@ PyAPI_FUNC(int) Py_IsInitialized(void);
- PyAPI_FUNC(PyThreadState *) Py_NewInterpreter(void);
- PyAPI_FUNC(void) Py_EndInterpreter(PyThreadState *);
-
-+PyAPI_FUNC(wchar_t) Py_GetSepW(const wchar_t *);
-+PyAPI_FUNC(char) Py_GetSepA(const char *);
-+
-+PyAPI_FUNC(void) Py_NormalizeSepsW(wchar_t *);
-+PyAPI_FUNC(void) Py_NormalizeSepsA(char *);
-+
-
- /* Py_PyAtExit is for the atexit module, Py_AtExit is for low-level
- * exit functions.
-diff --git a/Lib/ntpath.py b/Lib/ntpath.py
-index 6f77177..77f5614 100644
---- a/Lib/ntpath.py
-+++ b/Lib/ntpath.py
-@@ -11,9 +11,7 @@ module as os.path.
- curdir = '.'
- pardir = '..'
- extsep = '.'
--sep = '\\'
- pathsep = ';'
--altsep = '/'
- defpath = '.;C:\\bin'
- devnull = 'nul'
-
-@@ -23,6 +21,15 @@ import stat
- import genericpath
- from genericpath import *
-
-+if sys.platform == "win32" and "MSYSTEM" in os.environ:
-+ sep = '/'
-+ altsep = '\\'
-+else:
-+ sep = '\\'
-+ altsep = '/'
-+bsep = str.encode(sep)
-+baltsep = str.encode(altsep)
-+
- __all__ = ["normcase","isabs","join","splitdrive","split","splitext",
- "basename","dirname","commonprefix","getsize","getmtime",
- "getatime","getctime", "islink","exists","lexists","isdir","isfile",
-@@ -33,9 +40,27 @@ __all__ = ["normcase","isabs","join","splitdrive","split","splitext",
-
- def _get_bothseps(path):
- if isinstance(path, bytes):
-- return b'\\/'
-+ return bsep+baltsep
-+ else:
-+ return sep+altsep
-+
-+def _get_sep(path):
-+ if isinstance(path, bytes):
-+ return bsep
-+ else:
-+ return sep
-+
-+def _get_altsep(path):
-+ if isinstance(path, bytes):
-+ return baltsep
- else:
-- return '\\/'
-+ return altsep
-+
-+def _get_colon(path):
-+ if isinstance(path, bytes):
-+ return b':'
-+ else:
-+ return ':'
-
- # Normalize the case of a pathname and map slashes to backslashes.
- # Other normalizations (such as optimizing '../' away) are not done
-@@ -47,9 +72,9 @@ def normcase(s):
- Makes all characters lowercase and all slashes into backslashes."""
- s = os.fspath(s)
- if isinstance(s, bytes):
-- return s.replace(b'/', b'\\').lower()
-+ return s.replace(baltsep, bsep).lower()
- else:
-- return s.replace('/', '\\').lower()
-+ return s.replace(altsep, sep).lower()
-
-
- # Return whether a path is absolute.
-@@ -76,14 +101,9 @@ def isabs(s):
- # Join two (or more) paths.
- def join(path, *paths):
- path = os.fspath(path)
-- if isinstance(path, bytes):
-- sep = b'\\'
-- seps = b'\\/'
-- colon = b':'
-- else:
-- sep = '\\'
-- seps = '\\/'
-- colon = ':'
-+ sep = _get_sep(path)
-+ seps = _get_bothseps(path)
-+ colon = _get_colon(path)
- try:
- if not paths:
- path[:0] + sep #23780: Ensure compatible data type even if p is null.
-@@ -142,14 +162,9 @@ def splitdrive(p):
- """
- p = os.fspath(p)
- if len(p) >= 2:
-- if isinstance(p, bytes):
-- sep = b'\\'
-- altsep = b'/'
-- colon = b':'
-- else:
-- sep = '\\'
-- altsep = '/'
-- colon = ':'
-+ sep = _get_sep(p)
-+ altsep = _get_altsep(p)
-+ colon = _get_colon(p)
- normp = p.replace(altsep, sep)
- if (normp[0:2] == sep*2) and (normp[2:3] != sep):
- # is a UNC path:
-@@ -203,9 +218,9 @@ def split(p):
- def splitext(p):
- p = os.fspath(p)
- if isinstance(p, bytes):
-- return genericpath._splitext(p, b'\\', b'/', b'.')
-+ return genericpath._splitext(p, bsep, baltsep, b'.')
- else:
-- return genericpath._splitext(p, '\\', '/', '.')
-+ return genericpath._splitext(p, sep, altsep, '.')
- splitext.__doc__ = genericpath._splitext.__doc__
-
-
-@@ -450,15 +465,13 @@ def expandvars(path):
- def normpath(path):
- """Normalize path, eliminating double slashes, etc."""
- path = os.fspath(path)
-+ sep = _get_sep(path)
-+ altsep = _get_altsep(path)
- if isinstance(path, bytes):
-- sep = b'\\'
-- altsep = b'/'
- curdir = b'.'
- pardir = b'..'
- special_prefixes = (b'\\\\.\\', b'\\\\?\\')
- else:
-- sep = '\\'
-- altsep = '/'
- curdir = '.'
- pardir = '..'
- special_prefixes = ('\\\\.\\', '\\\\?\\')
-@@ -668,6 +681,7 @@ else:
- # strip the prefix anyway.
- if ex.winerror == initial_winerror:
- path = spath
-+ path = normpath(path)
- return path
-
-
-@@ -678,12 +692,11 @@ supports_unicode_filenames = (hasattr(sys, "getwindowsversion") and
- def relpath(path, start=None):
- """Return a relative version of a path"""
- path = os.fspath(path)
-+ sep = _get_sep(path)
- if isinstance(path, bytes):
-- sep = b'\\'
- curdir = b'.'
- pardir = b'..'
- else:
-- sep = '\\'
- curdir = '.'
- pardir = '..'
-
-@@ -738,13 +751,11 @@ def commonpath(paths):
- raise ValueError('commonpath() arg is an empty sequence')
-
- paths = tuple(map(os.fspath, paths))
-+ sep = _get_sep(paths[0])
-+ altsep = _get_altsep(paths[0])
- if isinstance(paths[0], bytes):
-- sep = b'\\'
-- altsep = b'/'
- curdir = b'.'
- else:
-- sep = '\\'
-- altsep = '/'
- curdir = '.'
-
- try:
-diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
-index 3f3e1f3..1e61545 100644
---- a/Modules/posixmodule.c
-+++ b/Modules/posixmodule.c
-@@ -3759,6 +3759,7 @@ posix_getcwd(int use_bytes)
- return PyErr_SetFromWindowsErr(0);
- }
-
-+ Py_NormalizeSepsW(wbuf2);
- PyObject *resobj = PyUnicode_FromWideChar(wbuf2, len);
- if (wbuf2 != wbuf) {
- PyMem_RawFree(wbuf2);
-@@ -4322,6 +4323,7 @@ os__getfinalpathname_impl(PyObject *module, path_t *path)
- target_path = tmp;
- }
-
-+ Py_NormalizeSepsW(target_path);
- result = PyUnicode_FromWideChar(target_path, result_length);
- if (result && path->narrow) {
- Py_SETREF(result, PyUnicode_EncodeFSDefault(result));
-diff --git a/Python/initconfig.c b/Python/initconfig.c
-index 3caed38..d8f0005 100644
---- a/Python/initconfig.c
-+++ b/Python/initconfig.c
-@@ -136,7 +136,7 @@ static const char usage_6[] =
- "PYTHONDEVMODE: enable the development mode.\n"
- "PYTHONPYCACHEPREFIX: root directory for bytecode cache (pyc) files.\n";
-
--#if defined(MS_WINDOWS)
-+#if defined(_MSC_VER)
- # define PYTHONHOMEHELP "<prefix>\\python{major}{minor}"
- #else
- # define PYTHONHOMEHELP "<prefix>/lib/pythonX.X"
-@@ -1187,7 +1187,7 @@ config_init_program_name(PyConfig *config)
- }
-
- /* Last fall back: hardcoded name */
--#ifdef MS_WINDOWS
-+#ifdef _MSC_VER
- const wchar_t *default_program_name = L"python";
- #else
- const wchar_t *default_program_name = L"python3";
-diff --git a/Python/pathconfig.c b/Python/pathconfig.c
-index 9a30221..267ee4d 100644
---- a/Python/pathconfig.c
-+++ b/Python/pathconfig.c
-@@ -15,6 +15,114 @@
- extern "C" {
- #endif
-
-+#ifdef __MINGW32__
-+#define wcstok wcstok_s
-+#include <windows.h>
-+#endif
-+
-+char
-+Py_GetSepA(const char *name)
-+{
-+ char* msystem = (char*)2; /* So that non Windows use / as sep */
-+ static char sep = '\0';
-+#ifdef _WIN32
-+ /* https://msdn.microsoft.com/en-gb/library/windows/desktop/aa365247%28v=vs.85%29.aspx
-+ * The "\\?\" prefix .. indicate that the path should be passed to the system with minimal
-+ * modification, which means that you cannot use forward slashes to represent path separators
-+ */
-+ if (name != NULL && memcmp(name, "\\\\?\\", sizeof("\\\\?\\") - sizeof(char)) == 0)
-+ {
-+ return '\\';
-+ }
-+#endif
-+ if (sep != '\0')
-+ return sep;
-+#if defined(__MINGW32__)
-+ msystem = Py_GETENV("MSYSTEM");
-+#endif
-+ if (msystem != NULL)
-+ sep = '/';
-+ else
-+ sep = '\\';
-+ return sep;
-+}
-+
-+static char
-+Py_GetAltSepA(const char *name)
-+{
-+ char sep = Py_GetSepA(name);
-+ if (sep == '/')
-+ return '\\';
-+ return '/';
-+}
-+
-+void
-+Py_NormalizeSepsA(char *name)
-+{
-+ char sep = Py_GetSepA(name);
-+ char altsep = Py_GetAltSepA(name);
-+ char* seps;
-+ if (strlen(name) > 1 && name[1] == ':') {
-+ name[0] = toupper(name[0]);
-+ }
-+ seps = strchr(name, altsep);
-+ while(seps) {
-+ *seps = sep;
-+ seps = strchr(seps, altsep);
-+ }
-+}
-+
-+wchar_t
-+Py_GetSepW(const wchar_t *name)
-+{
-+ char* msystem = (char*)2; /* So that non Windows use / as sep */
-+ static wchar_t sep = L'\0';
-+#ifdef _WIN32
-+ /* https://msdn.microsoft.com/en-gb/library/windows/desktop/aa365247%28v=vs.85%29.aspx
-+ * The "\\?\" prefix .. indicate that the path should be passed to the system with minimal
-+ * modification, which means that you cannot use forward slashes to represent path separators
-+ */
-+ if (name != NULL && memcmp(name, L"\\\\?\\", sizeof(L"\\\\?\\") - sizeof(wchar_t)) == 0)
-+ {
-+ return L'\\';
-+ }
-+#endif
-+ if (sep != L'\0')
-+ return sep;
-+#if defined(__MINGW32__)
-+ msystem = Py_GETENV("MSYSTEM");
-+#endif
-+ if (msystem != NULL)
-+ sep = L'/';
-+ else
-+ sep = L'\\';
-+ return sep;
-+}
-+
-+static wchar_t
-+Py_GetAltSepW(const wchar_t *name)
-+{
-+ char sep = Py_GetSepW(name);
-+ if (sep == L'/')
-+ return L'\\';
-+ return L'/';
-+}
-+
-+void
-+Py_NormalizeSepsW(wchar_t *name)
-+{
-+ wchar_t sep = Py_GetSepW(name);
-+ wchar_t altsep = Py_GetAltSepW(name);
-+ wchar_t* seps;
-+ if (wcslen(name) > 1 && name[1] == L':') {
-+ name[0] = towupper(name[0]);
-+ }
-+ seps = wcschr(name, altsep);
-+ while(seps) {
-+ *seps = sep;
-+ seps = wcschr(seps, altsep);
-+ }
-+}
-
- _PyPathConfig _Py_path_config = _PyPathConfig_INIT;
-
-@@ -541,6 +649,7 @@ _Py_SetProgramFullPath(const wchar_t *program_full_path)
- if (_Py_path_config.program_full_path == NULL) {
- path_out_of_memory(__func__);
- }
-+ Py_NormalizeSepsW(_Py_path_config.program_name);
- }
-
-
-diff --git a/Python/traceback.c b/Python/traceback.c
-index a9a9dd9..e8d2786 100644
---- a/Python/traceback.c
-+++ b/Python/traceback.c
-@@ -314,7 +314,7 @@ _Py_FindSourceFile(PyObject *filename, char* namebuf, size_t namelen, PyObject *
- filepath = PyBytes_AS_STRING(filebytes);
-
- /* Search tail of filename in sys.path before giving up */
-- tail = strrchr(filepath, SEP);
-+ tail = strrchr(filepath, Py_GetSepA(filepath));
- if (tail == NULL)
- tail = filepath;
- else
---
-2.32.0
-