Skip to content

Commit 178919c

Browse files
authored
gh-113258: Write frozen modules to the build tree on Windows (GH-113303)
This ensures the source directory is not modified at build time, and different builds (e.g. different versions or GIL vs no-GIL) do not have conflicts.
1 parent 7d01fb4 commit 178919c

File tree

5 files changed

+61
-56
lines changed

5 files changed

+61
-56
lines changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Changed the Windows build to write out generated frozen modules into the
2+
build tree instead of the source tree.

PCbuild/_freeze_module.vcxproj

Lines changed: 49 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -266,117 +266,117 @@
266266
<None Include="..\Lib\importlib\_bootstrap.py">
267267
<ModName>importlib._bootstrap</ModName>
268268
<IntFile>$(IntDir)importlib._bootstrap.g.h</IntFile>
269-
<OutFile>$(PySourcePath)Python\frozen_modules\importlib._bootstrap.h</OutFile>
269+
<OutFile>$(GeneratedFrozenModulesDir)Python\frozen_modules\importlib._bootstrap.h</OutFile>
270270
</None>
271271
<None Include="..\Lib\importlib\_bootstrap_external.py">
272272
<ModName>importlib._bootstrap_external</ModName>
273273
<IntFile>$(IntDir)importlib._bootstrap_external.g.h</IntFile>
274-
<OutFile>$(PySourcePath)Python\frozen_modules\importlib._bootstrap_external.h</OutFile>
274+
<OutFile>$(GeneratedFrozenModulesDir)Python\frozen_modules\importlib._bootstrap_external.h</OutFile>
275275
</None>
276276
<None Include="..\Lib\zipimport.py">
277277
<ModName>zipimport</ModName>
278278
<IntFile>$(IntDir)zipimport.g.h</IntFile>
279-
<OutFile>$(PySourcePath)Python\frozen_modules\zipimport.h</OutFile>
279+
<OutFile>$(GeneratedFrozenModulesDir)Python\frozen_modules\zipimport.h</OutFile>
280280
</None>
281281
<None Include="..\Lib\abc.py">
282282
<ModName>abc</ModName>
283283
<IntFile>$(IntDir)abc.g.h</IntFile>
284-
<OutFile>$(PySourcePath)Python\frozen_modules\abc.h</OutFile>
284+
<OutFile>$(GeneratedFrozenModulesDir)Python\frozen_modules\abc.h</OutFile>
285285
</None>
286286
<None Include="..\Lib\codecs.py">
287287
<ModName>codecs</ModName>
288288
<IntFile>$(IntDir)codecs.g.h</IntFile>
289-
<OutFile>$(PySourcePath)Python\frozen_modules\codecs.h</OutFile>
289+
<OutFile>$(GeneratedFrozenModulesDir)Python\frozen_modules\codecs.h</OutFile>
290290
</None>
291291
<None Include="..\Lib\io.py">
292292
<ModName>io</ModName>
293293
<IntFile>$(IntDir)io.g.h</IntFile>
294-
<OutFile>$(PySourcePath)Python\frozen_modules\io.h</OutFile>
294+
<OutFile>$(GeneratedFrozenModulesDir)Python\frozen_modules\io.h</OutFile>
295295
</None>
296296
<None Include="..\Lib\_collections_abc.py">
297297
<ModName>_collections_abc</ModName>
298298
<IntFile>$(IntDir)_collections_abc.g.h</IntFile>
299-
<OutFile>$(PySourcePath)Python\frozen_modules\_collections_abc.h</OutFile>
299+
<OutFile>$(GeneratedFrozenModulesDir)Python\frozen_modules\_collections_abc.h</OutFile>
300300
</None>
301301
<None Include="..\Lib\_sitebuiltins.py">
302302
<ModName>_sitebuiltins</ModName>
303303
<IntFile>$(IntDir)_sitebuiltins.g.h</IntFile>
304-
<OutFile>$(PySourcePath)Python\frozen_modules\_sitebuiltins.h</OutFile>
304+
<OutFile>$(GeneratedFrozenModulesDir)Python\frozen_modules\_sitebuiltins.h</OutFile>
305305
</None>
306306
<None Include="..\Lib\genericpath.py">
307307
<ModName>genericpath</ModName>
308308
<IntFile>$(IntDir)genericpath.g.h</IntFile>
309-
<OutFile>$(PySourcePath)Python\frozen_modules\genericpath.h</OutFile>
309+
<OutFile>$(GeneratedFrozenModulesDir)Python\frozen_modules\genericpath.h</OutFile>
310310
</None>
311311
<None Include="..\Lib\ntpath.py">
312312
<ModName>ntpath</ModName>
313313
<IntFile>$(IntDir)ntpath.g.h</IntFile>
314-
<OutFile>$(PySourcePath)Python\frozen_modules\ntpath.h</OutFile>
314+
<OutFile>$(GeneratedFrozenModulesDir)Python\frozen_modules\ntpath.h</OutFile>
315315
</None>
316316
<None Include="..\Lib\posixpath.py">
317317
<ModName>posixpath</ModName>
318318
<IntFile>$(IntDir)posixpath.g.h</IntFile>
319-
<OutFile>$(PySourcePath)Python\frozen_modules\posixpath.h</OutFile>
319+
<OutFile>$(GeneratedFrozenModulesDir)Python\frozen_modules\posixpath.h</OutFile>
320320
</None>
321321
<None Include="..\Lib\os.py">
322322
<ModName>os</ModName>
323323
<IntFile>$(IntDir)os.g.h</IntFile>
324-
<OutFile>$(PySourcePath)Python\frozen_modules\os.h</OutFile>
324+
<OutFile>$(GeneratedFrozenModulesDir)Python\frozen_modules\os.h</OutFile>
325325
</None>
326326
<None Include="..\Lib\site.py">
327327
<ModName>site</ModName>
328328
<IntFile>$(IntDir)site.g.h</IntFile>
329-
<OutFile>$(PySourcePath)Python\frozen_modules\site.h</OutFile>
329+
<OutFile>$(GeneratedFrozenModulesDir)Python\frozen_modules\site.h</OutFile>
330330
</None>
331331
<None Include="..\Lib\stat.py">
332332
<ModName>stat</ModName>
333333
<IntFile>$(IntDir)stat.g.h</IntFile>
334-
<OutFile>$(PySourcePath)Python\frozen_modules\stat.h</OutFile>
334+
<OutFile>$(GeneratedFrozenModulesDir)Python\frozen_modules\stat.h</OutFile>
335335
</None>
336336
<None Include="..\Lib\importlib\util.py">
337337
<ModName>importlib.util</ModName>
338338
<IntFile>$(IntDir)importlib.util.g.h</IntFile>
339-
<OutFile>$(PySourcePath)Python\frozen_modules\importlib.util.h</OutFile>
339+
<OutFile>$(GeneratedFrozenModulesDir)Python\frozen_modules\importlib.util.h</OutFile>
340340
</None>
341341
<None Include="..\Lib\importlib\machinery.py">
342342
<ModName>importlib.machinery</ModName>
343343
<IntFile>$(IntDir)importlib.machinery.g.h</IntFile>
344-
<OutFile>$(PySourcePath)Python\frozen_modules\importlib.machinery.h</OutFile>
344+
<OutFile>$(GeneratedFrozenModulesDir)Python\frozen_modules\importlib.machinery.h</OutFile>
345345
</None>
346346
<None Include="..\Lib\runpy.py">
347347
<ModName>runpy</ModName>
348348
<IntFile>$(IntDir)runpy.g.h</IntFile>
349-
<OutFile>$(PySourcePath)Python\frozen_modules\runpy.h</OutFile>
349+
<OutFile>$(GeneratedFrozenModulesDir)Python\frozen_modules\runpy.h</OutFile>
350350
</None>
351351
<None Include="..\Lib\__hello__.py">
352352
<ModName>__hello__</ModName>
353353
<IntFile>$(IntDir)__hello__.g.h</IntFile>
354-
<OutFile>$(PySourcePath)Python\frozen_modules\__hello__.h</OutFile>
354+
<OutFile>$(GeneratedFrozenModulesDir)Python\frozen_modules\__hello__.h</OutFile>
355355
</None>
356356
<None Include="..\Lib\__phello__\__init__.py">
357357
<ModName>__phello__</ModName>
358358
<IntFile>$(IntDir)__phello__.g.h</IntFile>
359-
<OutFile>$(PySourcePath)Python\frozen_modules\__phello__.h</OutFile>
359+
<OutFile>$(GeneratedFrozenModulesDir)Python\frozen_modules\__phello__.h</OutFile>
360360
</None>
361361
<None Include="..\Lib\__phello__\ham\__init__.py">
362362
<ModName>__phello__.ham</ModName>
363363
<IntFile>$(IntDir)__phello__.ham.g.h</IntFile>
364-
<OutFile>$(PySourcePath)Python\frozen_modules\__phello__.ham.h</OutFile>
364+
<OutFile>$(GeneratedFrozenModulesDir)Python\frozen_modules\__phello__.ham.h</OutFile>
365365
</None>
366366
<None Include="..\Lib\__phello__\ham\eggs.py">
367367
<ModName>__phello__.ham.eggs</ModName>
368368
<IntFile>$(IntDir)__phello__.ham.eggs.g.h</IntFile>
369-
<OutFile>$(PySourcePath)Python\frozen_modules\__phello__.ham.eggs.h</OutFile>
369+
<OutFile>$(GeneratedFrozenModulesDir)Python\frozen_modules\__phello__.ham.eggs.h</OutFile>
370370
</None>
371371
<None Include="..\Lib\__phello__\spam.py">
372372
<ModName>__phello__.spam</ModName>
373373
<IntFile>$(IntDir)__phello__.spam.g.h</IntFile>
374-
<OutFile>$(PySourcePath)Python\frozen_modules\__phello__.spam.h</OutFile>
374+
<OutFile>$(GeneratedFrozenModulesDir)Python\frozen_modules\__phello__.spam.h</OutFile>
375375
</None>
376376
<None Include="..\Tools\freeze\flag.py">
377377
<ModName>frozen_only</ModName>
378378
<IntFile>$(IntDir)frozen_only.g.h</IntFile>
379-
<OutFile>$(PySourcePath)Python\frozen_modules\frozen_only.h</OutFile>
379+
<OutFile>$(GeneratedFrozenModulesDir)Python\frozen_modules\frozen_only.h</OutFile>
380380
</None>
381381
<!-- END frozen modules -->
382382
</ItemGroup>
@@ -385,34 +385,34 @@
385385
<GetPath Include="..\Modules\getpath.py">
386386
<ModName>getpath</ModName>
387387
<IntFile>$(IntDir)getpath.g.h</IntFile>
388-
<OutFile>$(PySourcePath)Python\frozen_modules\getpath.h</OutFile>
388+
<OutFile>$(GeneratedFrozenModulesDir)Python\frozen_modules\getpath.h</OutFile>
389389
</GetPath>
390390
</ItemGroup>
391391
<ItemGroup>
392392
<!-- BEGIN freeze mappings -->
393-
<FrozenModule Include="$(PySourcePath)\Python\frozen_modules\importlib._bootstrap.h" FrozenId="importlib._bootstrap" />
394-
<FrozenModule Include="$(PySourcePath)\Python\frozen_modules\importlib._bootstrap_external.h" FrozenId="importlib._bootstrap_external" />
395-
<FrozenModule Include="$(PySourcePath)\Python\frozen_modules\zipimport.h" FrozenId="zipimport" />
396-
<FrozenModule Include="$(PySourcePath)\Python\frozen_modules\abc.h" FrozenId="abc" />
397-
<FrozenModule Include="$(PySourcePath)\Python\frozen_modules\codecs.h" FrozenId="codecs" />
398-
<FrozenModule Include="$(PySourcePath)\Python\frozen_modules\io.h" FrozenId="io" />
399-
<FrozenModule Include="$(PySourcePath)\Python\frozen_modules\_collections_abc.h" FrozenId="_collections_abc" />
400-
<FrozenModule Include="$(PySourcePath)\Python\frozen_modules\_sitebuiltins.h" FrozenId="_sitebuiltins" />
401-
<FrozenModule Include="$(PySourcePath)\Python\frozen_modules\genericpath.h" FrozenId="genericpath" />
402-
<FrozenModule Include="$(PySourcePath)\Python\frozen_modules\ntpath.h" FrozenId="ntpath" />
403-
<FrozenModule Include="$(PySourcePath)\Python\frozen_modules\posixpath.h" FrozenId="posixpath" />
404-
<FrozenModule Include="$(PySourcePath)\Python\frozen_modules\os.h" FrozenId="os" />
405-
<FrozenModule Include="$(PySourcePath)\Python\frozen_modules\site.h" FrozenId="site" />
406-
<FrozenModule Include="$(PySourcePath)\Python\frozen_modules\stat.h" FrozenId="stat" />
407-
<FrozenModule Include="$(PySourcePath)\Python\frozen_modules\importlib.util.h" FrozenId="importlib.util" />
408-
<FrozenModule Include="$(PySourcePath)\Python\frozen_modules\importlib.machinery.h" FrozenId="importlib.machinery" />
409-
<FrozenModule Include="$(PySourcePath)\Python\frozen_modules\runpy.h" FrozenId="runpy" />
410-
<FrozenModule Include="$(PySourcePath)\Python\frozen_modules\__hello__.h" FrozenId="__hello__" />
411-
<FrozenModule Include="$(PySourcePath)\Python\frozen_modules\__phello__.h" FrozenId="__phello__" />
412-
<FrozenModule Include="$(PySourcePath)\Python\frozen_modules\__phello__.ham.h" FrozenId="__phello__.ham" />
413-
<FrozenModule Include="$(PySourcePath)\Python\frozen_modules\__phello__.ham.eggs.h" FrozenId="__phello__.ham.eggs" />
414-
<FrozenModule Include="$(PySourcePath)\Python\frozen_modules\__phello__.spam.h" FrozenId="__phello__.spam" />
415-
<FrozenModule Include="$(PySourcePath)\Python\frozen_modules\frozen_only.h" FrozenId="frozen_only" />
393+
<FrozenModule Include="$(GeneratedFrozenModulesDir)Python\frozen_modules\importlib._bootstrap.h" FrozenId="importlib._bootstrap" />
394+
<FrozenModule Include="$(GeneratedFrozenModulesDir)Python\frozen_modules\importlib._bootstrap_external.h" FrozenId="importlib._bootstrap_external" />
395+
<FrozenModule Include="$(GeneratedFrozenModulesDir)Python\frozen_modules\zipimport.h" FrozenId="zipimport" />
396+
<FrozenModule Include="$(GeneratedFrozenModulesDir)Python\frozen_modules\abc.h" FrozenId="abc" />
397+
<FrozenModule Include="$(GeneratedFrozenModulesDir)Python\frozen_modules\codecs.h" FrozenId="codecs" />
398+
<FrozenModule Include="$(GeneratedFrozenModulesDir)Python\frozen_modules\io.h" FrozenId="io" />
399+
<FrozenModule Include="$(GeneratedFrozenModulesDir)Python\frozen_modules\_collections_abc.h" FrozenId="_collections_abc" />
400+
<FrozenModule Include="$(GeneratedFrozenModulesDir)Python\frozen_modules\_sitebuiltins.h" FrozenId="_sitebuiltins" />
401+
<FrozenModule Include="$(GeneratedFrozenModulesDir)Python\frozen_modules\genericpath.h" FrozenId="genericpath" />
402+
<FrozenModule Include="$(GeneratedFrozenModulesDir)Python\frozen_modules\ntpath.h" FrozenId="ntpath" />
403+
<FrozenModule Include="$(GeneratedFrozenModulesDir)Python\frozen_modules\posixpath.h" FrozenId="posixpath" />
404+
<FrozenModule Include="$(GeneratedFrozenModulesDir)Python\frozen_modules\os.h" FrozenId="os" />
405+
<FrozenModule Include="$(GeneratedFrozenModulesDir)Python\frozen_modules\site.h" FrozenId="site" />
406+
<FrozenModule Include="$(GeneratedFrozenModulesDir)Python\frozen_modules\stat.h" FrozenId="stat" />
407+
<FrozenModule Include="$(GeneratedFrozenModulesDir)Python\frozen_modules\importlib.util.h" FrozenId="importlib.util" />
408+
<FrozenModule Include="$(GeneratedFrozenModulesDir)Python\frozen_modules\importlib.machinery.h" FrozenId="importlib.machinery" />
409+
<FrozenModule Include="$(GeneratedFrozenModulesDir)Python\frozen_modules\runpy.h" FrozenId="runpy" />
410+
<FrozenModule Include="$(GeneratedFrozenModulesDir)Python\frozen_modules\__hello__.h" FrozenId="__hello__" />
411+
<FrozenModule Include="$(GeneratedFrozenModulesDir)Python\frozen_modules\__phello__.h" FrozenId="__phello__" />
412+
<FrozenModule Include="$(GeneratedFrozenModulesDir)Python\frozen_modules\__phello__.ham.h" FrozenId="__phello__.ham" />
413+
<FrozenModule Include="$(GeneratedFrozenModulesDir)Python\frozen_modules\__phello__.ham.eggs.h" FrozenId="__phello__.ham.eggs" />
414+
<FrozenModule Include="$(GeneratedFrozenModulesDir)Python\frozen_modules\__phello__.spam.h" FrozenId="__phello__.spam" />
415+
<FrozenModule Include="$(GeneratedFrozenModulesDir)Python\frozen_modules\frozen_only.h" FrozenId="frozen_only" />
416416
<!-- END freeze mappings -->
417417
</ItemGroup>
418418
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
@@ -484,7 +484,7 @@ $(IntDir)\deepfreeze_mappings.txt
484484
Overwrite="true"
485485
Lines="@(FrozenModule->'%(FullPath):%(FrozenId)')" />
486486
<!-- BEGIN deepfreeze rule -->
487-
<Exec Command='$(PythonForBuild) "$(PySourcePath)Tools\build\deepfreeze.py" -f "$(IntDir)\deepfreeze_mappings.txt" -o "$(PySourcePath)Python\deepfreeze\deepfreeze.c"' />
487+
<Exec Command='$(PythonForBuild) "$(PySourcePath)Tools\build\deepfreeze.py" -f "$(IntDir)\deepfreeze_mappings.txt" -o "$(GeneratedFrozenModulesDir)deepfreeze.c"' />
488488
<!-- END deepfreeze rule -->
489489
</Target>
490490
<Target Name="_CleanFrozen" BeforeTargets="CoreClean" Condition="$(Configuration) != 'PGUpdate'">
@@ -493,7 +493,7 @@ $(IntDir)\deepfreeze_mappings.txt
493493
<Clean Include="%(None.OutFile)" />
494494
<Clean Include="%(GetPath.IntFile)" />
495495
<Clean Include="%(GetPath.OutFile)" />
496-
<Clean Include="$(PySourcePath)Python\deepfreeze\deepfreeze.c" />
496+
<Clean Include="$(GeneratedFrozenModulesDir)deepfreeze.c" />
497497
</ItemGroup>
498498
</Target>
499499
</Project>

