···1-{ lib, stdenv
2-, coreutils
3-, fetchurl
4-, makeWrapper
5-, pkg-config
6-}:
7-8-with lib.strings;
9-10-let
11-12- version = "0.9.90";
13-14- src = fetchurl {
15- url = "mirror://sourceforge/project/faudiostream/faust-${version}.tgz";
16- sha256 = "0d1fqwymyfb73zkmpwv4zk4gsg4ji7qs20mfsr20skmnqx30xvna";
17- };
18-19- meta = with lib; {
20- homepage = "https://faust.grame.fr/";
21- downloadPage = "https://sourceforge.net/projects/faudiostream/files/";
22- license = licenses.gpl2;
23- platforms = platforms.linux;
24- maintainers = with maintainers; [ magnetophon pmahoney ];
25- };
26-27- faust = stdenv.mkDerivation {
28- pname = "faust";
29- inherit version;
30-31- inherit src;
32-33- nativeBuildInputs = [ makeWrapper ];
34-35- passthru = {
36- inherit wrap wrapWithBuildEnv;
37- };
38-39- preConfigure = ''
40- makeFlags="$makeFlags prefix=$out"
41-42- # The faust makefiles use 'system ?= $(shell uname -s)' but nix
43- # defines 'system' env var, so undefine that so faust detects the
44- # correct system.
45- unset system
46- '';
47-48- # Remove most faust2appl scripts since they won't run properly
49- # without additional paths setup. See faust.wrap,
50- # faust.wrapWithBuildEnv.
51- postInstall = ''
52- # syntax error when eval'd directly
53- pattern="faust2!(*@(atomsnippets|graph|graphviewer|md|plot|sig|sigviewer|svg))"
54- (shopt -s extglob; rm "$out"/bin/$pattern)
55- '';
56-57- postFixup = ''
58- # Set faustpath explicitly.
59- substituteInPlace "$out"/bin/faustpath \
60- --replace "/usr/local /usr /opt /opt/local" "$out"
61-62- # The 'faustoptflags' is 'source'd into other faust scripts and
63- # not used as an executable, so patch 'uname' usage directly
64- # rather than use makeWrapper.
65- substituteInPlace "$out"/bin/faustoptflags \
66- --replace uname "${coreutils}/bin/uname"
67-68- # wrapper for scripts that don't need faust.wrap*
69- for script in "$out"/bin/faust2*; do
70- wrapProgram "$script" \
71- --prefix PATH : "$out"/bin
72- done
73- '';
74-75- meta = meta // {
76- description = "A functional programming language for realtime audio signal processing";
77- longDescription = ''
78- FAUST (Functional Audio Stream) is a functional programming
79- language specifically designed for real-time signal processing
80- and synthesis. FAUST targets high-performance signal processing
81- applications and audio plug-ins for a variety of platforms and
82- standards.
83- The Faust compiler translates DSP specifications into very
84- efficient C++ code. Thanks to the notion of architecture,
85- FAUST programs can be easily deployed on a large variety of
86- audio platforms and plugin formats (jack, alsa, ladspa, maxmsp,
87- puredata, csound, supercollider, pure, vst, coreaudio) without
88- any change to the FAUST code.
89-90- This package has just the compiler, libraries, and headers.
91- Install faust2* for specific faust2appl scripts.
92- '';
93- };
94-95- };
96-97- # Default values for faust2appl.
98- faust2ApplBase =
99- { baseName
100- , dir ? "tools/faust2appls"
101- , scripts ? [ baseName ]
102- , ...
103- }@args:
104-105- args // {
106- name = "${baseName}-${version}";
107-108- inherit src;
109-110- dontBuild = true;
111-112- installPhase = ''
113- runHook preInstall
114-115- mkdir -p "$out/bin"
116- for script in ${concatStringsSep " " scripts}; do
117- cp "${dir}/$script" "$out/bin/"
118- done
119-120- runHook postInstall
121- '';
122-123- postInstall = ''
124- # For the faust2appl script, change 'faustpath' and
125- # 'faustoptflags' to absolute paths.
126- for script in "$out"/bin/*; do
127- substituteInPlace "$script" \
128- --replace ". faustpath" ". '${faust}/bin/faustpath'" \
129- --replace ". faustoptflags" ". '${faust}/bin/faustoptflags'"
130- done
131- '';
132-133- meta = meta // {
134- description = "The ${baseName} script, part of faust functional programming language for realtime audio signal processing";
135- };
136- };
137-138- # Some 'faust2appl' scripts, such as faust2alsa, run faust to
139- # generate cpp code, then invoke the c++ compiler to build the code.
140- # This builder wraps these scripts in parts of the stdenv such that
141- # when the scripts are called outside any nix build, they behave as
142- # if they were running inside a nix build in terms of compilers and
143- # paths being configured (e.g. rpath is set so that compiled
144- # binaries link to the libs inside the nix store)
145- #
146- # The function takes two main args: the appl name (e.g.
147- # 'faust2alsa') and an optional list of propagatedBuildInputs. It
148- # returns a derivation that contains only the bin/${appl} script,
149- # wrapped up so that it will run as if it was inside a nix build
150- # with those build inputs.
151- #
152- # The build input 'faust' is automatically added to the
153- # propagatedBuildInputs.
154- wrapWithBuildEnv =
155- { baseName
156- , propagatedBuildInputs ? [ ]
157- , ...
158- }@args:
159-160- stdenv.mkDerivation ((faust2ApplBase args) // {
161-162- nativeBuildInputs = [ pkg-config makeWrapper ];
163-164- propagatedBuildInputs = [ faust ] ++ propagatedBuildInputs;
165-166- postFixup = ''
167-168- # export parts of the build environment
169- for script in "$out"/bin/*; do
170- wrapProgram "$script" \
171- --set FAUSTLIB "${faust}/lib/faust" \
172- --set FAUSTINC "${faust}/include/faust" \
173- --prefix PATH : "$PATH" \
174- --prefix PKG_CONFIG_PATH : "$PKG_CONFIG_PATH" \
175- --set NIX_CFLAGS_COMPILE "$NIX_CFLAGS_COMPILE" \
176- --set NIX_LDFLAGS "$NIX_LDFLAGS"
177- done
178- '';
179- });
180-181- # Builder for 'faust2appl' scripts, such as faust2firefox that
182- # simply need to be wrapped with some dependencies on PATH.
183- #
184- # The build input 'faust' is automatically added to the PATH.
185- wrap =
186- { baseName
187- , runtimeInputs ? [ ]
188- , ...
189- }@args:
190-191- let
192-193- runtimePath = concatStringsSep ":" (map (p: "${p}/bin") ([ faust ] ++ runtimeInputs));
194-195- in stdenv.mkDerivation ((faust2ApplBase args) // {
196-197- nativeBuildInputs = [ makeWrapper ];
198-199- postFixup = ''
200- for script in "$out"/bin/*; do
201- wrapProgram "$script" --prefix PATH : "${runtimePath}"
202- done
203- '';
204-205- });
206-207-in faust
···492493 facette = throw "facette has been removed"; # Added 2020-01-06
494 faustStk = faustPhysicalModeling; # Added 2023-05-16
0495 fast-neural-doodle = throw "fast-neural-doodle has been removed, as the upstream project has been abandoned"; # Added 2020-03-28
496 fastnlo = fastnlo_toolkit; # Added 2021-04-24
497 fbreader = throw "fbreader has been removed, as the upstream project has been archived"; # Added 2022-05-26
···492493 facette = throw "facette has been removed"; # Added 2020-01-06
494 faustStk = faustPhysicalModeling; # Added 2023-05-16
495+ faust1 = throw "faust1 has been removed, use faust2 instead"; # Added 2022-12-03
496 fast-neural-doodle = throw "fast-neural-doodle has been removed, as the upstream project has been abandoned"; # Added 2020-03-28
497 fastnlo = fastnlo_toolkit; # Added 2021-04-24
498 fbreader = throw "fbreader has been removed, as the upstream project has been archived"; # Added 2022-05-26