onefetch: 2.22.0 -> 2.23.1 (#370530)
[NixPkgs.git] / pkgs / misc / jackaudio / default.nix
blobea9700f1c3038bcbecc56eb960b6b0d9b1374434
2   lib,
3   stdenv,
4   fetchFromGitHub,
5   fetchpatch2,
6   pkg-config,
7   python3Packages,
8   makeWrapper,
9   libsamplerate,
10   libsndfile,
11   readline,
12   eigen,
13   celt,
14   wafHook,
15   # Darwin Dependencies
16   aften,
17   AudioUnit,
18   CoreAudio,
19   libobjc,
20   Accelerate,
22   # Optional Dependencies
23   dbus ? null,
24   libffado ? null,
25   alsa-lib ? null,
26   libopus ? null,
28   # Extra options
29   prefix ? "",
31   testers,
34 let
35   inherit (python3Packages) python dbus-python;
36   shouldUsePkg =
37     pkg: if pkg != null && lib.meta.availableOn stdenv.hostPlatform pkg then pkg else null;
39   libOnly = prefix == "lib";
41   optDbus = if stdenv.hostPlatform.isDarwin then null else shouldUsePkg dbus;
42   optPythonDBus = if libOnly then null else shouldUsePkg dbus-python;
43   optLibffado = if libOnly then null else shouldUsePkg libffado;
44   optAlsaLib = if libOnly then null else shouldUsePkg alsa-lib;
45   optLibopus = shouldUsePkg libopus;
47 stdenv.mkDerivation (finalAttrs: {
48   pname = "${prefix}jack2";
49   version = "1.9.22";
51   src = fetchFromGitHub {
52     owner = "jackaudio";
53     repo = "jack2";
54     rev = "v${finalAttrs.version}";
55     sha256 = "sha256-Cslfys5fcZDy0oee9/nM5Bd1+Cg4s/ayXjJJOSQCL4E=";
56   };
58   outputs = [
59     "out"
60     "dev"
61   ];
63   nativeBuildInputs = [
64     pkg-config
65     python
66     wafHook
67   ] ++ lib.optionals (optDbus != null) [ makeWrapper ];
68   buildInputs =
69     [
70       libsamplerate
71       libsndfile
72       readline
73       eigen
74       celt
75       optDbus
76       optPythonDBus
77       optLibffado
78       optAlsaLib
79       optLibopus
80     ]
81     ++ lib.optionals stdenv.hostPlatform.isDarwin [
82       aften
83       AudioUnit
84       CoreAudio
85       Accelerate
86       libobjc
87     ];
89   patches = [
90     (fetchpatch2 {
91       # Python 3.12 support
92       name = "jack2-waf2.0.26.patch";
93       url = "https://github.com/jackaudio/jack2/commit/250420381b1a6974798939ad7104ab1a4b9a9994.patch";
94       hash = "sha256-M/H72lLTeddefqth4BSkEfySZRYMIzLErb7nIgVN0u8=";
95     })
96   ];
98   postPatch = ''
99     patchShebangs --build svnversion_regenerate.sh
100   '';
102   wafConfigureFlags =
103     [
104       "--classic"
105       "--autostart=${if (optDbus != null) then "dbus" else "classic"}"
106     ]
107     ++ lib.optional (optDbus != null) "--dbus"
108     ++ lib.optional (optLibffado != null) "--firewire"
109     ++ lib.optional (optAlsaLib != null) "--alsa";
111   postInstall = (
112     if libOnly then
113       ''
114         rm -rf $out/{bin,share}
115         rm -rf $out/lib/{jack,libjacknet*,libjackserver*}
116       ''
117     else
118       lib.optionalString (optDbus != null) ''
119         wrapProgram $out/bin/jack_control --set PYTHONPATH $PYTHONPATH
120       ''
121   );
123   postFixup = ''
124     substituteInPlace "$dev/lib/pkgconfig/jack.pc" \
125       --replace "$out/include" "$dev/include"
126   '';
128   passthru.tests.pkg-config = testers.testMetaPkgConfig finalAttrs.finalPackage;
130   meta = with lib; {
131     description = "JACK audio connection kit, version 2 with jackdbus";
132     homepage = "https://jackaudio.org";
133     license = licenses.gpl2Plus;
134     pkgConfigModules = [ "jack" ];
135     platforms = platforms.unix;
136     maintainers = [ ];
137   };