summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRiccardo Ghetta <rghe@users.noreply.github.com>2023-10-30 16:14:26 (GMT)
committerGitHub <noreply@github.com>2023-10-30 16:14:26 (GMT)
commit8eaa206feccc913d172027a613d34a50210f4511 (patch)
tree8cc84d19936b1ca1452c1f94e60eb5def7e3c579
parent6dfb8fe0236718e9afc8136ff2b58dcfbc182022 (diff)
downloadcpython-8eaa206feccc913d172027a613d34a50210f4511.zip
cpython-8eaa206feccc913d172027a613d34a50210f4511.tar.gz
cpython-8eaa206feccc913d172027a613d34a50210f4511.tar.bz2
gh-109515: When generating deep frozen modules on Windows, use a list file instead of arguments (GH-109516)
-rw-r--r--PCbuild/_freeze_module.vcxproj64
-rw-r--r--Tools/build/deepfreeze.py16
-rw-r--r--Tools/build/freeze_modules.py28
3 files changed, 78 insertions, 30 deletions
diff --git a/PCbuild/_freeze_module.vcxproj b/PCbuild/_freeze_module.vcxproj
index 5ca1058..cfcb6cb 100644
--- a/PCbuild/_freeze_module.vcxproj
+++ b/PCbuild/_freeze_module.vcxproj
@@ -395,6 +395,33 @@
<OutFile>$(PySourcePath)Python\frozen_modules\getpath.h</OutFile>
</GetPath>
</ItemGroup>
+ <ItemGroup>
+ <!-- BEGIN freeze mappings -->
+ <FrozenModule Include="$(PySourcePath)\Python\frozen_modules\importlib._bootstrap.h" FrozenId="importlib._bootstrap" />
+ <FrozenModule Include="$(PySourcePath)\Python\frozen_modules\importlib._bootstrap_external.h" FrozenId="importlib._bootstrap_external" />
+ <FrozenModule Include="$(PySourcePath)\Python\frozen_modules\zipimport.h" FrozenId="zipimport" />
+ <FrozenModule Include="$(PySourcePath)\Python\frozen_modules\abc.h" FrozenId="abc" />
+ <FrozenModule Include="$(PySourcePath)\Python\frozen_modules\codecs.h" FrozenId="codecs" />
+ <FrozenModule Include="$(PySourcePath)\Python\frozen_modules\io.h" FrozenId="io" />
+ <FrozenModule Include="$(PySourcePath)\Python\frozen_modules\_collections_abc.h" FrozenId="_collections_abc" />
+ <FrozenModule Include="$(PySourcePath)\Python\frozen_modules\_sitebuiltins.h" FrozenId="_sitebuiltins" />
+ <FrozenModule Include="$(PySourcePath)\Python\frozen_modules\genericpath.h" FrozenId="genericpath" />
+ <FrozenModule Include="$(PySourcePath)\Python\frozen_modules\ntpath.h" FrozenId="ntpath" />
+ <FrozenModule Include="$(PySourcePath)\Python\frozen_modules\posixpath.h" FrozenId="posixpath" />
+ <FrozenModule Include="$(PySourcePath)\Python\frozen_modules\os.h" FrozenId="os" />
+ <FrozenModule Include="$(PySourcePath)\Python\frozen_modules\site.h" FrozenId="site" />
+ <FrozenModule Include="$(PySourcePath)\Python\frozen_modules\stat.h" FrozenId="stat" />
+ <FrozenModule Include="$(PySourcePath)\Python\frozen_modules\importlib.util.h" FrozenId="importlib.util" />
+ <FrozenModule Include="$(PySourcePath)\Python\frozen_modules\importlib.machinery.h" FrozenId="importlib.machinery" />
+ <FrozenModule Include="$(PySourcePath)\Python\frozen_modules\runpy.h" FrozenId="runpy" />
+ <FrozenModule Include="$(PySourcePath)\Python\frozen_modules\__hello__.h" FrozenId="__hello__" />
+ <FrozenModule Include="$(PySourcePath)\Python\frozen_modules\__phello__.h" FrozenId="__phello__" />
+ <FrozenModule Include="$(PySourcePath)\Python\frozen_modules\__phello__.ham.h" FrozenId="__phello__.ham" />
+ <FrozenModule Include="$(PySourcePath)\Python\frozen_modules\__phello__.ham.eggs.h" FrozenId="__phello__.ham.eggs" />
+ <FrozenModule Include="$(PySourcePath)\Python\frozen_modules\__phello__.spam.h" FrozenId="__phello__.spam" />
+ <FrozenModule Include="$(PySourcePath)\Python\frozen_modules\frozen_only.h" FrozenId="frozen_only" />
+ <!-- END freeze mappings -->
+ </ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
@@ -426,32 +453,19 @@
AfterTargets="_RebuildFrozen"
DependsOnTargets="FindPythonForBuild"
Condition="$(Configuration) != 'PGUpdate'">
+ <PropertyGroup>
+ <FreezeMappingsFile>
+ <!-- BEGIN freeze mapping file -->
+$(IntDir)\deepfreeze_mappings.txt
+ <!-- END freeze mapping file -->
+ </FreezeMappingsFile>
+ </PropertyGroup>
+ <WriteLinesToFile
+ File="$(FreezeMappingsFile)"
+ Overwrite="true"
+ Lines="@(FrozenModule->'%(FullPath):%(FrozenId)')" />
<!-- BEGIN deepfreeze rule -->
- <Exec Command='$(PythonForBuild) "$(PySourcePath)Tools\build\deepfreeze.py" ^
- "$(PySourcePath)Python\frozen_modules\importlib._bootstrap.h:importlib._bootstrap" ^
- "$(PySourcePath)Python\frozen_modules\importlib._bootstrap_external.h:importlib._bootstrap_external" ^
- "$(PySourcePath)Python\frozen_modules\zipimport.h:zipimport" ^
- "$(PySourcePath)Python\frozen_modules\abc.h:abc" ^
- "$(PySourcePath)Python\frozen_modules\codecs.h:codecs" ^
- "$(PySourcePath)Python\frozen_modules\io.h:io" ^
- "$(PySourcePath)Python\frozen_modules\_collections_abc.h:_collections_abc" ^
- "$(PySourcePath)Python\frozen_modules\_sitebuiltins.h:_sitebuiltins" ^
- "$(PySourcePath)Python\frozen_modules\genericpath.h:genericpath" ^
- "$(PySourcePath)Python\frozen_modules\ntpath.h:ntpath" ^
- "$(PySourcePath)Python\frozen_modules\posixpath.h:posixpath" ^
- "$(PySourcePath)Python\frozen_modules\os.h:os" ^
- "$(PySourcePath)Python\frozen_modules\site.h:site" ^
- "$(PySourcePath)Python\frozen_modules\stat.h:stat" ^
- "$(PySourcePath)Python\frozen_modules\importlib.util.h:importlib.util" ^
- "$(PySourcePath)Python\frozen_modules\importlib.machinery.h:importlib.machinery" ^
- "$(PySourcePath)Python\frozen_modules\runpy.h:runpy" ^
- "$(PySourcePath)Python\frozen_modules\__hello__.h:__hello__" ^
- "$(PySourcePath)Python\frozen_modules\__phello__.h:__phello__" ^
- "$(PySourcePath)Python\frozen_modules\__phello__.ham.h:__phello__.ham" ^
- "$(PySourcePath)Python\frozen_modules\__phello__.ham.eggs.h:__phello__.ham.eggs" ^
- "$(PySourcePath)Python\frozen_modules\__phello__.spam.h:__phello__.spam" ^
- "$(PySourcePath)Python\frozen_modules\frozen_only.h:frozen_only" ^
- "-o" "$(PySourcePath)Python\deepfreeze\deepfreeze.c"'/>
+ <Exec Command='$(PythonForBuild) "$(PySourcePath)Tools\build\deepfreeze.py" -f "$(IntDir)\deepfreeze_mappings.txt" -o "$(PySourcePath)Python\deepfreeze\deepfreeze.c"' />
<!-- END deepfreeze rule -->
</Target>
<Target Name="_CleanFrozen" BeforeTargets="CoreClean" Condition="$(Configuration) != 'PGUpdate'">
diff --git a/Tools/build/deepfreeze.py b/Tools/build/deepfreeze.py
index fed7cf3..218c64e 100644
--- a/Tools/build/deepfreeze.py
+++ b/Tools/build/deepfreeze.py
@@ -488,7 +488,10 @@ def generate(args: list[str], output: TextIO) -> None:
parser = argparse.ArgumentParser()
parser.add_argument("-o", "--output", help="Defaults to deepfreeze.c", default="deepfreeze.c")
parser.add_argument("-v", "--verbose", action="store_true", help="Print diagnostics")
-parser.add_argument('args', nargs="+", help="Input file and module name (required) in file:modname format")
+group = parser.add_mutually_exclusive_group(required=True)
+group.add_argument("-f", "--file", help="read rule lines from a file")
+group.add_argument('args', nargs="*", default=(),
+ help="Input file and module name (required) in file:modname format")
@contextlib.contextmanager
def report_time(label: str):
@@ -506,9 +509,18 @@ def main() -> None:
args = parser.parse_args()
verbose = args.verbose
output = args.output
+
+ if args.file:
+ if verbose:
+ print(f"Reading targets from {args.file}")
+ with open(args.file, "rt", encoding="utf-8-sig") as fin:
+ rules = [x.strip() for x in fin]
+ else:
+ rules = args.args
+
with open(output, "w", encoding="utf-8") as file:
with report_time("generate"):
- generate(args.args, file)
+ generate(rules, file)
if verbose:
print(f"Wrote {os.path.getsize(output)} bytes to {output}")
diff --git a/Tools/build/freeze_modules.py b/Tools/build/freeze_modules.py
index a07f4d9..c5a3971 100644
--- a/Tools/build/freeze_modules.py
+++ b/Tools/build/freeze_modules.py
@@ -21,6 +21,7 @@ STDLIB_DIR = os.path.join(ROOT_DIR, 'Lib')
# .gitattributes and .gitignore files needs to be updated.
FROZEN_MODULES_DIR = os.path.join(ROOT_DIR, 'Python', 'frozen_modules')
DEEPFROZEN_MODULES_DIR = os.path.join(ROOT_DIR, 'Python', 'deepfreeze')
+DEEPFREEZE_MAPPING_FNAME = 'deepfreeze_mappings.txt'
FROZEN_FILE = os.path.join(ROOT_DIR, 'Python', 'frozen.c')
MAKEFILE = os.path.join(ROOT_DIR, 'Makefile.pre.in')
@@ -645,7 +646,9 @@ def regen_pcbuild(modules):
projlines = []
filterlines = []
corelines = []
- deepfreezerules = ['\t<Exec Command=\'$(PythonForBuild) "$(PySourcePath)Tools\\build\\deepfreeze.py" ^']
+ deepfreezemappingsfile = f'$(IntDir)\\{DEEPFREEZE_MAPPING_FNAME}'
+ deepfreezerules = [f' <Exec Command=\'$(PythonForBuild) "$(PySourcePath)Tools\\build\\deepfreeze.py" -f "{deepfreezemappingsfile}" -o "$(PySourcePath)Python\\deepfreeze\\deepfreeze.c"\' />']
+ deepfreezemappings = []
for src in _iter_sources(modules):
pyfile = relpath_for_windows_display(src.pyfile, ROOT_DIR)
header = relpath_for_windows_display(src.frozenfile, ROOT_DIR)
@@ -659,8 +662,7 @@ def regen_pcbuild(modules):
filterlines.append(f' <None Include="..\\{pyfile}">')
filterlines.append(' <Filter>Python Files</Filter>')
filterlines.append(' </None>')
- deepfreezerules.append(f'\t\t "$(PySourcePath){header}:{src.frozenid}" ^')
- deepfreezerules.append('\t\t "-o" "$(PySourcePath)Python\\deepfreeze\\deepfreeze.c"\'/>' )
+ deepfreezemappings.append(f' <FrozenModule Include="$(PySourcePath)\\{header}" FrozenId="{src.frozenid}" />\n')
corelines.append(f' <ClCompile Include="..\\Python\\deepfreeze\\deepfreeze.c" />')
@@ -679,6 +681,26 @@ def regen_pcbuild(modules):
lines = infile.readlines()
lines = replace_block(
lines,
+ '<!-- BEGIN freeze mappings -->',
+ '<!-- END freeze mappings -->',
+ deepfreezemappings,
+ PCBUILD_PROJECT,
+ )
+ outfile.writelines(lines)
+ with updating_file_with_tmpfile(PCBUILD_PROJECT) as (infile, outfile):
+ lines = infile.readlines()
+ lines = replace_block(
+ lines,
+ '<!-- BEGIN freeze mapping file -->',
+ '<!-- END freeze mapping file -->',
+ [deepfreezemappingsfile, ],
+ PCBUILD_PROJECT,
+ )
+ outfile.writelines(lines)
+ with updating_file_with_tmpfile(PCBUILD_PROJECT) as (infile, outfile):
+ lines = infile.readlines()
+ lines = replace_block(
+ lines,
'<!-- BEGIN deepfreeze rule -->',
'<!-- END deepfreeze rule -->',
deepfreezerules,