From c8d3b269989436e9817242c00fd6fd59107dd812 Mon Sep 17 00:00:00 2001 From: Eric Snow Date: Thu, 31 Mar 2022 10:52:03 -0600 Subject: [PATCH 1/6] Stop depending on regen-deepfreeze. --- Makefile.pre.in | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/Makefile.pre.in b/Makefile.pre.in index e784b43d0362d4..54fa024fbf6b7a 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -1171,24 +1171,12 @@ regen-importlib: regen-frozen ############################################################################ # Global objects -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 +# Note that other code generation in our workflow may add or remove +# global objects. "make regen-global-objects" should be run after each. .PHONY: regen-global-objects -regen-global-objects: regen-deepfreeze generate-global-objects-after-deepfreeze +regen-global-objects: $(srcdir)/Tools/scripts/generate_global_objects.py + $(PYTHON_FOR_REGEN) $(srcdir)/Tools/scripts/generate_global_objects.py ############################################################################ # ABI From 276b74c90b33bf6141ad697ee58d15cf8bc2b380 Mon Sep 17 00:00:00 2001 From: Eric Snow Date: Thu, 31 Mar 2022 11:19:47 -0600 Subject: [PATCH 2/6] Explicitly regen global objects after generating deepfreeze.c. --- Makefile.pre.in | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/Makefile.pre.in b/Makefile.pre.in index 54fa024fbf6b7a..8eca8efcdd3e7f 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -1161,6 +1161,9 @@ Python/deepfreeze/deepfreeze.c: $(DEEPFREEZE_DEPS) Python/frozen_modules/__phello__.spam.h:__phello__.spam \ Python/frozen_modules/frozen_only.h:frozen_only \ -o Python/deepfreeze/deepfreeze.c + @# The script may have added or removed global object definitions, + @# so the global objects must be regenerated. + $(PYTHON_FOR_REGEN) $(srcdir)/Tools/scripts/generate_global_objects.py # END: deepfreeze modules @@ -1171,13 +1174,17 @@ regen-importlib: regen-frozen ############################################################################ # Global objects -# Note that other code generation in our workflow may add or remove -# global objects. "make regen-global-objects" should be run after each. - .PHONY: regen-global-objects regen-global-objects: $(srcdir)/Tools/scripts/generate_global_objects.py $(PYTHON_FOR_REGEN) $(srcdir)/Tools/scripts/generate_global_objects.py +# Note that other code generation in our workflow may add or remove +# global objects. "make regen-global-objects" should be run after each. +# In the case where that happens during a build, regen-global-objects +# should be explicitly run immediately after the code generation +# completes and before the generated code is used. For an example, see +# the Python/deepfreeze/deepfreeze.c target (AKA regen-deepfreeze). + ############################################################################ # ABI From 032c68a7e966e90d77fd9160a0d13121d4ce7032 Mon Sep 17 00:00:00 2001 From: Eric Snow Date: Thu, 31 Mar 2022 12:07:27 -0600 Subject: [PATCH 3/6] Do not regen global objects as part of regen-deepfreeze. --- Makefile.pre.in | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/Makefile.pre.in b/Makefile.pre.in index 8eca8efcdd3e7f..cea4607c3fb08f 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -1161,9 +1161,8 @@ Python/deepfreeze/deepfreeze.c: $(DEEPFREEZE_DEPS) Python/frozen_modules/__phello__.spam.h:__phello__.spam \ Python/frozen_modules/frozen_only.h:frozen_only \ -o Python/deepfreeze/deepfreeze.c - @# The script may have added or removed global object definitions, - @# so the global objects must be regenerated. - $(PYTHON_FOR_REGEN) $(srcdir)/Tools/scripts/generate_global_objects.py + @echo "Deepfreeze may have added some global objects," + @echo " so run 'make regen-global-objects' if necessary." # END: deepfreeze modules @@ -1180,10 +1179,8 @@ regen-global-objects: $(srcdir)/Tools/scripts/generate_global_objects.py # Note that other code generation in our workflow may add or remove # global objects. "make regen-global-objects" should be run after each. -# In the case where that happens during a build, regen-global-objects -# should be explicitly run immediately after the code generation -# completes and before the generated code is used. For an example, see -# the Python/deepfreeze/deepfreeze.c target (AKA regen-deepfreeze). +# This includes when it happens as part of the build process, +# e.g. deepfreeze, which can cause the build to fail. ############################################################################ # ABI From 1822dacb9e8cd7ca515e31dabcecd4e110061b35 Mon Sep 17 00:00:00 2001 From: Eric Snow Date: Thu, 31 Mar 2022 12:16:45 -0600 Subject: [PATCH 4/6] Make the note a stdout message. --- Makefile.pre.in | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/Makefile.pre.in b/Makefile.pre.in index cea4607c3fb08f..69c5a348a0a3d5 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -1176,11 +1176,8 @@ regen-importlib: regen-frozen .PHONY: regen-global-objects regen-global-objects: $(srcdir)/Tools/scripts/generate_global_objects.py $(PYTHON_FOR_REGEN) $(srcdir)/Tools/scripts/generate_global_objects.py - -# Note that other code generation in our workflow may add or remove -# global objects. "make regen-global-objects" should be run after each. -# This includes when it happens as part of the build process, -# e.g. deepfreeze, which can cause the build to fail. + @echo "Global objects can be added or removed by other tools (e.g. deepfreeze), " + @echo " so be sure to re-run regen-global-objects after those tools." ############################################################################ # ABI From 6da53e16b156899ec5f277610edbbd0dd3949968 Mon Sep 17 00:00:00 2001 From: Eric Snow Date: Thu, 31 Mar 2022 12:38:04 -0600 Subject: [PATCH 5/6] Run regen-deepfreeze in "Check if generated files are up to date". --- .github/workflows/build.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index bda6dde37d1851..0ca8d3910814a8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -82,6 +82,9 @@ jobs: run: make regen-configure - name: Build CPython run: | + # Deepfreeze will usually cause global objects to be added or removed, + # so we run it before regen-global-objects gets rum (in regen-all). + make regen-deepfreeze make -j4 regen-all make regen-stdlib-module-names - name: Check for changes From b3ac79b92f196fc4d973fced9b4f85dbf0c04315 Mon Sep 17 00:00:00 2001 From: Eric Snow Date: Thu, 31 Mar 2022 13:35:08 -0600 Subject: [PATCH 6/6] Move the note out of the generated part of the rule. --- Makefile.pre.in | 9 ++++----- Tools/scripts/freeze_modules.py | 1 - 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/Makefile.pre.in b/Makefile.pre.in index 69c5a348a0a3d5..6dda71bc49cffd 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -1161,10 +1161,9 @@ Python/deepfreeze/deepfreeze.c: $(DEEPFREEZE_DEPS) Python/frozen_modules/__phello__.spam.h:__phello__.spam \ Python/frozen_modules/frozen_only.h:frozen_only \ -o Python/deepfreeze/deepfreeze.c - @echo "Deepfreeze may have added some global objects," - @echo " so run 'make regen-global-objects' if necessary." - # END: deepfreeze modules + @echo "Note: Deepfreeze may have added some global objects," + @echo " so run 'make regen-global-objects' if necessary." # We keep this renamed target around for folks with muscle memory. .PHONY: regen-importlib @@ -1176,8 +1175,8 @@ regen-importlib: regen-frozen .PHONY: regen-global-objects regen-global-objects: $(srcdir)/Tools/scripts/generate_global_objects.py $(PYTHON_FOR_REGEN) $(srcdir)/Tools/scripts/generate_global_objects.py - @echo "Global objects can be added or removed by other tools (e.g. deepfreeze), " - @echo " so be sure to re-run regen-global-objects after those tools." + @echo "Note: Global objects can be added or removed by other tools (e.g. deepfreeze), " + @echo " so be sure to re-run regen-global-objects after those tools." ############################################################################ # ABI diff --git a/Tools/scripts/freeze_modules.py b/Tools/scripts/freeze_modules.py index c8d8a7dd1fbab7..dd208c78471943 100644 --- a/Tools/scripts/freeze_modules.py +++ b/Tools/scripts/freeze_modules.py @@ -606,7 +606,6 @@ def regen_makefile(modules): ]) deepfreezerules.append(f"\t{frozen_header}:{src.frozenid} \\") deepfreezerules.append('\t-o Python/deepfreeze/deepfreeze.c') - deepfreezerules.append('') pyfiles[-1] = pyfiles[-1].rstrip(" \\") frozenfiles[-1] = frozenfiles[-1].rstrip(" \\")