commit:     58ee906da23e6e5e7d51289e45b33af9ca6f45e6
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Sun May  8 12:50:12 2022 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Wed May 11 16:43:42 2022 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=58ee906d

dev-python/sip: Backport PEP517 argument passing support

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

 dev-python/sip/files/sip-6.5.0-pep517-args.patch | 190 +++++++++++++++++++++++
 dev-python/sip/sip-6.5.0-r1.ebuild               |  36 +++++
 2 files changed, 226 insertions(+)

diff --git a/dev-python/sip/files/sip-6.5.0-pep517-args.patch 
b/dev-python/sip/files/sip-6.5.0-pep517-args.patch
new file mode 100644
index 000000000000..c4d39dcf6156
--- /dev/null
+++ b/dev-python/sip/files/sip-6.5.0-pep517-args.patch
@@ -0,0 +1,190 @@
+Backport from https://www.riverbankcomputing.com/hg/sip/
+
+changeset:   2771:8543f04b374f
+branch:      6.6-maint
+tag:         tip
+user:        Phil Thompson <p...@riverbankcomputing.com>
+date:        Tue May 10 13:58:28 2022 +0100
+summary:     Fixed the PEP571 backend to handle multiple instances of the same 
config
+
+changeset:   2769:c02af095a016
+branch:      6.6-maint
+user:        Phil Thompson <p...@riverbankcomputing.com>
+date:        Sat May 07 15:18:14 2022 +0100
+summary:     Fix an API backward incompatibility.
+
+changeset:   2768:98dbce3e62f1
+branch:      6.6-maint
+user:        Phil Thompson <p...@riverbankcomputing.com>
+date:        Sat May 07 15:03:49 2022 +0100
+summary:     Any config settings passed by a PEP 571 frontend are now used.
+
+diff -r 8583e2bb1b32 sipbuild/abstract_project.py
+--- a/sipbuild/abstract_project.py     Thu Nov 25 18:15:32 2021 +0000
++++ b/sipbuild/abstract_project.py     Tue May 10 16:15:30 2022 +0200
+@@ -1,4 +1,4 @@
+-# Copyright (c) 2020, Riverbank Computing Limited
++# Copyright (c) 2022, Riverbank Computing Limited
+ # All rights reserved.
+ #
+ # This copy of SIP is licensed for use under the terms of the SIP License
+@@ -34,7 +34,7 @@
+     """ This specifies the API of a project. """
+ 
+     @classmethod
+-    def bootstrap(cls, tool, tool_description=''):
++    def bootstrap(cls, tool, tool_description='', arguments=None):
+         """ Return an AbstractProject instance fully configured for a
+         particular command line tool.
+         """
+@@ -79,6 +79,10 @@
+                     "The project factory did not return an AbstractProject "
+                     "object")
+ 
++        # We set this as an attribute rather than change the API of the ctor 
or
++        # setup().
++        project.arguments = arguments
++
+         # Complete the configuration of the project.
+         project.setup(pyproject, tool, tool_description)
+ 
+diff -r 8583e2bb1b32 sipbuild/api.py
+--- a/sipbuild/api.py  Thu Nov 25 18:15:32 2021 +0000
++++ b/sipbuild/api.py  Tue May 10 16:15:30 2022 +0200
+@@ -1,4 +1,4 @@
+-# Copyright (c) 2019, Riverbank Computing Limited
++# Copyright (c) 2022, Riverbank Computing Limited
+ # All rights reserved.
+ #
+ # This copy of SIP is licensed for use under the terms of the SIP License
+@@ -28,10 +28,8 @@
+ def build_sdist(sdist_directory, config_settings=None):
+     """ The PEP 517 hook for building an sdist from pyproject.toml. """
+ 
+-    # Note that we ignore config_settings until we have a frontend that we can
+-    # fully test with.  (pip seems lacking at the moment.)
+-
+-    project = AbstractProject.bootstrap('pep517')
++    project = AbstractProject.bootstrap('sdist',
++            arguments=_convert_config_settings(config_settings))
+ 
+     # pip executes this in a separate process and doesn't handle exceptions
+     # very well.  However it does capture stdout and (eventually) show it to
+@@ -45,10 +43,8 @@
+ def build_wheel(wheel_directory, config_settings=None, 
metadata_directory=None):
+     """ The PEP 517 hook for building a wheel from pyproject.toml. """
+ 
+-    # Note that we ignore config_settings until we have a frontend that we can
+-    # fully test with.  (pip seems lacking at the moment.)
+-
+-    project = AbstractProject.bootstrap('pep517')
++    project = AbstractProject.bootstrap('wheel',
++            arguments=_convert_config_settings(config_settings))
+ 
+     # pip executes this in a separate process and doesn't handle exceptions
+     # very well.  However it does capture stdout and (eventually) show it to
+@@ -57,3 +53,26 @@
+         return project.build_wheel(wheel_directory)
+     except Exception as e:
+         handle_exception(e)
++
++
++def _convert_config_settings(config_settings):
++    """ Return any configuration settings from the frontend to a 
pseudo-command
++    line.
++    """
++
++    if config_settings is None:
++        config_settings = {}
++
++    args = []
++
++    for name, value in config_settings.items():
++        if value:
++            if not isinstance(value, list):
++                value = [value]
++
++            for m_value in value:
++                args.append(name + '=' + m_value)
++        else:
++            args.append(name)
++
++    return args
+diff -r 8583e2bb1b32 sipbuild/configurable.py
+--- a/sipbuild/configurable.py Thu Nov 25 18:15:32 2021 +0000
++++ b/sipbuild/configurable.py Tue May 10 16:15:30 2022 +0200
+@@ -1,4 +1,4 @@
+-# Copyright (c) 2021, Riverbank Computing Limited
++# Copyright (c) 2022, Riverbank Computing Limited
+ # All rights reserved.
+ #
+ # This copy of SIP is licensed for use under the terms of the SIP License
+@@ -244,7 +244,7 @@
+     """
+ 
+     # The tools that will build a set of bindings.
+-    BUILD_TOOLS = ('build', 'install', 'pep517', 'wheel')
++    BUILD_TOOLS = ('build', 'install', 'wheel')
+ 
+     # All the valid tools.
+     _ALL_TOOLS = BUILD_TOOLS + ('sdist', )
+diff -r 8583e2bb1b32 sipbuild/project.py
+--- a/sipbuild/project.py      Thu Nov 25 18:15:32 2021 +0000
++++ b/sipbuild/project.py      Tue May 10 16:15:30 2022 +0200
+@@ -155,6 +155,7 @@
+ 
+         # The current directory should contain the .toml file.
+         self.root_dir = os.getcwd()
++        self.arguments = None
+         self.bindings = collections.OrderedDict()
+         self.bindings_factories = []
+         self.builder = None
+@@ -204,11 +205,6 @@
+     def apply_user_defaults(self, tool):
+         """ Set default values for user options that haven't been set yet. """
+ 
+-        # If we are the backend to a 3rd-party frontend (most probably pip)
+-        # then let it handle the verbosity of messages.
+-        if self.verbose is None and tool == '':
+-            self.verbose = True
+-
+         # This is only used when creating sdist and wheel files.
+         if self.name is None:
+             self.name = self.metadata['name']
+@@ -569,14 +565,9 @@
+         # Set the initial configuration from the pyproject.toml file.
+         self._set_initial_configuration(pyproject, tool)
+ 
+-        # Add any tool-specific command line options for (so far unspecified)
++        # Add any tool-specific command line arguments for (so far 
unspecified)
+         # parts of the configuration.
+-        if tool != 'pep517':
+-            self._configure_from_command_line(tool, tool_description)
+-        else:
+-            # Until pip improves it's error reporting we give the user all the
+-            # help we can.
+-            self.verbose = True
++        self._configure_from_arguments(tool, tool_description)
+ 
+         # Now that any help has been given we can report a problematic
+         # pyproject.toml file.
+@@ -712,8 +703,8 @@
+         for bindings in self.bindings.values():
+             bindings.verify_configuration(tool)
+ 
+-    def _configure_from_command_line(self, tool, tool_description):
+-        """ Update the configuration from the user supplied command line. """
++    def _configure_from_arguments(self, tool, tool_description):
++        """ Update the configuration from any user supplied arguments. """
+ 
+         from argparse import SUPPRESS
+         from .argument_parser import ArgumentParser
+@@ -739,7 +730,7 @@
+             bindings.add_command_line_options(parser, tool, all_options)
+ 
+         # Parse the arguments and update the corresponding configurables.
+-        args = parser.parse_args()
++        args = parser.parse_args(self.arguments)
+ 
+         for option, configurables in all_options.items():
+             for configurable in configurables:

