commit:     b68f6dcca10b8439e9de2c2eea96853cee5f2577
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  2 01:23:09 2024 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Sun Jun  2 01:40:35 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=b68f6dcc

net-wireless/soapysdr: fix broken Python handling

* Add patch for Python 3.12 distutils

* Switch to python-single-r1 as its only Python reverse dependency in
  ::gentoo is net-wireless/gnuradio.

  Before now, it was completely broken as it'd use whatever Python it
  felt like -- at no point was EPYTHON/PYTHON passed into the build system,
  and it accumulated args when re-running for each impl (just enabling Python,
  not for any specific impl) anyway.

  We also only installed once anyway.

Fixes: 915993925dd6ae9f4303278ab00e4feb49c5d12b
Signed-off-by: Sam James <sam <AT> gentoo.org>

 .../soapysdr-0.8.1-python3.12-distutils.patch      | 74 ++++++++++++++++++++++
 ...pysdr-0.8.1.ebuild => soapysdr-0.8.1-r1.ebuild} | 48 +++++++-------
 net-wireless/soapysdr/soapysdr-9999.ebuild         | 43 ++++++-------
 3 files changed, 116 insertions(+), 49 deletions(-)

diff --git 
a/net-wireless/soapysdr/files/soapysdr-0.8.1-python3.12-distutils.patch 
b/net-wireless/soapysdr/files/soapysdr-0.8.1-python3.12-distutils.patch
new file mode 100644
index 000000000000..877bc9c15ba7
--- /dev/null
+++ b/net-wireless/soapysdr/files/soapysdr-0.8.1-python3.12-distutils.patch
@@ -0,0 +1,74 @@
+https://github.com/pothosware/SoapySDR/commit/1ee5670803f89b21d84a6a84acbb578da051c119
+
+From 1ee5670803f89b21d84a6a84acbb578da051c119 Mon Sep 17 00:00:00 2001
+From: Ryan Volz <[email protected]>
+Date: Tue, 26 Sep 2023 14:56:59 -0400
+Subject: [PATCH] Remove deprecated use of distutils, fix for Python 3.12+
+
+This switches to using sysconfig from distutils, which is necessary for
+Python 3.12+ since distutils is deprecated and has been removed.
+
+It is necessary to specify the install scheme when a prefix other than
+the Python default is used so that changes to the default scheme made by
+distributions (e.g. Debian, Fedora) do not produce an incorrect Python
+installation directory. For example, Debian patches the default scheme
+to prepend the path with '/local', but if a user specifies a prefix of
+'/usr/local', then the path using the default scheme would be
+'/usr/local/local/...' with a duplicated 'local' directory. Specifying
+an unmodified install scheme fixes that.
+
+Signed-off-by: Ryan Volz <[email protected]>
+---
+ python/get_python_lib.py | 36 ++++++++++++++++++++++++-----------
+ 1 file changed, 25 insertions(+), 11 deletions(-)
+
+diff --git a/python/get_python_lib.py b/python/get_python_lib.py
+index 0c716529..574f0b60 100644
+--- a/python/get_python_lib.py
++++ b/python/get_python_lib.py
+@@ -1,19 +1,33 @@
+ import os
++import pathlib
+ import sys
+-import site
+-from distutils.sysconfig import get_python_lib
++import sysconfig
+ 
+ if __name__ == '__main__':
+-    prefix = sys.argv[1]
++    prefix = pathlib.Path(sys.argv[1]).resolve()
+ 
+-    #ask distutils where to install the python module
+-    install_dir = get_python_lib(plat_specific=True, prefix=prefix)
++    # default install dir for the running Python interpreter
++    default_install_dir = 
pathlib.Path(sysconfig.get_path('platlib')).resolve()
+ 
+-    #use sites when the prefix is already recognized
++    # if default falls under the desired prefix, we're done
+     try:
+-        paths = [p for p in site.getsitepackages() if p.startswith(prefix)]
+-        if len(paths) == 1: install_dir = paths[0]
+-    except AttributeError: pass
++        relative_install_dir = default_install_dir.relative_to(prefix)
++    except ValueError:
++        # get install dir for the specified prefix
++        # can't use the default scheme because distributions modify it
++        # newer Python versions have 'venv' scheme, use for all OSs.
++        if 'venv' in sysconfig.get_scheme_names():
++            scheme = 'venv'
++        elif os.name == 'nt':
++            scheme = 'nt'
++        else:
++            scheme = 'posix_prefix'
++        prefix_install_dir = pathlib.Path(sysconfig.get_path(
++            'platlib',
++            scheme=scheme,
++            vars={'base': prefix, 'platbase': prefix},
++        )).resolve()
++        relative_install_dir = prefix_install_dir.relative_to(prefix)
+ 
+-    #strip the prefix to return a relative path
+-    print(os.path.relpath(install_dir, prefix))
++    # want a relative path for use in the build system
++    print(relative_install_dir)
+

diff --git a/net-wireless/soapysdr/soapysdr-0.8.1.ebuild 
b/net-wireless/soapysdr/soapysdr-0.8.1-r1.ebuild
similarity index 58%
rename from net-wireless/soapysdr/soapysdr-0.8.1.ebuild
rename to net-wireless/soapysdr/soapysdr-0.8.1-r1.ebuild
index b82e2be6935d..f4f69287124e 100644
--- a/net-wireless/soapysdr/soapysdr-0.8.1.ebuild
+++ b/net-wireless/soapysdr/soapysdr-0.8.1-r1.ebuild
@@ -4,8 +4,7 @@
 EAPI=8
 
 PYTHON_COMPAT=( python3_{10..12} )
