commit:     107db5597a88cf65412bcce5596add78ab47e4d7
Author:     Alfred Wingate <parona <AT> protonmail <DOT> com>
AuthorDate: Sat May 31 22:36:27 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Sat May 31 23:53:11 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=107db559

dev-python/audioread: enable py3.13

Use unmerged PR that makes aifc and sunau optional, and use separately
maintained audioop-lts package.

Bug: https://bugs.gentoo.org/952317
Signed-off-by: Alfred Wingate <parona <AT> protonmail.com>
Part-of: https://github.com/gentoo/gentoo/pull/42378
Signed-off-by: Sam James <sam <AT> gentoo.org>

 dev-python/audioread/audioread-3.0.1-r1.ebuild     |  48 +++++
 ...dioread-3.0.1-optional-deprecated-modules.patch | 208 +++++++++++++++++++++
 2 files changed, 256 insertions(+)

diff --git a/dev-python/audioread/audioread-3.0.1-r1.ebuild 
b/dev-python/audioread/audioread-3.0.1-r1.ebuild
new file mode 100644
index 000000000000..0f2d5c034338
--- /dev/null
+++ b/dev-python/audioread/audioread-3.0.1-r1.ebuild
@@ -0,0 +1,48 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=flit
+PYTHON_COMPAT=( python3_{11..13} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Wrapper for audio file decoding using FFmpeg or GStreamer"
+HOMEPAGE="
+       https://github.com/beetbox/audioread/
+       https://pypi.org/project/audioread/
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64"
+IUSE="ffmpeg gstreamer mad"
+
+RDEPEND="
+       $(python_gen_cond_dep '
+               dev-python/audioop-lts[${PYTHON_USEDEP}]
+       ' python3_13)
+       ffmpeg? (
+               media-video/ffmpeg
+       )
+       gstreamer? (
+               dev-python/pygobject:3[${PYTHON_USEDEP}]
+               media-libs/gstreamer:1.0
+               media-plugins/gst-plugins-meta:1.0
+       )
+       mad? (
+               dev-python/pymad[${PYTHON_USEDEP}]
+       )
+"
+BDEPEND="
+       test? (
+               dev-python/pymad[${PYTHON_USEDEP}]
+       )
+"
+
+distutils_enable_tests pytest
+
+PATCHES=(
+       "${FILESDIR}"/audioread-3.0.1-optional-deprecated-modules.patch
+)

diff --git 
a/dev-python/audioread/files/audioread-3.0.1-optional-deprecated-modules.patch 
b/dev-python/audioread/files/audioread-3.0.1-optional-deprecated-modules.patch
new file mode 100644
index 000000000000..ee65344c8e9f
--- /dev/null
+++ 
b/dev-python/audioread/files/audioread-3.0.1-optional-deprecated-modules.patch
@@ -0,0 +1,208 @@
+https://bugs.gentoo.org/952317
+https://github.com/beetbox/audioread/issues/144
+https://github.com/beetbox/audioread/pull/148
+
+(Cherrypicked)
+
+From 1ddd63b3ba6bcb11ef993c7da18db0fc83af84b7 Mon Sep 17 00:00:00 2001
+From: Brian McFee <[email protected]>
+Date: Wed, 29 Jan 2025 12:51:27 -0500
+Subject: [PATCH 1/4] implemented flexible legacy codec handling
+
+--- a/audioread/rawread.py
++++ b/audioread/rawread.py
+@@ -13,11 +13,10 @@
+ # included in all copies or substantial portions of the Software.
+ 
+ """Uses standard-library modules to read AIFF, AIFF-C, and WAV files."""
+-import aifc
+ import audioop
+ import struct
+-import sunau
+ import wave
++import warnings
+ 
+ from .exceptions import DecodeError
+ from .base import AudioFile
+@@ -54,20 +53,13 @@ def byteswap(s):
+ class RawAudioFile(AudioFile):
+     """An AIFF, WAV, or Au file that can be read by the Python standard
+     library modules ``wave``, ``aifc``, and ``sunau``.
++
++    On Python 3.13 and later, ``aifc`` and ``sunau`` support require
++    installing the ``standard-aifc`` and ``standard-sunau`` packages, 
respectively.
+     """
+     def __init__(self, filename):
+         self._fh = open(filename, 'rb')
+ 
+-        try:
+-            self._file = aifc.open(self._fh)
+-        except aifc.Error:
+-            # Return to the beginning of the file to try the next reader.
+-            self._fh.seek(0)
+-        else:
+-            self._needs_byteswap = True
+-            self._check()
+-            return
+-
+         try:
+             self._file = wave.open(self._fh)
+         except wave.Error:
+@@ -78,15 +70,38 @@ class RawAudioFile(AudioFile):
+             self._check()
+             return
+ 
++        # The following are deprecated formats and may not be supported
+         try:
+-            self._file = sunau.open(self._fh)
+-        except sunau.Error:
+-            self._fh.seek(0)
+-            pass
++            import aifc
++        except ImportError:
++            warnings.warn("aifc module not found; AIFF files will not be 
supported. "
++                          "You may need to install the standard-aifc 
package.")
+         else:
+-            self._needs_byteswap = True
+-            self._check()
+-            return
++            try:
++                self._file = aifc.open(self._fh)
++            except aifc.Error:
++                # Return to the beginning of the file to try the next reader.
++                self._fh.seek(0)
++            else:
++                self._needs_byteswap = True
++                self._check()
++                return
++
++        try:
++            import sunau
++        except ImportError:
++            warnings.warn("sunau module not found; Au files will not be 
supported. "
++                          "You may need to install the standard-sunau 
package.")
++        else:
++            try:
++                self._file = sunau.open(self._fh)
++            except sunau.Error:
++                self._fh.seek(0)
++                pass
++            else:
++                self._needs_byteswap = True
++                self._check()
++                return
+ 
+         # None of the three libraries could open the file.
+         self._fh.close()
+--- a/pyproject.toml
++++ b/pyproject.toml
+@@ -8,7 +8,7 @@ authors = [
+     {name = "Adrian Sampson", email = "[email protected]"}
+ ]
+ readme = "README.rst"
+-requires-python = ">=3.6"
++requires-python = ">=3.8"
+ dynamic = ["version", "description"]
+ urls.Home = "https://github.com/beetbox/audioread";
+ classifiers = [
+@@ -19,9 +19,15 @@ classifiers = [
+     'Programming Language :: Python :: 3.9',
+     'Programming Language :: Python :: 3.10',
+     'Programming Language :: Python :: 3.11',
++    'Programming Language :: Python :: 3.12',
++    'Programming Language :: Python :: 3.13',
+ ]
+ 
+ [project.optional-dependencies]
+ test = [
+     "tox"
+ ]
++legacy = [
++    "standard-aifc; python_version >= '3.13'",
++    "standard-sunau; python_version >= '3.13'"
++]
+-- 
+2.49.0
+
+
+From d761d0c9df6ca423aa7e69c27d0946c1d9c7b5d3 Mon Sep 17 00:00:00 2001
+From: Brian McFee <[email protected]>
+Date: Mon, 3 Feb 2025 12:17:55 -0500
+Subject: [PATCH 2/4] added audioop-lts dependency for modern python installs
+
+--- a/pyproject.toml
++++ b/pyproject.toml
+@@ -9,6 +9,9 @@ authors = [
+ ]
+ readme = "README.rst"
+ requires-python = ">=3.8"
++requires = [
++    "audioop-lts; python_version >= '3.13'"
++]
+ dynamic = ["version", "description"]
+ urls.Home = "https://github.com/beetbox/audioread";
+ classifiers = [
+-- 
+2.49.0
+
+
+From a7d86b7c2a22489a58d0ff9dc3e0b7608aa25914 Mon Sep 17 00:00:00 2001
+From: Brian McFee <[email protected]>
+Date: Mon, 3 Feb 2025 12:29:58 -0500
+Subject: [PATCH 3/4] updated readme
+
+--- a/README.rst
++++ b/README.rst
+@@ -8,8 +8,8 @@ currently supports:
+ - `Core Audio`_ on Mac OS X via `ctypes`_. (PyObjC not required.)
+ - `MAD`_ via the `pymad`_ bindings.
+ - `FFmpeg`_ or `Libav`_ via its command-line interface.
+-- The standard library `wave`_, `aifc`_, and `sunau`_ modules (for
+-  uncompressed audio formats).
++- The standard library `wave`_ module (for
++  uncompressed audio formats).  Legacy formats `aifc`_ and `sunau`_ are also 
optionally supported, see the note below.
+ 
+ .. _Gstreamer: http://gstreamer.freedesktop.org/
+ .. _gst-python: http://gstreamer.freedesktop.org/modules/gst-python.html
+@@ -73,6 +73,18 @@ that you have a broken installation of `FFmpeg`_. To check, 
try typing
+ FFmpeg with your OS's package manager (e.g., apt or yum) or `using Conda
+ <https://anaconda.org/conda-forge/ffmpeg>`_.
+ 
++Legacy formats
++--------------
++The `aifc`_ and `sunau`_ modules were deprecated and removed from the standard
++Python distribution in version 3.13.
++Support for `aifc` and `sunau` formats is still available through `deadlib`_.
++To install audioread with continued support for these formats, you can
++use the following command::
++
++    python -m pip install audioread[legacy]
++
++.. _deadlib: https://github.com/youknowone/python-deadlib
++
+ Version History
+ ---------------
+ 
+-- 
+2.49.0
+
+
+From 7f932069d2e44e97d2da7d243f067d3726a0db8d Mon Sep 17 00:00:00 2001
+From: Brian McFee <[email protected]>
+Date: Mon, 3 Feb 2025 14:14:15 -0500
+Subject: [PATCH 4/4] fixed wrong format spec for dependencies
+
+--- a/pyproject.toml
++++ b/pyproject.toml
+@@ -9,7 +9,7 @@ authors = [
+ ]
+ readme = "README.rst"
+ requires-python = ">=3.8"
+-requires = [
++dependencies = [
+     "audioop-lts; python_version >= '3.13'"
+ ]
+ dynamic = ["version", "description"]
+-- 
+2.49.0
+

Reply via email to