diff --git a/dev-python/sip/sip-6.5.0-r1.ebuild 
b/dev-python/sip/sip-6.5.0-r1.ebuild
new file mode 100644
index 000000000000..3f31cadaf6d1
--- /dev/null
+++ b/dev-python/sip/sip-6.5.0-r1.ebuild
@@ -0,0 +1,36 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{8..10} )
+DISTUTILS_USE_SETUPTOOLS=rdepend
+inherit distutils-r1
+
+DESCRIPTION="Python bindings generator for C/C++ libraries"
+HOMEPAGE="https://www.riverbankcomputing.com/software/sip/ 
https://pypi.org/project/sip/";
+
+MY_P=${PN}-${PV/_pre/.dev}
+if [[ ${PV} == *_pre* ]]; then
+       SRC_URI="https://dev.gentoo.org/~pesa/distfiles/${MY_P}.tar.gz";
+else
+       SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${MY_P}.tar.gz"
+fi
+S=${WORKDIR}/${MY_P}
+
+LICENSE="|| ( GPL-2 GPL-3 SIP )"
+SLOT="5"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~ppc ~ppc64 ~riscv ~sparc ~x86"
+
+RDEPEND="
+       !<dev-python/sip-4.19.25-r1[${PYTHON_USEDEP}]
+       !=dev-python/sip-5.5.0-r0[${PYTHON_USEDEP}]
+       dev-python/packaging[${PYTHON_USEDEP}]
+       dev-python/toml[${PYTHON_USEDEP}]
+"
+
+distutils_enable_sphinx doc --no-autodoc
+
+PATCHES=(
+       "${FILESDIR}"/${P}-pep517-args.patch
+)

Reply via email to