diff options
author | Charlie Li <vishwin@FreeBSD.org> | 2025-06-19 15:01:45 -0400 |
---|---|---|
committer | Charlie Li <vishwin@FreeBSD.org> | 2025-06-19 15:15:56 -0400 |
commit | ccaff6c14f2078ddc0edcbf26d7ee7e48b80c2a8 (patch) | |
tree | ae6f12202573ef697bef225ed4ef1ee0e10dd77c | |
parent | devel/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.mk | 23 |
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 " |