diff --git a/PCbuild/_freeze_module.vcxproj b/PCbuild/_freeze_module.vcxproj
index bdcf29ba44dab5..63ab36680ef887 100644
--- a/PCbuild/_freeze_module.vcxproj
+++ b/PCbuild/_freeze_module.vcxproj
@@ -374,6 +374,33 @@
$(PySourcePath)Python\frozen_modules\getpath.h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -405,32 +432,19 @@
AfterTargets="_RebuildFrozen"
DependsOnTargets="FindPythonForBuild"
Condition="$(Configuration) != 'PGUpdate'">
+
+
+
+$(IntDir)\deepfreeze_mappings.txt
+
+
+
+
-
+
diff --git a/Tools/build/deepfreeze.py b/Tools/build/deepfreeze.py
index c3231a5a40c326..27f76023e257c5 100644
--- a/Tools/build/deepfreeze.py
+++ b/Tools/build/deepfreeze.py
@@ -491,7 +491,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):
@@ -509,9 +512,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 a07f4d9786ea65..c5a397129201b6 100644
--- a/Tools/build/freeze_modules.py
+++ b/Tools/build/freeze_modules.py
@@ -21,6 +21,7 @@
# .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']
+ 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' ')
filterlines.append(' Python Files')
filterlines.append(' ')
- deepfreezerules.append(f'\t\t "$(PySourcePath){header}:{src.frozenid}" ^')
- deepfreezerules.append('\t\t "-o" "$(PySourcePath)Python\\deepfreeze\\deepfreeze.c"\'/>' )
+ deepfreezemappings.append(f' \n')
corelines.append(f' ')
@@ -675,6 +677,26 @@ def regen_pcbuild(modules):
PCBUILD_PROJECT,
)
outfile.writelines(lines)
+ with updating_file_with_tmpfile(PCBUILD_PROJECT) as (infile, outfile):
+ lines = infile.readlines()
+ lines = replace_block(
+ lines,
+ '',
+ '',
+ deepfreezemappings,
+ PCBUILD_PROJECT,
+ )
+ outfile.writelines(lines)
+ with updating_file_with_tmpfile(PCBUILD_PROJECT) as (infile, outfile):
+ lines = infile.readlines()
+ lines = replace_block(
+ lines,
+ '',
+ '',
+ [deepfreezemappingsfile, ],
+ PCBUILD_PROJECT,
+ )
+ outfile.writelines(lines)
with updating_file_with_tmpfile(PCBUILD_PROJECT) as (infile, outfile):
lines = infile.readlines()
lines = replace_block(