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 +
