summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharlie Li <vishwin@FreeBSD.org>2025-06-19 15:01:45 -0400
committerCharlie Li <vishwin@FreeBSD.org>2025-06-19 15:15:56 -0400
commitccaff6c14f2078ddc0edcbf26d7ee7e48b80c2a8 (patch)
treeae6f12202573ef697bef225ed4ef1ee0e10dd77c
parentdevel/qschematic: Update to 3.0.0 (diff)
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
-rw-r--r--Mk/Uses/python.mk23
1 files 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 "