From d4019f0724c38a0b3bf7c29a09138e4e9e78e268 Mon Sep 17 00:00:00 2001 From: Alexey Pavlov Date: Thu, 28 Aug 2025 12:12:42 +0300 Subject: [PATCH 118/N] Remove _POSIX_BUILD variable --- Lib/compileall.py | 2 +- Lib/ctypes/__init__.py | 4 +-- Lib/site.py | 27 ++++++++++---------- Lib/ssl.py | 4 +-- Lib/sysconfig/__init__.py | 34 +++++++++++-------------- Lib/test/test_importlib/test_windows.py | 2 +- Lib/test/test_sysconfig.py | 6 ++--- Lib/venv/__init__.py | 6 ++--- 8 files changed, 40 insertions(+), 45 deletions(-) diff --git a/Lib/compileall.py b/Lib/compileall.py index 8e02d02..c9de7e4 100644 --- a/Lib/compileall.py +++ b/Lib/compileall.py @@ -38,7 +38,7 @@ def _walk_dir(dir, maxlevels, quiet=0): if name == '__pycache__': continue fullname = os.path.join(dir, name) - if sys.platform == "win32" and sys.version.find("GCC") >= 0: + if sys.version.find("MINGW") >= 0: fullname = fullname.replace('\\','/') if not os.path.isdir(fullname): yield fullname diff --git a/Lib/ctypes/__init__.py b/Lib/ctypes/__init__.py index a17c9e1..108348e 100644 --- a/Lib/ctypes/__init__.py +++ b/Lib/ctypes/__init__.py @@ -475,10 +475,10 @@ class LibraryLoader(object): cdll = LibraryLoader(CDLL) pydll = LibraryLoader(PyDLL) -if _os.name == "nt" and _sys.version.find('GCC') >= 0: +if _os.name == "nt" and _sys.version.find('MINGW') >= 0: pythonapi = PyDLL("libpython%d.%d%s.dll" % (_sys.version_info[:2] + (_sys.abiflags,)), None) elif _os.name == "nt": - pythonapi = PyDLL("python dll", None, _sys.dllhandle) + pythonapi = PyDLL("python.dll", None, _sys.dllhandle) elif _sys.platform == "android": pythonapi = PyDLL("libpython%d.%d.so" % _sys.version_info[:2]) elif _sys.platform == "cygwin": diff --git a/Lib/site.py b/Lib/site.py index a9e96b7..c027443 100644 --- a/Lib/site.py +++ b/Lib/site.py @@ -90,12 +90,6 @@ USER_SITE = None USER_BASE = None -# Same as defined in Lib/sysconfig.py -# redeclared since sysconfig is large for site. -# GCC[mingw*] use posix build system -_POSIX_BUILD = os.name == 'posix' or \ - (os.name == "nt" and 'GCC' in sys.version) - def _trace(message): if sys.flags.verbose: print(message, file=sys.stderr) @@ -305,7 +299,7 @@ def _getuserbase(): def joinuser(*args): return os.path.expanduser(os.path.join(*args)) - if os.name == "nt" and not _POSIX_BUILD: + if os.name == "nt" and not 'mingw' in sys.version.lower(): base = os.environ.get("APPDATA") or "~" return joinuser(base, _get_implementation()) @@ -318,7 +312,7 @@ def _getuserbase(): # Copy of sysconfig.get_platform() but only for MinGW def _get_platform(): if os.name == 'nt': - if 'gcc' in sys.version.lower(): + if 'mingw' in sys.version.lower(): platform = 'mingw' if 'amd64' in sys.version.lower(): platform += '_x86_64' @@ -340,6 +334,12 @@ def _get_platform(): platform += "_gnu" return platform + if 'amd64' in sys.version.lower(): + return 'win-amd64' + if '(arm)' in sys.version.lower(): + return 'win-arm32' + if '(arm64)' in sys.version.lower(): + return 'win-arm64' return sys.platform # Same to sysconfig.get_path('purelib', os.name+'_user') @@ -353,10 +353,11 @@ def _get_path(userbase): implementation = _get_implementation() implementation_lower = implementation.lower() if os.name == 'nt': - if not _POSIX_BUILD: - ver_nodot = sys.winver.replace('.', '') - return f'{userbase}\\{implementation}{ver_nodot}\\site-packages' - return f'{userbase}/lib/python{version[0]}.{version[1]}-{_get_platform()}/site-packages' + if 'mingw' in sys.version.lower(): + return f'{userbase}/lib/{implementation_lower}{version[0]}.{version[1]}-{_get_platform()}/site-packages' + + ver_nodot = sys.winver.replace('.', '') + return f'{userbase}\\{implementation}{ver_nodot}\\site-packages' if sys.platform == 'darwin' and sys._framework: return f'{userbase}/lib/{implementation_lower}/site-packages' @@ -433,7 +434,7 @@ def getsitepackages(prefixes=None): abi_thread = 't' else: abi_thread = '' - if _POSIX_BUILD: + if os.name == 'posix' or (os.name == "nt" and 'mingw' in sys.version.lower()): libdirs = [sys.platlibdir] if sys.platlibdir != "lib": libdirs.append("lib") diff --git a/Lib/ssl.py b/Lib/ssl.py index 67119b2..cc5f11a 100644 --- a/Lib/ssl.py +++ b/Lib/ssl.py @@ -254,7 +254,7 @@ class _TLSMessageType: CHANGE_CIPHER_SPEC = 0x0101 -if sys.platform == "win32" and sys.version.find("GCC") == -1: +if sys.platform == "win32" and sys.version.find("MINGW") == -1: from _ssl import enum_certificates, enum_crls from socket import socket, SOCK_STREAM, create_connection @@ -528,7 +528,7 @@ class SSLContext(_SSLContext): def load_default_certs(self, purpose=Purpose.SERVER_AUTH): if not isinstance(purpose, _ASN1Object): raise TypeError(purpose) - if sys.platform == "win32" and sys.version.find("GCC") == -1: + if sys.platform == "win32" and sys.version.find("MINGW") == -1: for storename in self._windows_cert_stores: self._load_windows_store_certs(storename, purpose) self.set_default_verify_paths() diff --git a/Lib/sysconfig/__init__.py b/Lib/sysconfig/__init__.py index 84f130b..24900b1 100644 --- a/Lib/sysconfig/__init__.py +++ b/Lib/sysconfig/__init__.py @@ -49,12 +49,12 @@ _INSTALL_SCHEMES = { 'data': '{base}', }, 'nt': { - 'stdlib': '{installed_base}/lib/python{py_version_short}', - 'platstdlib': '{base}/lib/python{py_version_short}', - 'purelib': '{base}/lib/python{py_version_short}/site-packages', - 'platlib': '{base}/lib/python{py_version_short}/site-packages', - 'include': '{installed_base}/include/python{py_version_short}', - 'platinclude': '{installed_base}/include/python{py_version_short}', + 'stdlib': '{installed_base}/lib/{implementation_lower}{py_version_short}', + 'platstdlib': '{base}/lib/{implementation_lower}{py_version_short}', + 'purelib': '{base}/lib/{implementation_lower}{py_version_short}/site-packages', + 'platlib': '{base}/lib/{implementation_lower}{py_version_short}/site-packages', + 'include': '{installed_base}/include/{implementation_lower}{py_version_short}', + 'platinclude': '{installed_base}/include/{implementation_lower}{py_version_short}', 'scripts': '{base}/bin', 'data': '{base}', }, @@ -100,12 +100,8 @@ _INSTALL_SCHEMES = { }, } -# GCC[mingw*] use posix build system -_POSIX_BUILD = os.name == 'posix' or \ - (os.name == "nt" and 'GCC' in sys.version) - # For the OS-native venv scheme, we essentially provide an alias: -if os.name == 'nt' and not _POSIX_BUILD: +if os.name == 'nt' and not 'mingw' in sys.version.lower(): _INSTALL_SCHEMES['venv'] = _INSTALL_SCHEMES['nt_venv'] else: _INSTALL_SCHEMES['venv'] = _INSTALL_SCHEMES['posix_venv'] @@ -127,7 +123,7 @@ def _getuserbase(): def joinuser(*args): return os.path.expanduser(os.path.join(*args)) - if os.name == "nt" and not _POSIX_BUILD: + if os.name == "nt" and not 'mingw' in sys.version.lower(): base = os.environ.get("APPDATA") or "~" return joinuser(base, _get_implementation()) @@ -289,7 +285,7 @@ def _expand_vars(scheme, vars): def _get_preferred_schemes(): - if os.name == 'nt' and not _POSIX_BUILD: + if os.name == 'nt' and not 'mingw' in sys.version.lower(): return { 'prefix': 'nt', 'home': 'posix_home', @@ -430,7 +426,7 @@ def parse_config_h(fp, vars=None): def get_config_h_filename(): """Return the path of pyconfig.h.""" if _PYTHON_BUILD: - if os.name == "nt" and not _POSIX_BUILD: + if os.name == "nt" and not 'mingw' in sys.version.lower(): inc_dir = os.path.dirname(sys._base_executable) else: inc_dir = _PROJECT_BASE @@ -499,15 +495,15 @@ def _init_config_vars(): _CONFIG_VARS['py_version_nodot_plat'] = sys.winver.replace('.', '') except AttributeError: _CONFIG_VARS['py_version_nodot_plat'] = '' - if os.name == 'nt' and _POSIX_BUILD: + if os.name == 'nt' and 'mingw' in sys.version.lower(): _CONFIG_VARS['py_version_short_plat'] = f'{_PY_VERSION_SHORT}-{get_platform()}' else: _CONFIG_VARS['py_version_short_plat'] = _PY_VERSION_SHORT - if os.name == 'nt' and not _POSIX_BUILD: + if os.name == 'nt' and not 'mingw' in sys.version.lower(): _init_non_posix(_CONFIG_VARS) _CONFIG_VARS['VPATH'] = sys._vpath - if _POSIX_BUILD: + if os.name == 'posix' or 'mingw' in sys.version.lower(): _init_posix(_CONFIG_VARS) if _HAS_USER_BASE: # Setting 'userbase' is done below the call to the @@ -520,7 +516,7 @@ def _init_config_vars(): # Always convert srcdir to an absolute path srcdir = _CONFIG_VARS.get('srcdir', _PROJECT_BASE) - if _POSIX_BUILD: + if os.name == 'posix' or 'mingw' in sys.version.lower(): if _PYTHON_BUILD: # If srcdir is a relative path (typically '.' or '..') # then it should be interpreted relative to the directory @@ -617,7 +613,7 @@ def get_platform(): """ if os.name == 'nt': - if 'gcc' in sys.version.lower(): + if 'mingw' in sys.version.lower(): platform = 'mingw' if 'amd64' in sys.version.lower(): platform += '_x86_64' diff --git a/Lib/test/test_importlib/test_windows.py b/Lib/test/test_importlib/test_windows.py index 03be17b..8d9373a 100644 --- a/Lib/test/test_importlib/test_windows.py +++ b/Lib/test/test_importlib/test_windows.py @@ -25,7 +25,7 @@ def get_platform(): 'arm' : 'win-arm32', } if os.name == 'nt': - if "gcc" in sys.version.lower(): + if "mingw" in sys.version.lower(): platform = "mingw" if "amd64" in sys.version.lower(): platform += "_x86_64" diff --git a/Lib/test/test_sysconfig.py b/Lib/test/test_sysconfig.py index f0dedfe..1f68c6c 100644 --- a/Lib/test/test_sysconfig.py +++ b/Lib/test/test_sysconfig.py @@ -25,7 +25,7 @@ import sysconfig from sysconfig import (get_paths, get_platform, get_config_vars, get_path, get_path_names, _INSTALL_SCHEMES, get_default_scheme, get_scheme_names, get_config_var, - _expand_vars, _get_preferred_schemes, _POSIX_BUILD) + _expand_vars, _get_preferred_schemes) from sysconfig.__main__ import _main, _parse_makefile import _imp import _osx_support @@ -208,7 +208,7 @@ class TestSysConfig(unittest.TestCase): self.assertEqual(libpath, sysconfig.get_path('purelib', scheme='nt_venv', vars=vars)) def test_venv_scheme(self): - if not _POSIX_BUILD and sys.platform == 'win32': + if sys.platform == 'win32' and not 'mingw' in sys.version.lower(): self.assertEqual( sysconfig.get_path('scripts', scheme='venv'), sysconfig.get_path('scripts', scheme='nt_venv') @@ -421,7 +421,7 @@ class TestSysConfig(unittest.TestCase): if HAS_USER_BASE: user_path = get_path(name, 'posix_user') expected = os.path.normpath(global_path.replace(base, user, 1)) - if os.name == 'nt' and _POSIX_BUILD: + if os.name == 'nt' and 'mingw' in sys.version.lower(): expected = expected.replace( f'python{sysconfig.get_python_version()}', f'python{sysconfig.get_python_version()}-{get_platform()}') diff --git a/Lib/venv/__init__.py b/Lib/venv/__init__.py index c4e441b..b2ec522 100644 --- a/Lib/venv/__init__.py +++ b/Lib/venv/__init__.py @@ -13,8 +13,6 @@ import sysconfig import types import shlex -from sysconfig import _POSIX_BUILD - CORE_VENV_DEPS = ('pip',) logger = logging.getLogger(__name__) @@ -378,7 +376,7 @@ class EnvBuilder: } do_copies = True - if self.symlinks and not _POSIX_BUILD: + if self.symlinks and not 'mingw' in sys.version.lower(): do_copies = False # For symlinking, we need all the DLLs to be available alongside # the executables. @@ -414,7 +412,7 @@ class EnvBuilder: except OSError: logger.warning('Unable to copy %r to %r', src, dest) - if _POSIX_BUILD: + if os.name == 'posix' or (os.name == "nt" and 'mingw' in sys.version.lower()): # copy from python/pythonw so the venvlauncher magic in symlink_or_copy triggers copier(os.path.join(dirname, 'python.exe'), os.path.join(binpath, 'python3.exe')) copier(os.path.join(dirname, 'python.exe'), os.path.join(binpath, 'python%d.%d.exe' % sys.version_info[:2]))