git: 600312a9118b - main - Mk/Uses/python.mk: Add USE_PYTHON=build to support pyproject.toml based projects

From: Yuri Victorovich <yuri_at_FreeBSD.org>
Date: Sun, 21 Aug 2022 20:16:10 UTC
The branch main has been updated by yuri:

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

commit 600312a9118bc7b9c5bb7decbefe706f9046507b
Author:     Yuri Victorovich <yuri@FreeBSD.org>
AuthorDate: 2022-08-21 19:46:39 +0000
Commit:     Yuri Victorovich <yuri@FreeBSD.org>
CommitDate: 2022-08-21 20:16:06 +0000

    Mk/Uses/python.mk: Add USE_PYTHON=build to support pyproject.toml based projects
    
    USE_PYTHON=build supports PEP-517 at the level of individual ports.
    Global support (making PEP-517 be used for all ports) is outside of the
    scope of this patch.
    
    PR:             255722
    Approved by:    python (maintainer's timeout; 14 days)
    Differential Revision:  https://reviews.freebsd.org/D36061
---
 Mk/Uses/python.mk | 48 +++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 47 insertions(+), 1 deletion(-)

diff --git a/Mk/Uses/python.mk b/Mk/Uses/python.mk
index fa7c7b7b7084..492cfe055773 100644
--- a/Mk/Uses/python.mk
+++ b/Mk/Uses/python.mk
@@ -103,6 +103,9 @@
 #	distutils	- Use distutils as do-configure, do-build and
 #			  do-install targets. implies flavors.
 #
+#	build		- Use build/installer as do-build and
+#			  do-install targets. implies flavors.
+#
 #	autoplist	- Automatically generates the packaging list for a
 #			  port that uses distutils when defined.
 #			  requires: distutils
@@ -281,7 +284,7 @@ _PYTHON_BASECMD=		${LOCALBASE}/bin/python
 _PYTHON_RELPORTDIR=		lang/python
 
 # List all valid USE_PYTHON features here
-_VALID_PYTHON_FEATURES=	allflavors autoplist concurrent cython cython_run \
+_VALID_PYTHON_FEATURES=	allflavors autoplist build concurrent cython cython_run \
 			distutils flavors noegginfo noflavors nose nose2 \
 			optsuffix py3kplist pytest pytest4 pythonprefix \
 			unittest unittest2
@@ -309,6 +312,12 @@ IGNORE=		uses either USE_PYTHON=pytest or USE_PYTHON=pytest4, not both of them
 _PYTHON_FEATURE_FLAVORS=	yes
 .  endif
 
+# build automatically generates flavors depending on the supported
+# versions.
+.  if defined(_PYTHON_FEATURE_BUILD)
+_PYTHON_FEATURE_FLAVORS=	yes
+.  endif
+
 .  if defined(_PYTHON_FEATURE_NOFLAVORS)
 .undef _PYTHON_FEATURE_FLAVORS
 .  endif
@@ -595,6 +604,26 @@ RUN_DEPENDS+=		${PYTHON_PKGNAMEPREFIX}setuptools>=63.1.0:devel/py-setuptools@${P
 .    endif
 .  endif
 
+.  if defined(_PYTHON_FEATURE_BUILD)
+.    if ${PYTHON_VER} == 2.7
+DEV_ERROR+=		"USES=python:2.7 is incompatible with USE_PYTHON=build"
+.    endif
+.    if defined(_PYTHON_FEATURE_DISTUTILS)
+DEV_ERROR+=		"USE_PYTHON=distutils is incompatible with USE_PYTHON=build"
+.    endif
+.    if defined(_PYTHON_FEATURE_AUTOPLIST)
+DEV_ERROR+=		"USE_PYTHON=autoplist is incompatible with USE_PYTHON=build"
+.    endif
+.    if defined(_PYTHON_FEATURE_PY3KPLIST)
+DEV_ERROR+=		"USE_PYTHON=py3kplist is incompatible with USE_PYTHON=build"
+.    endif
+.    if defined(_PYTHON_FEATURE_NOEGGINFO)
+DEV_ERROR+=		"USE_PYTHON=noegginfo is incompatible with USE_PYTHON=build"
+.    endif
+BUILD_DEPENDS+=		${PYTHON_PKGNAMEPREFIX}build>0:devel/py-build@${PY_FLAVOR} \
+			${PYTHON_PKGNAMEPREFIX}installer>0:devel/py-installer@${PY_FLAVOR}
+.  endif
+
 # distutils support
 PYSETUP?=		setup.py
 PYDISTUTILS_SETUP?=	-c \
@@ -790,6 +819,23 @@ do-install:
 .    endif
 .  endif # defined(_PYTHON_FEATURE_DISTUTILS)
 
+.  if defined(_PYTHON_FEATURE_BUILD)
+.    if !target(do-configure)
+do-configure:
+	@${DO_NADA}
+.    endif
+
+.    if !target(do-build)
+do-build:
+	@cd ${BUILD_WRKSRC} && ${SETENV} ${MAKE_ENV} ${PYTHON_CMD} -m build --wheel --no-isolation --outdir ${WRKDIR}
+.    endif
+
+.    if !target(do-install)
+do-install:
+	@cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${PYTHON_CMD} -m installer ${WRKDIR}/*.whl --destdir ${STAGEDIR}
+.    endif
+.  endif # defined(_PYTHON_FEATURE_BUILD)
+
 .  if defined(_PYTHON_FEATURE_NOSE)
 .    if !target(do-test)
 do-test: