@@ -6,6 +6,8 @@ BUILD := $(HERE)/build.py
66NULL :=
77SPACE := $(subst ,, )
88
9+ ALL_PYTHON_VERSIONS := 3.9 3.10 3.11 3.12 3.13
10+
911ifndef PYBUILD_TARGET_TRIPLE
1012 $(error PYBUILD_TARGET_TRIPLE not defined)
1113endif
@@ -68,7 +70,7 @@ PYTHON_DEP_DEPENDS := \
6870 $(TOOLCHAIN_DEPENDS ) \
6971 $(NULL )
7072
71- default : $(OUTDIR ) /cpython-$(PYBUILD_PYTHON_VERSION ) -$(PACKAGE_SUFFIX ) .tar
73+ default : $(OUTDIR ) /cpython-$(CPYTHON_ $( PYTHON_MAJOR_VERSION ) _VERSION ) -$(PACKAGE_SUFFIX ) .tar
7274
7375ifndef PYBUILD_NO_DOCKER
7476$(OUTDIR ) /image-% .tar : $(OUTDIR ) /% .Dockerfile
@@ -254,26 +256,15 @@ PYTHON_HOST_DEPENDS := \
254256 $(OUTDIR ) /m4-$(M4_VERSION ) -$(PACKAGE_SUFFIX ) .tar \
255257 $(NULL )
256258
257- $(OUTDIR ) /cpython-3.9-$(CPYTHON_3.9_VERSION ) -$(HOST_PLATFORM ) .tar : $(PYTHON_HOST_DEPENDS )
258- $(RUN_BUILD ) --docker-image $(DOCKER_IMAGE_BUILD ) cpython-3.9-host
259-
260- $(OUTDIR ) /cpython-3.10-$(CPYTHON_3.10_VERSION ) -$(HOST_PLATFORM ) .tar : $(PYTHON_HOST_DEPENDS )
261- $(RUN_BUILD ) --docker-image $(DOCKER_IMAGE_BUILD ) cpython-3.10-host
262-
263- $(OUTDIR ) /cpython-3.11-$(CPYTHON_3.11_VERSION ) -$(HOST_PLATFORM ) .tar : $(PYTHON_HOST_DEPENDS )
264- $(RUN_BUILD ) --docker-image $(DOCKER_IMAGE_BUILD ) cpython-3.11-host
265-
266- $(OUTDIR ) /cpython-3.12-$(CPYTHON_3.12_VERSION ) -$(HOST_PLATFORM ) .tar : $(PYTHON_HOST_DEPENDS )
267- $(RUN_BUILD ) --docker-image $(DOCKER_IMAGE_BUILD ) cpython-3.12-host
268-
269- $(OUTDIR ) /cpython-3.13-$(CPYTHON_3.13_VERSION ) -$(HOST_PLATFORM ) .tar : $(PYTHON_HOST_DEPENDS )
270- $(RUN_BUILD ) --docker-image $(DOCKER_IMAGE_BUILD ) cpython-3.13-host
271-
272- PYTHON_DEPENDS := \
259+ # Each X.Y Python version has its own set of variables and targets. This independent
260+ # definition allows multiple Python versions to be built using the same Makefile
261+ # invocation.
262+ define python_version_template =
263+ PYTHON_DEPENDS_$(1 ) := \
273264 $(PYTHON_SUPPORT_FILES ) \
274265 $(OUTDIR ) /versions/VERSION.pip \
275266 $(OUTDIR ) /versions/VERSION.setuptools \
276- $(OUTDIR ) /cpython-$(PYTHON_MAJOR_VERSION ) -$( PYBUILD_PYTHON_VERSION ) -$(HOST_PLATFORM ) .tar \
267+ $(OUTDIR ) /cpython-$(1 ) -$$( CPYTHON_ $( 1 ) _VERSION ) -$(HOST_PLATFORM ) .tar \
277268 $(if $(NEED_AUTOCONF ) ,$(OUTDIR ) /autoconf-$(AUTOCONF_VERSION ) -$(PACKAGE_SUFFIX ) .tar) \
278269 $(if $(NEED_BDB ) ,$(OUTDIR ) /bdb-$(BDB_VERSION ) -$(PACKAGE_SUFFIX ) .tar) \
279270 $(if $(NEED_BZIP2 ) ,$(OUTDIR ) /bzip2-$(BZIP2_VERSION ) -$(PACKAGE_SUFFIX ) .tar) \
@@ -296,23 +287,17 @@ PYTHON_DEPENDS := \
296287 $(if $(NEED_ZLIB ) ,$(OUTDIR ) /zlib-$(ZLIB_VERSION ) -$(PACKAGE_SUFFIX ) .tar) \
297288 $(NULL )
298289
299- ALL_PYTHON_DEPENDS = \
300- $(PYTHON_DEP_DEPENDS ) \
301- $(HERE ) /build-cpython.sh \
302- $(PYTHON_DEPENDS ) \
303- $(NULL )
304-
305- $(OUTDIR ) /cpython-$(CPYTHON_3.9_VERSION ) -$(PACKAGE_SUFFIX ) .tar : $(ALL_PYTHON_DEPENDS )
306- $(RUN_BUILD ) --docker-image $(DOCKER_IMAGE_BUILD ) cpython-3.9
307-
308- $(OUTDIR ) /cpython-$(CPYTHON_3.10_VERSION ) -$(PACKAGE_SUFFIX ) .tar : $(ALL_PYTHON_DEPENDS )
309- $(RUN_BUILD ) --docker-image $(DOCKER_IMAGE_BUILD ) cpython-3.10
290+ ALL_PYTHON_DEPENDS_$(1 ) = \
291+ $$(PYTHON_DEP_DEPENDS ) \
292+ $$(HERE ) /build-cpython.sh \
293+ $$(PYTHON_DEPENDS_$(1 ) ) \
294+ $$(NULL )
310295
311- $(OUTDIR ) /cpython-$(CPYTHON_3.11_VERSION ) -$( PACKAGE_SUFFIX ) .tar : $( ALL_PYTHON_DEPENDS )
312- $(RUN_BUILD ) --docker-image $(DOCKER_IMAGE_BUILD ) cpython-3.11
296+ $$ (OUTDIR ) /cpython-$(1 ) -$$( CPYTHON_ $( 1 ) _VERSION ) - $$( HOST_PLATFORM ) .tar: $$( PYTHON_HOST_DEPENDS )
297+ $$ (RUN_BUILD ) --docker-image $$ (DOCKER_IMAGE_BUILD ) cpython-$( 1 ) -host
313298
314- $(OUTDIR ) /cpython-$(CPYTHON_3.12_VERSION ) -$(PACKAGE_SUFFIX ) .tar : $(ALL_PYTHON_DEPENDS )
315- $(RUN_BUILD ) --docker-image $(DOCKER_IMAGE_BUILD ) cpython-3.12
299+ $$(OUTDIR ) /cpython-$$(CPYTHON_$(1 ) _VERSION ) -$$(PACKAGE_SUFFIX ) .tar: $$(ALL_PYTHON_DEPENDS_$(1 ) )
300+ $$(RUN_BUILD ) --docker-image $$(DOCKER_IMAGE_BUILD ) cpython-$(1 )
301+ endef
316302
317- $(OUTDIR ) /cpython-$(CPYTHON_3.13_VERSION ) -$(PACKAGE_SUFFIX ) .tar : $(ALL_PYTHON_DEPENDS )
318- $(RUN_BUILD ) --docker-image $(DOCKER_IMAGE_BUILD ) cpython-3.13
303+ $(foreach local_version,$(ALL_PYTHON_VERSIONS),$(eval $(call python_version_template,$(local_version))))
0 commit comments