dev-python/pyaudio: fix Python 3.10 compatibility

Closes: https://bugs.gentoo.org/855626
Signed-off-by: Sam James <sam@gentoo.org>
This commit is contained in:
Sam James
2022-07-02 12:57:57 +00:00
parent 5e24838e03
commit 8718d02e1c
2 changed files with 70 additions and 0 deletions

View File

@@ -0,0 +1,28 @@
https://git.skeh.site/skeh/pyaudio/commit/2ee560056ec889ea7cd3ce1801b796b0939dd540
https://bugs.gentoo.org/855626
From 2ee560056ec889ea7cd3ce1801b796b0939dd540 Mon Sep 17 00:00:00 2001
From: Derek Schmidt <skeh@is.nota.live>
Date: Tue, 14 Dec 2021 21:46:11 -0700
Subject: [PATCH] Use Py_ssize_t for tuple return on stream methods
--- a/src/_portaudiomodule.c
+++ b/src/_portaudiomodule.c
@@ -25,6 +25,7 @@
*/
#include <stdio.h>
+#define PY_SSIZE_T_CLEAN
#include "Python.h"
#include "portaudio.h"
#include "_portaudiomodule.h"
@@ -1291,7 +1292,7 @@ int _stream_callback_cfunction(const void *input, void *output,
PyObject *py_status_flags = PyLong_FromUnsignedLong(statusFlags);
PyObject *py_input_data = Py_None;
const char *pData;
- unsigned output_len;
+ Py_ssize_t output_len;
PyObject *py_result;
if (input) {

View File

@@ -0,0 +1,42 @@
# Copyright 1999-2022 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
PYTHON_COMPAT=( python3_{8..10} )
inherit distutils-r1
MY_PN="PyAudio"
DESCRIPTION="Python bindings for PortAudio"
HOMEPAGE="http://people.csail.mit.edu/hubert/pyaudio/"
SRC_URI="mirror://pypi/${MY_PN:0:1}/${MY_PN}/${MY_PN}-${PV}.tar.gz"
S="${WORKDIR}/${MY_PN}-${PV}"
LICENSE="MIT"
SLOT="0"
KEYWORDS="~amd64 ~x86"
# Tests work if you have the correct HW device(s) to test. 0.2.11-r1.
RESTRICT="test"
RDEPEND="media-libs/portaudio"
DEPEND="${RDEPEND}"
BDEPEND="test? ( dev-python/numpy[${PYTHON_USEDEP}] )"
distutils_enable_sphinx sphinx
distutils_enable_tests unittest
PATCHES=(
"${FILESDIR}"/${PN}-0.2.11-python310-size_t.patch
)
python_test() {
elog "These tests require an OS loopback sound device that forwards audio"
elog "output, generated by PyAudio for playback, and forwards it to an input"
elog "device, which PyAudio can record and verify against a test signal."
cd tests || die
# pyaudio_tests have very complicated runtime requirements, therefore skipping them.
"${EPYTHON}" -m unittest error_tests -v || die "Tests fail with ${EPYTHON}"
}