Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 19 Jun 2025 19:16:00 GMT
From:      Charlie Li <vishwin@FreeBSD.org>
To:        ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org
Subject:   git: ccaff6c14f20 - main - python.mk: prepare handling versions with ABI flags appended
Message-ID:  <202506191916.55JJG0xi049941@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by vishwin:

URL: https://cgit.FreeBSD.org/ports/commit/?id=ccaff6c14f2078ddc0edcbf26d7ee7e48b80c2a8

commit ccaff6c14f2078ddc0edcbf26d7ee7e48b80c2a8
Author:     Charlie Li <vishwin@FreeBSD.org>
AuthorDate: 2025-06-19 19:01:45 +0000
Commit:     Charlie Li <vishwin@FreeBSD.org>
CommitDate: 2025-06-19 19:15:56 +0000

    python.mk: prepare handling versions with ABI flags appended
    
    Starting Python 3.13 there is an experimental free-threaded mode
    that effectively warrants a separate distribution from "vanilla"
    3.13. This mode includes appends an ABI flag so the resulting version
    is 3.13t. Some of the logic for comparing versions and generating
    flavours, amongst others, breaks since "3.13t" is not numeric, so
    adjust accordingly. Also account for 3.13t being a child port as
    the difference is one configure flag.
    
    To this effect, introduce two new read-only public variables,
    PYTHON_BASESUFFIX and PYTHON_BASEVER, for cases where the ABI flag
    in PYTHON_SUFFIX and PYTHON_VER is not warranted. Shift PYTHON_EXT_SUFFIX
    to use PYTHON_BASESUFFIX.
    
    PR: 274671
    Event: Kitchener-Waterloo Hackathon 202506
---
 Mk/Uses/python.mk | 23 +++++++++++++++++------
 1 file changed, 17 insertions(+), 6 deletions(-)

diff --git a/Mk/Uses/python.mk b/Mk/Uses/python.mk
index bffb94c62e04..d2b0462b974f 100644
--- a/Mk/Uses/python.mk
+++ b/Mk/Uses/python.mk
@@ -235,12 +235,16 @@
 #			  interpreter without dots, e.g. 27, 38, ...
 #			  Used for prefixes and suffixes.
 #
+# PYTHON_BASESUFFIX	- PYTHON_SUFFIX without the threaded ABI flag.
+#
 # PYTHON_MAJOR_VER	- The major release version of the chosen Python
 #			  interpreter, e.g. 2, 3, ...
 #
 # PYTHON_VER		- The major-minor release version of the chosen Python
 #			  interpreter, e.g. 2.7, 3.9, ...
 #
+# PYTHON_BASEVER	- PYTHON_VER without the threaded ABI flag.
+#
 # PYTHON_ABIVER		- Additional ABI flags set by the chosen Python
 #			  interpreter, e.g. md
 #
@@ -284,7 +288,9 @@
 #	PYTHON_PLATFORM=${PYTHON_PLATFORM}
 #	PYTHON_SITELIBDIR=${PYTHONPREFIX_SITELIBDIR}
 #	PYTHON_SUFFIX=${PYTHON_SUFFIX}
+#	PYTHON_BASESUFFIX=${PYTHON_BASESUFFIX}
 #	PYTHON_VER=${PYTHON_VER}
+#	PYTHON_BASEVER=${PYTHON_BASEVER}
 #	PYTHON_VERSION=${PYTHON_VERSION}
 #
 # where PYTHON_INCLUDEDIR, PYTHON_LIBDIR and PYTHON_SITELIBDIR have their PREFIX
@@ -457,7 +463,7 @@ IGNORE=	uses unknown USES=python arguments: ${_PYTHON_ARGS}
 .  endif
 
 # Pattern to convert python versions (X.Y or X.YY) to comparable format X.YY
-_VC=		C/^([1-9]\.)([0-9])$$/\10\2/
+_VC=		C/^([1-9]\.)([0-9])$$/\10\2/:S/t$///
 
 .undef _PYTHON_VERSION_NONSUPPORTED
 .  if !empty(_PYTHON_VERSION_MINIMUM) && (${_PYTHON_VERSION:${_VC}} < ${_PYTHON_VERSION_MINIMUM:${_VC}})
@@ -525,7 +531,7 @@ FLAVOR=	${FLAVORS:[1]}
 .    endif
 .  endif
 
