biome: 1.9.2 -> 1.9.3 (#349335)
[NixPkgs.git] / pkgs / applications / terminal-emulators / mlterm / default.nix
blobdcf581f27a80c552e64abfaf099731bf96277c83
1 { stdenv
2 , lib
3 , fetchFromGitHub
4 , pkg-config
5 , autoconf
6 , makeDesktopItem
7 , nixosTests
8 , vte
9 , harfbuzz # can be replaced with libotf
10 , fribidi
11 , m17n_lib
12 , libssh2 #build-in ssh
13 , fcitx5
14 , fcitx5-gtk
15 , ibus
16 , uim #IME
17 , wrapGAppsHook3 #color picker in mlconfig
18 , gdk-pixbuf
19 , gtk3
20 , gtk ? gtk3
21 # List of gui libraries to use. According to `./configure --help` ran on
22 # release 3.9.3, options are: (xlib|win32|fb|quartz|console|wayland|sdl2|beos)
23 , enableGuis ? {
24   xlib = enableX11;
25   # From some reason, upstream's ./configure script disables compilation of the
26   # external tool `mlconfig` if `enableGuis.fb == true`. This behavior is not
27   # documentd in `./configure --help`, and it is reported here:
28   # https://github.com/arakiken/mlterm/issues/73
29   fb = false;
30   quartz = stdenv.hostPlatform.isDarwin;
31   wayland = stdenv.hostPlatform.isLinux;
32   sdl2 = true;
34 , libxkbcommon
35 , wayland # for the "wayland" --with-gui option
36 , SDL2 # for the "sdl" --with-gui option
37 # List of typing engines, the default list enables compiling all of the
38 # available ones, as recorded on release 3.9.3
39 , enableTypeEngines ? {
40   xcore = false; # Considered legacy
41   xft = enableX11;
42   cairo = true;
44 , libX11
45 , libXft
46 , cairo
47 # List of external tools to create, this default list includes all default
48 # tools, as recorded on release 3.9.3.
49 , enableTools ? {
50   mlclient = true;
51   mlconfig = true;
52   mlcc = true;
53   mlterm-menu = true;
54   # Note that according to upstream's ./configure script, to disable
55   # mlimgloader you have to disable _all_ tools. See:
56   # https://github.com/arakiken/mlterm/issues/69
57   mlimgloader = true;
58   registobmp = true;
59   mlfc = true;
61 # Whether to enable the X window system
62 , enableX11 ? stdenv.hostPlatform.isLinux
63 # Most of the input methods and other build features are enabled by default,
64 # the following attribute set can be used to disable some of them. It's parsed
65 # when we set `configureFlags`. If you find other configure Flags that require
66 # dependencies, it'd be nice to make that contribution here.
67 , enableFeatures ? {
68   uim = !stdenv.hostPlatform.isDarwin;
69   ibus = !stdenv.hostPlatform.isDarwin;
70   fcitx = !stdenv.hostPlatform.isDarwin;
71   m17n = !stdenv.hostPlatform.isDarwin;
72   ssh2 = true;
73   bidi = true;
74   # Open Type layout support, (substituting glyphs with opentype fonts)
75   otl = true;
77 # Configure the Exec directive in the generated .desktop file
78 , desktopBinary ? (
79   if enableGuis.xlib then
80     "mlterm"
81   else if enableGuis.wayland then
82     "mlterm-wl"
83   else if enableGuis.sdl2 then
84     "mlterm-sdl2"
85   else
86     throw "mlterm: couldn't figure out what desktopBinary to use."
87   )
90 let
91   # Returns a --with-feature=<comma separated string list of all `true`
92   # attributes>, or `--without-feature` if all attributes are false or don't
93   # exist. Used later in configureFlags
94   withFeaturesList = featureName: attrset: let
95     commaSepList = lib.concatStringsSep "," (builtins.attrNames (lib.filterAttrs (n: v: v) attrset));
96   in
97     lib.withFeatureAs (commaSepList != "") featureName commaSepList
98   ;
99 in stdenv.mkDerivation (finalAttrs: {
100   pname = "mlterm";
101   version = "3.9.3";
103   src = fetchFromGitHub {
104     owner = "arakiken";
105     repo = "mlterm";
106     rev = finalAttrs.version;
107     sha256 = "sha256-gfs5cdwUUwSBWwJJSaxrQGWJvLkI27RMlk5QvDALEDg=";
108   };
110   nativeBuildInputs = [
111     pkg-config
112     autoconf
113   ] ++ lib.optionals enableTools.mlconfig [
114     wrapGAppsHook3
115   ];
116   buildInputs = [
117     gtk
118     vte
119     gdk-pixbuf
120   ] ++ lib.optionals enableTypeEngines.xcore [
121     libX11
122   ] ++ lib.optionals enableTypeEngines.xft [
123     libXft
124   ] ++ lib.optionals enableTypeEngines.cairo [
125     cairo
126   ] ++ lib.optionals enableGuis.wayland [
127     libxkbcommon
128     wayland
129   ] ++ lib.optionals enableGuis.sdl2 [
130     SDL2
131   ] ++ lib.optionals enableFeatures.otl [
132     harfbuzz
133   ] ++ lib.optionals enableFeatures.bidi [
134     fribidi
135   ] ++ lib.optionals enableFeatures.ssh2 [
136     libssh2
137   ] ++ lib.optionals enableFeatures.m17n [
138     m17n_lib
139   ] ++ lib.optionals enableFeatures.fcitx [
140     fcitx5
141     fcitx5-gtk
142   ] ++ lib.optionals enableFeatures.ibus [
143     ibus
144   ] ++ lib.optionals enableFeatures.uim [
145     uim
146   ];
148   #bad configure.ac and Makefile.in everywhere
149   preConfigure = ''
150     sed -ie 's;-L/usr/local/lib -R/usr/local/lib;;g' \
151       main/Makefile.in \
152       tool/mlfc/Makefile.in \
153       tool/mlimgloader/Makefile.in \
154       tool/mlconfig/Makefile.in \
155       uitoolkit/libtype/Makefile.in \
156       uitoolkit/libotl/Makefile.in
157     sed -ie 's;cd ..srcdir. && rm -f ...lang..gmo.*;;g' \
158       tool/mlconfig/po/Makefile.in.in
159     #utmp and mlterm-fb
160     substituteInPlace configure.in \
161       --replace "-m 2755 -g utmp" " " \
162       --replace "-m 4755 -o root" " "
163     substituteInPlace configure \
164       --replace "-m 2755 -g utmp" " " \
165       --replace "-m 4755 -o root" " "
166   '';
168   env = lib.optionalAttrs stdenv.cc.isClang {
169     NIX_CFLAGS_COMPILE = "-Wno-error=int-conversion -Wno-error=incompatible-function-pointer-types";
170   };
172   configureFlags = [
173     (withFeaturesList "type-engines" enableTypeEngines)
174     (withFeaturesList "tools" enableTools)
175     (withFeaturesList "gui" enableGuis)
176     (lib.withFeature enableX11 "x")
177   ] ++ lib.optionals (gtk != null) [
178     "--with-gtk=${lib.versions.major gtk.version}.0"
179   ] ++ (lib.mapAttrsToList (n: v: lib.enableFeature v n) enableFeatures) ++ [
180   ];
182   enableParallelBuilding = true;
184   postInstall = ''
185     install -D contrib/icon/mlterm-icon.svg "$out/share/icons/hicolor/scalable/apps/mlterm.svg"
186     install -D contrib/icon/mlterm-icon-gnome2.png "$out/share/icons/hicolor/48x48/apps/mlterm.png"
187     install -D -t $out/share/applications $desktopItem/share/applications/*
188   '' + lib.optionalString stdenv.hostPlatform.isDarwin ''
189     mkdir -p $out/Applications/
190     cp -a cocoa/mlterm.app $out/Applications/
191     install $out/bin/mlterm -Dt $out/Applications/mlterm.app/Contents/MacOS/
192   '';
194   desktopItem = makeDesktopItem {
195     name = "mlterm";
196     exec = "${desktopBinary} %U";
197     icon = "mlterm";
198     type = "Application";
199     comment = "Multi Lingual TERMinal emulator";
200     desktopName = "mlterm";
201     genericName = "Terminal emulator";
202     categories = [ "System" "TerminalEmulator" ];
203     startupNotify = false;
204   };
206   passthru = {
207     tests.test = nixosTests.terminal-emulators.mlterm;
208     inherit
209       enableTypeEngines
210       enableTools
211       enableGuis
212       enableFeatures
213     ;
214   };
216   meta = with lib; {
217     description = "Multi Lingual TERMinal emulator";
218     homepage = "https://mlterm.sourceforge.net/";
219     license = licenses.bsd3;
220     maintainers = with maintainers; [ ramkromberg atemu doronbehar ];
221     platforms = platforms.all;
222     mainProgram = desktopBinary;
223   };