about summary refs log tree commit diff
path: root/pkgs/applications/audio
diff options
context:
space:
mode:
authorsohalt <sohalt@sohalt.net>2022-03-13 01:33:15 +0100
committersohalt <sohalt@sohalt.net>2022-03-13 01:33:15 +0100
commit8dc6d0d0ac8c1818d9da723acfbc5422a04ce755 (patch)
treef914f7ef71d77ffc88f2a991144fdc14a1e0bdd1 /pkgs/applications/audio
parent86162e9bf988fd9d1169bdf29c6e2c38bca2ef00 (diff)
downloadnixlib-8dc6d0d0ac8c1818d9da723acfbc5422a04ce755.tar
nixlib-8dc6d0d0ac8c1818d9da723acfbc5422a04ce755.tar.gz
nixlib-8dc6d0d0ac8c1818d9da723acfbc5422a04ce755.tar.bz2
nixlib-8dc6d0d0ac8c1818d9da723acfbc5422a04ce755.tar.lz
nixlib-8dc6d0d0ac8c1818d9da723acfbc5422a04ce755.tar.xz
nixlib-8dc6d0d0ac8c1818d9da723acfbc5422a04ce755.tar.zst
nixlib-8dc6d0d0ac8c1818d9da723acfbc5422a04ce755.zip
sonic-pi: 3.2.2 -> 3.3.1
Diffstat (limited to 'pkgs/applications/audio')
-rw-r--r--pkgs/applications/audio/sonic-pi/default.nix98
1 files changed, 58 insertions, 40 deletions
diff --git a/pkgs/applications/audio/sonic-pi/default.nix b/pkgs/applications/audio/sonic-pi/default.nix
index f7a3e2e36744..e9d8f979e4ad 100644
--- a/pkgs/applications/audio/sonic-pi/default.nix
+++ b/pkgs/applications/audio/sonic-pi/default.nix
@@ -4,7 +4,11 @@
 , fetchFromGitHub
 , fftwSinglePrec
 , ruby
+, erlang
 , aubio
+, alsa-lib
+, rtmidi
+, libsndfile
 , cmake
 , pkg-config
 , boost
@@ -12,26 +16,44 @@
 , jack2
 , supercollider
 , qwt
-, osmid
 }:
 
 let
 
   supercollider_single_prec = supercollider.override {  fftw = fftwSinglePrec; };
 
