diff --git a/pkgs/reaper/default.nix b/pkgs/reaper/default.nix index a1eac37..25cbe51 100644 --- a/pkgs/reaper/default.nix +++ b/pkgs/reaper/default.nix @@ -1,62 +1,82 @@ -{ stdenv, lib, fetchurl, autoPatchelfHook, makeWrapper -, alsaLib, xorg, libjack2 -, gtk3, pango, gdk-pixbuf, cairo, glib, freetype -, libpulseaudio, xdg_utils +{ config, lib, stdenv +, fetchurl +, autoPatchelfHook +, makeWrapper + +, alsa-lib +, gtk3 +, lame +, ffmpeg +, vlc +, xdg-utils +, which + +, jackSupport ? true, libjack2 +, pulseaudioSupport ? config.pulseaudio or true, libpulseaudio }: stdenv.mkDerivation rec { - name = "reaper-${version}"; + pname = "reaper"; version = "6.32"; src = fetchurl { - url = "https://www.reaper.fm/files/${lib.versions.major version}.x/reaper${builtins.replaceStrings ["."] [""] version}_linux_x86_64.tar.xz"; + url = "https://www.reaper.fm/files/${lib.versions.major version}.x/reaper${builtins.replaceStrings ["."] [""] version}_linux_${stdenv.targetPlatform.qemuArch}.tar.xz"; sha256 = "0x03bpa04np7scl88c5lhgb508wrzpvywgqd41wrxacyccs7ir0n"; }; - nativeBuildInputs = [ autoPatchelfHook makeWrapper ]; + nativeBuildInputs = [ + autoPatchelfHook + makeWrapper + xdg-utils # Required for desktop integration + which + ]; buildInputs = [ - alsaLib - - xorg.libX11 - xorg.libXi - - gdk-pixbuf - pango - cairo - glib - freetype - - xdg_utils + alsa-lib + stdenv.cc.cc.lib # reaper and libSwell need libstdc++.so.6 + gtk3 ]; runtimeDependencies = [ - gtk3 - ]; + gtk3 # libSwell needs libgdk-3.so.0 + ] + ++ lib.optional jackSupport libjack2 + ++ lib.optional pulseaudioSupport libpulseaudio; dontBuild = true; installPhase = '' - XDG_DATA_HOME="$out/share" ./install-reaper.sh \ + runHook preInstall + + HOME="$out/share" XDG_DATA_HOME="$out/share" ./install-reaper.sh \ --install $out/opt \ --integrate-user-desktop rm $out/opt/REAPER/uninstall-reaper.sh + # Dynamic loading of plugin dependencies does not adhere to rpath of + # reaper executable that gets modified with runtimeDependencies. + # Patching each plugin with DT_NEEDED is cumbersome and requires + # hardcoding of API versions of each dependency. + # Setting the rpath of the plugin shared object files does not + # seem to have an effect for some plugins. + # We opt for wrapping the executable with LD_LIBRARY_PATH prefix. wrapProgram $out/opt/REAPER/reaper \ - --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ libpulseaudio libjack2 ]}" + --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ lame ffmpeg vlc ]}" cp -rv ${./jsfx}/* $out/opt/REAPER/InstallData/Effects/ mkdir $out/bin ln -s $out/opt/REAPER/reaper $out/bin/ ln -s $out/opt/REAPER/reamote-server $out/bin/ + + runHook postInstall ''; meta = with lib; { description = "Digital audio workstation"; homepage = "https://www.reaper.fm/"; license = licenses.unfree; - platforms = [ "x86_64-linux" ]; - maintainers = with maintainers; [ jfrankenau ]; + platforms = [ "x86_64-linux" "aarch64-linux" ]; + maintainers = with maintainers; [ jfrankenau ilian ]; }; }