supercollider: add plugin support

main
Lily Foster 2 years ago
parent 09f63fb46c
commit 089f8b107b
  1. 27
      pkgs/development/interpreters/supercollider/default.nix
  2. 65
      pkgs/development/interpreters/supercollider/supercollider-3.12.0-env-dirs.patch
  3. 18
      pkgs/development/interpreters/supercollider/wrapper.nix
  4. 4
      pkgs/top-level/all-packages.nix

@ -1,12 +1,9 @@
{ lib, stdenv, mkDerivation, fetchurl, cmake, pkg-config, alsa-lib
, libjack2, libsndfile, fftw, curl, gcc
, libXt, qtbase, qttools, qtwebengine
{ lib, stdenv, mkDerivation, fetchurl, cmake
, pkg-config, alsa-lib, libjack2, libsndfile, fftw
, curl, gcc, libXt, qtbase, qttools, qtwebengine
, readline, qtwebsockets, useSCEL ? false, emacs
}:
let
inherit (lib) optional;
in
mkDerivation rec {
pname = "supercollider";
version = "3.12.2";
@ -16,6 +13,17 @@ mkDerivation rec {
sha256 = "sha256-1QYorCgSwBK+SVAm4k7HZirr1j+znPmVicFmJdvO3g4=";
};
patches = [
# add support for SC_DATA_DIR and SC_PLUGIN_DIR env vars to override compile-time values
./supercollider-3.12.0-env-dirs.patch
];
nativeBuildInputs = [ cmake pkg-config qttools ];
buildInputs = [ gcc libjack2 libsndfile fftw curl libXt qtbase qtwebengine qtwebsockets readline ]
++ lib.optional (!stdenv.isDarwin) alsa-lib
++ lib.optional useSCEL emacs;
hardeningDisable = [ "stackprotector" ];
cmakeFlags = [
@ -23,13 +31,6 @@ mkDerivation rec {
"-DSC_EL=${if useSCEL then "ON" else "OFF"}"
];
nativeBuildInputs = [ cmake pkg-config qttools ];
buildInputs = [
gcc libjack2 libsndfile fftw curl libXt qtbase qtwebengine qtwebsockets readline ]
++ optional (!stdenv.isDarwin) alsa-lib
++ optional useSCEL emacs;
meta = with lib; {
description = "Programming language for real time audio synthesis";
homepage = "https://supercollider.github.io";

@ -0,0 +1,65 @@
diff --git a/common/SC_Filesystem_unix.cpp b/common/SC_Filesystem_unix.cpp
index 52dc1fd2d..aae09ed9c 100644
--- a/common/SC_Filesystem_unix.cpp
+++ b/common/SC_Filesystem_unix.cpp
@@ -94,6 +94,10 @@ bool SC_Filesystem::isNonHostPlatformDirectoryName(const std::string& s) {
}
Path SC_Filesystem::defaultSystemAppSupportDirectory() {
+ const char* sc_data_dir = getenv("SC_DATA_DIR");
+ if (sc_data_dir)
+ return Path(sc_data_dir);
+
# ifdef SC_DATA_DIR
return Path(SC_DATA_DIR);
# else
@@ -125,6 +129,10 @@ Path SC_Filesystem::defaultUserConfigDirectory() {
}
Path SC_Filesystem::defaultResourceDirectory() {
+ const char* sc_data_dir = getenv("SC_DATA_DIR");
+ if (sc_data_dir)
+ return Path(sc_data_dir);
+
# ifdef SC_DATA_DIR
return Path(SC_DATA_DIR);
# else
diff --git a/server/scsynth/SC_Lib_Cintf.cpp b/server/scsynth/SC_Lib_Cintf.cpp
index f6219307e..28e13eb98 100644
--- a/server/scsynth/SC_Lib_Cintf.cpp
+++ b/server/scsynth/SC_Lib_Cintf.cpp
@@ -178,9 +178,13 @@ void initialize_library(const char* uGensPluginPath) {
using DirName = SC_Filesystem::DirName;
if (loadUGensExtDirs) {
+ const char* sc_plugin_dir = getenv("SC_PLUGIN_DIR");
+ if (sc_plugin_dir) {
+ PlugIn_LoadDir(sc_plugin_dir, true);
+ }
#ifdef SC_PLUGIN_DIR
// load globally installed plugins
- if (bfs::is_directory(SC_PLUGIN_DIR)) {
+ else if (bfs::is_directory(SC_PLUGIN_DIR)) {
PlugIn_LoadDir(SC_PLUGIN_DIR, true);
}
#endif // SC_PLUGIN_DIR
diff --git a/server/supernova/server/main.cpp b/server/supernova/server/main.cpp
index b2b5adf4e..6cb8c411c 100644
--- a/server/supernova/server/main.cpp
+++ b/server/supernova/server/main.cpp
@@ -224,8 +224,14 @@ void set_plugin_paths(server_arguments const& args, nova::sc_ugen_factory* facto
}
}
} else {
+ const char* sc_plugin_dir = getenv("SC_PLUGIN_DIR");
+ if (sc_plugin_dir) {
+ factory->load_plugin_folder(sc_plugin_dir);
+ }
#ifdef SC_PLUGIN_DIR
- factory->load_plugin_folder(SC_PLUGIN_DIR);
+ else {
+ factory->load_plugin_folder(SC_PLUGIN_DIR);
+ }
#endif
factory->load_plugin_folder(SC_Filesystem::instance().getDirectory(DirName::Resource) / SC_PLUGIN_DIR_NAME);
factory->load_plugin_folder(SC_Filesystem::instance().getDirectory(DirName::SystemExtension));

@ -0,0 +1,18 @@
{ symlinkJoin, makeWrapper, supercollider, plugins }:
symlinkJoin {
name = "supercollider-with-plugins-${supercollider.version}";
paths = [ supercollider ] ++ plugins;
nativeBuildInputs = [ makeWrapper ];
postBuild = ''
for exe in $out/bin/*; do
wrapProgram $exe \
--set SC_PLUGIN_DIR "$out/lib/SuperCollider/plugins" \
--set SC_DATA_DIR "$out/share/SuperCollider"
done
'';
inherit (supercollider) pname version meta;
}

@ -14432,6 +14432,10 @@ with pkgs;
supercollider_scel = supercollider.override { useSCEL = true; };
supercollider-with-plugins = callPackage ../development/interpreters/supercollider/wrapper.nix {
plugins = [];
};
taktuk = callPackage ../applications/networking/cluster/taktuk { };
tcl = tcl-8_6;

Loading…
Cancel
Save