-
-inherit cmake python-r1
+inherit cmake python-single-r1
 
 DESCRIPTION="vendor and platform neutral SDR support library"
 HOMEPAGE="https://github.com/pothosware/SoapySDR";
@@ -22,39 +21,40 @@ fi
 
 LICENSE="Boost-1.0"
 SLOT="0/${PV}"
-
 IUSE="bladerf hackrf python rtlsdr plutosdr uhd"
 REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
 
 RDEPEND="python? ( ${PYTHON_DEPS} )"
-DEPEND="${RDEPEND}
-       python? ( dev-lang/swig:0 )
+DEPEND="${RDEPEND}"
+BDEPEND="python? ( dev-lang/swig:0 )"
+PDEPEND="
+       bladerf? ( net-wireless/soapybladerf )
+       hackrf? ( net-wireless/soapyhackrf )
+       rtlsdr? ( net-wireless/soapyrtlsdr )
+       plutosdr? ( net-wireless/soapyplutosdr )
+       uhd? ( net-wireless/soapyuhd )
 "
-PDEPEND="bladerf? ( net-wireless/soapybladerf )
-               hackrf? ( net-wireless/soapyhackrf )
-               rtlsdr? ( net-wireless/soapyrtlsdr )
-               plutosdr? ( net-wireless/soapyplutosdr )
-               uhd? ( net-wireless/soapyuhd )"
 
-src_configure() {
-       configuration() {
-               mycmakeargs+=(
-                       -DENABLE_PYTHON=ON
-                       -DBUILD_PYTHON3=ON
-               )
-       }
+PATCHES=(
+       "${FILESDIR}"/soapysdr-0.8.1-python3.12-distutils.patch
+)
 
-       if use python; then
-               python_foreach_impl configuration
-       fi
+pkg_setup() {
+       use python && python-single-r1_pkg_setup
+}
+
+src_configure() {
+       local mycmakeargs=(
+               -DENABLE_PYTHON=$(usex python)
+               -DENABLE_PYTHON3=$(usex python)
+               -DBUILD_PYTHON3=$(usex python)
+               -DUSE_PYTHON_CONFIG=ON
+       )
 
        cmake_src_configure
 }
 
 src_install() {
        cmake_src_install
-
-       if use python; then
-               python_foreach_impl python_optimize
-       fi
+       use python && python_optimize
 }

diff --git a/net-wireless/soapysdr/soapysdr-9999.ebuild 
b/net-wireless/soapysdr/soapysdr-9999.ebuild
index 04bd0f2876cd..dbc5bebb6a98 100644
--- a/net-wireless/soapysdr/soapysdr-9999.ebuild
+++ b/net-wireless/soapysdr/soapysdr-9999.ebuild
@@ -4,8 +4,7 @@
 EAPI=8
 
 PYTHON_COMPAT=( python3_{10..12} )
-
-inherit cmake python-r1
+inherit cmake python-single-r1
 
 DESCRIPTION="vendor and platform neutral SDR support library"
 HOMEPAGE="https://github.com/pothosware/SoapySDR";
@@ -15,46 +14,40 @@ if [ "${PV}" = "9999" ]; then
        EGIT_CLONE_TYPE="shallow"
        inherit git-r3
 else
-       KEYWORDS="~amd64 ~arm ~riscv ~x86"
+       KEYWORDS="amd64 ~arm ~riscv ~x86"
        
SRC_URI="https://github.com/pothosware/SoapySDR/archive/soapy-sdr-${PV}.tar.gz 
-> ${P}.tar.gz"
        S="${WORKDIR}"/SoapySDR-soapy-sdr-"${PV}"
 fi
 
 LICENSE="Boost-1.0"
 SLOT="0/${PV}"
-
 IUSE="bladerf hackrf python rtlsdr plutosdr uhd"
 REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
 
 RDEPEND="python? ( ${PYTHON_DEPS} )"
-DEPEND="${RDEPEND}
-       python? ( dev-lang/swig:0 )
+DEPEND="${RDEPEND}"
+BDEPEND="python? ( dev-lang/swig:0 )"
+PDEPEND="
+       bladerf? ( net-wireless/soapybladerf )
+       hackrf? ( net-wireless/soapyhackrf )
+       rtlsdr? ( net-wireless/soapyrtlsdr )
+       plutosdr? ( net-wireless/soapyplutosdr )
+       uhd? ( net-wireless/soapyuhd )
 "
-PDEPEND="bladerf? ( net-wireless/soapybladerf )
-               hackrf? ( net-wireless/soapyhackrf )
-               rtlsdr? ( net-wireless/soapyrtlsdr )
-               plutosdr? ( net-wireless/soapyplutosdr )
-               uhd? ( net-wireless/soapyuhd )"
 
-src_configure() {
-       configuration() {
-               mycmakeargs+=(
-                       -DENABLE_PYTHON=ON
-                       -DBUILD_PYTHON3=ON
-               )
-       }
+pkg_setup() {
+       use python && python-single-r1_pkg_setup
+}
 
-       if use python; then
-               python_foreach_impl configuration
-       fi
+src_configure() {
+       local mycmakeargs=(
+               -DENABLE_PYTHON3=$(usex python)
+       )
 
        cmake_src_configure
 }
 
 src_install() {
        cmake_src_install
-
-       if use python; then
-               python_foreach_impl python_optimize
-       fi
+       use python && python_optimize
 }

Reply via email to