about summary refs log tree commit diff
path: root/pkgs/applications/audio/bespokesynth
diff options
context:
space:
mode:
authorTobias Bora <tobias.bora@gmail.com>2022-01-18 19:30:50 +0100
committerGitHub <noreply@github.com>2022-01-18 19:30:50 +0100
commitd3a146c2ec9c1dae66d11d1cd45052e5a9fde9c5 (patch)
treed720316f224de05c4f7982bff58f3fd79eeab726 /pkgs/applications/audio/bespokesynth
parent222f62ed88f67a1c9a7854b7e95bd9a5fe67b7ca (diff)
bespokesynth: 1.0 -> 1.1.0. Fixing issues with file loading (#144708)
Co-authored-by: OPNA2608 <christoph.neidahl@gmail.com>
Diffstat (limited to 'pkgs/applications/audio/bespokesynth')
-rw-r--r--pkgs/applications/audio/bespokesynth/default.nix198
1 files changed, 113 insertions, 85 deletions
diff --git a/pkgs/applications/audio/bespokesynth/default.nix b/pkgs/applications/audio/bespokesynth/default.nix
index e8d2ada387830..a5ef585969e61 100644
--- a/pkgs/applications/audio/bespokesynth/default.nix
+++ b/pkgs/applications/audio/bespokesynth/default.nix
@@ -1,40 +1,46 @@
-{ lib, stdenv, fetchFromGitHub, pkg-config, fetchzip
-, libjack2, alsa-lib, freetype, libX11, libXrandr, libXinerama, libXext, libXcursor
-, libGL, python3, ncurses, libusb1
-, gtk3, webkitgtk, curl, xvfb-run, makeWrapper
-  # "Debug", or "Release"
-, buildType ? "Release"
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchzip
+, cmake
+, pkg-config
+, ninja
+, makeWrapper
+, libjack2
+, alsa-lib
+, alsa-tools
+, freetype
+, libusb1
+, libX11
+, libXrandr
+, libXinerama
+, libXext
+, libXcursor
+, libXScrnSaver
+, libGL
+, libxcb
+, xcbutil
+, libxkbcommon
+, xcbutilkeysyms
+, xcb-util-cursor
+, gtk3
+, webkitgtk
+, python3
+, curl
+, pcre
+, mount
+, gnome
+, Cocoa
+, WebKit
+, CoreServices
+, CoreAudioKit
+  # It is not allowed to distribute binaries with the VST2 SDK plugin without a license
+  # (the author of Bespoke has such a licence but not Nix). VST3 should work out of the box.
+  # Read more in https://github.com/NixOS/nixpkgs/issues/145607
+, enableVST2 ? false
 }:
 
 let
-  projucer = stdenv.mkDerivation rec {
-    pname = "projucer";
-    version = "5.4.7";
-
-    src = fetchFromGitHub {
-      owner = "juce-framework";
-      repo = "JUCE";
-      rev = version;
-      sha256= "0qpiqfwwpcghk7ij6w4vy9ywr3ryg7ppg77bmd7783kxg6zbhj8h";
-    };
-
-    nativeBuildInputs = [ pkg-config ];
-    buildInputs = [
-      freetype libX11 libXrandr libXinerama libXext gtk3 webkitgtk
-      libjack2 curl
-    ];
-    preBuild = ''
-      cd extras/Projucer/Builds/LinuxMakefile
-    '';
-    makeFlags = [ "CONFIG=${buildType}" ];
-    enableParallelBuilding = true;
-
-    installPhase = ''
-      mkdir -p $out/bin
-      cp -a build/Projucer $out/bin/Projucer
-    '';
-  };
-
   # equal to vst-sdk in ../oxefmsynth/default.nix
   vst-sdk = stdenv.mkDerivation rec {
     name = "vstsdk3610_11_06_2018_build_37";
@@ -50,70 +56,92 @@ let
 in
 stdenv.mkDerivation rec {
   pname = "bespokesynth";
-  version = "1.0.0";
+  version = "1.1.0";
 
   src = fetchFromGitHub {
-    owner = "awwbees";
+    owner = "BespokeSynth";
     repo = pname;
     rev = "v${version}";
-    sha256 = "04b2m40jszphslkd4850jcb8qwls392lwy3lc6vlj01h4izvapqk";
+    sha256 = "sha256-PN0Q6/gI1PeMaF/8EZFGJdLR8JVHQZfWunAhOIQxkHw=";
+    fetchSubmodules = true;
   };
 
-  configurePhase = ''
-    runHook preConfigure
-
-    export HOME=$(mktemp -d)
-    xvfb-run sh -e <<EOF
-      ${projucer}/bin/Projucer --set-global-search-path linux defaultJuceModulePath ${projucer.src}/modules
-      ${projucer}/bin/Projucer --resave BespokeSynth.jucer
-    EOF
-
-    runHook postConfigure
-  '';
-  CFLAGS = "-I${vst-sdk}/VST2_SDK";
-
-  nativeBuildInputs = [ xvfb-run pkg-config python3 makeWrapper ];
-
-  buildInputs = [
-    libX11 libXrandr libXinerama libXext libXcursor freetype libGL
-    ncurses libusb1
-    alsa-lib libjack2
+  cmakeBuildType = "Release";
+
+  cmakeFlags = lib.optionals enableVST2 [ "-DBESPOKE_VST2_SDK_LOCATION=${vst-sdk}/VST2_SDK" ];
+
+  nativeBuildInputs = [ python3 makeWrapper cmake pkg-config ninja ];
+
+  buildInputs = lib.optionals stdenv.hostPlatform.isLinux [
+    # List obtained in https://github.com/BespokeSynth/BespokeSynth/blob/main/azure-pipelines.yml
+    libX11
+    libXrandr
+    libXinerama
+    libXext
+    libXcursor
+    libXScrnSaver
+    curl
+    gtk3
+    webkitgtk
+    freetype
+    libGL
+    libusb1
+    alsa-lib
+    libjack2
+    gnome.zenity
+    alsa-tools
+    libxcb
+    xcbutil
+    libxkbcommon
+    xcbutilkeysyms
+    xcb-util-cursor
+    pcre
+    mount
+  ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
+    Cocoa
+    WebKit
+    CoreServices
+    CoreAudioKit
   ];
 
-  preBuild = ''
-    cd Builds/LinuxMakefile
-  '';
-  makeFlags = [ "CONFIG=${buildType}" ];
-  enableParallelBuilding = true;
-
-  installPhase = ''
-    runHook preInstall
-
-    mkdir -p $out/bin $out/share/bespokesynth $out/share/applications $out/share/icons/hicolor/512x512/apps
-    cp build/BespokeSynth $out/bin/
-    cp -ar ../MacOSX/build/Release/resource $out/share/bespokesynth/
-    wrapProgram $out/bin/BespokeSynth \
-      --run "cd $out/share/bespokesynth"
-
-    mkdir -p $out/share/applications/ $out/share/icons/hicolor/512x512/apps/
-    cp ../../bespoke_icon.png $out/share/icons/hicolor/512x512/apps/
-    substitute ../../BespokeSynth.desktop $out/share/applications/BespokseSynth.desktop \
-      --replace "/usr/bin/" ""
-
-    runHook postInstall
-  '';
+  NIX_CFLAGS_COMPILE = lib.optionalString stdenv.hostPlatform.isDarwin (toString [
+    # Fails to find fp.h on its own
+    "-isystem ${CoreServices}/Library/Frameworks/CoreServices.framework/Versions/Current/Frameworks/CarbonCore.framework/Versions/Current/Headers/"
+  ]);
+
+  postInstall =
+    if stdenv.hostPlatform.isDarwin then ''
+      mkdir -p $out/{Applications,bin}
+      mv Source/BespokeSynth_artefacts/${cmakeBuildType}/BespokeSynth.app $out/Applications/
+      # Symlinking confuses the resource finding about the actual location of the binary
+      # Resources are looked up relative to the executed file's location
+      makeWrapper $out/{Applications/BespokeSynth.app/Contents/MacOS,bin}/BespokeSynth
+    '' else ''
+      # Ensure zenity is available, or it won't be able to open new files.
+      # Ensure the python used for compilation is the same as the python used at run-time.
+      # jedi is also required for auto-completion.
+      # These X11 libs get dlopen'd, they cause visual bugs when unavailable.
+      wrapProgram $out/bin/BespokeSynth \
+        --prefix PATH : '${lib.makeBinPath [
+          gnome.zenity
+          (python3.withPackages (ps: with ps; [ jedi ]))
+        ]}' \
+        --prefix LD_LIBRARY_PATH : '${lib.makeLibraryPath [
+          libXrandr
+          libXinerama
+          libXcursor
+          libXScrnSaver
+        ]}'
+    '';
 
   meta = with lib; {
-    description = "Software modular synth with controllers support, scripting and VST";
+    description =
+      "Software modular synth with controllers support, scripting and VST";
     homepage = "https://github.com/awwbees/BespokeSynth";
     license = with licenses; [
       gpl3Plus
-
-      # This package is unfree and not distributable due to the license of VST2.
-      # see #145607
-      unfree
-    ];
-    maintainers = with maintainers; [ astro ];
+    ] ++ lib.optional enableVST2 unfree;
+    maintainers = with maintainers; [ astro tobiasBora OPNA2608 ];
     platforms = platforms.all;
   };
 }