anvil-editor: init at 0.4
[NixPkgs.git] / pkgs / applications / audio / reaper / default.nix
blob0bb21b2c220ae957a264fe21a583c4c67d713218
1 { config, lib, stdenv
2 , fetchurl
3 , autoPatchelfHook
4 , makeWrapper
5 , undmg
7 , alsa-lib
8 , curl
9 , gtk3
10 , lame
11 , libxml2
12 , ffmpeg
13 , vlc
14 , xdg-utils
15 , xdotool
16 , which
18 , jackSupport ? stdenv.hostPlatform.isLinux
19 , jackLibrary
20 , pulseaudioSupport ? config.pulseaudio or stdenv.hostPlatform.isLinux
21 , libpulseaudio
24 let
25   url_for_platform = version: arch: if stdenv.hostPlatform.isDarwin
26     then "https://www.reaper.fm/files/${lib.versions.major version}.x/reaper${builtins.replaceStrings ["."] [""] version}_universal.dmg"
27     else "https://www.reaper.fm/files/${lib.versions.major version}.x/reaper${builtins.replaceStrings ["."] [""] version}_linux_${arch}.tar.xz";
29 stdenv.mkDerivation rec {
30   pname = "reaper";
31   version = "7.27";
33   src = fetchurl {
34     url = url_for_platform version stdenv.hostPlatform.qemuArch;
35     hash = if stdenv.hostPlatform.isDarwin then "sha256-jDqdtm0W5mF8U/KJi7vRse9tT2X4AVwHUtvXC+6iADM=" else {
36       x86_64-linux = "sha256-/szRnFsu0LpthdMOy/6fmkE72zxBvhQkcVhPtO54Djk=";
37       aarch64-linux = "sha256-yl5PCRSzRiZ5TF9gXoP572H19/vlszJeFARtZy5ClXI=";
38     }.${stdenv.hostPlatform.system};
39   };
41   nativeBuildInputs = [
42     makeWrapper
43   ] ++ lib.optionals stdenv.hostPlatform.isLinux [
44     which
45     autoPatchelfHook
46     xdg-utils # Required for desktop integration
47   ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
48     undmg
49   ];
51   sourceRoot = lib.optionalString stdenv.hostPlatform.isDarwin "Reaper.app";
53   buildInputs = [
54     (lib.getLib stdenv.cc.cc) # reaper and libSwell need libstdc++.so.6
55   ] ++ lib.optionals stdenv.hostPlatform.isLinux [
56     gtk3
57     alsa-lib
58   ];
60   runtimeDependencies = lib.optionals stdenv.hostPlatform.isLinux [
61     gtk3 # libSwell needs libgdk-3.so.0
62   ]
63   ++ lib.optional jackSupport jackLibrary
64   ++ lib.optional pulseaudioSupport libpulseaudio;
66   dontBuild = true;
68   installPhase = if stdenv.hostPlatform.isDarwin then ''
69     runHook preInstall
70     mkdir -p "$out/Applications/Reaper.app"
71     cp -r * "$out/Applications/Reaper.app/"
72     makeWrapper "$out/Applications/Reaper.app/Contents/MacOS/REAPER" "$out/bin/reaper"
73     runHook postInstall
74   '' else ''
75     runHook preInstall
77     HOME="$out/share" XDG_DATA_HOME="$out/share" ./install-reaper.sh \
78       --install $out/opt \
79       --integrate-user-desktop
80     rm $out/opt/REAPER/uninstall-reaper.sh
82     # Dynamic loading of plugin dependencies does not adhere to rpath of
83     # reaper executable that gets modified with runtimeDependencies.
84     # Patching each plugin with DT_NEEDED is cumbersome and requires
85     # hardcoding of API versions of each dependency.
86     # Setting the rpath of the plugin shared object files does not
87     # seem to have an effect for some plugins.
88     # We opt for wrapping the executable with LD_LIBRARY_PATH prefix.
89     # Note that libcurl and libxml2 are needed for ReaPack to run.
90     wrapProgram $out/opt/REAPER/reaper \
91       --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ curl lame libxml2 ffmpeg vlc xdotool stdenv.cc.cc ]}"
93     mkdir $out/bin
94     ln -s $out/opt/REAPER/reaper $out/bin/
96     runHook postInstall
97   '';
99   passthru.updateScript = ./updater.sh;
101   meta = with lib; {
102     description = "Digital audio workstation";
103     homepage = "https://www.reaper.fm/";
104     sourceProvenance = with sourceTypes; [ binaryNativeCode ];
105     license = licenses.unfree;
106     platforms = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
107     maintainers = with maintainers; [ ilian orivej uniquepointer viraptor ];
108   };