smap: init at 0.1.12 (#371402)
[NixPkgs.git] / pkgs / applications / audio / carla / default.nix
blob7748d68206e7df2e0b3448da4176e80362e20fc7
2   lib,
3   stdenv,
4   fetchFromGitHub,
5   alsa-lib,
6   file,
7   fluidsynth,
8   jack2,
9   liblo,
10   libpulseaudio,
11   libsndfile,
12   pkg-config,
13   python3Packages,
14   which,
15   gtk2 ? null,
16   gtk3 ? null,
17   qtbase ? null,
18   withFrontend ? true,
19   withGtk2 ? true,
20   withGtk3 ? true,
21   withQt ? true,
22   wrapQtAppsHook ? null,
25 assert withQt -> qtbase != null;
26 assert withQt -> wrapQtAppsHook != null;
28 stdenv.mkDerivation (finalAttrs: {
29   pname = "carla";
30   version = "2.5.9";
32   src = fetchFromGitHub {
33     owner = "falkTX";
34     repo = "carla";
35     rev = "v${finalAttrs.version}";
36     hash = "sha256-FM/6TtNhDml1V9C5VisjLcZ3CzXsuwCZrsoz4yP3kI8=";
37   };
39   nativeBuildInputs = [
40     python3Packages.wrapPython
41     pkg-config
42     which
43     wrapQtAppsHook
44   ];
46   pythonPath =
47     with python3Packages;
48     [
49       rdflib
50       pyliblo
51     ]
52     ++ lib.optional withFrontend pyqt5;
54   buildInputs =
55     [
56       file
57       liblo
58       alsa-lib
59       fluidsynth
60       jack2
61       libpulseaudio
62       libsndfile
63     ]
64     ++ lib.optional withQt qtbase
65     ++ lib.optional withGtk2 gtk2
66     ++ lib.optional withGtk3 gtk3;
68   propagatedBuildInputs = finalAttrs.pythonPath;
70   enableParallelBuilding = true;
72   installFlags = [ "PREFIX=$(out)" ];
74   postPatch =
75     ''
76       # --with-appname="$0" is evaluated with $0=.carla-wrapped instead of carla. Fix that.
77       for file in $(grep -rl -- '--with-appname="$0"'); do
78           filename="$(basename -- "$file")"
79           substituteInPlace "$file" --replace '--with-appname="$0"' "--with-appname=\"$filename\""
80       done
81     ''
82     + lib.optionalString withGtk2 ''
83       # Will try to dlopen() libgtk-x11-2.0 at runtime when using the bridge.
84       substituteInPlace source/bridges-ui/Makefile \
85           --replace '$(CXX) $(OBJS_GTK2)' '$(CXX) $(OBJS_GTK2) -lgtk-x11-2.0'
86     '';
88   dontWrapQtApps = true;
89   postFixup = ''
90     # Also sets program_PYTHONPATH and program_PATH variables
91     wrapPythonPrograms
92     wrapPythonProgramsIn "$out/share/carla/resources" "$out $pythonPath"
94     find "$out/share/carla" -maxdepth 1 -type f -not -name "*.py" -print0 | while read -d "" f; do
95       patchPythonScript "$f"
96     done
97     patchPythonScript "$out/share/carla/carla_settings.py"
99     for program in $out/bin/*; do
100       wrapQtApp "$program" \
101         --prefix PATH : "$program_PATH:${which}/bin" \
102         --set PYTHONNOUSERSITE true
103     done
105     find "$out/share/carla/resources" -maxdepth 1 -type f -not -name "*.py" -print0 | while read -d "" f; do
106       wrapQtApp "$f" \
107         --prefix PATH : "$program_PATH:${which}/bin" \
108         --set PYTHONNOUSERSITE true
109     done
110   '';
112   meta = with lib; {
113     homepage = "https://kx.studio/Applications:Carla";
114     description = "Audio plugin host";
115     longDescription = ''
116       It currently supports LADSPA (including LRDF), DSSI, LV2, VST2/3
117       and AU plugin formats, plus GIG, SF2 and SFZ file support.
118       It uses JACK as the default and preferred audio driver but also
119       supports native drivers like ALSA, DirectSound or CoreAudio.
120     '';
121     license = licenses.gpl2Plus;
122     maintainers = [ maintainers.minijackson ];
123     platforms = platforms.linux;
124   };