Skip to content

Commit

Permalink
Merge distutils fix for setting Py_GIL_DISABLED on Windows
Browse files Browse the repository at this point in the history
  • Loading branch information
lysnikolaou committed Nov 29, 2024
1 parent 9692cde commit b6d1531
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 1 deletion.
2 changes: 2 additions & 0 deletions newsfragments/4662.bugfix.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Merged with pypa/distutils@49e362c, including fix for setting Py_GIL_DISABLED
on Windows in pypa/distutils#310.
9 changes: 8 additions & 1 deletion setuptools/_distutils/command/build_ext.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
)
from ..extension import Extension
from ..sysconfig import customize_compiler, get_config_h_filename, get_python_version
from ..util import get_platform, is_mingw
from ..util import get_platform, is_mingw, is_freethreaded

# An extension name is just a dot-separated list of Python NAMEs (ie.
# the same as a fully-qualified module name).
Expand Down Expand Up @@ -333,6 +333,13 @@ def run(self): # noqa: C901
if os.name == 'nt' and self.plat_name != get_platform():
self.compiler.initialize(self.plat_name)

# The official Windows free threaded Python installer doesn't set
# Py_GIL_DISABLED because its pyconfig.h is shared with the
# default build, so we need to define it here
# (see pypa/setuptools#4662).
if os.name == 'nt' and is_freethreaded():
self.compiler.define_macro('Py_GIL_DISABLED', '1')

# And make sure that any compile/link-related options (which might
# come from the command-line or from the setup script) are set in
# that CCompiler object -- that way, they automatically apply to
Expand Down
4 changes: 4 additions & 0 deletions setuptools/_distutils/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -503,3 +503,7 @@ def is_mingw():
get_platform() starts with 'mingw'.
"""
return sys.platform == 'win32' and get_platform().startswith('mingw')

def is_freethreaded():
"""Return True if the Python interpreter is built with free threading support."""
return bool(sysconfig.get_config_var('Py_GIL_DISABLED'))

0 comments on commit b6d1531

Please sign in to comment.