1{
2 lib,
3 stdenv,
4 buildPythonPackage,
5 fetchFromGitHub,
6 setuptools,
7 miniaudio,
8 cffi,
9 pytestCheckHook,
10 AudioToolbox,
11 CoreAudio,
12}:
13
14let
15 # TODO: recheck after 1.59
16 miniaudio' = miniaudio.overrideAttrs (oldAttrs: rec {
17 version = "0.11.16"; # cffi breakage with 0.11.17
18 src = fetchFromGitHub {
19 inherit (oldAttrs.src) owner repo;
20 rev = "refs/tags/${version}";
21 hash = "sha256-POe/dYPJ25RKNGIhaLoqxm9JJ08MrTyHVN4NmaGOdwM=";
22 };
23 });
24in
25buildPythonPackage rec {
26 pname = "miniaudio";
27 version = "1.61";
28 pyproject = true;
29
30 src = fetchFromGitHub {
31 owner = "irmen";
32 repo = "pyminiaudio";
33 rev = "refs/tags/v${version}";
34 hash = "sha256-H3o2IWGuMqLrJTzQ7w636Ito6f57WBtMXpXXzrZ7UD8=";
35 };
36
37 postPatch = ''
38 rm -r miniaudio
39 ln -s ${miniaudio'} miniaudio
40 substituteInPlace build_ffi_module.py \
41 --replace-fail "miniaudio/stb_vorbis.c" "miniaudio/extras/stb_vorbis.c";
42 substituteInPlace miniaudio.c \
43 --replace-fail "miniaudio/stb_vorbis.c" "miniaudio/extras/stb_vorbis.c";
44 '';
45
46 build-system = [ setuptools ];
47
48 buildInputs = lib.optionals stdenv.hostPlatform.isDarwin [
49 AudioToolbox
50 CoreAudio
51 ];
52
53 propagatedNativeBuildInputs = [ cffi ];
54 dependencies = [ cffi ];
55
56 nativeCheckInputs = [ pytestCheckHook ];
57
58 pythonImportsCheck = [ "miniaudio" ];
59
60 meta = with lib; {
61 changelog = "https://github.com/irmen/pyminiaudio/releases/tag/v${version}";
62 description = "Python bindings for the miniaudio library and its decoders";
63 homepage = "https://github.com/irmen/pyminiaudio";
64 license = licenses.mit;
65 maintainers = with maintainers; [ dotlambda ];
66 };
67}