Unverified Commit dbc1a5e8 authored by Atemu's avatar Atemu Committed by GitHub
Browse files

Merge pull request #226218 from doronbehar/pkg/mlterm-wayland

mlterm: Add support for many build configuration variables
parents 13ea5dc1 52016d5c
Loading
Loading
Loading
Loading
+137 −35
Original line number Diff line number Diff line
{ stdenv, lib, fetchFromGitHub, pkg-config, autoconf, makeDesktopItem, nixosTests
, libX11, gdk-pixbuf, cairo, libXft, gtk3, vte
, harfbuzz #substituting glyphs with opentype fonts
, fribidi, m17n_lib #bidi and encoding
{ stdenv
, lib
, fetchFromGitHub
, pkg-config
, autoconf
, makeDesktopItem
, nixosTests
, vte
, harfbuzz # can be replaced with libotf
, fribidi
, m17n_lib
, libssh2 #build-in ssh
, fcitx5, fcitx5-gtk, ibus, uim #IME
, fcitx5
, fcitx5-gtk
, ibus
, uim #IME
, wrapGAppsHook #color picker in mlconfig
, Cocoa #Darwin
, gdk-pixbuf
, gtk3
, gtk ? gtk3
# List of gui libraries to use. According to `./configure --help` ran on
# release 3.9.3, options are: (xlib|win32|fb|quartz|console|wayland|sdl2|beos)
, enableGuis ? {
  xlib = enableX11;
  fb = stdenv.isLinux;
  quartz = stdenv.isDarwin;
  wayland = stdenv.isLinux;
  sdl2 = true;
}
, libxkbcommon
, wayland # for the "wayland" --with-gui option
, SDL2 # for the "sdl" --with-gui option
# List of typing engines, the default list enables compiling all of the
# available ones, as recorded on release 3.9.3
, enableTypeEngines ? {
  xcore = false; # Considered legacy
  xft = enableX11;
  cairo = true;
}
, libX11
, libXft
, cairo
# List of external tools to create, this default list includes all default
# tools, as recorded on release 3.9.3.
, enableTools ? {
  mlclient = true;
  mlconfig = true;
  mlcc = true;
  mlterm-menu = true;
  # Note that according to upstream's ./configure script, to disable
  # mlimgloader you have to disable _all_ tools. See:
  # https://github.com/arakiken/mlterm/issues/69
  mlimgloader = true;
  registobmp = true;
  mlfc = true;
}
# Whether to enable the X window system
, enableX11 ? stdenv.isLinux
# Most of the input methods and other build features are enabled by default,
# the following attribute set can be used to disable some of them. It's parsed
# when we set `configureFlags`. If you find other configure Flags that require
# dependencies, it'd be nice to make that contribution here.
, enableFeatures ? {
  uim = !stdenv.isDarwin;
  ibus = !stdenv.isDarwin;
  fcitx = !stdenv.isDarwin;
  m17n = !stdenv.isDarwin;
  ssh2 = true;
  bidi = true;
  # Open Type layout support, (substituting glyphs with opentype fonts)
  otl = true;
}
# Configure the Exec directive in the generated .desktop file
, desktopBinary ? (
  if enableGuis.xlib then
    "mlterm"
  else if enableGuis.wayland then
    "mlterm-wl"
  else if enableGuis.sdl2 then
    "mlterm-sdl2"
  else
    throw "mlterm: couldn't figure out what desktopBinary to use."
  )
}:

stdenv.mkDerivation rec {
let
  # Returns a --with-feature=<comma separated string list of all `true`
  # attributes>, or `--without-feature` if all attributes are false or don't
  # exist. Used later in configureFlags
  withFeaturesList = featureName: attrset: let
    commaSepList = lib.concatStringsSep "," (builtins.attrNames (lib.filterAttrs (n: v: v) attrset));
  in
    lib.withFeatureAs (commaSepList != "") featureName commaSepList
  ;
in stdenv.mkDerivation rec {
  pname = "mlterm";
  version = "3.9.3";

@@ -19,25 +103,41 @@ stdenv.mkDerivation rec {
    sha256 = "sha256-gfs5cdwUUwSBWwJJSaxrQGWJvLkI27RMlk5QvDALEDg=";
  };

  nativeBuildInputs = [ pkg-config autoconf wrapGAppsHook ];
  nativeBuildInputs = [
    pkg-config
    autoconf
  ] ++ lib.optionals enableTools.mlconfig [
    wrapGAppsHook
  ];
  buildInputs = [
    gtk
    vte
    gdk-pixbuf
  ] ++ lib.optionals enableTypeEngines.xcore [
    libX11
    gdk-pixbuf.dev
    cairo
  ] ++ lib.optionals enableTypeEngines.xft [
    libXft
    gtk3
  ] ++ lib.optionals enableTypeEngines.cairo [
    cairo
  ] ++ lib.optionals enableGuis.wayland [
    libxkbcommon
    wayland
  ] ++ lib.optionals enableGuis.sdl2 [
    SDL2
  ] ++ lib.optionals enableFeatures.otl [
    harfbuzz
  ] ++ lib.optionals enableFeatures.bidi [
    fribidi
    vte

  ] ++ lib.optionals enableFeatures.ssh2 [
    libssh2
  ] ++ lib.optionals (!stdenv.isDarwin) [
    # Not supported on Darwin
  ] ++ lib.optionals enableFeatures.m17n [
    m17n_lib

  ] ++ lib.optionals enableFeatures.fcitx [
    fcitx5
    fcitx5-gtk
  ] ++ lib.optionals enableFeatures.ibus [
    ibus
  ] ++ lib.optionals enableFeatures.uim [
    uim
  ];

@@ -62,20 +162,13 @@ stdenv.mkDerivation rec {
  '';

  configureFlags = [
    "--with-imagelib=gdk-pixbuf" #or mlimgloader depending on your bugs of choice
    "--with-type-engines=cairo,xft,xcore"
    "--with-gtk=3.0"
    "--enable-ind" #indic scripts
    "--enable-fribidi" #bidi scripts
    "--with-tools=mlclient,mlconfig,mlcc,mlterm-menu,mlimgloader,registobmp,mlfc"
    #mlterm-menu and mlconfig depend on enabling gnome.at-spi2-core
    #and configuring ~/.mlterm/key correctly.
  ] ++ lib.optionals (!stdenv.isDarwin) [
    "--with-x=yes"
    "--with-gui=xlib,fb"
    "--enable-m17nlib" #character encodings
  ] ++ lib.optionals stdenv.isDarwin [
    "--with-gui=quartz"
    (withFeaturesList "type-engines" enableTypeEngines)
    (withFeaturesList "tools" enableTools)
    (withFeaturesList "gui" enableGuis)
    (lib.withFeature enableX11 "x")
  ] ++ lib.optionals (gtk != null) [
    "--with-gtk=${lib.versions.major gtk.version}.0"
  ] ++ (lib.mapAttrsToList (n: v: lib.enableFeature v n) enableFeatures) ++ [
  ];

  enableParallelBuilding = true;
@@ -92,23 +185,32 @@ stdenv.mkDerivation rec {

  desktopItem = makeDesktopItem {
    name = "mlterm";
    exec = "mlterm %U";
    exec = "${desktopBinary} %U";
    icon = "mlterm";
    type = "Application";
    comment = "Terminal emulator";
    comment = "Multi Lingual TERMinal emulator";
    desktopName = "mlterm";
    genericName = "Terminal emulator";
    categories = [ "Application" "System" "TerminalEmulator" ];
    categories = [ "System" "TerminalEmulator" ];
    startupNotify = false;
  };

  passthru.tests.test = nixosTests.terminal-emulators.mlterm;
  passthru = {
    tests.test = nixosTests.terminal-emulators.mlterm;
    inherit
      enableTypeEngines
      enableTools
      enableGuis
      enableFeatures
    ;
  };

  meta = with lib; {
    description = "Multi Lingual TERMinal emulator";
    homepage = "https://mlterm.sourceforge.net/";
    license = licenses.bsd3;
    maintainers = with maintainers; [ ramkromberg atemu ];
    maintainers = with maintainers; [ ramkromberg atemu doronbehar ];
    platforms = platforms.all;
    mainProgram = desktopBinary;
  };
}
+3 −2
Original line number Diff line number Diff line
@@ -2575,8 +2575,9 @@ with pkgs;
  microcom = callPackage ../applications/terminal-emulators/microcom { };
  mlterm = darwin.apple_sdk_11_0.callPackage ../applications/terminal-emulators/mlterm {
    inherit (darwin.apple_sdk_11_0.frameworks) Cocoa;
  mlterm = darwin.apple_sdk_11_0.callPackage ../applications/terminal-emulators/mlterm { };
  mlterm-wayland = mlterm.override {
    enableX11 = false;
  };
  mrxvt = callPackage ../applications/terminal-emulators/mrxvt { };