Skip to content

Commit 0d328a9

Browse files
committed
Address review comments
- Fix typo - Remove confusing comment - Improve dependency handling for freezing
1 parent df657a9 commit 0d328a9

File tree

6 files changed

+95
-64
lines changed

6 files changed

+95
-64
lines changed

Makefile.pre.in

Lines changed: 55 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -283,13 +283,15 @@ BUILDPYTHON= python$(BUILDEXE)
283283
PYTHON_FOR_REGEN?=@PYTHON_FOR_REGEN@
284284
UPDATE_FILE=$(PYTHON_FOR_REGEN) $(srcdir)/Tools/scripts/update_file.py
285285
PYTHON_FOR_BUILD=@PYTHON_FOR_BUILD@
286-
# Standard builds use _bootstrap_python for freezing, cross compiling
287-
# uses build Python, which must have the same version and bytecode,
288-
PYTHON_FOR_FREEZE?=@PYTHON_FOR_FREEZE@
289-
FREEZE_MODULE_C=Programs/_freeze_module
290-
FREEZE_MODULE_PY=$(PYTHON_FOR_FREEZE) $(srcdir)/Programs/_freeze_module.py
291-
# bootstrap freezing uses FREEZE_MODULE_C for normal builds and _PY for cross builds
286+
287+
# Normal builds use Programs/_freeze_module.c for bootstrapping and
288+
# ./_bootstrap_python Programs/_freeze_module.py for remaining modules
289+
# Cross builds use an external "build Python" for all modules.
290+
PYTHON_FOR_FREEZE=@PYTHON_FOR_FREEZE@
292291
FREEZE_MODULE_BOOTSTRAP=@FREEZE_MODULE_BOOTSTRAP@
292+
FREEZE_MODULE_BOOTSTRAP_DEPS=@FREEZE_MODULE_BOOTSTRAP_DEPS@
293+
FREEZE_MODULE=@FREEZE_MODULE@
294+
FREEZE_MODULE_DEPS=@FREEZE_MODULE_DEPS@
293295

294296
_PYTHON_HOST_PLATFORM=@_PYTHON_HOST_PLATFORM@
295297
BUILD_GNU_TYPE= @build@
@@ -970,7 +972,7 @@ _bootstrap_python: $(LIBRARY_OBJS_OMIT_FROZEN) Programs/_bootstrap_python.o Modu
970972
.PHONY: regen-deepfreeze
971973
regen-deepfreeze: $(DEEPFREEZE_OBJS)
972974

973-
DEEPFREEZE_DEPS=$(srcdir)/Tools/scripts/deepfreeze.py _bootstrap_python
975+
DEEPFREEZE_DEPS=$(srcdir)/Tools/scripts/deepfreeze.py $(FREEZE_MODULE_DEPS)
974976

975977
# BEGIN: deepfreeze modules
976978

