commit:     976a1ac7c56b67539e8403179abb31eba8a51674
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Sun May  8 14:04:07 2022 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Wed May 11 16:43:44 2022 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=976a1ac7

distutils-r1.eclass: Introduce sipbuild backend support

Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>

 eclass/distutils-r1.eclass | 53 ++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 51 insertions(+), 2 deletions(-)

diff --git a/eclass/distutils-r1.eclass b/eclass/distutils-r1.eclass
index 17286070e712..0962ef5e2356 100644
--- a/eclass/distutils-r1.eclass
+++ b/eclass/distutils-r1.eclass
@@ -114,6 +114,8 @@ esac
 #
 # - setuptools - distutils or setuptools (incl. legacy mode)
 #
+# - sip - sipbuild backend
+#
 # - standalone - standalone build systems without external deps
 #                (used for bootstrapping).
 #
@@ -227,6 +229,10 @@ _distutils_set_globals() {
                                        
>=dev-python/setuptools-60.5.0[${PYTHON_USEDEP}]
                                        dev-python/wheel[${PYTHON_USEDEP}]'
                                ;;
+                       sip)
+                               bdep+='
+                                       
>=dev-python/sip-6.5.0-r1[${PYTHON_USEDEP}]'
+                               ;;
                        standalone)
                                ;;
                        *)
@@ -388,8 +394,19 @@ unset -f _distutils_set_globals
 # @ECLASS_VARIABLE: DISTUTILS_ARGS
 # @DEFAULT_UNSET
 # @DESCRIPTION:
-# An array containing options to be passed to setup.py.  They are passed
-# before the default arguments, i.e. before the first command.
+# An array containing options to be passed to the build system.
+# Supported by a subset of build systems used by the eclass.
+#
+# For setuptools, the arguments will be passed as first parameters
+# to setup.py invocations (via esetup.py), as well as to the PEP517
+# backend.  For future compatibility, only global options should be used
+# and specifying commands should be avoided.
+#
+# For sip, the options are passed to the PEP517 backend in a form
+# resembling sip-build calls.  Options taking arguments need to
+# be specified in the "--key=value" form, while flag options as "--key".
+# If an option takes multiple arguments, it can be specified multiple
+# times, same as for sip-build.
 #
 # Example:
 # @CODE
@@ -920,6 +937,11 @@ _distutils-r1_print_package_versions() {
                                        dev-python/wheel
                                )
                                ;;
+                       sip)
+                               packages+=(
+                                       dev-python/sip
+                               )
+                               ;;
                esac
        else
                case ${DISTUTILS_USE_SETUPTOOLS} in
@@ -1104,6 +1126,9 @@ _distutils-r1_backend_to_key() {
                setuptools.build_meta|setuptools.build_meta:__legacy__)
                        echo setuptools
                        ;;
+               sipbuild.api)
+                       echo sip
+                       ;;
                *)
                        die "Unknown backend: ${backend}"
                        ;;
@@ -1202,6 +1227,30 @@ distutils_pep517_install() {
                                        EOF
                                )
                                ;;
+                       sip)
+                               # NB: for practical reasons, we support only 
--foo=bar,
+                               # not --foo bar
+                               local arg
+                               for arg in "${DISTUTILS_ARGS[@]}"; do
+                                       [[ ${arg} != -* ]] &&
+                                               die "Bare arguments in 
DISTUTILS_ARGS unsupported: ${arg}"
+                               done
+
+                               config_settings=$(
+                                       "${EPYTHON}" - "${DISTUTILS_ARGS[@]}" 
<<-EOF || die
+                                               import collections
+                                               import json
+                                               import sys
+
+                                               args = 
collections.defaultdict(list)
+                                               for arg in (x.split("=", 1) for 
x in sys.argv[1:]): \
+                                                       args[arg[0]].extend(
+                                                               [arg[1]] if 
len(arg) > 1 else [])
+
+                                               print(json.dumps(args))
+                                       EOF
+                               )
+                               ;;
                        *)
                                die "DISTUTILS_ARGS are not supported by 
${DISTUTILS_USE_PEP517}"
                                ;;

Reply via email to