gh-119132: Update sys.version to identify free-threaded or not. (gh-119134)

This commit is contained in:
Donghee Na 2024-05-18 15:44:40 -04:00 committed by GitHub
parent 691429702f
commit c141d43937
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 24 additions and 11 deletions

View File

@ -1153,17 +1153,16 @@ def _sys_version(sys_version=None):
if result is not None: if result is not None:
return result return result
sys_version_parser = re.compile(
r'([\w.+]+)\s*' # "version<space>"
r'\(#?([^,]+)' # "(#buildno"
r'(?:,\s*([\w ]*)' # ", builddate"
r'(?:,\s*([\w :]*))?)?\)\s*' # ", buildtime)<space>"
r'\[([^\]]+)\]?', re.ASCII) # "[compiler]"
if sys.platform.startswith('java'): if sys.platform.startswith('java'):
# Jython # Jython
jython_sys_version_parser = re.compile(
r'([\w.+]+)\s*' # "version<space>"
r'\(#?([^,]+)' # "(#buildno"
r'(?:,\s*([\w ]*)' # ", builddate"
r'(?:,\s*([\w :]*))?)?\)\s*' # ", buildtime)<space>"
r'\[([^\]]+)\]?', re.ASCII) # "[compiler]"
name = 'Jython' name = 'Jython'
match = sys_version_parser.match(sys_version) match = jython_sys_version_parser.match(sys_version)
if match is None: if match is None:
raise ValueError( raise ValueError(
'failed to parse Jython sys.version: %s' % 'failed to parse Jython sys.version: %s' %
@ -1190,7 +1189,14 @@ def _sys_version(sys_version=None):
else: else:
# CPython # CPython
match = sys_version_parser.match(sys_version) cpython_sys_version_parser = re.compile(
r'([\w.+]+)\s*' # "version<space>"
r'(?:experimental free-threading build\s+)?' # "free-threading-build<space>"
r'\(#?([^,]+)' # "(#buildno"
r'(?:,\s*([\w ]*)' # ", builddate"
r'(?:,\s*([\w :]*))?)?\)\s*' # ", buildtime)<space>"
r'\[([^\]]+)\]?', re.ASCII) # "[compiler]"
match = cpython_sys_version_parser.match(sys_version)
if match is None: if match is None:
raise ValueError( raise ValueError(
'failed to parse CPython sys.version: %s' % 'failed to parse CPython sys.version: %s' %

View File

@ -0,0 +1,2 @@
Update :data:`sys.version` to identify whether the build is default build or
free-threading build. Patch By Donghee Na.

View File

@ -6,7 +6,7 @@
#include "patchlevel.h" #include "patchlevel.h"
static int initialized = 0; static int initialized = 0;
static char version[250]; static char version[300];
void _Py_InitVersion(void) void _Py_InitVersion(void)
{ {
@ -14,7 +14,12 @@ void _Py_InitVersion(void)
return; return;
} }
initialized = 1; initialized = 1;
PyOS_snprintf(version, sizeof(version), "%.80s (%.80s) %.80s", #ifdef Py_GIL_DISABLED
const char *buildinfo_format = "%.80s experimental free-threading build (%.80s) %.80s";
#else
const char *buildinfo_format = "%.80s (%.80s) %.80s";
#endif
PyOS_snprintf(version, sizeof(version), buildinfo_format,
PY_VERSION, Py_GetBuildInfo(), Py_GetCompiler()); PY_VERSION, Py_GetBuildInfo(), Py_GetCompiler());
} }