@@ -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,65 +256,48 @@ 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 := \
273- $(PYTHON_SUPPORT_FILES ) \
274- $(OUTDIR ) /versions/VERSION.pip \
275- $(OUTDIR ) /versions/VERSION.setuptools \
276- $(OUTDIR ) /cpython-$(PYTHON_MAJOR_VERSION ) -$(PYBUILD_PYTHON_VERSION ) -$(HOST_PLATFORM ) .tar \
277- $(if $(NEED_AUTOCONF ) ,$(OUTDIR ) /autoconf-$(AUTOCONF_VERSION ) -$(PACKAGE_SUFFIX ) .tar) \
278- $(if $(NEED_BDB ) ,$(OUTDIR ) /bdb-$(BDB_VERSION ) -$(PACKAGE_SUFFIX ) .tar) \
279- $(if $(NEED_BZIP2 ) ,$(OUTDIR ) /bzip2-$(BZIP2_VERSION ) -$(PACKAGE_SUFFIX ) .tar) \
280- $(if $(NEED_EXPAT ) ,$(OUTDIR ) /expat-$(EXPAT_VERSION ) -$(PACKAGE_SUFFIX ) .tar) \
281- $(if $(NEED_LIBEDIT ) ,$(OUTDIR ) /libedit-$(LIBEDIT_VERSION ) -$(PACKAGE_SUFFIX ) .tar) \
282- $(if $(NEED_LIBFFI_3_3 ) ,$(OUTDIR ) /libffi-3.3-$(LIBFFI_3.3_VERSION ) -$(PACKAGE_SUFFIX ) .tar) \
283- $(if $(NEED_LIBFFI ) ,$(OUTDIR ) /libffi-$(LIBFFI_VERSION ) -$(PACKAGE_SUFFIX ) .tar) \
284- $(if $(NEED_m4 ) ,$(OUTDIR ) /m4-$(M4_VERSION ) -$(PACKAGE_SUFFIX ) .tar) \
285- $(if $(NEED_MPDECIMAL ) ,$(OUTDIR ) /mpdecimal-$(MPDECIMAL_VERSION ) -$(PACKAGE_SUFFIX ) .tar) \
286- $(if $(NEED_NCURSES ) ,$(OUTDIR ) /ncurses-$(NCURSES_VERSION ) -$(PACKAGE_SUFFIX ) .tar) \
287- $(if $(NEED_OPENSSL_1_1 ) ,$(OUTDIR ) /openssl-1.1-$(OPENSSL_1.1_VERSION ) -$(PACKAGE_SUFFIX ) .tar) \
288- $(if $(NEED_OPENSSL_3_0 ) ,$(OUTDIR ) /openssl-3.0-$(OPENSSL_3.0_VERSION ) -$(PACKAGE_SUFFIX ) .tar) \
289- $(if $(NEED_PATCHELF ) ,$(OUTDIR ) /patchelf-$(PATCHELF_VERSION ) -$(PACKAGE_SUFFIX ) .tar) \
290- $(if $(NEED_SQLITE ) ,$(OUTDIR ) /sqlite-$(SQLITE_VERSION ) -$(PACKAGE_SUFFIX ) .tar) \
291- $(if $(NEED_TCL ) ,$(OUTDIR ) /tcl-$(TCL_VERSION ) -$(PACKAGE_SUFFIX ) .tar) \
292- $(if $(NEED_TK ) ,$(OUTDIR ) /tk-$(TK_VERSION ) -$(PACKAGE_SUFFIX ) .tar) \
293- $(if $(NEED_TIX ) ,$(OUTDIR ) /tix-$(TIX_VERSION ) -$(PACKAGE_SUFFIX ) .tar) \
294- $(if $(NEED_UUID ) ,$(OUTDIR ) /uuid-$(UUID_VERSION ) -$(PACKAGE_SUFFIX ) .tar) \
295- $(if $(NEED_XZ ) ,$(OUTDIR ) /xz-$(XZ_VERSION ) -$(PACKAGE_SUFFIX ) .tar) \
296- $(if $(NEED_ZLIB ) ,$(OUTDIR ) /zlib-$(ZLIB_VERSION ) -$(PACKAGE_SUFFIX ) .tar) \
297- $(NULL )
298-
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
310-
311- $(OUTDIR ) /cpython-$(CPYTHON_3.11_VERSION ) -$(PACKAGE_SUFFIX ) .tar : $(ALL_PYTHON_DEPENDS )
312- $(RUN_BUILD ) --docker-image $(DOCKER_IMAGE_BUILD ) cpython-3.11
313-
314- $(OUTDIR ) /cpython-$(CPYTHON_3.12_VERSION ) -$(PACKAGE_SUFFIX ) .tar : $(ALL_PYTHON_DEPENDS )
315- $(RUN_BUILD ) --docker-image $(DOCKER_IMAGE_BUILD ) cpython-3.12
316-
317- $(OUTDIR ) /cpython-$(CPYTHON_3.13_VERSION ) -$(PACKAGE_SUFFIX ) .tar : $(ALL_PYTHON_DEPENDS )
318- $(RUN_BUILD ) --docker-image $(DOCKER_IMAGE_BUILD ) cpython-3.13
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 ) := \
264+ $$(PYTHON_SUPPORT_FILES ) \
265+ $$(OUTDIR ) /versions/VERSION.pip \
266+ $$(OUTDIR ) /versions/VERSION.setuptools \
267+ $$(OUTDIR ) /cpython-$(1 ) -$$(CPYTHON_$(1 ) _VERSION ) -$$(HOST_PLATFORM ) .tar \
268+ $$(if$$(NEED_AUTOCONF ) ,$$(OUTDIR ) /autoconf-$$(AUTOCONF_VERSION ) -$$(PACKAGE_SUFFIX ) .tar ) \
269+ $$(if $$(NEED_BDB ) ,$$(OUTDIR ) /bdb-$$(BDB_VERSION ) -$$(PACKAGE_SUFFIX ) .tar) \
270+ $$(if $$(NEED_BZIP2 ) ,$$(OUTDIR ) /bzip2-$$(BZIP2_VERSION ) -$$(PACKAGE_SUFFIX ) .tar) \
271+ $$(if $$(NEED_EXPAT ) ,$$(OUTDIR ) /expat-$$(EXPAT_VERSION ) -$$(PACKAGE_SUFFIX ) .tar) \
272+ $$(if $$(NEED_LIBEDIT ) ,$$(OUTDIR ) /libedit-$$(LIBEDIT_VERSION ) -$$(PACKAGE_SUFFIX ) .tar) \
273+ $$(if $$(NEED_LIBFFI_3_3 ) ,$$(OUTDIR ) /libffi-3.3-$$(LIBFFI_3.3_VERSION ) -$$(PACKAGE_SUFFIX ) .tar) \
274+ $$(if $$(NEED_LIBFFI ) ,$$(OUTDIR ) /libffi-$$(LIBFFI_VERSION ) -$$(PACKAGE_SUFFIX ) .tar) \
275+ $$(if $$(NEED_m4 ) ,$$(OUTDIR ) /m4-$$(M4_VERSION ) -$$(PACKAGE_SUFFIX ) .tar) \
276+ $$(if $$(NEED_MPDECIMAL ) ,$$(OUTDIR ) /mpdecimal-$$(MPDECIMAL_VERSION ) -$$(PACKAGE_SUFFIX ) .tar) \
277+ $$(if $$(NEED_NCURSES ) ,$$(OUTDIR ) /ncurses-$$(NCURSES_VERSION ) -$$(PACKAGE_SUFFIX ) .tar) \
278+ $$(if $$(NEED_OPENSSL_1_1 ) ,$$(OUTDIR ) /openssl-1.1-$$(OPENSSL_1.1_VERSION ) -$$(PACKAGE_SUFFIX ) .tar) \
279+ $$(if $$(NEED_OPENSSL_3_0 ) ,$$(OUTDIR ) /openssl-3.0-$$(OPENSSL_3.0_VERSION ) -$$(PACKAGE_SUFFIX ) .tar) \
280+ $$(if $$(NEED_PATCHELF ) ,$$(OUTDIR ) /patchelf-$$(PATCHELF_VERSION ) -$$(PACKAGE_SUFFIX ) .tar) \
281+ $$(if $$(NEED_SQLITE ) ,$$(OUTDIR ) /sqlite-$$(SQLITE_VERSION ) -$$(PACKAGE_SUFFIX ) .tar) \
282+ $$(if $$(NEED_TCL ) ,$$(OUTDIR ) /tcl-$$(TCL_VERSION ) -$$(PACKAGE_SUFFIX ) .tar) \
283+ $$(if $$(NEED_TK ) ,$$(OUTDIR ) /tk-$$(TK_VERSION ) -$$(PACKAGE_SUFFIX ) .tar) \
284+ $$(if $$(NEED_TIX ) ,$$(OUTDIR ) /tix-$$(TIX_VERSION ) -$$(PACKAGE_SUFFIX ) .tar) \
285+ $$(if $$(NEED_UUID ) ,$$(OUTDIR ) /uuid-$$(UUID_VERSION ) -$$(PACKAGE_SUFFIX ) .tar) \
286+ $$(if $$(NEED_XZ ) ,$$(OUTDIR ) /xz-$$(XZ_VERSION ) -$$(PACKAGE_SUFFIX ) .tar) \
287+ $$(if $$(NEED_ZLIB ) ,$$(OUTDIR ) /zlib-$$(ZLIB_VERSION ) -$$(PACKAGE_SUFFIX ) .tar) \
288+ $$(NULL )
289+
290+ ALL_PYTHON_DEPENDS_$(1 ) = \
291+ $$(PYTHON_DEP_DEPENDS ) \
292+ $$(HERE ) /build-cpython.sh \
293+ $$(PYTHON_DEPENDS_$(1 ) ) \
294+ $$(NULL )
295+
296+ $$(OUTDIR ) /cpython-$(1 ) -$$(CPYTHON_$(1 ) _VERSION ) -$$(HOST_PLATFORM ) .tar: $$(PYTHON_HOST_DEPENDS )
297+ $$(RUN_BUILD ) --docker-image $$(DOCKER_IMAGE_BUILD ) cpython-$(1 ) -host
298+
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
302+
303+ $(foreach local_version,$(ALL_PYTHON_VERSIONS),$(eval $(call python_version_template,$(local_version))))
0 commit comments