gnutls: fixup tpm support (#363705)
[NixPkgs.git] / pkgs / applications / audio / espeak-ng / default.nix
blobe7463c8c6613dd4660a08a82a82b07696daf0dec
2   stdenv,
3   lib,
4   fetchFromGitHub,
5   fetchpatch,
6   autoconf,
7   automake,
8   which,
9   libtool,
10   pkg-config,
11   ronn,
12   substituteAll,
13   buildPackages,
14   mbrolaSupport ? true,
15   mbrola,
16   pcaudiolibSupport ? true,
17   pcaudiolib,
18   sonicSupport ? true,
19   sonic,
20   CoreAudio,
21   AudioToolbox,
22   AudioUnit,
23   alsa-plugins,
24   makeWrapper,
27 stdenv.mkDerivation rec {
28   pname = "espeak-ng";
29   version = "1.51.1";
31   src = fetchFromGitHub {
32     owner = "espeak-ng";
33     repo = "espeak-ng";
34     rev = version;
35     hash = "sha256-aAJ+k+kkOS6k835mEW7BvgAIYGhUHxf7Q4P5cKO8XTk=";
36   };
38   patches =
39     [
40       # Fix build with Clang 16.
41       (fetchpatch {
42         url = "https://github.com/espeak-ng/espeak-ng/commit/497c6217d696c1190c3e8b992ff7b9110eb3bedd.patch";
43         hash = "sha256-KfzqnRyQfz6nuMKnsHoUzb9rn9h/Pg54mupW1Cr+Zx0=";
44       })
45     ]
46     ++ lib.optionals mbrolaSupport [
47       # Hardcode correct mbrola paths.
48       (substituteAll {
49         src = ./mbrola.patch;
50         inherit mbrola;
51       })
52     ];
54   nativeBuildInputs = [
55     autoconf
56     automake
57     which
58     libtool
59     pkg-config
60     ronn
61     makeWrapper
62   ];
64   buildInputs =
65     lib.optional mbrolaSupport mbrola
66     ++ lib.optional pcaudiolibSupport pcaudiolib
67     ++ lib.optional sonicSupport sonic
68     ++ lib.optionals stdenv.hostPlatform.isDarwin [
69       CoreAudio
70       AudioToolbox
71       AudioUnit
72     ];
74   # touch ChangeLog to avoid below error on darwin:
75   # Makefile.am: error: required file './ChangeLog.md' not found
76   preConfigure =
77     lib.optionalString stdenv.hostPlatform.isDarwin ''
78       touch ChangeLog
79     ''
80     + ''
81       ./autogen.sh
82     '';
84   configureFlags = [
85     "--with-mbrola=${if mbrolaSupport then "yes" else "no"}"
86   ];
88   # ref https://github.com/void-linux/void-packages/blob/3cf863f894b67b3c93e23ac7830ca46b697d308a/srcpkgs/espeak-ng/template#L29-L31
89   postConfigure = lib.optionalString (!stdenv.buildPlatform.canExecute stdenv.hostPlatform) ''
90     substituteInPlace Makefile \
91       --replace 'ESPEAK_DATA_PATH=$(CURDIR) src/espeak-ng' 'ESPEAK_DATA_PATH=$(CURDIR) ${lib.getExe buildPackages.espeak-ng}' \
92       --replace 'espeak-ng-data/%_dict: src/espeak-ng' 'espeak-ng-data/%_dict: ${lib.getExe buildPackages.espeak-ng}' \
93       --replace '../src/espeak-ng --compile' "${lib.getExe buildPackages.espeak-ng} --compile"
94   '';
96   postInstall = lib.optionalString stdenv.hostPlatform.isLinux ''
97     patchelf --set-rpath "$(patchelf --print-rpath $out/bin/espeak-ng)" $out/bin/speak-ng
98     wrapProgram $out/bin/espeak-ng \
99       --set ALSA_PLUGIN_DIR ${alsa-plugins}/lib/alsa-lib
100   '';
102   passthru = {
103     inherit mbrolaSupport;
104   };
106   meta = with lib; {
107     description = "Open source speech synthesizer that supports over 70 languages, based on eSpeak";
108     homepage = "https://github.com/espeak-ng/espeak-ng";
109     changelog = "https://github.com/espeak-ng/espeak-ng/blob/${version}/CHANGELOG.md";
110     license = licenses.gpl3Plus;
111     maintainers = with maintainers; [ aske ];
112     platforms = platforms.all;
113     mainProgram = "espeak-ng";
114   };