2025-06-25 03:08:35 -03:00

83 lines
2.3 KiB
Nix

{
lib,
stdenv,
fetchFromGitHub,
puredata,
pkg-config,
cmake,
openssl,
libogg,
libvorbis,
opusfile,
ffmpeg,
zlib,
}:
stdenv.mkDerivation rec {
pname = "pd-else";
version = "1.0-rc13";
src = fetchFromGitHub {
owner = "porres";
repo = "pd-else";
tag = "v.${version}";
hash = "sha256-WebjdozcFup2xk3cS9LPTiA6m0l1sR6sj3hHlt6ScfU=";
};
nativeBuildInputs = [
pkg-config
cmake
];
buildInputs = [
puredata
openssl
libogg
libvorbis
opusfile
ffmpeg
zlib
];
# Set up Pure Data headers and configure with system libraries
preConfigure = ''
substituteInPlace CMakeLists.txt \
--replace-fail 'add_subdirectory(Source/Shared/ffmpeg)' '# add_subdirectory(Source/Shared/ffmpeg) - using system FFmpeg' \
--replace-fail 'target_link_libraries(play.file_tilde PRIVATE ffmpeg)' 'target_link_libraries(play.file_tilde PRIVATE avformat avcodec avutil swresample z)' \
--replace-fail 'target_link_libraries(sfload PRIVATE ffmpeg)' 'target_link_libraries(sfload PRIVATE avformat avcodec avutil swresample z)' \
--replace-fail 'target_link_libraries(sfinfo PRIVATE ffmpeg)' 'target_link_libraries(sfinfo PRIVATE avformat avcodec avutil swresample z)'
'';
cmakeFlags = [
"-DCMAKE_C_FLAGS=-I${puredata}/include/pd"
"-DCMAKE_CXX_FLAGS=-I${puredata}/include/pd"
"-DUSE_LTO=ON"
"-DOPENSSL_CRYPTO_LIBRARY=${lib.getLib openssl}/lib/libcrypto.so"
"-DOPENSSL_SSL_LIBRARY=${lib.getLib openssl}/lib/libssl.so"
];
postInstall = ''
mv else/ $out/else/
rm -rf $out/include/ $out/lib/
'';
postFixup = ''
interpreter=$(cat $NIX_CC/nix-support/dynamic-linker)
find $out -type f -executable -exec patchelf --set-interpreter "$interpreter" --set-rpath ${lib.makeLibraryPath buildInputs} {} \;
'';
meta = {
description = "EL Locus Solus' Externals for Pure Data";
longDescription = ''
ELSE is a library of externals and abstractions for Pure Data.
It provides a comprehensive set of tools for signal processing,
MIDI, GUI, and more in Pure Data.
'';
homepage = "https://github.com/porres/pd-else";
license = lib.licenses.wtfpl;
platforms = lib.platforms.unix;
broken = stdenv.hostPlatform.isDarwin;
maintainers = [ lib.maintainers.kugland ];
};
}