@@ -1066,14 +1068,11 @@ Python/deepfreeze/frozen_only.c: Python/frozen_modules/frozen_only.h $(DEEPFREEZ
10661068
# script is used to test the cross compile code path.
10671069
# 6) deepfreeze modules with _bootstrap_python
10681070
#
1069-
# Cross compile proces:
1071+
# Cross compile process:
10701072
# 1) create all frozen module headers with external build Python and
10711073
# Programs/_freeze_module.py script.
10721074
# 2) deepfreeze modules with external build Python.
10731075
#
1074-
# Cross compiling also creates Programs/_freeze_module and _bootstrap_python
1075-
# artifacts, but does not use or ship them.
1076-
#
10771076

10781077
# FROZEN_FILES_* are auto-generated by Tools/scripts/freeze_modules.py.
10791078
FROZEN_FILES_IN = \
@@ -1131,83 +1130,83 @@ Programs/_freeze_module.o: Programs/_freeze_module.c Makefile
11311130

11321131
Modules/getpath_noop.o: $(srcdir)/Modules/getpath_noop.c Makefile
11331132

1134-
$(FREEZE_MODULE_C): Programs/_freeze_module.o Modules/getpath_noop.o $(LIBRARY_OBJS_OMIT_FROZEN)
1133+
Programs/_freeze_module: Programs/_freeze_module.o Modules/getpath_noop.o $(LIBRARY_OBJS_OMIT_FROZEN)
11351134
$(LINKCC) $(PY_CORE_LDFLAGS) -o $@ Programs/_freeze_module.o Modules/getpath_noop.o $(LIBRARY_OBJS_OMIT_FROZEN) $(LIBS) $(MODLIBS) $(SYSLIBS)
11361135

11371136
# We manually freeze getpath.py rather than through freeze_modules
1138-
Python/frozen_modules/getpath.h: Modules/getpath.py $(FREEZE_MODULE_C)
1137+
Python/frozen_modules/getpath.h: Modules/getpath.py $(FREEZE_MODULE_BOOTSTRAP_DEPS)
11391138
$(FREEZE_MODULE_BOOTSTRAP) getpath $(srcdir)/Modules/getpath.py Python/frozen_modules/getpath.h
11401139

11411140
# BEGIN: freezing modules
11421141

1143-
Python/frozen_modules/importlib._bootstrap.h: Lib/importlib/_bootstrap.py $(FREEZE_MODULE_C)
1142+
Python/frozen_modules/importlib._bootstrap.h: Lib/importlib/_bootstrap.py $(FREEZE_MODULE_BOOTSTRAP_DEPS)
11441143
$(FREEZE_MODULE_BOOTSTRAP) importlib._bootstrap $(srcdir)/Lib/importlib/_bootstrap.py Python/frozen_modules/importlib._bootstrap.h
11451144

1146-
Python/frozen_modules/importlib._bootstrap_external.h: Lib/importlib/_bootstrap_external.py $(FREEZE_MODULE_C)
1145+
Python/frozen_modules/importlib._bootstrap_external.h: Lib/importlib/_bootstrap_external.py $(FREEZE_MODULE_BOOTSTRAP_DEPS)
11471146
$(FREEZE_MODULE_BOOTSTRAP) importlib._bootstrap_external $(srcdir)/Lib/importlib/_bootstrap_external.py Python/frozen_modules/importlib._bootstrap_external.h
11481147

1149-
Python/frozen_modules/zipimport.h: Lib/zipimport.py $(FREEZE_MODULE_C)
1148+
Python/frozen_modules/zipimport.h: Lib/zipimport.py $(FREEZE_MODULE_BOOTSTRAP_DEPS)
11501149
$(FREEZE_MODULE_BOOTSTRAP) zipimport $(srcdir)/Lib/zipimport.py Python/frozen_modules/zipimport.h
11511150

1152-
Python/frozen_modules/abc.h: Lib/abc.py _bootstrap_python $(srcdir)/Programs/_freeze_module.py
1153-
$(FREEZE_MODULE_PY) abc $(srcdir)/Lib/abc.py Python/frozen_modules/abc.h
1151+
Python/frozen_modules/abc.h: Lib/abc.py $(FREEZE_MODULE_DEPS)
1152+
$(FREEZE_MODULE) abc $(srcdir)/Lib/abc.py Python/frozen_modules/abc.h
11541153

1155-
Python/frozen_modules/codecs.h: Lib/codecs.py _bootstrap_python $(srcdir)/Programs/_freeze_module.py
1156-
$(FREEZE_MODULE_PY) codecs $(srcdir)/Lib/codecs.py Python/frozen_modules/codecs.h
1154+
Python/frozen_modules/codecs.h: Lib/codecs.py $(FREEZE_MODULE_DEPS)
1155+
$(FREEZE_MODULE) codecs $(srcdir)/Lib/codecs.py Python/frozen_modules/codecs.h
11571156

1158-
Python/frozen_modules/io.h: Lib/io.py _bootstrap_python $(srcdir)/Programs/_freeze_module.py
1159-
$(FREEZE_MODULE_PY) io $(srcdir)/Lib/io.py Python/frozen_modules/io.h
1157+
Python/frozen_modules/io.h: Lib/io.py $(FREEZE_MODULE_DEPS)
1158+
$(FREEZE_MODULE) io $(srcdir)/Lib/io.py Python/frozen_modules/io.h
11601159

1161-
Python/frozen_modules/_collections_abc.h: Lib/_collections_abc.py _bootstrap_python $(srcdir)/Programs/_freeze_module.py
1162-
$(FREEZE_MODULE_PY) _collections_abc $(srcdir)/Lib/_collections_abc.py Python/frozen_modules/_collections_abc.h
1160+
Python/frozen_modules/_collections_abc.h: Lib/_collections_abc.py $(FREEZE_MODULE_DEPS)
1161+
$(FREEZE_MODULE) _collections_abc $(srcdir)/Lib/_collections_abc.py Python/frozen_modules/_collections_abc.h
11631162

1164-
Python/frozen_modules/_sitebuiltins.h: Lib/_sitebuiltins.py _bootstrap_python $(srcdir)/Programs/_freeze_module.py
1165-
$(FREEZE_MODULE_PY) _sitebuiltins $(srcdir)/Lib/_sitebuiltins.py Python/frozen_modules/_sitebuiltins.h
1163+
Python/frozen_modules/_sitebuiltins.h: Lib/_sitebuiltins.py $(FREEZE_MODULE_DEPS)
1164+
$(FREEZE_MODULE) _sitebuiltins $(srcdir)/Lib/_sitebuiltins.py Python/frozen_modules/_sitebuiltins.h
11661165

1167-
Python/frozen_modules/genericpath.h: Lib/genericpath.py _bootstrap_python $(srcdir)/Programs/_freeze_module.py
1168-
$(FREEZE_MODULE_PY) genericpath $(srcdir)/Lib/genericpath.py Python/frozen_modules/genericpath.h
1166+
Python/frozen_modules/genericpath.h: Lib/genericpath.py $(FREEZE_MODULE_DEPS)
1167+
$(FREEZE_MODULE) genericpath $(srcdir)/Lib/genericpath.py Python/frozen_modules/genericpath.h
11691168

1170-
Python/frozen_modules/ntpath.h: Lib/ntpath.py _bootstrap_python $(srcdir)/Programs/_freeze_module.py
1171-
$(FREEZE_MODULE_PY) ntpath $(srcdir)/Lib/ntpath.py Python/frozen_modules/ntpath.h
1169+
Python/frozen_modules/ntpath.h: Lib/ntpath.py $(FREEZE_MODULE_DEPS)
1170+
$(FREEZE_MODULE) ntpath $(srcdir)/Lib/ntpath.py Python/frozen_modules/ntpath.h
11721171

1173-
Python/frozen_modules/posixpath.h: Lib/posixpath.py _bootstrap_python $(srcdir)/Programs/_freeze_module.py
1174-
$(FREEZE_MODULE_PY) posixpath $(srcdir)/Lib/posixpath.py Python/frozen_modules/posixpath.h
1172+
Python/frozen_modules/posixpath.h: Lib/posixpath.py $(FREEZE_MODULE_DEPS)
1173+
$(FREEZE_MODULE) posixpath $(srcdir)/Lib/posixpath.py Python/frozen_modules/posixpath.h
11751174

1176-
Python/frozen_modules/os.h: Lib/os.py _bootstrap_python $(srcdir)/Programs/_freeze_module.py
1177-
$(FREEZE_MODULE_PY) os $(srcdir)/Lib/os.py Python/frozen_modules/os.h
1175+
Python/frozen_modules/os.h: Lib/os.py $(FREEZE_MODULE_DEPS)
1176+
$(FREEZE_MODULE) os $(srcdir)/Lib/os.py Python/frozen_modules/os.h
11781177

1179-
Python/frozen_modules/site.h: Lib/site.py _bootstrap_python $(srcdir)/Programs/_freeze_module.py
1180-
$(FREEZE_MODULE_PY) site $(srcdir)/Lib/site.py Python/frozen_modules/site.h
1178+
Python/frozen_modules/site.h: Lib/site.py $(FREEZE_MODULE_DEPS)
1179+
$(FREEZE_MODULE) site $(srcdir)/Lib/site.py Python/frozen_modules/site.h
11811180

1182-
Python/frozen_modules/stat.h: Lib/stat.py _bootstrap_python $(srcdir)/Programs/_freeze_module.py
1183-
$(FREEZE_MODULE_PY) stat $(srcdir)/Lib/stat.py Python/frozen_modules/stat.h
1181+
Python/frozen_modules/stat.h: Lib/stat.py $(FREEZE_MODULE_DEPS)
1182+
$(FREEZE_MODULE) stat $(srcdir)/Lib/stat.py Python/frozen_modules/stat.h
11841183

1185-
Python/frozen_modules/importlib.util.h: Lib/importlib/util.py _bootstrap_python $(srcdir)/Programs/_freeze_module.py
1186-
$(FREEZE_MODULE_PY) importlib.util $(srcdir)/Lib/importlib/util.py Python/frozen_modules/importlib.util.h
1184+
Python/frozen_modules/importlib.util.h: Lib/importlib/util.py $(FREEZE_MODULE_DEPS)
1185+
$(FREEZE_MODULE) importlib.util $(srcdir)/Lib/importlib/util.py Python/frozen_modules/importlib.util.h
11871186

1188-
Python/frozen_modules/importlib.machinery.h: Lib/importlib/machinery.py _bootstrap_python $(srcdir)/Programs/_freeze_module.py
1189-
$(FREEZE_MODULE_PY) importlib.machinery $(srcdir)/Lib/importlib/machinery.py Python/frozen_modules/importlib.machinery.h
1187+
Python/frozen_modules/importlib.machinery.h: Lib/importlib/machinery.py $(FREEZE_MODULE_DEPS)
1188+
$(FREEZE_MODULE) importlib.machinery $(srcdir)/Lib/importlib/machinery.py Python/frozen_modules/importlib.machinery.h
11901189

1191-
Python/frozen_modules/runpy.h: Lib/runpy.py _bootstrap_python $(srcdir)/Programs/_freeze_module.py
1192-
$(FREEZE_MODULE_PY) runpy $(srcdir)/Lib/runpy.py Python/frozen_modules/runpy.h
1190+
Python/frozen_modules/runpy.h: Lib/runpy.py $(FREEZE_MODULE_DEPS)
1191+
$(FREEZE_MODULE) runpy $(srcdir)/Lib/runpy.py Python/frozen_modules/runpy.h
11931192

1194-
Python/frozen_modules/__hello__.h: Lib/__hello__.py _bootstrap_python $(srcdir)/Programs/_freeze_module.py
1195-
$(FREEZE_MODULE_PY) __hello__ $(srcdir)/Lib/__hello__.py Python/frozen_modules/__hello__.h
1193+
Python/frozen_modules/__hello__.h: Lib/__hello__.py $(FREEZE_MODULE_DEPS)
1194+
$(FREEZE_MODULE) __hello__ $(srcdir)/Lib/__hello__.py Python/frozen_modules/__hello__.h
11961195

1197-
Python/frozen_modules/__phello__.h: Lib/__phello__/__init__.py _bootstrap_python $(srcdir)/Programs/_freeze_module.py
1198-
$(FREEZE_MODULE_PY) __phello__ $(srcdir)/Lib/__phello__/__init__.py Python/frozen_modules/__phello__.h
1196+
Python/frozen_modules/__phello__.h: Lib/__phello__/__init__.py $(FREEZE_MODULE_DEPS)
1197+
$(FREEZE_MODULE) __phello__ $(srcdir)/Lib/__phello__/__init__.py Python/frozen_modules/__phello__.h
11991198

1200-
Python/frozen_modules/__phello__.ham.h: Lib/__phello__/ham/__init__.py _bootstrap_python $(srcdir)/Programs/_freeze_module.py
1201-
$(FREEZE_MODULE_PY) __phello__.ham $(srcdir)/Lib/__phello__/ham/__init__.py Python/frozen_modules/__phello__.ham.h
1199+
Python/frozen_modules/__phello__.ham.h: Lib/__phello__/ham/__init__.py $(FREEZE_MODULE_DEPS)
1200+
$(FREEZE_MODULE) __phello__.ham $(srcdir)/Lib/__phello__/ham/__init__.py Python/frozen_modules/__phello__.ham.h
12021201

1203-
Python/frozen_modules/__phello__.ham.eggs.h: Lib/__phello__/ham/eggs.py _bootstrap_python $(srcdir)/Programs/_freeze_module.py
1204-
$(FREEZE_MODULE_PY) __phello__.ham.eggs $(srcdir)/Lib/__phello__/ham/eggs.py Python/frozen_modules/__phello__.ham.eggs.h
1202+
Python/frozen_modules/__phello__.ham.eggs.h: Lib/__phello__/ham/eggs.py $(FREEZE_MODULE_DEPS)
1203+
$(FREEZE_MODULE) __phello__.ham.eggs $(srcdir)/Lib/__phello__/ham/eggs.py Python/frozen_modules/__phello__.ham.eggs.h
12051204

1206-
Python/frozen_modules/__phello__.spam.h: Lib/__phello__/spam.py _bootstrap_python $(srcdir)/Programs/_freeze_module.py
1207-
$(FREEZE_MODULE_PY) __phello__.spam $(srcdir)/Lib/__phello__/spam.py Python/frozen_modules/__phello__.spam.h
1205+
Python/frozen_modules/__phello__.spam.h: Lib/__phello__/spam.py $(FREEZE_MODULE_DEPS)
1206+
$(FREEZE_MODULE) __phello__.spam $(srcdir)/Lib/__phello__/spam.py Python/frozen_modules/__phello__.spam.h
12081207

1209-
Python/frozen_modules/frozen_only.h: Tools/freeze/flag.py _bootstrap_python $(srcdir)/Programs/_freeze_module.py
1210-
$(FREEZE_MODULE_PY) frozen_only $(srcdir)/Tools/freeze/flag.py Python/frozen_modules/frozen_only.h
1208+
Python/frozen_modules/frozen_only.h: Tools/freeze/flag.py $(FREEZE_MODULE_DEPS)
1209+
$(FREEZE_MODULE) frozen_only $(srcdir)/Tools/freeze/flag.py Python/frozen_modules/frozen_only.h
12111210

12121211
# END: freezing modules
12131212

Programs/_freeze_module.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
This is used directly by Tools/scripts/freeze_modules.py, and indirectly by "make regen-frozen".
66
77
See Python/frozen.c for more info.
8+
9+
Keep this file in sync with Programs/_freeze_module.py.
810
*/
911

1012
#include <Python.h>

Programs/_freeze_module.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ def compile_and_marshal(name: str, text: bytes) -> bytes:
2424
filename = f"<frozen {name}>"
2525
# exec == Py_file_input
2626
code = compile(text, filename, "exec", optimize=0, dont_inherit=True)
27-
# defaults to Py_MARSHAL_VERSION)
2827
return marshal.dumps(code)
2928

3029

Tools/scripts/freeze_modules.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -591,10 +591,10 @@ def regen_makefile(modules):
591591

592592
if src.isbootstrap:
593593
freezecmd = '$(FREEZE_MODULE_BOOTSTRAP)'
594-
freezedep = '$(FREEZE_MODULE_C)'
594+
freezedep = '$(FREEZE_MODULE_BOOTSTRAP_DEPS)'
595595
else:
596-
freezecmd = '$(FREEZE_MODULE_PY)'
597-
freezedep = '_bootstrap_python $(srcdir)/Programs/_freeze_module.py'
596+
freezecmd = '$(FREEZE_MODULE)'
597+
freezedep = '$(FREEZE_MODULE_DEPS)'
598598

599599
freeze = (f'{freezecmd} {src.frozenid} '
600600
f'$(srcdir)/{pyfile} {frozen_header}')

configure

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -933,6 +933,9 @@ CONFIG_ARGS
933933
SOVERSION
934934
VERSION
935935
PYTHON_FOR_REGEN
936+
FREEZE_MODULE_DEPS
937+
FREEZE_MODULE
938+
FREEZE_MODULE_BOOTSTRAP_DEPS
936939
FREEZE_MODULE_BOOTSTRAP
937940
PYTHON_FOR_FREEZE
938941
PYTHON_FOR_BUILD
@@ -3240,13 +3243,26 @@ $as_echo "$PYTHON_FOR_FREEZE" >&6; }
32403243

