Skip to content

Commit 49f43ae

Browse files
committed
pythongh-133779: Revert Windows generation of pyconfig.h and go back to a static header.
This means that extension builders will need to specify Py_GIL_DISABLED if they want to link to the free-threaded builds.
1 parent fc3cddd commit 49f43ae

File tree

6 files changed

+31
-72
lines changed

6 files changed

+31
-72
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
Reverts the change to generate different :file:`pyconfig.h` files based on
2+
compiler settings, as it was frequently causing extension builds to break.
3+
In particular, the ``Py_GIL_DISABLED`` preprocessor variable must now always
4+
be defined explicitly when compiling for the experimental free-threaded
5+
runtime. The :func:`sysconfig.get_config_var` function can be used to
6+
determine whether the current runtime was compiled with that flag or not.

PC/pyconfig.h.in renamed to PC/pyconfig.h

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -99,12 +99,17 @@ WIN32 is still required for the locale module.
9999
# define Py_DEBUG 1
100100
#endif
101101

102-
/* Define to 1 if you want to disable the GIL */
103-
/* Uncomment the definition for free-threaded builds, or define it manually
104-
* when compiling extension modules. Note that we test with #ifdef, so
105-
* defining as 0 will still disable the GIL. */
106-
#ifndef Py_GIL_DISABLED
107-
/* #define Py_GIL_DISABLED 1 */
102+
/* Define to 1 when compiling for experimental free-threaded builds */
103+
#ifdef Py_GIL_DISABLED
104+
/* We undefine if it was set to zero because all later checks are #ifdef.
105+
* Note that non-Windows builds do not do this, and so every effort should
106+
* be made to avoid defining the variable at all when not desired. However,
107+
* sysconfig.get_config_val always returns a 1 or a 0, and so it seems likely
108+
* that a build backend will define it with the value.
109+
*/
110+
#if Py_GIL_DISABLED == 0
111+
#undef Py_GIL_DISABLED
112+
#endif
108113
#endif
109114

110115
/* Compiler specific defines */

PCbuild/_freeze_module.vcxproj

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@
276276
<ClCompile Include="..\Python\uniqueid.c" />
277277
</ItemGroup>
278278
<ItemGroup>
279-
<ClInclude Include="..\PC\pyconfig.h.in" />
279+
<ClInclude Include="..\PC\pyconfig.h" />
280280
</ItemGroup>
281281
<ItemGroup>
282282
<!-- BEGIN frozen modules -->
@@ -436,31 +436,6 @@
436436
<ImportGroup Label="ExtensionTargets">
437437
</ImportGroup>
438438

439-
<!-- Direct copy from pythoncore.vcxproj, but this one is only used for our
440-
own build. All other extension modules will use the copy that pythoncore
441-
generates. -->
442-
<Target Name="_UpdatePyconfig" BeforeTargets="PrepareForBuild">
443-
<MakeDir Directories="$(IntDir)" Condition="!Exists($(IntDir))" />
444-
<ItemGroup>
445-
<PyConfigH Remove="@(PyConfigH)" />
446-
<PyConfigH Include="@(ClInclude)" Condition="'%(Filename)%(Extension)' == 'pyconfig.h.in'" />
447-
</ItemGroup>
448-
<Error Text="Did not find pyconfig.h" Condition="@(ClInclude) == ''" />
449-
<PropertyGroup>
450-
<PyConfigH>@(PyConfigH->'%(FullPath)', ';')</PyConfigH>
451-
<PyConfigHText>$([System.IO.File]::ReadAllText($(PyConfigH)))</PyConfigHText>
452-
<OldPyConfigH Condition="Exists('$(IntDir)pyconfig.h')">$([System.IO.File]::ReadAllText('$(IntDir)pyconfig.h'))</OldPyConfigH>
453-
</PropertyGroup>
454-
<PropertyGroup Condition="$(DisableGil) == 'true'">
455-
<PyConfigHText>$(PyConfigHText.Replace('/* #define Py_GIL_DISABLED 1 */', '#define Py_GIL_DISABLED 1'))</PyConfigHText>
456-
</PropertyGroup>
457-
<Message Text="Updating pyconfig.h" Condition="$(PyConfigHText.TrimEnd()) != $(OldPyConfigH.TrimEnd())" />
458-
<WriteLinesToFile File="$(IntDir)pyconfig.h"
459-
Lines="$(PyConfigHText)"
460-
Overwrite="true"
461-
Condition="$(PyConfigHText.TrimEnd()) != $(OldPyConfigH.TrimEnd())" />
462-
</Target>
463-
464439
<Target Name="_RebuildGetPath" AfterTargets="_RebuildFrozen" Condition="$(Configuration) != 'PGUpdate'">
465440
<Exec Command='"$(TargetPath)" "%(GetPath.ModName)" "%(GetPath.FullPath)" "%(GetPath.IntFile)"' />
466441

