@@ -6,6 +6,8 @@ BUILD := $(HERE)/build.py
6
6
NULL :=
7
7
SPACE := $(subst ,, )
8
8
9
+ ALL_PYTHON_VERSIONS := 3.9 3.10 3.11 3.12 3.13
10
+
9
11
ifndef PYBUILD_TARGET_TRIPLE
10
12
$(error PYBUILD_TARGET_TRIPLE not defined)
11
13
endif
@@ -68,7 +70,7 @@ PYTHON_DEP_DEPENDS := \
68
70
$(TOOLCHAIN_DEPENDS ) \
69
71
$(NULL )
70
72
71
- default : $(OUTDIR ) /cpython-$(PYBUILD_PYTHON_VERSION ) -$(PACKAGE_SUFFIX ) .tar
73
+ default : $(OUTDIR ) /cpython-$(CPYTHON_ $( PYTHON_MAJOR_VERSION ) _VERSION ) -$(PACKAGE_SUFFIX ) .tar
72
74
73
75
ifndef PYBUILD_NO_DOCKER
74
76
$(OUTDIR ) /image-% .tar : $(OUTDIR ) /% .Dockerfile
@@ -254,65 +256,48 @@ PYTHON_HOST_DEPENDS := \
254
256
$(OUTDIR ) /m4-$(M4_VERSION ) -$(PACKAGE_SUFFIX ) .tar \
255
257
$(NULL )
256
258
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