32413244

32423245
if test "x$cross_compiling" = xyes; then :
3243-
FREEZE_MODULE_BOOTSTRAP='$(FREEZE_MODULE_PY)'
3246+
3247+
FREEZE_MODULE_BOOTSTRAP='$(PYTHON_FOR_FREEZE) $(srcdir)/Programs/_freeze_module.py'
3248+
FREEZE_MODULE_BOOTSTRAP_DEPS='$(srcdir)/Programs/_freeze_module.py'
3249+
FREEZE_MODULE='$(FREEZE_MODULE_BOOTSTRAP)'
3250+
FREEZE_MODULE_DEPS='$(FREEZE_MODULE_BOOTSTRAP_DEPS)'
3251+
32443252
else
3245-
FREEZE_MODULE_BOOTSTRAP='$(FREEZE_MODULE_C)'
3253+
3254+
FREEZE_MODULE_BOOTSTRAP='./Programs/_freeze_module'
3255+
FREEZE_MODULE_BOOTSTRAP_DEPS="Programs/_freeze_module"
3256+
FREEZE_MODULE='$(PYTHON_FOR_FREEZE) $(srcdir)/Programs/_freeze_module.py'
3257+
FREEZE_MODULE_DEPS="_bootstrap_python \$(srcdir)/Programs/_freeze_module.py"
3258+
32463259

