Skip to content

Commit 0419d99

Browse files
committed
pythongh-108740: Fix "make regen-all" race condition
Fix a race condition in "make regen-all". The deepfreeze.c source and files generated by Argument Clinic are now generated or updated before generating "global objects". Previously, some identifiers may miss depending on the order in which these files were generated. * "make regen-global-objects": Make sure that deepfreeze.c is generated and up to date, and always run "make clinic". * "make clinic" no longer runs generate_global_objects.py script anymore. * "make regen-deepfreeze" now only updates deepfreeze.c, it doesn't build deepfreeze.o anymore.
1 parent ad73674 commit 0419d99

File tree

2 files changed

+12
-4
lines changed

2 files changed

+12
-4
lines changed

Makefile.pre.in

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -490,6 +490,7 @@ OBJECT_OBJS= \
490490
Objects/weakrefobject.o \
491491
@PERF_TRAMPOLINE_OBJ@
492492

493+
DEEPFREEZE_C = Python/deepfreeze/deepfreeze.c
493494
DEEPFREEZE_OBJS = Python/deepfreeze/deepfreeze.o
494495

495496
##########################################################################
@@ -777,7 +778,6 @@ coverage-report: regen-token regen-frozen
777778
.PHONY: clinic
778779
clinic: check-clean-src $(srcdir)/Modules/_blake2/blake2s_impl.c
779780
$(PYTHON_FOR_REGEN) $(srcdir)/Tools/clinic/clinic.py --make --exclude Lib/test/clinic.test.c --srcdir $(srcdir)
780-
$(PYTHON_FOR_REGEN) $(srcdir)/Tools/build/generate_global_objects.py
781781

782782
.PHONY: clinic-tests
783783
clinic-tests: check-clean-src $(srcdir)/Lib/test/clinic.test.c
@@ -1252,7 +1252,7 @@ regen-frozen: Tools/build/freeze_modules.py $(FROZEN_FILES_IN)
12521252
# Deepfreeze targets
12531253

12541254
.PHONY: regen-deepfreeze
1255-
regen-deepfreeze: $(DEEPFREEZE_OBJS)
1255+
regen-deepfreeze: $(DEEPFREEZE_C)
12561256

12571257
DEEPFREEZE_DEPS=$(srcdir)/Tools/build/deepfreeze.py Include/internal/pycore_global_strings.h $(FREEZE_MODULE_DEPS) $(FROZEN_FILES_OUT)
12581258

@@ -1295,7 +1295,10 @@ regen-importlib: regen-frozen
12951295
# Global objects
12961296

12971297
.PHONY: regen-global-objects
1298-
regen-global-objects: $(srcdir)/Tools/build/generate_global_objects.py
1298+
# Dependencies:
1299+
# - Generate or update deepfreeze.c input file.
1300+
# - Run "make clinic": it can add and remove identifiers.
1301+
regen-global-objects: $(srcdir)/Tools/build/generate_global_objects.py $(DEEPFREEZE_C) clinic
12991302
$(PYTHON_FOR_REGEN) $(srcdir)/Tools/build/generate_global_objects.py
13001303
@echo "Note: Global objects can be added or removed by other tools (e.g. deepfreeze), "
13011304
@echo " so be sure to re-run regen-global-objects after those tools."
@@ -1321,8 +1324,9 @@ regen-limited-abi: all
13211324
# Regenerate all generated files
13221325

13231326
.PHONY: regen-all
1327+
# Omit clinic: it's always run by regen-global-objects
13241328
regen-all: regen-cases regen-typeslots \
1325-
regen-token regen-ast regen-keyword regen-sre regen-frozen clinic \
1329+
regen-token regen-ast regen-keyword regen-sre regen-frozen \
13261330
regen-pegen-metaparser regen-pegen regen-test-frozenmain \
13271331
regen-test-levenshtein regen-global-objects
13281332
@echo
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
Fix a race condition in ``make regen-all``. The ``deepfreeze.c`` source and
2+
files generated by Argument Clinic are now generated or updated before
3+
generating "global objects". Previously, some identifiers may miss depending
4+
on the order in which these files were generated. Patch by Victor Stinner.

0 commit comments

Comments
 (0)