1{ stdenv, pkgconfig, fetchurl, python3Packages
2, intltool, itstool, libtool, texinfo, autoreconfHook
3, glib, dotconf, libsndfile
4, withLibao ? true, libao
5, withPulse ? false, libpulseaudio
6, withAlsa ? false, alsaLib
7, withOss ? false
8, withFlite ? true, flite
9# , withFestival ? false, festival-freebsoft-utils
10, withEspeak ? true, espeak, sonic, pcaudiolib
11, withPico ? true, svox
12# , withIvona ? false, libdumbtts
13}:
14
15let
16 inherit (stdenv.lib) optional optionals;
17 inherit (python3Packages) python pyxdg wrapPython;
18
19 # speechd hard-codes espeak, even when built without support for it.
20 selectedDefaultModule =
21 if withEspeak then
22 "espeak-ng"
23 else if withPico then
24 "pico"
25 else if withFlite then
26 "flite"
27 else
28 throw "You need to enable at least one output module.";
29in stdenv.mkDerivation rec {
30 name = "speech-dispatcher-${version}";
31 version = "0.8.8";
32
33 src = fetchurl {
34 url = "http://www.freebsoft.org/pub/projects/speechd/${name}.tar.gz";
35 sha256 = "1wvck00w9ixildaq6hlhnf6wa576y02ac96lp6932h3k1n08jaiw";
36 };
37
38 nativeBuildInputs = [ pkgconfig autoreconfHook intltool libtool itstool texinfo wrapPython ];
39
40 buildInputs = [ glib dotconf libsndfile libao libpulseaudio alsaLib python ]
41 ++ optionals withEspeak [ espeak sonic pcaudiolib ]
42 ++ optional withFlite flite
43 ++ optional withPico svox
44 # TODO: add flint/festival support with festival-freebsoft-utils package
45 # ++ optional withFestival festival-freebsoft-utils
46 # TODO: add Ivona support with libdumbtts package
47 # ++ optional withIvona libdumbtts
48 ;
49
50 pythonPath = [ pyxdg ];
51
52 configureFlags = [
53 # Audio method falls back from left to right.
54 "--with-default-audio-method=\"libao,pulse,alsa,oss\""
55 ] ++ optional withPulse "--with-pulse"
56 ++ optional withAlsa "--with-alsa"
57 ++ optional withLibao "--with-libao"
58 ++ optional withOss "--with-oss"
59 ++ optional withEspeak "--with-espeak-ng"
60 ++ optional withPico "--with-pico"
61 # ++ optional withFestival "--with-flint"
62 # ++ optional withIvona "--with-ivona"
63 ;
64
65 postPatch = ''
66 substituteInPlace config/speechd.conf --replace "DefaultModule espeak" "DefaultModule ${selectedDefaultModule}"
67 substituteInPlace src/modules/pico.c --replace "/usr/share/pico/lang" "${svox}/share/pico/lang"
68 '';
69
70 postInstall = ''
71 wrapPythonPrograms
72 '';
73
74 meta = with stdenv.lib; {
75 description = "Common interface to speech synthesis";
76 homepage = https://devel.freebsoft.org/speechd;
77 license = licenses.gpl2Plus;
78 maintainers = with maintainers; [ berce ];
79 platforms = platforms.linux;
80 };
81}