-in
-
-mkDerivation rec {
-  version = "3.2.2";
   pname = "sonic-pi";
-
+  version = "3.3.1";
   src = fetchFromGitHub {
-    owner = "samaaron";
+    owner = "sonic-pi-net";
     repo = "sonic-pi";
     rev = "v${version}";
-    sha256 = "1nlkpkpg9iz2hvf5pymvk6lqhpdpjbdrvr0hrnkc3ymj7llvf1cm";
+    sha256 = "sha256-AE7iuSNnW1SAtBMplReGzXKcqD4GG23i10MIAWnlcPo=";
   };
 
+  # sonic pi uses it's own aubioonset with hardcoded parameters but will compile a whole aubio for it
+  # let's just build the aubioonset instead and link against aubio from nixpkgs
+  aubioonset = mkDerivation {
+    name = "aubioonset";
+    src = src;
+    sourceRoot = "source/app/external/aubio/examples";
+    buildInputs = [jack2 aubio libsndfile];
+    patchPhase = ''
+      sed -i "s@<aubio.h>@<aubio/aubio.h>@" jackio.c utils.h
+    '';
+    buildPhase = ''
+      gcc -o aubioonset -laubio jackio.c utils.c aubioonset.c
+    '';
+    installPhase = ''
+      install -D aubioonset $out/aubioonset
+    '';
+  };
+
+in
+
+mkDerivation rec {
+  inherit pname version src;
+
   buildInputs = [
     bash
     cmake
@@ -42,42 +64,36 @@ mkDerivation rec {
     aubio
     supercollider_single_prec
     boost
+    erlang
+    alsa-lib
+    rtmidi
   ];
 
   dontUseCmakeConfigure = true;
 
-  preConfigure = ''
-    patchShebangs .
-    substituteInPlace app/gui/qt/mainwindow.cpp \
-      --subst-var-by ruby "${ruby}/bin/ruby" \
-      --subst-var out
+  prePatch = ''
+    sed -i '/aubio/d' app/external/linux_build_externals.sh
+    sed -i '/aubio/d' app/linux-prebuild.sh
+    patchShebangs app
   '';
 
-  buildPhase = ''
-    export SONIC_PI_HOME=$TMPDIR
-    export AUBIO_LIB=${aubio}/lib/libaubio.so
-    export OSMID_DIR=app/server/native/osmid
-
-    mkdir -p $OSMID_DIR
-    cp ${osmid}/bin/{m2o,o2m} $OSMID_DIR
+  configurePhase = ''
+    runHook preConfigure
 
-    pushd app/server/ruby/bin
-      ./compile-extensions.rb
-      ./i18n-tool.rb -t
-    popd
+    ./app/linux-prebuild.sh
+    ./app/linux-config.sh
 
-    pushd app/gui/qt
-      cp -f utils/ruby_help.tmpl utils/ruby_help.h
-      ../../server/ruby/bin/qt-doc.rb -o utils/ruby_help.h
+    runHook postConfigure
+  '';
 
-      lrelease lang/*.ts
+  buildPhase = ''
+    runHook preBuild
 
-      mkdir build
-      pushd build
-        cmake -G "Unix Makefiles" ..
-        make
-      popd
+    pushd app/build
+    cmake --build . --config Release
     popd
+
+    runHook postBuild
   '';
 
   installPhase = ''
@@ -90,10 +106,14 @@ mkDerivation rec {
     mkdir -p $out/app
     cp -r app/server $out/app/
 
+    # We didn't build this during linux-prebuild.sh so copy from the separate derivation
+    cp ${aubioonset}/aubioonset $out/app/server/native/
+
     # Copy only necessary files for the gui app.
-    mkdir -p $out/app/gui/qt/build
+    mkdir -p $out/app/gui/qt
     cp -r app/gui/qt/{book,fonts,help,html,images,image_source,info,lang,theme} $out/app/gui/qt/
-    cp app/gui/qt/build/sonic-pi $out/app/gui/qt/build/sonic-pi
+    mkdir -p $out/app/build/gui/qt
+    cp app/build/gui/qt/sonic-pi $out/app/build/gui/qt/sonic-pi
 
     runHook postInstall
   '';
@@ -102,20 +122,18 @@ mkDerivation rec {
   dontWrapQtApps = true;
   preFixup = ''
     wrapQtApp "$out/bin/sonic-pi" \
-      --prefix PATH : ${lib.makeBinPath [ bash jack2 ruby supercollider ] } \
-      --set AUBIO_LIB "${aubio}/lib/libaubio.so"
+      --prefix PATH : ${lib.makeBinPath [ bash jack2 ruby supercollider erlang] }
     makeWrapper \
       $out/app/server/ruby/bin/sonic-pi-server.rb \
       $out/bin/sonic-pi-server \
-      --prefix PATH : ${lib.makeBinPath [ bash jack2 ruby supercollider ] } \
-      --set AUBIO_LIB "${aubio}/lib/libaubio.so"
+      --prefix PATH : ${lib.makeBinPath [ bash jack2 ruby supercollider erlang ] }
   '';
 
   meta = {
     homepage = "https://sonic-pi.net/";
     description = "Free live coding synth for everyone originally designed to support computing and music lessons within schools";
     license = lib.licenses.mit;
-    maintainers = with lib.maintainers; [ Phlogistique kamilchm c0deaddict ];
+    maintainers = with lib.maintainers; [ Phlogistique kamilchm c0deaddict sohalt ];
     platforms = lib.platforms.linux;
   };
 }