PCbuild/pyproject.props

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,9 @@
1010
<Py_IntDir Condition="'$(Py_IntDir)' == ''">$(MSBuildThisFileDirectory)obj\</Py_IntDir>
1111
<IntDir>$(Py_IntDir)\$(MajorVersionNumber)$(MinorVersionNumber)$(ArchName)_$(Configuration)\$(ProjectName)\</IntDir>
1212
<IntDir>$(IntDir.Replace(`\\`, `\`))</IntDir>
13-
<!-- pyconfig.h is updated by pythoncore.vcxproj, so it's always in pythoncore's IntDir -->
14-
<GeneratedPyConfigDir>$(Py_IntDir)\$(MajorVersionNumber)$(MinorVersionNumber)$(ArchName)_$(Configuration)\pythoncore\</GeneratedPyConfigDir>
1513
<GeneratedFrozenModulesDir>$(Py_IntDir)\$(MajorVersionNumber)$(MinorVersionNumber)_frozen\</GeneratedFrozenModulesDir>
1614
<GeneratedZlibNgDir>$(Py_IntDir)\$(MajorVersionNumber)$(MinorVersionNumber)$(ArchName)_$(Configuration)\zlib-ng\</GeneratedZlibNgDir>
15+
<GeneratedJitStencilsDir>$(Py_IntDir)\$(MajorVersionNumber)$(MinorVersionNumber)_$(Configuration)</GeneratedJitStencilsDir>
1716
<TargetName Condition="'$(TargetName)' == ''">$(ProjectName)</TargetName>
1817
<TargetName>$(TargetName)$(PyDebugExt)</TargetName>
1918
<GenerateManifest>false</GenerateManifest>
@@ -49,11 +48,12 @@
4948
<_PlatformPreprocessorDefinition Condition="$(Platform) == 'x64'">_WIN64;</_PlatformPreprocessorDefinition>
5049
<_PlatformPreprocessorDefinition Condition="$(Platform) == 'x64' and $(PlatformToolset) != 'ClangCL'">_M_X64;$(_PlatformPreprocessorDefinition)</_PlatformPreprocessorDefinition>
5150
<_Py3NamePreprocessorDefinition>PY3_DLLNAME=L"$(Py3DllName)$(PyDebugExt)";</_Py3NamePreprocessorDefinition>
51+
<_FreeThreadedPreprocessorDefinition Condition="$(DisableGil) == 'true'">Py_GIL_DISABLED=1;</_FreeThreadedPreprocessorDefinition>
5252
</PropertyGroup>
5353
<ItemDefinitionGroup>
5454
<ClCompile>
55-
<AdditionalIncludeDirectories>$(PySourcePath)Include;$(PySourcePath)Include\internal;$(PySourcePath)Include\internal\mimalloc;$(GeneratedPyConfigDir);$(PySourcePath)PC;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
56-
<PreprocessorDefinitions>WIN32;$(_Py3NamePreprocessorDefinition);$(_PlatformPreprocessorDefinition)$(_DebugPreprocessorDefinition)$(_PyStatsPreprocessorDefinition)$(_PydPreprocessorDefinition)%(PreprocessorDefinitions)</PreprocessorDefinitions>
55+
<AdditionalIncludeDirectories>$(PySourcePath)Include;$(PySourcePath)Include\internal;$(PySourcePath)Include\internal\mimalloc;$(PySourcePath)PC;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
56+
<PreprocessorDefinitions>WIN32;$(_Py3NamePreprocessorDefinition)$(_PlatformPreprocessorDefinition)$(_DebugPreprocessorDefinition)$(_PyStatsPreprocessorDefinition)$(_PydPreprocessorDefinition)$(_FreeThreadedPreprocessorDefinition)%(PreprocessorDefinitions)</PreprocessorDefinitions>
5757
<PreprocessorDefinitions Condition="'$(SupportPGO)' and ($(Configuration) == 'PGInstrument' or $(Configuration) == 'PGUpdate')">_Py_USING_PGO=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
5858

5959
<Optimization>MaxSpeed</Optimization>

PCbuild/pythoncore.vcxproj

Lines changed: 2 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@
102102
<AdditionalOptions>/Zm200 %(AdditionalOptions)</AdditionalOptions>
103103
<AdditionalIncludeDirectories>$(PySourcePath)Modules\_hacl;$(PySourcePath)Modules\_hacl\include;$(PySourcePath)Python;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
104104
<AdditionalIncludeDirectories Condition="$(IncludeExternals)">$(zlibNgDir);$(GeneratedZlibNgDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
105+
<AdditionalIncludeDirectories Condition="'$(UseJIT)' == 'true'">$(GeneratedJitStencilsDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
105106
<PreprocessorDefinitions>_USRDLL;Py_BUILD_CORE;Py_BUILD_CORE_BUILTIN;Py_ENABLE_SHARED;MS_DLL_ID="$(SysWinVer)";ZLIB_COMPAT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
106107
<PreprocessorDefinitions Condition="$(IncludeExternals)">_Py_HAVE_ZLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
107108
<PreprocessorDefinitions Condition="'$(UseJIT)' == 'true'">_Py_JIT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@@ -409,7 +410,7 @@
409410
<ClInclude Include="..\Parser\string_parser.h" />
410411
<ClInclude Include="..\Parser\pegen.h" />
411412
<ClInclude Include="..\PC\errmap.h" />
412-
<ClInclude Include="..\PC\pyconfig.h.in" />
413+
<ClInclude Include="..\PC\pyconfig.h" />
413414
<ClInclude Include="..\Python\condvar.h" />
414415
<ClInclude Include="..\Python\stdlib_module_names.h" />
415416
<ClInclude Include="..\Python\thread_nt.h" />
@@ -688,34 +689,6 @@
688689
</ImportGroup>
689690
<Target Name="_TriggerRegen" BeforeTargets="PrepareForBuild" DependsOnTargets="Regen" />
690691

691-
<Target Name="_UpdatePyconfig" BeforeTargets="PrepareForBuild">
692-
<MakeDir Directories="$(IntDir)" Condition="!Exists($(IntDir))" />
693-
<ItemGroup>
694-
<PyConfigH Remove="@(PyConfigH)" />
695-
<PyConfigH Include="@(ClInclude)" Condition="'%(Filename)%(Extension)' == 'pyconfig.h.in'" />
696-
</ItemGroup>
697-
<Error Text="Did not find pyconfig.h" Condition="@(ClInclude) == ''" />
698-
<PropertyGroup>
699-
<PyConfigH>@(PyConfigH->'%(FullPath)', ';')</PyConfigH>
700-
<PyConfigHText>$([System.IO.File]::ReadAllText($(PyConfigH)))</PyConfigHText>
701-
<OldPyConfigH Condition="Exists('$(IntDir)pyconfig.h')">$([System.IO.File]::ReadAllText('$(IntDir)pyconfig.h'))</OldPyConfigH>
702-
</PropertyGroup>
703-
<PropertyGroup Condition="$(DisableGil) == 'true'">
704-
<PyConfigHText>$(PyConfigHText.Replace('/* #define Py_GIL_DISABLED 1 */', '#define Py_GIL_DISABLED 1'))</PyConfigHText>
705-
</PropertyGroup>
706-
<Message Text="Updating pyconfig.h" Condition="$(PyConfigHText.TrimEnd()) != $(OldPyConfigH.TrimEnd())" />
707-
<WriteLinesToFile File="$(IntDir)pyconfig.h"
708-
Lines="$(PyConfigHText)"
709-
Overwrite="true"
710-
Condition="$(PyConfigHText.TrimEnd()) != $(OldPyConfigH.TrimEnd())" />
711-
</Target>
712-
<Target Name="_CopyPyconfig" Inputs="$(IntDir)pyconfig.h" Outputs="$(OutDir)pyconfig.h" AfterTargets="Build" DependsOnTargets="_UpdatePyconfig">
713-
<Copy SourceFiles="$(IntDir)pyconfig.h" DestinationFolder="$(OutDir)" />
714-
</Target>
715-
<Target Name="_CleanPyconfig" AfterTargets="Clean">
716-
<Delete Files="$(IntDir)pyconfig.h;$(OutDir)pyconfig.h" />
717-
</Target>
718-
719692
<Target Name="_GetBuildInfo" BeforeTargets="PrepareForBuild">
720693
<PropertyGroup>
721694
<GIT Condition="$(GIT) == ''">git</GIT>

PCbuild/regen.targets

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,12 @@
2929
<_KeywordSources Include="$(PySourcePath)Grammar\python.gram;$(PySourcePath)Grammar\Tokens" />
3030
<_KeywordOutputs Include="$(PySourcePath)Lib\keyword.py" />
3131
<!-- Taken from _Target._compute_digest in Tools\jit\_targets.py: -->
32-
<_JITSources Include="$(PySourcePath)Python\executor_cases.c.h;$(GeneratedPyConfigDir)pyconfig.h;$(PySourcePath)Tools\jit\**"/>
32+
<_JITSources Include="$(PySourcePath)Python\executor_cases.c.h;$(PySourcePath)PC\pyconfig.h;$(PySourcePath)Tools\jit\**"/>
3333
<!-- Need to explicitly enumerate these, since globbing doesn't work for missing outputs: -->
34-
<_JITOutputs Include="$(GeneratedPyConfigDir)jit_stencils.h"/>
35-
<_JITOutputs Include="$(GeneratedPyConfigDir)jit_stencils-aarch64-pc-windows-msvc.h" Condition="$(Platform) == 'ARM64'"/>
36-
<_JITOutputs Include="$(GeneratedPyConfigDir)jit_stencils-i686-pc-windows-msvc.h" Condition="$(Platform) == 'Win32'"/>
37-
<_JITOutputs Include="$(GeneratedPyConfigDir)jit_stencils-x86_64-pc-windows-msvc.h" Condition="$(Platform) == 'x64'"/>
34+
<_JITOutputs Include="$(GeneratedJitStencilsDir)jit_stencils.h"/>
35+
<_JITOutputs Include="$(GeneratedJitStencilsDir)jit_stencils-aarch64-pc-windows-msvc.h" Condition="$(Platform) == 'ARM64'"/>
36+
<_JITOutputs Include="$(GeneratedJitStencilsDir)jit_stencils-i686-pc-windows-msvc.h" Condition="$(Platform) == 'Win32'"/>
37+
<_JITOutputs Include="$(GeneratedJitStencilsDir)jit_stencils-x86_64-pc-windows-msvc.h" Condition="$(Platform) == 'x64'"/>
3838
<_CasesSources Include="$(PySourcePath)Python\bytecodes.c;$(PySourcePath)Python\optimizer_bytecodes.c;"/>
3939
<_CasesOutputs Include="$(PySourcePath)Python\generated_cases.c.h;$(PySourcePath)Include\opcode_ids.h;$(PySourcePath)Include\internal\pycore_uop_ids.h;$(PySourcePath)Python\opcode_targets.h;$(PySourcePath)Include\internal\pycore_opcode_metadata.h;$(PySourcePath)Include\internal\pycore_uop_metadata.h;$(PySourcePath)Python\optimizer_cases.c.h;$(PySourcePath)Lib\_opcode_metadata.py"/>
4040
<_SbomSources Include="$(PySourcePath)PCbuild\get_externals.bat" />
@@ -116,7 +116,7 @@
116116

117117
<Target Name="_RegenJIT"
118118
Condition="'$(UseJIT)' == 'true'"
119-
DependsOnTargets="_UpdatePyconfig;FindPythonForBuild"
119+
DependsOnTargets="FindPythonForBuild"
120120
Inputs="@(_JITSources)"
121121
Outputs="@(_JITOutputs)">
122122
<PropertyGroup>
@@ -126,7 +126,7 @@
126126
<JITArgs Condition="$(Configuration) == 'Debug'">$(JITArgs) --debug</JITArgs>
127127
</PropertyGroup>
128128
<Exec Command='$(PythonForBuild) "$(PySourcePath)Tools\jit\build.py" $(JITArgs)'
129-
WorkingDirectory="$(GeneratedPyConfigDir)"/>
129+
WorkingDirectory="$(GeneratedJitStencilsDir)"/>
130130
</Target>
131131
<Target Name="_CleanJIT" AfterTargets="Clean">
132132
<Delete Files="@(_JITOutputs)"/>

0 commit comments

Comments
 (0)