From 26ac16c723f1546b3559a145a9c904818867d8af Mon Sep 17 00:00:00 2001 From: Donovan Glover Date: Mon, 18 Nov 2024 02:53:02 -0500 Subject: [PATCH] fcitx5-mozc: fix build --- modules/desktop.nix | 3 +- packages/fcitx5-mozc.nix | 148 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 150 insertions(+), 1 deletion(-) create mode 100644 packages/fcitx5-mozc.nix diff --git a/modules/desktop.nix b/modules/desktop.nix index 1ff6737f..9bf5a20f 100644 --- a/modules/desktop.nix +++ b/modules/desktop.nix @@ -1,4 +1,5 @@ { + nix-config, pkgs, config, lib, @@ -49,7 +50,7 @@ in fcitx5 = { waylandFrontend = true; - addons = with pkgs; [ + addons = with nix-config.packages.${pkgs.system}; [ fcitx5-mozc ]; }; diff --git a/packages/fcitx5-mozc.nix b/packages/fcitx5-mozc.nix new file mode 100644 index 00000000..0e7d0c86 --- /dev/null +++ b/packages/fcitx5-mozc.nix @@ -0,0 +1,148 @@ +{ + bazel_6, + buildBazelPackage, + fcitx5, + fetchFromGitHub, + gettext, + lib, + mozc, + nixosTests, + pkg-config, + python3, + stdenv, + unzip, +}: + +buildBazelPackage { + pname = "fcitx5-mozc"; + version = "2.30.5544.102"; + + src = fetchFromGitHub { + owner = "fcitx"; + repo = "mozc"; + fetchSubmodules = true; + rev = "57e67f2a25e4c0861e0e422da0c7d4c232d89fcc"; + hash = "sha256-1EZjEbMl+LRipH5gEgFpaKP8uEKPfupHmiiTNJc/T1k="; + }; + + nativeBuildInputs = [ + gettext + pkg-config + python3 + unzip + ]; + + buildInputs = [ + mozc + fcitx5 + ]; + + postPatch = '' + sed -i -e 's|^\(LINUX_MOZC_SERVER_DIR = \).\+|\1"${mozc}/lib/mozc"|' src/config.bzl + ''; + + bazel = bazel_6; + removeRulesCC = false; + dontAddBazelOpts = true; + + bazelFlags = [ + "--config" + "oss_linux" + "--compilation_mode" + "opt" + ]; + + bazelTargets = [ + "unix/fcitx5:fcitx5-mozc.so" + "unix/icons" + ]; + + fetchAttrs = { + preInstall = '' + rm -rf $bazelOut/external/fcitx5 + ''; + + sha256 = "sha256-rrRp/v1pty7Py80/6I8rVVQvkeY72W+nlixUeYkjp+o="; + }; + + preConfigure = '' + cd src + ''; + + buildAttrs = { + installPhase = '' + runHook preInstall + + install -Dm444 ../LICENSE $out/share/licenses/fcitx5-mozc/LICENSE + install -Dm444 data/installer/credits_en.html $out/share/licenses/fcitx5-mozc/Submodules + + install -Dm555 bazel-bin/unix/fcitx5/fcitx5-mozc.so $out/lib/fcitx5/fcitx5-mozc.so + install -Dm444 unix/fcitx5/mozc-addon.conf $out/share/fcitx5/addon/mozc.conf + install -Dm444 unix/fcitx5/mozc.conf $out/share/fcitx5/inputmethod/mozc.conf + + for pofile in unix/fcitx5/po/*.po; do + filename=$(basename $pofile) + lang=''${filename/.po/} + mofile=''${pofile/.po/.mo} + msgfmt $pofile -o $mofile + install -Dm444 $mofile $out/share/locale/$lang/LC_MESSAGES/fcitx5-mozc.mo + done + + msgfmt --xml -d unix/fcitx5/po/ --template unix/fcitx5/org.fcitx.Fcitx5.Addon.Mozc.metainfo.xml.in -o unix/fcitx5/org.fcitx.Fcitx5.Addon.Mozc.metainfo.xml + install -Dm444 unix/fcitx5/org.fcitx.Fcitx5.Addon.Mozc.metainfo.xml $out/share/metainfo/org.fcitx.Fcitx5.Addon.Mozc.metainfo.xml + + cd bazel-bin/unix + + unzip -o icons.zip + + # These are relative symlinks, they will always resolve to files within $out + + install -Dm444 mozc.png $out/share/icons/hicolor/128x128/apps/org.fcitx.Fcitx5.fcitx_mozc.png + ln -s org.fcitx.Fcitx5.fcitx_mozc.png $out/share/icons/hicolor/128x128/apps/fcitx_mozc.png + + for svg in \ + alpha_full.svg \ + alpha_half.svg \ + direct.svg \ + hiragana.svg \ + katakana_full.svg \ + katakana_half.svg \ + outlined/dictionary.svg \ + outlined/properties.svg \ + outlined/tool.svg + do + name=$(basename -- $svg) + path=$out/share/icons/hicolor/scalable/apps + prefix=org.fcitx.Fcitx5.fcitx_mozc + + install -Dm444 $svg $path/$prefix_$name + ln -s $prefix_$name $path/fcitx_mozc_$name + done + + runHook postInstall + ''; + }; + + passthru.tests = lib.optionalAttrs stdenv.hostPlatform.isLinux { + inherit (nixosTests) fcitx5; + }; + + meta = with lib; { + description = "Mozc - a Japanese Input Method Editor designed for multi-platform"; + homepage = "https://github.com/fcitx/mozc"; + license = with licenses; [ + asl20 # abseil-cpp + bsd3 # mozc, breakpad, gtest, gyp, japanese-usage-dictionary, protobuf + mit # wil + naist-2003 # IPAdic + publicDomain # src/data/test/stress_test, Okinawa dictionary + unicode-30 # src/data/unicode, breakpad + ]; + maintainers = with maintainers; [ + berberman + govanify + musjj + ]; + platforms = platforms.linux; + }; +}