build-support/vm: don't depend on the "unix" module (#375355)
[NixPkgs.git] / pkgs / applications / networking / mumble / default.nix
blob8131243ef262ac32d64ecb26c6840216c296363a
1 { lib, stdenv, fetchFromGitHub, fetchpatch, pkg-config, qt5, cmake
2 , avahi, boost, libopus, libsndfile, protobuf, speex, libcap
3 , alsa-lib, python3
4 , rnnoise
5 , nixosTests
6 , poco
7 , flac
8 , libogg
9 , libvorbis
10 , stdenv_32bit
11 , iceSupport ? true, zeroc-ice
12 , jackSupport ? false, libjack2
13 , pipewireSupport ? true, pipewire
14 , pulseSupport ? true, libpulseaudio
15 , speechdSupport ? false, speechd-minimal
18 let
19   generic = overrides: source: (overrides.stdenv or stdenv).mkDerivation (source // overrides // {
20     pname = overrides.type;
21     version = source.version;
23     nativeBuildInputs = [ cmake pkg-config python3 qt5.wrapQtAppsHook qt5.qttools ]
24       ++ (overrides.nativeBuildInputs or [ ]);
26     buildInputs = [ avahi boost poco protobuf ]
27       ++ (overrides.buildInputs or [ ]);
29     cmakeFlags = [
30       "-D g15=OFF"
31       "-D CMAKE_CXX_STANDARD=17" # protobuf >22 requires C++ 17
32     ] ++ (overrides.configureFlags or [ ]);
34     preConfigure = ''
35        patchShebangs scripts
36     '';
38     passthru.tests.connectivity = nixosTests.mumble;
40     meta = with lib; {
41       description = "Low-latency, high quality voice chat software";
42       homepage = "https://mumble.info";
43       license = licenses.bsd3;
44       maintainers = with maintainers; [ felixsinger lilacious ];
45       platforms = platforms.linux;
46     };
47   });
49   client = source: generic {
50     type = "mumble";
52     nativeBuildInputs = [ qt5.qttools ];
53     buildInputs = [ flac libogg libopus libsndfile libvorbis qt5.qtsvg rnnoise speex ]
54       ++ lib.optional (!jackSupport) alsa-lib
55       ++ lib.optional jackSupport libjack2
56       ++ lib.optional speechdSupport speechd-minimal
57       ++ lib.optional pulseSupport libpulseaudio
58       ++ lib.optional pipewireSupport pipewire;
60     configureFlags = [
61       "-D server=OFF"
62       "-D bundled-celt=ON"
63       "-D bundled-opus=OFF"
64       "-D bundled-speex=OFF"
65       "-D bundle-qt-translations=OFF"
66       "-D update=OFF"
67       "-D overlay-xcompile=OFF"
68       "-D oss=OFF"
69       "-D warnings-as-errors=OFF" # conversion error workaround
70     ] ++ lib.optional (!speechdSupport) "-D speechd=OFF"
71       ++ lib.optional (!pulseSupport) "-D pulseaudio=OFF"
72       ++ lib.optional (!pipewireSupport) "-D pipewire=OFF"
73       ++ lib.optional jackSupport "-D alsa=OFF -D jackaudio=ON";
75     env.NIX_CFLAGS_COMPILE = lib.optionalString speechdSupport "-I${speechd-minimal}/include/speech-dispatcher";
77     postFixup = ''
78       wrapProgram $out/bin/mumble \
79         --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath (lib.optional pulseSupport libpulseaudio ++ lib.optional pipewireSupport pipewire)}"
80     '';
81   } source;
83   server = source: generic {
84     type = "murmur";
86     configureFlags = [
87       "-D client=OFF"
88     ] ++ lib.optional (!iceSupport) "-D ice=OFF"
89       ++ lib.optionals iceSupport [
90         "-D Ice_HOME=${lib.getDev zeroc-ice};${lib.getLib zeroc-ice}"
91         "-D CMAKE_PREFIX_PATH=${lib.getDev zeroc-ice};${lib.getLib zeroc-ice}"
92         "-D Ice_SLICE_DIR=${lib.getDev zeroc-ice}/share/ice/slice"
93       ];
95     buildInputs = [ libcap ]
96       ++ lib.optional iceSupport zeroc-ice;
97   } source;
99   overlay = source: generic {
100     stdenv = stdenv_32bit;
101     type = "mumble-overlay";
103     configureFlags = [
104       "-D server=OFF"
105       "-D client=OFF"
106       "-D overlay=ON"
107     ];
108   } source;
110   source = rec {
111     version = "1.5.634";
113     # Needs submodules
114     src = fetchFromGitHub {
115       owner = "mumble-voip";
116       repo = "mumble";
117       rev = "v${version}";
118       hash = "sha256-d9XmXHq264rTT80zphYcKLxS+AyUhjb19D3DuBJvMI4=";
119       fetchSubmodules = true;
120     };
122     patches = [
123       (fetchpatch {
124         name = "GCC14.patch";
125         url = "https://github.com/mumble-voip/mumble/commit/56945a9dfb62d29dccfe561572ebf64500deaed1.patch";
126         hash = "sha256-Frct9XJ/ZuHPglx+GB9h3vVycR8YY039dStIbfkPPDk=";
127       })
128     ];
129   };
130 in {
131   mumble  = lib.recursiveUpdate (client source) {meta.mainProgram = "mumble";};
132   murmur  = lib.recursiveUpdate (server source) {meta.mainProgram = "mumble-server";};
133   overlay = overlay source;