-.  if ${FLAVOR:Mpy[23][0-9]}${FLAVOR:Mpy[23][1-9][0-9]}
+.  if ${FLAVOR:Mpy[23][0-9]}${FLAVOR:Mpy[23][1-9][0-9]}${FLAVOR:Mpy31[3-9]t}
 _PYTHON_VERSION=	${FLAVOR:S/py//:C/(.)/\1./}
 .  endif
 
@@ -548,7 +554,9 @@ PYTHON_VERSION=	python${_PYTHON_VERSION}
 
 # Got the correct python version, set some publicly accessible variables
 PYTHON_VER=		${_PYTHON_VERSION}
+PYTHON_BASEVER=		${PYTHON_VER:S/t$//}
 PYTHON_SUFFIX=		${_PYTHON_VERSION:S/.//g}
+PYTHON_BASESUFFIX=	${PYTHON_SUFFIX:S/t$//}
 PYTHON_MAJOR_VER=	${PYTHON_VER:R}
 PYTHON_REL=		# empty
 PYTHON_ABIVER=		# empty
@@ -556,12 +564,11 @@ PYTHON_PORTSDIR=	${_PYTHON_RELPORTDIR}${PYTHON_SUFFIX}
 
 # Protect partial checkouts from Mk/Scripts/functions.sh:export_ports_env().
 .  if !defined(_PORTS_ENV_CHECK) || exists(${PORTSDIR}/${PYTHON_PORTSDIR})
-.include "${PORTSDIR}/${PYTHON_PORTSDIR}/Makefile.version"
+.include "${PORTSDIR}/${PYTHON_PORTSDIR:S/t$//}/Makefile.version"
 .  endif
 # Create a 5 integer version string, prefixing 0 to the minor and patch
 # tokens if it's a single character. Only use the first 3 tokens of
-# PORTVERSION to support pre-release versions (rc3, alpha4, etc) of
-# any Python port (lang/pythonXY)
+# DISTVERSION to stay consistent regardless of pre-release or ABI flags
 PYTHON_REL=	${PYTHON_DISTVERSION:C/^([0-9]+\.[0-9]+\.[0-9]+).*/\1/:C/\.([0-9])$/.0\1/:C/\.([0-9]\.[0-9]+)/.0\1/:S/.//g}
 
 # Might be overridden by calling ports
@@ -573,7 +580,7 @@ PYTHON_ABIVER!=		${PYTHON_CMD}-config --abiflags
 .  endif
 
 .  if ${PYTHON_REL} >= 30807
-PYTHON_EXT_SUFFIX=	.cpython-${PYTHON_SUFFIX}
+PYTHON_EXT_SUFFIX=	.cpython-${PYTHON_BASESUFFIX}
 .  else
 PYTHON_EXT_SUFFIX=	# empty
 .  endif
@@ -894,8 +901,10 @@ SUB_LIST+=	PYTHON_INCLUDEDIR=${PYTHONPREFIX_INCLUDEDIR} \
 		PYTHON_PLATFORM=${PYTHON_PLATFORM} \
 		PYTHON_SITELIBDIR=${PYTHONPREFIX_SITELIBDIR} \
 		PYTHON_SUFFIX=${PYTHON_SUFFIX} \
+		PYTHON_BASESUFFIX=${PYTHON_BASESUFFIX} \
 		PYTHON_EXT_SUFFIX=${PYTHON_EXT_SUFFIX} \
 		PYTHON_VER=${PYTHON_VER} \
+		PYTHON_BASEVER=${PYTHON_BASEVER} \
 		PYTHON_VERSION=${PYTHON_VERSION}
 
 # Substitutions for pkg-plist
@@ -906,8 +915,10 @@ PLIST_SUB+=	PYTHON_INCLUDEDIR=${PYTHONPREFIX_INCLUDEDIR:S;${PREFIX}/;;} \
 		PYTHON_PLATFORM=${PYTHON_PLATFORM} \
 		PYTHON_SITELIBDIR=${PYTHONPREFIX_SITELIBDIR:S;${PREFIX}/;;} \
 		PYTHON_SUFFIX=${PYTHON_SUFFIX} \
+		PYTHON_BASESUFFIX=${PYTHON_BASESUFFIX} \
 		PYTHON_EXT_SUFFIX=${PYTHON_EXT_SUFFIX} \
 		PYTHON_VER=${PYTHON_VER} \
+		PYTHON_BASEVER=${PYTHON_BASEVER} \
 		PYTHON_VERSION=${PYTHON_VERSION}
 .  if ${PYTHON_MAJOR_VER} < 3
 SUB_LIST+=	PYTHON2="" PYTHON3="@comment "


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202506191916.55JJG0xi049941>