249 lines
5.7 KiB
Nix
249 lines
5.7 KiB
Nix
{ lib
|
||
, stdenv
|
||
, fetchFromGitHub
|
||
, fetchurl
|
||
, fetchzip
|
||
, pkg-config
|
||
, bash
|
||
, coreutils
|
||
, which
|
||
, guile
|
||
, cmake
|
||
, doxygen
|
||
, git
|
||
, python311
|
||
, qt5
|
||
, libGLU
|
||
, alsa-lib
|
||
, jack2
|
||
, libsamplerate
|
||
, lrdf
|
||
, libsndfile
|
||
, ladspaH
|
||
, ladspaPlugins
|
||
, glib
|
||
, calf
|
||
, binutils-unwrapped
|
||
, libiberty
|
||
, tk-8_5
|
||
, libogg
|
||
, libvorbis
|
||
, speex
|
||
, fftw
|
||
, fftwFloat
|
||
, libxkbfile
|
||
, util-macros
|
||
, libxrandr
|
||
, llvm
|
||
, boost
|
||
, openssl
|
||
, ncurses
|
||
, libxcb-util
|
||
, gmp
|
||
, mpfr
|
||
, libmpc
|
||
, libpthread-stubs
|
||
, liblo
|
||
, util-linux
|
||
, xorg
|
||
, writeShellScriptBin
|
||
, useQwebengine ? true
|
||
}:
|
||
|
||
let
|
||
qt-web = if useQwebengine then qt5.qtwebengine else qt5.qtwebkit;
|
||
# Static binutils is required by Radium, specifically `libbfd.a'.
|
||
binutils-static = binutils-unwrapped.override { enableShared = false; };
|
||
|
||
# Needs to be an older version.
|
||
xcbproto-1_13 = xorg.xcbproto.overrideAttrs (old: {
|
||
version = "1.13";
|
||
nativeBuildInputs = (old.nativeBuildInputs or []) ++ [ python311 ];
|
||
|
||
preConfigure = ''
|
||
export PYTHON=${python311}/bin/python3
|
||
export PATH=${python311}/bin:$PATH
|
||
'';
|
||
|
||
src = fetchurl {
|
||
url = "https://xcb.freedesktop.org/dist/xcb-proto-1.13.tar.gz";
|
||
sha256 = "sha256-Bpjo9ZbkwNutcdPcdU2V6w7btC31Rk4PeCYhIW+jO6c=";
|
||
};
|
||
});
|
||
in stdenv.mkDerivation rec {
|
||
pname = "radium";
|
||
version = "7.5.76";
|
||
|
||
src = fetchFromGitHub {
|
||
owner = "kmatheussen";
|
||
repo = "radium";
|
||
rev = "${version}";
|
||
sha256 = "sha256-Eiil17cbCraXF3vY2LUy2B6eyfc1XD4JHJWZUfai+wc=";
|
||
};
|
||
|
||
vst2Sdk = fetchzip {
|
||
url = "https://web.archive.org/web/20161002042955if_/http://www.steinberg.net/sdk_downloads/vst_sdk2_4_rev2.zip";
|
||
sha256 = "sha256-6eDJYGfuVczOTaZNUYa/dLEoCzl6Ysi1I1NrxuN2mPQ=";
|
||
};
|
||
|
||
nativeBuildInputs = [
|
||
pkg-config
|
||
bash
|
||
coreutils
|
||
which
|
||
guile
|
||
cmake
|
||
doxygen
|
||
git
|
||
|
||
qt5.wrapQtAppsHook
|
||
|
||
(writeShellScriptBin "arch" "#!/usr/bin/env sh\nuname -m")
|
||
];
|
||
|
||
buildInputs = [
|
||
qt5.qtbase
|
||
qt5.qttools
|
||
qt5.qtx11extras
|
||
qt-web
|
||
|
||
# In the order of the README.
|
||
libGLU
|
||
alsa-lib
|
||
jack2
|
||
libsamplerate
|
||
lrdf
|
||
libsndfile
|
||
ladspaH
|
||
glib
|
||
calf
|
||
binutils-static
|
||
libiberty
|
||
tk-8_5
|
||
libogg
|
||
libvorbis
|
||
speex
|
||
fftw
|
||
fftwFloat
|
||
libxkbfile
|
||
util-macros
|
||
libxrandr
|
||
llvm
|
||
boost
|
||
openssl
|
||
ncurses
|
||
libxcb-util
|
||
gmp
|
||
mpfr
|
||
libmpc
|
||
|
||
xorg.libXinerama
|
||
xorg.libXau
|
||
xcbproto-1_13
|
||
|
||
libpthread-stubs
|
||
liblo
|
||
util-linux # For libuuid
|
||
|
||
ladspaPlugins
|
||
];
|
||
|
||
patches = [
|
||
./qt_paths.patch
|
||
./qwebengine_quirks.patch
|
||
./build_system_fixes.patch
|
||
];
|
||
|
||
postPatch = ''
|
||
patchShebangs .
|
||
|
||
substituteInPlace Makefile.Qt \
|
||
--replace-fail "/usr/bin/env" "${coreutils}/bin/env"
|
||
|
||
# Next culprit: Python 2.7. Fucking janky build system.
|
||
substituteInPlace bin/packages/build_python27.sh \
|
||
--replace-fail "CC=clang" "CC=${stdenv.cc}/bin/cc" \
|
||
--replace-fail "CXX=clang++" "CXX=${stdenv.cc}/bin/c++"
|
||
|
||
# This is so Faust can build with LLVM > 18.
|
||
cp ${./faust_llvm_21.patch} bin/packages/faust_llvm_21.patch
|
||
'';
|
||
|
||
configurePhase = ":";
|
||
|
||
env = {
|
||
# If false, build the demo version.
|
||
FULL_VERSION = true;
|
||
BUILDTYPE = "RELEASE";
|
||
USE_QWEBENGINE = useQwebengine;
|
||
# Recommended in `configuration.sh'.
|
||
WARNINGS_AS_ERRORS = false;
|
||
# If running on an AMD GPU, this is required.
|
||
INCLUDE_FAUSTDEV_BUT_NOT_LLVM = true;
|
||
|
||
LLVM_PATH = "${llvm.dev}";
|
||
UIC = "${qt5.qtbase.dev}/bin/uic";
|
||
MOC = "${qt5.qtbase.dev}/bin/moc";
|
||
|
||
QT_UI_CFLAGS =
|
||
"-I${qt5.qttools.dev}/include/QtUiTools";
|
||
RADIUM_BFD_LDFLAGS =
|
||
"-L${binutils-static.lib}/lib -lbfd -lsframe";
|
||
RADIUM_VST2SDK_PATH = "${vst2Sdk}";
|
||
};
|
||
|
||
qtWrapperArgs = [
|
||
# Does not launch with custom Qt paths otherwise.
|
||
"--set OVERRIDE_RADIUM_QPA 1"
|
||
|
||
# This is what `run_radium_linux.sh' does.
|
||
"--prefix LD_LIBRARY_PATH : ${placeholder "out"}/opt/radium/packages/python27_install/lib"
|
||
"--prefix LD_LIBRARY_PATH : ${placeholder "out"}/opt/radium/packages/faust/build/lib"
|
||
|
||
# No access to `libqxcb.so' otherwise.
|
||
"--prefix QT_PLUGIN_PATH : ${qt5.qtbase.bin}/lib/qt-${qt5.qtbase.version}/plugins"
|
||
"--prefix QT_QPA_PLATFORM_PLUGIN_PATH : ${qt5.qtbase.bin}/lib/qt-${qt5.qtbase.version}/plugins/platforms"
|
||
];
|
||
|
||
buildPhase = ''
|
||
make packages
|
||
chmod +x ./build_linux.sh
|
||
./build_linux.sh -j$(nproc)
|
||
'';
|
||
|
||
installPhase = ''
|
||
mkdir -p $out/{opt,bin,share/applications,share/icons}
|
||
|
||
chmod +x ./install.sh
|
||
./install.sh $out/opt
|
||
|
||
ln -s $out/opt/radium/radium_linux.bin $out/bin/radium
|
||
|
||
cp bin/graphics/radium_logo_256x256_colorized.png $out/share/icons/radium.png
|
||
cp $out/opt/radium/radium.desktop $out/share/applications/radium.desktop
|
||
'';
|
||
|
||
preFixup = ''
|
||
rm -f $out/opt/radium/ladspa # broken relative symlink
|
||
ln -s ${ladspaPlugins}/lib/ladspa $out/opt/radium/ladspa # working
|
||
'';
|
||
|
||
postFixup = ''
|
||
wrapQtApp $out/opt/radium/radium_check_opengl
|
||
wrapQtApp $out/opt/radium/radium_check_jack_status
|
||
wrapQtApp $out/opt/radium/radium_plugin_scanner
|
||
wrapQtApp $out/opt/radium/radium_error_message
|
||
wrapQtApp $out/opt/radium/radium_progress_window
|
||
'';
|
||
|
||
meta = with lib; {
|
||
description = "Radium – a graphical music editor / tracker (DAW)";
|
||
homepage = "https://users.notam02.no/~kjetism/radium/";
|
||
# Radium in itself is GPLv2. However, the ancient VST2 SDK is
|
||
# proprietary.
|
||
license = with licenses; [ gpl2 unfree ];
|
||
maintainers = with maintainers; [ eko5z ];
|
||
platforms = with platforms; gnu ++ linux ++ darwin;
|
||
};
|
||
}
|