diff --git a/pkgs/applications/audio/espeak-ng/default.nix b/pkgs/applications/audio/espeak-ng/default.nix index 50d7af6d116..44d5a0aa15a 100644 --- a/pkgs/applications/audio/espeak-ng/default.nix +++ b/pkgs/applications/audio/espeak-ng/default.nix @@ -1,5 +1,6 @@ { stdenv, lib, fetchFromGitHub, autoconf, automake, which, libtool, pkg-config -, ronn +, ronn, substituteAll +, mbrolaSupport ? true, mbrola , pcaudiolibSupport ? true, pcaudiolib , sonicSupport ? true, sonic }: @@ -14,13 +15,26 @@ stdenv.mkDerivation rec { sha256 = "0jkqhf2h94vbqq7mg7mmm23bq372fa7mdk941my18c3vkldcir1b"; }; + patches = lib.optionals mbrolaSupport [ + # Hardcode correct mbrola paths. + (substituteAll { + src = ./mbrola.patch; + inherit mbrola; + }) + ]; + nativeBuildInputs = [ autoconf automake which libtool pkg-config ronn ]; - buildInputs = lib.optional pcaudiolibSupport pcaudiolib + buildInputs = lib.optional mbrolaSupport mbrola + ++ lib.optional pcaudiolibSupport pcaudiolib ++ lib.optional sonicSupport sonic; preConfigure = "./autogen.sh"; + configureFlags = [ + "--with-mbrola=${if mbrolaSupport then "yes" else "no"}" + ]; + postInstall = lib.optionalString stdenv.isLinux '' patchelf --set-rpath "$(patchelf --print-rpath $out/bin/espeak-ng)" $out/bin/speak-ng ''; @@ -29,7 +43,7 @@ stdenv.mkDerivation rec { description = "Open source speech synthesizer that supports over 70 languages, based on eSpeak"; homepage = "https://github.com/espeak-ng/espeak-ng"; changelog = "https://github.com/espeak-ng/espeak-ng/blob/${version}/CHANGELOG.md"; - license = licenses.gpl3; + license = licenses.gpl3Plus; maintainers = with maintainers; [ aske ]; platforms = platforms.all; }; diff --git a/pkgs/applications/audio/espeak-ng/mbrola.patch b/pkgs/applications/audio/espeak-ng/mbrola.patch new file mode 100644 index 00000000000..2f6c61cca4e --- /dev/null +++ b/pkgs/applications/audio/espeak-ng/mbrola.patch @@ -0,0 +1,22 @@ +--- a/src/libespeak-ng/mbrowrap.c ++++ b/src/libespeak-ng/mbrowrap.c +@@ -205,7 +205,7 @@ + signal(SIGTERM, SIG_IGN); + + snprintf(charbuf, sizeof(charbuf), "%g", mbr_volume); +- execlp("mbrola", "mbrola", "-e", "-v", charbuf, ++ execlp("@mbrola@/bin/mbrola", "mbrola", "-e", "-v", charbuf, + voice_path, "-", "-.wav", (char *)NULL); + /* if execution reaches this point then the exec() failed */ + snprintf(mbr_errorbuf, sizeof(mbr_errorbuf), +--- a/src/libespeak-ng/synth_mbrola.c ++++ b/src/libespeak-ng/synth_mbrola.c +@@ -85,7 +85,7 @@ + if (!load_MBR()) + return ENS_MBROLA_NOT_FOUND; + +- sprintf(path, "%s/mbrola/%s", path_home, mbrola_voice); ++ sprintf(path, "@mbrola@/share/mbrola/voices/%s/%s", mbrola_voice, mbrola_voice); + #ifdef PLATFORM_POSIX + // if not found, then also look in + // usr/share/mbrola/xx, /usr/share/mbrola/xx/xx, /usr/share/mbrola/voices/xx