]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-47146: Avoid Using make Recursively (gh-32206)
authorEric Snow <ericsnowcurrently@gmail.com>
Thu, 31 Mar 2022 01:24:02 +0000 (19:24 -0600)
committerGitHub <noreply@github.com>
Thu, 31 Mar 2022 01:24:02 +0000 (19:24 -0600)
https://bugs.python.org/issue47146

Makefile.pre.in
Tools/scripts/generate_global_objects.py

index e6c6a6ba53a6d41d2e1a403fd0a2e745872b3d73..8d335a7e139fc9c5d9aeaa46cc3c12bb6fbdcbe2 100644 (file)
@@ -1136,10 +1136,7 @@ regen-frozen: Tools/scripts/freeze_modules.py $(FROZEN_FILES_IN)
 # Deepfreeze targets
 
 .PHONY: regen-deepfreeze
-regen-deepfreeze:
-       @# Possibly generate globals first, to make sure _bootstrap_python builds.
-       $(PYTHON_FOR_REGEN) $(srcdir)/Tools/scripts/generate_global_objects.py
-       $(MAKE) $(DEEPFREEZE_OBJS)
+regen-deepfreeze: $(DEEPFREEZE_OBJS)
 
 DEEPFREEZE_DEPS=$(srcdir)/Tools/scripts/deepfreeze.py $(FREEZE_MODULE_DEPS) $(FROZEN_FILES_OUT)
 
@@ -1180,13 +1177,25 @@ regen-importlib: regen-frozen
 ############################################################################
 # Global objects
 
-.PHONY: regen-global-objects
-regen-global-objects: regen-deepfreeze
-       @# We already ran in once, before deepfreezing, to make sure
-       @# _bootstrap_python builds.  Now we run it again to catch any
-       @# remaining globals, including those added by deepfreeze.
+GLOBAL_OBJECTS_TARGETS = \
+               $(srcdir)/Include/internal/pycore_global_objects.h \
+               $(srcdir)/Include/internal/pycore_global_strings.h
+
+# The global objects will get regenerated as soon these files
+# are required, including as a prerequisite for regen-deepfreeze.
+$(GLOBAL_OBJECTS_TARGETS): generate-global-objects
+
+.PHONY: generate-global-objects
+generate-global-objects: $(srcdir)/Tools/scripts/generate_global_objects.py
        $(PYTHON_FOR_REGEN) $(srcdir)/Tools/scripts/generate_global_objects.py
 
+.PHONY: generate-global-objects-after-deepfreeze
+generate-global-objects-after-deepfreeze: regen-deepfreeze $(srcdir)/Tools/scripts/generate_global_objects.py
+       $(PYTHON_FOR_REGEN) $(srcdir)/Tools/scripts/generate_global_objects.py
+
+.PHONY: regen-global-objects
+regen-global-objects: regen-deepfreeze generate-global-objects-after-deepfreeze
+
 ############################################################################
 # ABI
 
index f7653604e822b21297909329f0ed462f32e0edc9..826f4c4c83aec25707859477fa11b6a30214326e 100644 (file)
@@ -115,7 +115,12 @@ def iter_global_strings():
     id_regex = re.compile(r'\b_Py_ID\((\w+)\)')
     str_regex = re.compile(r'\b_Py_DECLARE_STR\((\w+), "(.*?)"\)')
     for filename in iter_files():
-        with open(filename, encoding='utf-8') as infile:
+        try:
+            infile = open(filename, encoding='utf-8')
+        except FileNotFoundError:
+            # The file must have been a temporary file.
+            continue
+        with infile:
             for lno, line in enumerate(infile, 1):
                 for m in id_regex.finditer(line):
                     identifier, = m.groups()