|
8 | 8 | import os
|
9 | 9 | import ntpath
|
10 | 10 | import posixpath
|
11 |
| -import platform |
12 |
| -import subprocess |
13 | 11 | import sys
|
14 |
| -import time |
15 | 12 |
|
16 |
| -from update_file import updating_file_with_tmpfile, update_file_with_tmpfile |
| 13 | +from update_file import updating_file_with_tmpfile |
17 | 14 |
|
18 | 15 |
|
19 | 16 | ROOT_DIR = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
|
20 | 17 | ROOT_DIR = os.path.abspath(ROOT_DIR)
|
21 | 18 | FROZEN_ONLY = os.path.join(ROOT_DIR, 'Tools', 'freeze', 'flag.py')
|
22 | 19 |
|
23 | 20 | STDLIB_DIR = os.path.join(ROOT_DIR, 'Lib')
|
24 |
| -# If MODULES_DIR is changed then the .gitattributes and .gitignore files |
25 |
| -# need to be updated. |
26 |
| -MODULES_DIR = os.path.join(ROOT_DIR, 'Python', 'frozen_modules') |
| 21 | +# If FROZEN_MODULES_DIR or DEEPFROZEN_MODULES_DIR is changed then the |
| 22 | +# .gitattributes and .gitignore files needs to be updated. |
| 23 | +FROZEN_MODULES_DIR = os.path.join(ROOT_DIR, 'Python', 'frozen_modules') |
| 24 | +DEEPFROZEN_MODULES_DIR = os.path.join(ROOT_DIR, 'Python', 'deepfreeze') |
27 | 25 |
|
28 | 26 | FROZEN_FILE = os.path.join(ROOT_DIR, 'Python', 'frozen.c')
|
29 | 27 | MAKEFILE = os.path.join(ROOT_DIR, 'Makefile.pre.in')
|
@@ -111,16 +109,16 @@ def relpath_for_posix_display(path, base):
|
111 | 109 | #######################################
|
112 | 110 | # specs
|
113 | 111 |
|
114 |
| -def parse_frozen_specs(sectionalspecs=FROZEN, destdir=None): |
| 112 | +def parse_frozen_specs(): |
115 | 113 | seen = {}
|
116 |
| - for section, specs in sectionalspecs: |
| 114 | + for section, specs in FROZEN: |
117 | 115 | parsed = _parse_specs(specs, section, seen)
|
118 | 116 | for item in parsed:
|
119 | 117 | frozenid, pyfile, modname, ispkg, section = item
|
120 | 118 | try:
|
121 | 119 | source = seen[frozenid]
|
122 | 120 | except KeyError:
|
123 |
| - source = FrozenSource.from_id(frozenid, pyfile, destdir) |
| 121 | + source = FrozenSource.from_id(frozenid, pyfile) |
124 | 122 | seen[frozenid] = source
|
125 | 123 | else:
|
126 | 124 | assert not pyfile or pyfile == source.pyfile, item
|
@@ -225,15 +223,16 @@ def iter_subs():
|
225 | 223 | #######################################
|
226 | 224 | # frozen source files
|
227 | 225 |
|
228 |
| -class FrozenSource(namedtuple('FrozenSource', 'id pyfile frozenfile')): |
| 226 | +class FrozenSource(namedtuple('FrozenSource', 'id pyfile frozenfile deepfreezefile')): |
229 | 227 |
|
230 | 228 | @classmethod
|
231 |
| - def from_id(cls, frozenid, pyfile=None, destdir=MODULES_DIR): |
| 229 | + def from_id(cls, frozenid, pyfile=None): |
232 | 230 | if not pyfile:
|
233 | 231 | pyfile = os.path.join(STDLIB_DIR, *frozenid.split('.')) + '.py'
|
234 | 232 | #assert os.path.exists(pyfile), (frozenid, pyfile)
|
235 |
| - frozenfile = resolve_frozen_file(frozenid, destdir) |
236 |
| - return cls(frozenid, pyfile, frozenfile) |
| 233 | + frozenfile = resolve_frozen_file(frozenid, FROZEN_MODULES_DIR) |
| 234 | + deepfreezefile = resolve_frozen_file(frozenid, DEEPFROZEN_MODULES_DIR) |
| 235 | + return cls(frozenid, pyfile, frozenfile, deepfreezefile) |
237 | 236 |
|
238 | 237 | @property
|
239 | 238 | def frozenid(self):
|
@@ -261,7 +260,7 @@ def ispkg(self):
|
261 | 260 | return os.path.basename(self.pyfile) == '__init__.py'
|
262 | 261 |
|
263 | 262 |
|
264 |
| -def resolve_frozen_file(frozenid, destdir=MODULES_DIR): |
| 263 | +def resolve_frozen_file(frozenid, destdir): |
265 | 264 | """Return the filename corresponding to the given frozen ID.
|
266 | 265 |
|
267 | 266 | For stdlib modules the ID will always be the full name
|
@@ -570,41 +569,30 @@ def regen_makefile(modules):
|
570 | 569 | deepfreezefiles = []
|
571 | 570 | rules = ['']
|
572 | 571 | deepfreezerules = ['']
|
573 |
| - |
574 |
| - # TODO: Merge the two loops |
575 | 572 | for src in _iter_sources(modules):
|
576 |
| - header = relpath_for_posix_display(src.frozenfile, ROOT_DIR) |
577 |
| - relfile = header.replace('\\', '/') |
578 |
| - _pyfile = relpath_for_posix_display(src.pyfile, ROOT_DIR) |
579 |
| - |
580 |
| - # TODO: This is a bit hackish |
581 |
| - xfile = relfile.replace("/frozen_modules/", "/deepfreeze/") |
582 |
| - cfile = xfile[:-2] + ".c" |
583 |
| - ofile = xfile[:-2] + ".o" |
| 573 | + frozen_header = relpath_for_posix_display(src.frozenfile, ROOT_DIR) |
| 574 | + deepfreeze_header = relpath_for_posix_display(src.deepfreezefile, ROOT_DIR) |
| 575 | + frozenfiles.append(f'\t\t{frozen_header} \\') |
| 576 | + cfile = deepfreeze_header[:-2] + ".c" |
| 577 | + ofile = deepfreeze_header[:-2] + ".o" |
584 | 578 | deepfreezefiles.append(f"\t\t{ofile} \\")
|
585 | 579 |
|
586 |
| - # Also add a deepfreeze rule. |
587 |
| - deepfreezerules.append(f'{cfile}: {header} $(DEEPFREEZE_DEPS)') |
588 |
| - deepfreezerules.append( |
589 |
| - f"\t$(PYTHON_FOR_REGEN) " |
590 |
| - f"$(srcdir)/Tools/scripts/deepfreeze.py " |
591 |
| - f"{header} -m {src.frozenid} -o {cfile}") |
592 |
| - deepfreezerules.append('') |
593 |
| - |
594 |
| - for src in _iter_sources(modules): |
595 |
| - header = relpath_for_posix_display(src.frozenfile, ROOT_DIR) |
596 |
| - frozenfiles.append(f'\t\t{header} \\') |
597 |
| - |
598 | 580 | pyfile = relpath_for_posix_display(src.pyfile, ROOT_DIR)
|
599 | 581 | pyfiles.append(f'\t\t{pyfile} \\')
|
600 | 582 |
|
601 | 583 | freeze = (f'$(FREEZE_MODULE) {src.frozenid} '
|
602 |
| - f'$(srcdir)/{pyfile} {header}') |
| 584 | + f'$(srcdir)/{pyfile} {frozen_header}') |
603 | 585 | rules.extend([
|
604 |
| - f'{header}: $(FREEZE_MODULE) {pyfile}', |
| 586 | + f'{frozen_header}: $(FREEZE_MODULE) {pyfile}', |
605 | 587 | f'\t{freeze}',
|
606 | 588 | '',
|
607 | 589 | ])
|
| 590 | + deepfreezerules.append(f'{cfile}: {frozen_header} $(DEEPFREEZE_DEPS)') |
| 591 | + deepfreezerules.append( |
| 592 | + f"\t$(PYTHON_FOR_REGEN) " |
| 593 | + f"$(srcdir)/Tools/scripts/deepfreeze.py " |
| 594 | + f"{frozen_header} -m {src.frozenid} -o {cfile}") |
| 595 | + deepfreezerules.append('') |
608 | 596 | pyfiles[-1] = pyfiles[-1].rstrip(" \\")
|
609 | 597 | frozenfiles[-1] = frozenfiles[-1].rstrip(" \\")
|
610 | 598 | deepfreezefiles[-1] = deepfreezefiles[-1].rstrip(" \\")
|
@@ -715,7 +703,7 @@ def regen_pcbuild(modules):
|
715 | 703 |
|
716 | 704 | def main():
|
717 | 705 | # Expand the raw specs, preserving order.
|
718 |
| - modules = list(parse_frozen_specs(destdir=MODULES_DIR)) |
| 706 | + modules = list(parse_frozen_specs()) |
719 | 707 |
|
720 | 708 | # Regen build-related files.
|
721 | 709 | regen_makefile(modules)
|
|
0 commit comments