diff --git a/pkgs/applications/audio/espeak-ng/default.nix b/pkgs/applications/audio/espeak-ng/default.nix index e0f7822bcd71..6458d7188ae1 100644 --- a/pkgs/applications/audio/espeak-ng/default.nix +++ b/pkgs/applications/audio/espeak-ng/default.nix @@ -45,6 +45,10 @@ stdenv.mkDerivation rec { patchelf --set-rpath "$(patchelf --print-rpath $out/bin/espeak-ng)" $out/bin/speak-ng ''; + passthru = { + inherit mbrolaSupport; + }; + meta = with lib; { description = "Open source speech synthesizer that supports over 70 languages, based on eSpeak"; homepage = "https://github.com/espeak-ng/espeak-ng"; diff --git a/pkgs/development/libraries/speechd/default.nix b/pkgs/development/libraries/speechd/default.nix index 9876d03e2ec2..270894c3e554 100644 --- a/pkgs/development/libraries/speechd/default.nix +++ b/pkgs/development/libraries/speechd/default.nix @@ -19,6 +19,7 @@ , withOss ? false , withFlite ? true, flite , withEspeak ? true, espeak, sonic, pcaudiolib +, mbrola , withPico ? true, svox }: @@ -38,6 +39,12 @@ in stdenv.mkDerivation rec { src = ./fix-paths.patch; utillinux = util-linux; }) + ] ++ lib.optionals espeak.mbrolaSupport [ + # Replace FHS paths. + (substituteAll { + src = ./fix-mbrola-paths.patch; + inherit espeak mbrola; + }) ]; nativeBuildInputs = [ diff --git a/pkgs/development/libraries/speechd/fix-mbrola-paths.patch b/pkgs/development/libraries/speechd/fix-mbrola-paths.patch new file mode 100644 index 000000000000..ea16bea9bac5 --- /dev/null +++ b/pkgs/development/libraries/speechd/fix-mbrola-paths.patch @@ -0,0 +1,21 @@ +diff --git a/src/modules/espeak.c b/src/modules/espeak.c +index 94a01197..9bb34475 100644 +--- a/src/modules/espeak.c ++++ b/src/modules/espeak.c +@@ -898,13 +898,13 @@ static SPDVoice **espeak_list_synthesis_voices() + path = g_strdup_printf("%s/mbrola/%s", espeak_data, voicename); + if (access(path, O_RDONLY) != 0) { + g_free(path); +- path = g_strdup_printf("/usr/share/mbrola/%s", voicename); ++ path = g_strdup_printf("@mbrola@/share/mbrola/%s", voicename); + if (access(path, O_RDONLY) != 0) { + g_free(path); +- path = g_strdup_printf("/usr/share/mbrola/%s/%s", voicename, voicename); ++ path = g_strdup_printf("@mbrola@/share/mbrola/%s/%s", voicename, voicename); + if (access(path, O_RDONLY) != 0) { + g_free(path); +- path = g_strdup_printf("/usr/share/mbrola/voices/%s", voicename); ++ path = g_strdup_printf("@mbrola@/share/mbrola/voices/%s", voicename); + if (access(path, O_RDONLY) != 0) { + g_free(path); + espeak_mbrola[j] = NULL;