32473260
fi
32483261

32493262

3263+
3264+
3265+
32503266
for ac_prog in python$PACKAGE_VERSION python3.10 python3.9 python3.8 python3.7 python3.6 python3 python
32513267
do
32523268
# Extract the first word of "$ac_prog", so it can be a program name with args.

configure.ac

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,10 +137,25 @@ AC_MSG_RESULT([$PYTHON_FOR_FREEZE])
137137
AC_SUBST([PYTHON_FOR_FREEZE])
138138

139139
AS_VAR_IF([cross_compiling], [yes],
140-
[FREEZE_MODULE_BOOTSTRAP='$(FREEZE_MODULE_PY)'],
141-
[FREEZE_MODULE_BOOTSTRAP='$(FREEZE_MODULE_C)']
140+
[
141+
dnl external build Python, freezing depends on Programs/_freeze_module.py
142+
FREEZE_MODULE_BOOTSTRAP='$(PYTHON_FOR_FREEZE) $(srcdir)/Programs/_freeze_module.py'
143+
FREEZE_MODULE_BOOTSTRAP_DEPS='$(srcdir)/Programs/_freeze_module.py'
144+
FREEZE_MODULE='$(FREEZE_MODULE_BOOTSTRAP)'
145+
FREEZE_MODULE_DEPS='$(FREEZE_MODULE_BOOTSTRAP_DEPS)'
146+
],
147+
[
148+
dnl internal build tools also depend on Programs/_freeze_module and _bootstrap_python.
149+
FREEZE_MODULE_BOOTSTRAP='./Programs/_freeze_module'
150+
FREEZE_MODULE_BOOTSTRAP_DEPS="Programs/_freeze_module"
151+
FREEZE_MODULE='$(PYTHON_FOR_FREEZE) $(srcdir)/Programs/_freeze_module.py'
152+
FREEZE_MODULE_DEPS="_bootstrap_python \$(srcdir)/Programs/_freeze_module.py"
153+
]
142154
)
143155
AC_SUBST([FREEZE_MODULE_BOOTSTRAP])
156+
AC_SUBST([FREEZE_MODULE_BOOTSTRAP_DEPS])
157+
AC_SUBST([FREEZE_MODULE])
158+
AC_SUBST([FREEZE_MODULE_DEPS])
144159

145160
AC_CHECK_PROGS([PYTHON_FOR_REGEN],
146161
[python$PACKAGE_VERSION python3.10 python3.9 python3.8 python3.7 python3.6 python3 python],

0 commit comments

Comments
 (0)