nixpkgs/pkgs/applications/audio/faust-compiler/default.nix

102 lines
4.1 KiB
Nix

{ fetchurl, stdenv, unzip, pkgconfig, makeWrapper, libsndfile, libmicrohttpd, vim }:
stdenv.mkDerivation rec {
version = "0.9.67";
name = "faust-compiler-${version}";
src = fetchurl {
url = "http://downloads.sourceforge.net/project/faudiostream/faust-${version}.zip";
sha256 = "068vl9536zn0j4pknwfcchzi90rx5pk64wbcbd67z32w0csx8xm1";
};
buildInputs = [ unzip pkgconfig makeWrapper libsndfile libmicrohttpd vim];
makeFlags="PREFIX = $(out)";
FPATH="$out"; # <- where to search
patchPhase = ''
sed -i 's@?= $(shell uname -s)@:= Linux@g' architecture/osclib/oscpack/Makefile
sed -i 's@faust/misc.h@../../architecture/faust/misc.h@g' tools/sound2faust/sound2faust.cpp
sed -i 's@faust/gui/@../../architecture/faust/gui/@g' architecture/faust/misc.h
'';
buildPhase = ''
make -C compiler -f Makefile.unix
make -C architecture/osclib
g++ -O3 tools/sound2faust/sound2faust.cpp `pkg-config --cflags --static --libs sndfile` -o tools/sound2faust/sound2faust
make httpd
'';
installPhase = ''
echo install faust itself
mkdir -p $out/bin/
mkdir -p $out/include/
mkdir -p $out/include/faust/
mkdir -p $out/include/faust/osc/
install compiler/faust $out/bin/
echo install architecture and faust library files
mkdir -p $out/lib/faust
cp architecture/*.lib $out/lib/faust/
cp architecture/*.cpp $out/lib/faust/
echo install math documentation files
cp architecture/mathdoctexts-*.txt $out/lib/faust/
cp architecture/latexheader.tex $out/lib/faust/
echo install additional binary libraries: osc, http
([ -e architecture/httpdlib/libHTTPDFaust.a ] && cp architecture/httpdlib/libHTTPDFaust.a $out/lib/faust/) || echo libHTTPDFaust not available
cp architecture/osclib/*.a $out/lib/faust/
cp -r architecture/httpdlib/html/js $out/lib/faust/js
([ -e architecture/httpdlib/src/hexa/stylesheet ] && cp architecture/httpdlib/src/hexa/stylesheet $out/lib/faust/js/stylesheet.js) || echo stylesheet not available
([ -e architecture/httpdlib/src/hexa/jsscripts ] && cp architecture/httpdlib/src/hexa/jsscripts $out/lib/faust/js/jsscripts.js) || echo jsscripts not available
echo install includes files for architectures
cp -r architecture/faust $out/include/
echo install additional includes files for binary libraries: osc, http
cp architecture/osclib/faust/faust/OSCControler.h $out/include/faust/gui/
cp architecture/osclib/faust/faust/osc/*.h $out/include/faust/osc/
cp architecture/httpdlib/src/include/*.h $out/include/faust/gui/
echo patch header and cpp files
find $out/include/ -name "*.h" -type f | xargs sed "s@#include \"faust/@#include \"$out/include/faust/@g" -i
find $out/lib/faust/ -name "*.cpp" -type f | xargs sed "s@#include \"faust/@#include \"$out/include/faust/@g" -i
sed -i "s@../../architecture/faust/gui/@$out/include/faust/gui/@g" $out/include/faust/misc.h
wrapProgram $out/bin/faust \
--set FAUSTLIB $out/lib/faust \
--set FAUST_LIB_PATH $out/lib/faust \
--set FAUSTINC $out/include/
'';
meta = with stdenv.lib; {
description = "A functional programming language for realtime audio signal processing";
longDescription = ''
FAUST (Functional Audio Stream) is a functional programming
language specifically designed for real-time signal processing
and synthesis. FAUST targets high-performance signal processing
applications and audio plug-ins for a variety of platforms and
standards.
The Faust compiler translates DSP specifications into very
efficient C++ code. Thanks to the notion of architecture,
FAUST programs can be easily deployed on a large variety of
audio platforms and plugin formats (jack, alsa, ladspa, maxmsp,
puredata, csound, supercollider, pure, vst, coreaudio) without
any change to the FAUST code.
This package has just the compiler. Install faust for the full
set of faust2somethingElse tools.
'';
homepage = http://faust.grame.fr/;
downloadPage = http://sourceforge.net/projects/faudiostream/files/;
license = licenses.gpl2;
platforms = platforms.linux;
maintainers = [ maintainers.magnetophon ];
};
}