diff options
author | Riccardo Ghetta <rghe@users.noreply.github.com> | 2023-10-30 16:14:26 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-30 16:14:26 (GMT) |
commit | 8eaa206feccc913d172027a613d34a50210f4511 (patch) | |
tree | 8cc84d19936b1ca1452c1f94e60eb5def7e3c579 | |
parent | 6dfb8fe0236718e9afc8136ff2b58dcfbc182022 (diff) | |
download | cpython-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.vcxproj | 64 | ||||
-rw-r--r-- | Tools/build/deepfreeze.py | 16 | ||||
-rw-r--r-- | Tools/build/freeze_modules.py | 28 |
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, |