PCbuild/pyproject.props

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
<IntDir>$(IntDir.Replace(`\\`, `\`))</IntDir>
1313
<!-- pyconfig.h is updated by pythoncore.vcxproj, so it's always in pythoncore's IntDir -->
1414
<GeneratedPyConfigDir>$(Py_IntDir)\$(MajorVersionNumber)$(MinorVersionNumber)$(ArchName)_$(Configuration)\pythoncore\</GeneratedPyConfigDir>
15+
<GeneratedFrozenModulesDir>$(Py_IntDir)\$(MajorVersionNumber)$(MinorVersionNumber)_frozen_$(Configuration)\</GeneratedFrozenModulesDir>
1516
<TargetName Condition="'$(TargetName)' == ''">$(ProjectName)</TargetName>
1617
<TargetName>$(TargetName)$(PyDebugExt)</TargetName>
1718
<GenerateManifest>false</GenerateManifest>

PCbuild/pythoncore.vcxproj

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@
111111
</ItemDefinitionGroup>
112112
<ItemGroup>
113113
<ClCompile Include="..\Modules\getpath.c">
114+
<AdditionalIncludeDirectories>$(GeneratedFrozenModulesDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
114115
<PreprocessorDefinitions>
115116
PREFIX=NULL;
116117
EXEC_PREFIX=NULL;
@@ -120,7 +121,6 @@
120121
PLATLIBDIR="DLLs";
121122
%(PreprocessorDefinitions)
122123
</PreprocessorDefinitions>
123-
<AdditionalIncludeDirectories>$(PySourcePath);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
124124
</ClCompile>
125125
</ItemGroup>
126126
<ItemGroup>
@@ -562,7 +562,9 @@
562562
<ClCompile Include="..\Python\flowgraph.c" />
563563
<ClCompile Include="..\Python\formatter_unicode.c" />
564564
<ClCompile Include="..\Python\frame.c" />
565-
<ClCompile Include="..\Python\frozen.c" />
565+
<ClCompile Include="..\Python\frozen.c">
566+
<AdditionalIncludeDirectories>$(GeneratedFrozenModulesDir)Python;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
567+
</ClCompile>
566568
<ClCompile Include="..\Python\future.c" />
567569
<ClCompile Include="..\Python\getargs.c" />
568570
<ClCompile Include="..\Python\getcompiler.c" />
@@ -617,7 +619,7 @@
617619
</ItemGroup>
618620
<ItemGroup>
619621
<!-- BEGIN deepfreeze -->
620-
<ClCompile Include="..\Python\deepfreeze\deepfreeze.c" />
622+
<ClCompile Include="$(GeneratedFrozenModulesDir)deepfreeze.c" />
621623
<!-- END deepfreeze -->
622624
</ItemGroup>
623625
<ItemGroup Condition="$(IncludeExternals)">

Tools/build/freeze_modules.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -658,7 +658,7 @@ def regen_pcbuild(modules):
658658
filterlines = []
659659
corelines = []
660660
deepfreezemappingsfile = f'$(IntDir)\\{DEEPFREEZE_MAPPING_FNAME}'
661-
deepfreezerules = [f' <Exec Command=\'$(PythonForBuild) "$(PySourcePath)Tools\\build\\deepfreeze.py" -f "{deepfreezemappingsfile}" -o "$(PySourcePath)Python\\deepfreeze\\deepfreeze.c"\' />']
661+
deepfreezerules = [f' <Exec Command=\'$(PythonForBuild) "$(PySourcePath)Tools\\build\\deepfreeze.py" -f "{deepfreezemappingsfile}" -o "$(GeneratedFrozenModulesDir)deepfreeze.c"\' />']
662662
deepfreezemappings = []
663663
for src in _iter_sources(modules):
664664
pyfile = relpath_for_windows_display(src.pyfile, ROOT_DIR)
@@ -667,15 +667,15 @@ def regen_pcbuild(modules):
667667
projlines.append(f' <None Include="..\\{pyfile}">')
668668
projlines.append(f' <ModName>{src.frozenid}</ModName>')
669669
projlines.append(f' <IntFile>$(IntDir){intfile}</IntFile>')
670-
projlines.append(f' <OutFile>$(PySourcePath){header}</OutFile>')
670+
projlines.append(f' <OutFile>$(GeneratedFrozenModulesDir){header}</OutFile>')
671671
projlines.append(f' </None>')
672672

673673
filterlines.append(f' <None Include="..\\{pyfile}">')
674674
filterlines.append(' <Filter>Python Files</Filter>')
675675
filterlines.append(' </None>')
676-
deepfreezemappings.append(f' <FrozenModule Include="$(PySourcePath)\\{header}" FrozenId="{src.frozenid}" />\n')
676+
deepfreezemappings.append(f' <FrozenModule Include="$(GeneratedFrozenModulesDir){header}" FrozenId="{src.frozenid}" />\n')
677677

678-
corelines.append(f' <ClCompile Include="..\\Python\\deepfreeze\\deepfreeze.c" />')
678+
corelines.append(f' <ClCompile Include="$(GeneratedFrozenModulesDir)deepfreeze.c" />')
679679

680680
print(f'# Updating {os.path.relpath(PCBUILD_PROJECT)}')
681681
with updating_file_with_tmpfile(PCBUILD_PROJECT) as (infile, outfile):

0 commit comments

Comments
 (0)