Github messages for voidlinux
 help / color / mirror / Atom feed
From: sgn <sgn@users.noreply.github.com>
To: ml@inbox.vuxu.org
Subject: Re: [PR PATCH] [Updated] mozc: update to 2.26.4353.100. (new package for fcitx5-mozc)
Date: Sat, 01 May 2021 03:53:25 +0200	[thread overview]
Message-ID: <20210501015325.7qRmJ1Le9saov5u_pGRg-j0-qECNK_AXQEZCfjsstK0@z> (raw)
In-Reply-To: <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-30492@inbox.vuxu.org>

[-- Attachment #1: Type: text/plain, Size: 1623 bytes --]

There is an updated pull request by sgn against master on the void-packages repository

https://github.com/sgn/void-packages fcitx5-mozc
https://github.com/void-linux/void-packages/pull/30492

mozc: update to 2.26.4353.100. (new package for fcitx5-mozc)
<!-- Mark items with [x] where applicable -->

#### General
- [ ] This is a new package and it conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements)

#### Have the results of the proposed changes been tested?
- [ ] I use the packages affected by the proposed changes on a regular basis and confirm this PR works for me
- [x] I generally don't use the affected packages but briefly tested this PR

<!--
If GitHub CI cannot be used to validate the build result (for example, if the
build is likely to take several hours), make sure to
[skip CI](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration).
When skipping CI, uncomment and fill out the following section.
Note: for builds that are likely to complete in less than 2 hours, it is not
acceptable to skip CI.
-->
<!-- 
#### Does it build and run successfully? 
(Please choose at least one native build and, if supported, at least one cross build. More are better.)
- [ ] I built this PR locally for my native architecture, (ARCH-LIBC)
- [ ] I built this PR locally for these architectures (if supported. mark crossbuilds):
  - [ ] aarch64-musl
  - [ ] armv7l
  - [ ] armv6l-musl
-->


A patch file from https://github.com/void-linux/void-packages/pull/30492.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-fcitx5-mozc-30492.patch --]
[-- Type: text/x-diff, Size: 41122 bytes --]

From a135a6a31b9ee0c7ccd4af7b15481c55354c1322 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C4=90o=C3=A0n=20Tr=E1=BA=A7n=20C=C3=B4ng=20Danh?=
 <congdanhqx@gmail.com>
Date: Sun, 25 Apr 2021 22:53:14 +0700
Subject: [PATCH] mozc: update to 2.26.4353.100.

---
 srcpkgs/fcitx5-mozc                           |   1 +
 srcpkgs/mozc/patches/abseil.patch             |  73 ++++
 srcpkgs/mozc/patches/cross.patch              |  10 +-
 srcpkgs/mozc/patches/cxx-stdlib.patch         |  29 ++
 .../default_hiragana_from_environment.patch   |  20 --
 srcpkgs/mozc/patches/fcitx.patch              |  13 +
 srcpkgs/mozc/patches/no-parallel.patch        |   6 +-
 srcpkgs/mozc/patches/protobuf-370.patch       | 327 ------------------
 srcpkgs/mozc/patches/unsigned-int.patch       | 210 +++++++++++
 srcpkgs/mozc/template                         | 109 ++++--
 srcpkgs/mozc/update                           |   2 +
 11 files changed, 409 insertions(+), 391 deletions(-)
 create mode 120000 srcpkgs/fcitx5-mozc
 create mode 100644 srcpkgs/mozc/patches/abseil.patch
 create mode 100644 srcpkgs/mozc/patches/cxx-stdlib.patch
 delete mode 100644 srcpkgs/mozc/patches/default_hiragana_from_environment.patch
 create mode 100644 srcpkgs/mozc/patches/fcitx.patch
 delete mode 100644 srcpkgs/mozc/patches/protobuf-370.patch
 create mode 100644 srcpkgs/mozc/patches/unsigned-int.patch
 create mode 100644 srcpkgs/mozc/update

diff --git a/srcpkgs/fcitx5-mozc b/srcpkgs/fcitx5-mozc
new file mode 120000
index 000000000000..6874ca426b5f
--- /dev/null
+++ b/srcpkgs/fcitx5-mozc
@@ -0,0 +1 @@
+mozc
\ No newline at end of file
diff --git a/srcpkgs/mozc/patches/abseil.patch b/srcpkgs/mozc/patches/abseil.patch
new file mode 100644
index 000000000000..22510299dc9f
--- /dev/null
+++ b/srcpkgs/mozc/patches/abseil.patch
@@ -0,0 +1,73 @@
+
+Ported from grpc's patches
+
+An all-in-one patch that fixes several issues:
+
+1) UnscaledCycleClock not fully implemented for ppc*-musl (disabled on musl)
+2) powerpc stacktrace implementation only works on glibc (disabled on musl)
+3) powerpc stacktrace implementation has ppc64 assumptions (fixed)
+4) examine_stack.cpp makes glibc assumptions on powerpc (fixed)
+
+--- mozc/src/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h
++++ mozc/src/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h
+@@ -46,7 +46,7 @@
+ 
+ // The following platforms have an implementation of a hardware counter.
+ #if defined(__i386__) || defined(__x86_64__) || defined(__aarch64__) || \
+-  defined(__powerpc__) || defined(__ppc__) || \
++  ((defined(__powerpc__) || defined(__ppc__)) && defined(__GLIBC__)) || \
+   defined(_M_IX86) || defined(_M_X64)
+ #define ABSL_HAVE_UNSCALED_CYCLECLOCK_IMPLEMENTATION 1
+ #else
+--- mozc/src/third_party/abseil-cpp/absl/debugging/internal/examine_stack.cc
++++ mozc/src/third_party/abseil-cpp/absl/debugging/internal/examine_stack.cc
+@@ -27,6 +27,10 @@
+ #include <csignal>
+ #include <cstdio>
+ 
++#if defined(__powerpc__)
++#include <asm/ptrace.h>
++#endif
++
+ #include "absl/base/attributes.h"
+ #include "absl/base/internal/raw_logging.h"
+ #include "absl/base/macros.h"
+@@ -55,8 +59,10 @@
+     return reinterpret_cast<void*>(context->uc_mcontext.pc);
+ #elif defined(__powerpc64__)
+     return reinterpret_cast<void*>(context->uc_mcontext.gp_regs[32]);
+-#elif defined(__powerpc__)
++#elif defined(__powerpc__) && defined(__GLIBC__)
+     return reinterpret_cast<void*>(context->uc_mcontext.regs->nip);
++#elif defined(__powerpc__)
++    return reinterpret_cast<void*>(((struct pt_regs *)context->uc_regs)->nip);
+ #elif defined(__riscv)
+     return reinterpret_cast<void*>(context->uc_mcontext.__gregs[REG_PC]);
+ #elif defined(__s390__) && !defined(__s390x__)
+--- mozc/src/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h
++++ mozc/src/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h
+@@ -64,7 +64,7 @@
+ #elif defined(__i386__) || defined(__x86_64__)
+ #define ABSL_STACKTRACE_INL_HEADER \
+   "absl/debugging/internal/stacktrace_x86-inl.inc"
+-#elif defined(__ppc__) || defined(__PPC__)
++#elif (defined(__ppc__) || defined(__PPC__)) && defined(__GLIBC__)
+ #define ABSL_STACKTRACE_INL_HEADER \
+   "absl/debugging/internal/stacktrace_powerpc-inl.inc"
+ #elif defined(__aarch64__)
+--- mozc/src/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc
++++ mozc/src/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc
+@@ -130,8 +130,13 @@
+         StacktracePowerPCGetLR(new_sp) == kernel_sigtramp_rt64_address) {
+       const ucontext_t* signal_context =
+           reinterpret_cast<const ucontext_t*>(uc);
++#if defined(__powerpc64__)
+       void **const sp_before_signal =
+           reinterpret_cast<void**>(signal_context->uc_mcontext.gp_regs[PT_R1]);
++#else
++      void **const sp_before_signal =
++          reinterpret_cast<void**>(signal_context->uc_mcontext.uc_regs->gregs[PT_R1]);
++#endif
+       // Check that alleged sp before signal is nonnull and is reasonably
+       // aligned.
+       if (sp_before_signal != nullptr &&
diff --git a/srcpkgs/mozc/patches/cross.patch b/srcpkgs/mozc/patches/cross.patch
index 17d47a900eb9..d73c5f82b430 100644
--- a/srcpkgs/mozc/patches/cross.patch
+++ b/srcpkgs/mozc/patches/cross.patch
@@ -1,7 +1,9 @@
---- mozc/src/gyp/common.gypi
+Index: mozc/src/gyp/common.gypi
+===================================================================
+--- mozc/src/gyp/common.gypi.orig
 +++ mozc/src/gyp/common.gypi
-@@ -444,12 +444,12 @@
-     }],
+@@ -409,12 +409,12 @@
+   'conditions': [
      ['target_platform=="Linux"', {
        'make_global_settings': [
 -        ['AR', '<!(which ar)'],
@@ -19,7 +21,7 @@
        ],
      }],
      ['target_platform=="Android"', {
-@@ -494,12 +494,12 @@
+@@ -459,12 +459,12 @@
          ['LD', '<(ndk_bin_dir)/<(toolchain_prefix)-ld'],
          ['NM', '<(ndk_bin_dir)/<(toolchain_prefix)-nm'],
          ['READELF', '<(ndk_bin_dir)/<(toolchain_prefix)-readelf'],
diff --git a/srcpkgs/mozc/patches/cxx-stdlib.patch b/srcpkgs/mozc/patches/cxx-stdlib.patch
new file mode 100644
index 000000000000..0bccaf8ddc4f
--- /dev/null
+++ b/srcpkgs/mozc/patches/cxx-stdlib.patch
@@ -0,0 +1,29 @@
+Index: mozc/src/gyp/common.gypi
+===================================================================
+--- mozc/src/gyp/common.gypi
++++ mozc/src/gyp/common.gypi
+@@ -105,7 +105,7 @@
+     ],
+     # Libraries for GNU/Linux environment.
+     'linux_ldflags': [
+-      '-lc++',
++      '-lstdc++',
+       '-pthread',
+     ],
+ 
+@@ -205,7 +205,6 @@
+               '-Wtype-limits',
+             ],
+             'cflags_cc': [
+-              '-stdlib=libc++',
+               '-Wno-covered-switch-default',
+               '-Wno-unnamed-type-template-args',
+               '-Wno-c++11-narrowing',
+@@ -225,7 +224,6 @@
+               '-Wtype-limits',
+             ],
+             'cflags_cc': [
+-              '-stdlib=libc++',
+               '-Wno-covered-switch-default',
+               '-Wno-unnamed-type-template-args',
+               '-Wno-c++11-narrowing',
diff --git a/srcpkgs/mozc/patches/default_hiragana_from_environment.patch b/srcpkgs/mozc/patches/default_hiragana_from_environment.patch
deleted file mode 100644
index d733635ac5a1..000000000000
--- a/srcpkgs/mozc/patches/default_hiragana_from_environment.patch
+++ /dev/null
@@ -1,20 +0,0 @@
---- mozc/src/unix/ibus/property_handler.cc
-+++ mozc/src/unix/ibus/property_handler.cc
-@@ -40,6 +40,8 @@
- #include "unix/ibus/mozc_engine_property.h"
- #include "unix/ibus/path_util.h"
- 
-+#include <cstdlib>
-+
- // On Gnome Shell with IBus 1.5, new property named "symbol" is used to
- // represent the mode indicator on the system panel. Note that "symbol" does
- // not exist in IBus 1.4.x.
-@@ -80,7 +82,7 @@ bool GetDisabled(IBusEngine *engine) {
- // On IBus 1.4.x, IBus expects that an IME should always be turned on and
- // IME on/off keys are handled by IBus itself rather than each IME.
- #if IBUS_CHECK_VERSION(1, 5, 0)
--const bool kActivatedOnLaunch = false;
-+const bool kActivatedOnLaunch = !!::std::getenv("IBUS_MOZC_DEFAULT_HIRAGANA");
- #else
- const bool kActivatedOnLaunch = true;
- #endif  // IBus>=1.5.0
diff --git a/srcpkgs/mozc/patches/fcitx.patch b/srcpkgs/mozc/patches/fcitx.patch
new file mode 100644
index 000000000000..1ed6d01516f5
--- /dev/null
+++ b/srcpkgs/mozc/patches/fcitx.patch
@@ -0,0 +1,13 @@
+Index: mozc/src/unix/fcitx/fcitx.gyp
+===================================================================
+--- mozc/src/unix/fcitx/fcitx.gyp.orig
++++ mozc/src/unix/fcitx/fcitx.gyp
+@@ -96,7 +96,7 @@
+         '<@(fcitx_dep_include_dirs)',
+       ],
+       'defines': [
+-        'LOCALEDIR="<!@(fcitx4-config --prefix)/share/locale/"',
++        'LOCALEDIR="/usr/share/locale/"',
+       ],
+     },
+   ],
diff --git a/srcpkgs/mozc/patches/no-parallel.patch b/srcpkgs/mozc/patches/no-parallel.patch
index 14b23367f09e..5952cbc6a040 100644
--- a/srcpkgs/mozc/patches/no-parallel.patch
+++ b/srcpkgs/mozc/patches/no-parallel.patch
@@ -1,6 +1,8 @@
---- mozc/src/build_mozc.py
+Index: mozc/src/build_mozc.py
+===================================================================
+--- mozc/src/build_mozc.py.orig
 +++ mozc/src/build_mozc.py
-@@ -728,6 +728,7 @@ def GypMain(options, unused_args):
+@@ -496,6 +496,7 @@ def GypMain(options, unused_args):
    gyp_options.extend(['--generator-output=.'])
    short_basename = GetBuildShortBaseName(target_platform)
    gyp_options.extend(['-G', 'output_dir=%s' % short_basename])
diff --git a/srcpkgs/mozc/patches/protobuf-370.patch b/srcpkgs/mozc/patches/protobuf-370.patch
deleted file mode 100644
index 59d4e0bb995d..000000000000
--- a/srcpkgs/mozc/patches/protobuf-370.patch
+++ /dev/null
@@ -1,327 +0,0 @@
---- mozc/src/dictionary/user_dictionary.cc
-+++ mozc/src/dictionary/user_dictionary.cc
-@@ -289,7 +289,7 @@ class UserDictionary::UserDictionaryReloader : public Thread {
-     }
- 
-     auto_register_mode_ = false;
--    dic_->Load(*(storage.get()));
-+    dic_->Load(*(storage->storage()));
-   }
- 
-  private:
---- mozc/src/dictionary/user_dictionary_session.cc
-+++ mozc/src/dictionary/user_dictionary_session.cc
-@@ -144,7 +144,7 @@ class UndoRenameDictionaryCommand : public UserDictionarySession::UndoCommand {
-   virtual bool RunUndo(mozc::UserDictionaryStorage *storage) {
-     UserDictionary *dictionary =
-         UserDictionaryUtil::GetMutableUserDictionaryById(
--            storage, dictionary_id_);
-+            storage->storage(), dictionary_id_);
-     if (dictionary == NULL) {
-       return false;
-     }
-@@ -169,7 +169,7 @@ class UndoAddEntryCommand : public UserDictionarySession::UndoCommand {
-   virtual bool RunUndo(mozc::UserDictionaryStorage *storage) {
-     UserDictionary *dictionary =
-         UserDictionaryUtil::GetMutableUserDictionaryById(
--            storage, dictionary_id_);
-+            storage->storage(), dictionary_id_);
-     if (dictionary == NULL || dictionary->entries_size() == 0) {
-       return false;
-     }
-@@ -195,7 +195,7 @@ class UndoEditEntryCommand : public UserDictionarySession::UndoCommand {
-   virtual bool RunUndo(mozc::UserDictionaryStorage *storage) {
-     UserDictionary *dictionary =
-         UserDictionaryUtil::GetMutableUserDictionaryById(
--            storage, dictionary_id_);
-+            storage->storage(), dictionary_id_);
-     if (dictionary == NULL ||
-         index_ < 0 || dictionary->entries_size() <= index_) {
-       return false;
-@@ -240,7 +240,7 @@ class UndoDeleteEntryCommand : public UserDictionarySession::UndoCommand {
-   virtual bool RunUndo(mozc::UserDictionaryStorage *storage) {
-     UserDictionary *dictionary =
-         UserDictionaryUtil::GetMutableUserDictionaryById(
--            storage, dictionary_id_);
-+            storage->storage(), dictionary_id_);
-     if (dictionary == NULL) {
-       return false;
-     }
-@@ -306,7 +306,7 @@ class UndoImportFromStringCommand : public UserDictionarySession::UndoCommand {
-   virtual bool RunUndo(mozc::UserDictionaryStorage *storage) {
-     UserDictionary *dictionary =
-         UserDictionaryUtil::GetMutableUserDictionaryById(
--            storage, dictionary_id_);
-+            storage->storage(), dictionary_id_);
-     if (dictionary == NULL) {
-       return false;
-     }
-@@ -345,7 +345,7 @@ UserDictionarySession::~UserDictionarySession() {
- 
- // TODO(hidehiko) move this to header.
- const UserDictionaryStorage &UserDictionarySession::storage() const {
--  return *storage_;
-+  return *storage_->storage();
- }
- mozc::UserDictionaryStorage *UserDictionarySession::mutable_storage() {
-   return storage_.get();
-@@ -464,7 +464,7 @@ UserDictionaryCommandStatus::Status UserDictionarySession::CreateDictionary(
-     const string &dictionary_name, uint64 *new_dictionary_id) {
-   UserDictionaryCommandStatus::Status status =
-       UserDictionaryUtil::CreateDictionary(
--          storage_.get(), dictionary_name, new_dictionary_id);
-+          storage_->storage(), dictionary_name, new_dictionary_id);
-   if (status == UserDictionaryCommandStatus::USER_DICTIONARY_COMMAND_SUCCESS) {
-     AddUndoCommand(new UndoCreateDictionaryCommand);
-   }
-@@ -488,7 +488,7 @@ UserDictionarySession::DeleteDictionaryInternal(
-   int original_index;
-   UserDictionary *deleted_dictionary;
-   if (!UserDictionaryUtil::DeleteDictionary(
--          storage_.get(), dictionary_id,
-+          storage_->storage(), dictionary_id,
-           &original_index, &deleted_dictionary)) {
-     // Failed to delete the dictionary.
-     return UserDictionaryCommandStatus::UNKNOWN_DICTIONARY_ID;
-@@ -510,7 +510,7 @@ UserDictionaryCommandStatus::Status UserDictionarySession::RenameDictionary(
-     uint64 dictionary_id, const string &dictionary_name) {
-   string original_name;
-   const UserDictionary *dictionary =
--      UserDictionaryUtil::GetUserDictionaryById(*storage_, dictionary_id);
-+      UserDictionaryUtil::GetUserDictionaryById(*storage_->storage(), dictionary_id);
-   if (dictionary != NULL) {
-     // Note that if dictionary is null, it means the dictionary_id is invalid
-     // so following RenameDictionary will fail, and error handling is done
-@@ -547,7 +547,7 @@ UserDictionaryCommandStatus::Status UserDictionarySession::AddEntry(
-     uint64 dictionary_id, const UserDictionary::Entry &entry) {
-   UserDictionary *dictionary =
-       UserDictionaryUtil::GetMutableUserDictionaryById(
--          storage_.get(), dictionary_id);
-+          storage_->storage(), dictionary_id);
-   if (dictionary == NULL) {
-     return UserDictionaryCommandStatus::UNKNOWN_DICTIONARY_ID;
-   }
-@@ -575,7 +575,7 @@ UserDictionaryCommandStatus::Status UserDictionarySession::EditEntry(
-     uint64 dictionary_id, int index, const UserDictionary::Entry &entry) {
-   UserDictionary *dictionary =
-       UserDictionaryUtil::GetMutableUserDictionaryById(
--          storage_.get(), dictionary_id);
-+          storage_->storage(), dictionary_id);
-   if (dictionary == NULL) {
-     return UserDictionaryCommandStatus::UNKNOWN_DICTIONARY_ID;
-   }
-@@ -604,7 +604,7 @@ UserDictionaryCommandStatus::Status UserDictionarySession::DeleteEntry(
-     uint64 dictionary_id, const std::vector<int> &index_list) {
-   UserDictionary *dictionary =
-       UserDictionaryUtil::GetMutableUserDictionaryById(
--          storage_.get(), dictionary_id);
-+          storage_->storage(), dictionary_id);
-   if (dictionary == NULL) {
-     return UserDictionaryCommandStatus::UNKNOWN_DICTIONARY_ID;
-   }
-@@ -644,7 +644,7 @@ UserDictionaryCommandStatus::Status UserDictionarySession::ImportFromString(
-     uint64 dictionary_id, const string &data) {
-   UserDictionary *dictionary =
-       UserDictionaryUtil::GetMutableUserDictionaryById(
--          storage_.get(), dictionary_id);
-+          storage_->storage(), dictionary_id);
-   if (dictionary == NULL) {
-     return UserDictionaryCommandStatus::UNKNOWN_DICTIONARY_ID;
-   }
-@@ -699,7 +699,7 @@ UserDictionarySession::ImportToNewDictionaryFromString(
-     uint64 *new_dictionary_id) {
-   UserDictionaryCommandStatus::Status status =
-       UserDictionaryUtil::CreateDictionary(
--          storage_.get(), dictionary_name, new_dictionary_id);
-+          storage_->storage(), dictionary_name, new_dictionary_id);
-   if (status != UserDictionaryCommandStatus::USER_DICTIONARY_COMMAND_SUCCESS) {
-     return status;
-   }
-@@ -709,7 +709,7 @@ UserDictionarySession::ImportToNewDictionaryFromString(
- 
-   UserDictionary *dictionary =
-       UserDictionaryUtil::GetMutableUserDictionaryById(
--          storage_.get(), *new_dictionary_id);
-+          storage_->storage(), *new_dictionary_id);
-   if (dictionary == NULL) {
-     // The dictionary should be always found.
-     return UserDictionaryCommandStatus::UNKNOWN_ERROR;
-@@ -728,7 +728,7 @@ bool UserDictionarySession::EnsureNonEmptyStorage() {
-   uint64 new_dictionary_id;
-   UserDictionaryCommandStatus::Status status =
-       UserDictionaryUtil::CreateDictionary(
--          storage_.get(), default_dictionary_name_, &new_dictionary_id);
-+          storage_->storage(), default_dictionary_name_, &new_dictionary_id);
-   CHECK_EQ(
-       status, UserDictionaryCommandStatus::USER_DICTIONARY_COMMAND_SUCCESS);
-   return true;
---- mozc/src/dictionary/user_dictionary_storage.cc
-+++ mozc/src/dictionary/user_dictionary_storage.cc
-@@ -109,7 +109,7 @@ bool UserDictionaryStorage::LoadInternal() {
-   mozc::protobuf::io::IstreamInputStream zero_copy_input(&ifs);
-   mozc::protobuf::io::CodedInputStream decoder(&zero_copy_input);
-   decoder.SetTotalBytesLimit(kDefaultTotalBytesLimit, -1);
--  if (!ParseFromCodedStream(&decoder)) {
-+  if (!storage_.ParseFromCodedStream(&decoder)) {
-     LOG(ERROR) << "Failed to parse";
-     if (!decoder.ConsumedEntireMessage() || !ifs.eof()) {
-       LOG(ERROR) << "ParseFromStream failed: file seems broken";
-@@ -141,7 +141,7 @@ bool UserDictionaryStorage::Load() {
-     const UserDictionary &dict = dictionaries(i);
-     if (dict.id() == 0) {
-       mutable_dictionaries(i)->set_id(
--          UserDictionaryUtil::CreateNewDictionaryId(*this));
-+          UserDictionaryUtil::CreateNewDictionaryId(storage_));
-     }
-   }
- 
-@@ -171,7 +171,7 @@ bool UserDictionaryStorage::Save() {
-       return false;
-     }
- 
--    if (!SerializeToOstream(&ofs)) {
-+    if (!storage_.SerializeToOstream(&ofs)) {
-       LOG(ERROR) << "SerializeToString failed";
-       last_error_type_ = SYNC_FAILURE;
-       return false;
-@@ -241,7 +241,7 @@ bool UserDictionaryStorage::ExportDictionary(
- bool UserDictionaryStorage::CreateDictionary(
-     const string &dic_name, uint64 *new_dic_id) {
-   UserDictionaryCommandStatus::Status status =
--      UserDictionaryUtil::CreateDictionary(this, dic_name, new_dic_id);
-+      UserDictionaryUtil::CreateDictionary(&storage_, dic_name, new_dic_id);
-   // Update last_error_type_
-   switch (status) {
-     case UserDictionaryCommandStatus::DICTIONARY_NAME_EMPTY:
-@@ -273,7 +273,7 @@ bool UserDictionaryStorage::CreateDictionary(
- }
- 
- bool UserDictionaryStorage::DeleteDictionary(uint64 dic_id) {
--  if (!UserDictionaryUtil::DeleteDictionary(this, dic_id, NULL, NULL)) {
-+  if (!UserDictionaryUtil::DeleteDictionary(&storage_, dic_id, NULL, NULL)) {
-     // Failed to delete dictionary.
-     last_error_type_ = INVALID_DICTIONARY_ID;
-     return false;
-@@ -318,7 +318,7 @@ bool UserDictionaryStorage::RenameDictionary(uint64 dic_id,
- }
- 
- int UserDictionaryStorage::GetUserDictionaryIndex(uint64 dic_id) const {
--  return UserDictionaryUtil::GetUserDictionaryIndexById(*this, dic_id);
-+  return UserDictionaryUtil::GetUserDictionaryIndexById(storage_, dic_id);
- }
- 
- bool UserDictionaryStorage::GetUserDictionaryId(const string &dic_name,
-@@ -335,7 +335,7 @@ bool UserDictionaryStorage::GetUserDictionaryId(const string &dic_name,
- 
- user_dictionary::UserDictionary *UserDictionaryStorage::GetUserDictionary(
-     uint64 dic_id) {
--  return UserDictionaryUtil::GetMutableUserDictionaryById(this, dic_id);
-+  return UserDictionaryUtil::GetMutableUserDictionaryById(&storage_, dic_id);
- }
- 
- UserDictionaryStorage::UserDictionaryStorageErrorType
-@@ -361,14 +361,14 @@ bool UserDictionaryStorage::AddToAutoRegisteredDictionary(
- 
-   UserDictionary *dic = NULL;
-   if (auto_index == -1) {
--    if (UserDictionaryUtil::IsStorageFull(*this)) {
-+    if (UserDictionaryUtil::IsStorageFull(storage_)) {
-       last_error_type_ = TOO_MANY_DICTIONARIES;
-       LOG(ERROR) << "too many dictionaries";
-       UnLock();
-       return false;
-     }
-     dic = add_dictionaries();
--    dic->set_id(UserDictionaryUtil::CreateNewDictionaryId(*this));
-+    dic->set_id(UserDictionaryUtil::CreateNewDictionaryId(storage_));
-     dic->set_name(kAutoRegisteredDictionaryName);
-   } else {
-     dic = mutable_dictionaries(auto_index);
-@@ -410,7 +410,7 @@ bool UserDictionaryStorage::AddToAutoRegisteredDictionary(
- }
- 
- bool UserDictionaryStorage::ConvertSyncDictionariesToNormalDictionaries() {
--  if (CountSyncableDictionaries(*this) == 0) {
-+  if (CountSyncableDictionaries(storage_) == 0) {
-     return false;
-   }
- 
-@@ -445,7 +445,7 @@ bool UserDictionaryStorage::ConvertSyncDictionariesToNormalDictionaries() {
-           kDictionaryNameConvertedFromSyncableDictionary;
-       int index = 0;
-       while (UserDictionaryUtil::ValidateDictionaryName(
--                 *this, new_dictionary_name)
-+                 storage_, new_dictionary_name)
-              != UserDictionaryCommandStatus::USER_DICTIONARY_COMMAND_SUCCESS) {
-         ++index;
-         new_dictionary_name = Util::StringPrintf(
-@@ -456,7 +456,7 @@ bool UserDictionaryStorage::ConvertSyncDictionariesToNormalDictionaries() {
-     dic->set_syncable(false);
-   }
- 
--  DCHECK_EQ(0, CountSyncableDictionaries(*this));
-+  DCHECK_EQ(0, CountSyncableDictionaries(storage_));
- 
-   return true;
- }
---- mozc/src/dictionary/user_dictionary_storage.h
-+++ mozc/src/dictionary/user_dictionary_storage.h
-@@ -74,8 +74,20 @@ class ProcessMutex;
- 
- // Inherit from ProtocolBuffer
- // TODO(hidehiko): Get rid of this implementation.
--class UserDictionaryStorage : public user_dictionary::UserDictionaryStorage {
-+class UserDictionaryStorage {
-+ private:
-+  user_dictionary::UserDictionaryStorage storage_;
-  public:
-+  static const user_dictionary::UserDictionaryStorage& default_instance() { return user_dictionary::UserDictionaryStorage::default_instance(); }
-+  user_dictionary::UserDictionaryStorage *storage() { return &storage_; }
-+  int dictionaries_size() const { return storage_.dictionaries_size(); }
-+  void clear_dictionaries() { storage_.clear_dictionaries(); }
-+  user_dictionary::UserDictionary* mutable_dictionaries(int index) { return storage_.mutable_dictionaries(index); }
-+  ::google::protobuf::RepeatedPtrField<user_dictionary::UserDictionary >* mutable_dictionaries() { return storage_.mutable_dictionaries(); }
-+  const ::google::protobuf::RepeatedPtrField<user_dictionary::UserDictionary >& dictionaries() const { return storage_.dictionaries(); }
-+  const user_dictionary::UserDictionary& dictionaries(int index) const { return storage_.dictionaries(index); }
-+  user_dictionary::UserDictionary* add_dictionaries() { return storage_.add_dictionaries(); }
-+
-   typedef user_dictionary::UserDictionary UserDictionary;
-   typedef user_dictionary::UserDictionary::Entry UserDictionaryEntry;
- 
---- mozc/src/prediction/user_history_predictor.cc
-+++ mozc/src/prediction/user_history_predictor.cc
-@@ -291,7 +291,7 @@ bool UserHistoryStorage::Load() {
-     return false;
-   }
- 
--  if (!ParseFromString(input)) {
-+  if (!userHistory_.ParseFromString(input)) {
-     LOG(ERROR) << "ParseFromString failed. message looks broken";
-     return false;
-   }
-@@ -307,7 +307,7 @@ bool UserHistoryStorage::Save() const {
-   }
- 
-   string output;
--  if (!AppendToString(&output)) {
-+  if (!userHistory_.AppendToString(&output)) {
-     LOG(ERROR) << "AppendToString failed";
-     return false;
-   }
---- mozc/src/prediction/user_history_predictor.h
-+++ mozc/src/prediction/user_history_predictor.h
-@@ -61,8 +61,13 @@ class Segments;
- class UserHistoryPredictorSyncer;
- 
- // Added serialization method for UserHistory.
--class UserHistoryStorage : public mozc::user_history_predictor::UserHistory {
-+class UserHistoryStorage {
-+ private:
-+  user_history_predictor::UserHistory userHistory_;
-  public:
-+  int entries_size() const { return userHistory_.entries_size(); }
-+  const user_history_predictor::UserHistory_Entry& entries(int index) const { return userHistory_.entries(index); }
-+  user_history_predictor::UserHistory_Entry* add_entries() { return userHistory_.add_entries(); }
-   explicit UserHistoryStorage(const string &filename);
-   ~UserHistoryStorage();
- 
diff --git a/srcpkgs/mozc/patches/unsigned-int.patch b/srcpkgs/mozc/patches/unsigned-int.patch
new file mode 100644
index 000000000000..823db9f21993
--- /dev/null
+++ b/srcpkgs/mozc/patches/unsigned-int.patch
@@ -0,0 +1,210 @@
+Index: mozc/src/gui/word_register_dialog/word_register_dialog.cc
+===================================================================
+--- mozc/src/gui/word_register_dialog/word_register_dialog.cc
++++ mozc/src/gui/word_register_dialog/word_register_dialog.cc
+@@ -94,7 +94,7 @@ QString GetEnv(const char *envname) {
+       return QString::fromUtf16(reinterpret_cast<const ushort *>(buffer.get()));
+     } else {
+       // This is a fallback just in case.
+-      return QString::fromUcs4(reinterpret_cast<const uint *>(buffer.get()));
++      return QString::fromUcs4(reinterpret_cast<const unsigned *>(buffer.get()));
+     }
+   }
+   return QLatin1String("");
+Index: mozc/src/unix/fcitx/surrounding_text_util.cc
+===================================================================
+--- mozc/src/unix/fcitx/surrounding_text_util.cc
++++ mozc/src/unix/fcitx/surrounding_text_util.cc
+@@ -41,10 +41,10 @@
+ namespace mozc {
+ namespace fcitx {
+ 
+-bool SurroundingTextUtil::GetSafeDelta(uint from, uint to, int32 *delta) {
++bool SurroundingTextUtil::GetSafeDelta(unsigned from, unsigned to, int32 *delta) {
+   DCHECK(delta);
+ 
+-  static_assert(sizeof(int64) >= sizeof(uint),
++  static_assert(sizeof(int64) >= sizeof(unsigned),
+                 "int64 must be sufficient to store a guint value.");
+   static_assert(sizeof(int64) == sizeof(llabs(0)),
+                 "|llabs(0)| must returns a 64-bit integer.");
+@@ -113,8 +113,8 @@ bool SearchAnchorPosForward(
+     const std::string &surrounding_text,
+     const std::string &selected_text,
+     size_t selected_chars_len,
+-    uint cursor_pos,
+-    uint *anchor_pos) {
++    unsigned cursor_pos,
++    unsigned *anchor_pos) {
+ 
+   ConstChar32Iterator iter(surrounding_text);
+   // Move |iter| to cursor pos.
+@@ -137,15 +137,15 @@ bool SearchAnchorPosBackward(
+     const std::string &surrounding_text,
+     const std::string &selected_text,
+     size_t selected_chars_len,
+-    uint cursor_pos,
+-    uint *anchor_pos) {
++    unsigned cursor_pos,
++    unsigned *anchor_pos) {
+   if (cursor_pos < selected_chars_len) {
+     return false;
+   }
+ 
+   ConstChar32Iterator iter(surrounding_text);
+   // Skip |iter| to (potential) anchor pos.
+-  const uint skip_count = cursor_pos - selected_chars_len;
++  const unsigned skip_count = cursor_pos - selected_chars_len;
+   DCHECK_LE(skip_count, cursor_pos);
+   if (!Skip(&iter, skip_count)) {
+     return false;
+@@ -164,8 +164,8 @@ bool SearchAnchorPosBackward(
+ bool SurroundingTextUtil::GetAnchorPosFromSelection(
+     const std::string &surrounding_text,
+     const std::string &selected_text,
+-    uint cursor_pos,
+-    uint *anchor_pos) {
++    unsigned cursor_pos,
++    unsigned *anchor_pos) {
+   DCHECK(anchor_pos);
+ 
+   if (surrounding_text.empty()) {
+@@ -196,8 +196,8 @@ bool GetSurroundingText(FcitxInstance* i
+         return false;
+     }
+ 
+-    uint cursor_pos = 0;
+-    uint anchor_pos = 0;
++    unsigned cursor_pos = 0;
++    unsigned anchor_pos = 0;
+     char* str = NULL;
+ 
+     if (!FcitxInstanceGetSurroundingText(instance, ic, &str, &cursor_pos, &anchor_pos)) {
+@@ -211,7 +211,7 @@ bool GetSurroundingText(FcitxInstance* i
+         const char* primary = NULL;
+ 
+         if ((primary = FcitxClipboardGetPrimarySelection(instance, NULL)) != NULL) {
+-            uint new_anchor_pos = 0;
++            unsigned new_anchor_pos = 0;
+             const std::string primary_text(primary);
+             if (SurroundingTextUtil::GetAnchorPosFromSelection(
+                 surrounding_text, primary_text,
+Index: mozc/src/unix/fcitx/surrounding_text_util.h
+===================================================================
+--- mozc/src/unix/fcitx/surrounding_text_util.h
++++ mozc/src/unix/fcitx/surrounding_text_util.h
+@@ -55,7 +55,7 @@ class SurroundingTextUtil {
+   // Returns true when neither |abs(delta)| nor |-delta| does not cause
+   // integer overflow, that is, |delta| is in a safe range.
+   // Returns false otherwise.
+-  static bool GetSafeDelta(uint from, uint to, int32 *delta);
++  static bool GetSafeDelta(unsigned from, unsigned to, int32 *delta);
+ 
+   // Returns true if
+   // 1. |surrounding_text| contains |selected_text|
+@@ -71,8 +71,8 @@ class SurroundingTextUtil {
+   static bool GetAnchorPosFromSelection(
+       const std::string &surrounding_text,
+       const std::string &selected_text,
+-      uint cursor_pos,
+-      uint *anchor_pos);
++      unsigned cursor_pos,
++      unsigned *anchor_pos);
+ 
+  private:
+   DISALLOW_IMPLICIT_CONSTRUCTORS(SurroundingTextUtil);
+Index: mozc/src/unix/fcitx5/surrounding_text_util.cc
+===================================================================
+--- mozc/src/unix/fcitx5/surrounding_text_util.cc
++++ mozc/src/unix/fcitx5/surrounding_text_util.cc
+@@ -43,10 +43,10 @@ namespace fcitx {
+ 
+ using namespace mozc;
+ 
+-bool SurroundingTextUtil::GetSafeDelta(uint from, uint to, int32 *delta) {
++bool SurroundingTextUtil::GetSafeDelta(unsigned from, unsigned to, int32 *delta) {
+   DCHECK(delta);
+ 
+-  static_assert(sizeof(int64) >= sizeof(uint),
++  static_assert(sizeof(int64) >= sizeof(unsigned),
+                 "int64 must be sufficient to store a guint value.");
+   static_assert(sizeof(int64) == sizeof(llabs(0)),
+                 "|llabs(0)| must returns a 64-bit integer.");
+@@ -110,8 +110,8 @@ bool StartsWith(ConstChar32Iterator *ite
+ // Otherwise returns false.
+ bool SearchAnchorPosForward(const std::string &surrounding_text,
+                             const std::string &selected_text,
+-                            size_t selected_chars_len, uint cursor_pos,
+-                            uint *anchor_pos) {
++                            size_t selected_chars_len, unsigned cursor_pos,
++                            unsigned *anchor_pos) {
+   ConstChar32Iterator iter(surrounding_text);
+   // Move |iter| to cursor pos.
+   if (!Skip(&iter, cursor_pos)) {
+@@ -131,15 +131,15 @@ bool SearchAnchorPosForward(const std::s
+ // Otherwise returns false.
+ bool SearchAnchorPosBackward(const std::string &surrounding_text,
+                              const std::string &selected_text,
+-                             size_t selected_chars_len, uint cursor_pos,
+-                             uint *anchor_pos) {
++                             size_t selected_chars_len, unsigned cursor_pos,
++                             unsigned *anchor_pos) {
+   if (cursor_pos < selected_chars_len) {
+     return false;
+   }
+ 
+   ConstChar32Iterator iter(surrounding_text);
+   // Skip |iter| to (potential) anchor pos.
+-  const uint skip_count = cursor_pos - selected_chars_len;
++  const unsigned skip_count = cursor_pos - selected_chars_len;
+   DCHECK_LE(skip_count, cursor_pos);
+   if (!Skip(&iter, skip_count)) {
+     return false;
+@@ -157,7 +157,7 @@ bool SearchAnchorPosBackward(const std::
+ 
+ bool SurroundingTextUtil::GetAnchorPosFromSelection(
+     const std::string &surrounding_text, const std::string &selected_text,
+-    uint cursor_pos, uint *anchor_pos) {
++    unsigned cursor_pos, unsigned *anchor_pos) {
+   DCHECK(anchor_pos);
+ 
+   if (surrounding_text.empty()) {
+@@ -187,13 +187,13 @@ bool GetSurroundingText(InputContext *ic
+   }
+ 
+   const auto surrounding_text = ic->surroundingText().text();
+-  uint cursor_pos = ic->surroundingText().cursor();
+-  uint anchor_pos = ic->surroundingText().anchor();
++  unsigned cursor_pos = ic->surroundingText().cursor();
++  unsigned anchor_pos = ic->surroundingText().anchor();
+ 
+   if (cursor_pos == anchor_pos && clipboard) {
+     std::string primary = clipboard->call<IClipboard::primary>(ic);
+     if (!primary.empty()) {
+-      uint new_anchor_pos = 0;
++      unsigned new_anchor_pos = 0;
+       if (SurroundingTextUtil::GetAnchorPosFromSelection(
+               surrounding_text, primary, cursor_pos, &new_anchor_pos)) {
+         anchor_pos = new_anchor_pos;
+Index: mozc/src/unix/fcitx5/surrounding_text_util.h
+===================================================================
+--- mozc/src/unix/fcitx5/surrounding_text_util.h
++++ mozc/src/unix/fcitx5/surrounding_text_util.h
+@@ -56,7 +56,7 @@ class SurroundingTextUtil {
+   // Returns true when neither |abs(delta)| nor |-delta| does not cause
+   // integer overflow, that is, |delta| is in a safe range.
+   // Returns false otherwise.
+-  static bool GetSafeDelta(uint from, uint to, int32 *delta);
++  static bool GetSafeDelta(unsigned from, unsigned to, int32 *delta);
+ 
+   // Returns true if
+   // 1. |surrounding_text| contains |selected_text|
+@@ -71,7 +71,7 @@ class SurroundingTextUtil {
+   // Otherwise returns false.
+   static bool GetAnchorPosFromSelection(const std::string &surrounding_text,
+                                         const std::string &selected_text,
+-                                        uint cursor_pos, uint *anchor_pos);
++                                        unsigned cursor_pos, unsigned *anchor_pos);
+ 
+  private:
+   DISALLOW_IMPLICIT_CONSTRUCTORS(SurroundingTextUtil);
diff --git a/srcpkgs/mozc/template b/srcpkgs/mozc/template
index 71d32eb5b9cd..1a78d407f471 100644
--- a/srcpkgs/mozc/template
+++ b/srcpkgs/mozc/template
@@ -1,33 +1,36 @@
 # Template file for 'mozc'
 pkgname=mozc
-version=2.23.2815.102
-revision=10
+# src/data/version/mozc_version_template.bzl
+version=2.26.4353.100
+revision=1
 create_wrksrc=yes
 build_wrksrc=mozc/src
-hostmakedepends="gettext ninja pkg-config protobuf protobuf-devel python which"
+hostmakedepends="gettext ninja pkg-config protobuf protobuf-devel
+ python3-six which qt5-qmake qt5-host-tools"
 makedepends="gtk+-devel ibus-devel libzinnia-devel protobuf-devel qt5-devel
- fcitx-devel"
+ fcitx-devel libfcitx5-devel"
 depends="tegaki-zinnia-japanese>=0.3"
 short_desc="Japanese IME (Open Source version of Google Japanese Input)"
 maintainer="Matthias von Faber <mvf@gmx.eu>"
 license="BSD-3-Clause"
 homepage="https://github.com/google/mozc"
 distfiles="
- https://gitlab.com/fcitx/mozc/repository/dad94584ea5012110ad1d204e433964243a1639d/archive.tar.bz2>${pkgname}-${version}.tar.bz2
- https://github.com/bnoordhuis/gyp/archive/c6f471687407bf28ddfc63f1a8f47aeb7bf54edc.tar.gz
+ https://github.com/fcitx/mozc/archive/d384c3b3e7eed1aa54a6af3363781604fe538d65.tar.gz
+ https://github.com/abseil/abseil-cpp/archive/0f3bb466b868b523cf1dc9b2aaaed65c77b28862.tar.gz
+ ${DEBIAN_SITE}/main/g/gyp/gyp_0.1+20200513gitcaa6002.orig.tar.gz
  https://github.com/hiroyuki-komatsu/japanese-usage-dictionary/archive/e5b3425575734c323e1d947009dd74709437b684.tar.gz
 "
-checksum="
- e38457e63a7fa8d62d87b4f8b3e89fe5f6939d92e3c4fd287a93358375693892
- 882f074cbb3a4f2bba550fb615e63949c0fbf39eeb1718a0330b4a545ab97616
- 0b6efee0eebac2c1a8eeea333278aa40fcef7846bba9a379962c6e567e7e3dc1
-"
+checksum="69cb26e1f9c03e20715356ef568b583f2baf996df5fd8536aca2ed8e7bd9444f
+ 3d74cdc98b42fd4257d91f652575206de195e2c824fcd8d6e6d227f85cb143ef
+ 8d531bc7d3302461d76a32367453cec60ed08b455f27a53d8f313d81761713a8
+ 0b6efee0eebac2c1a8eeea333278aa40fcef7846bba9a379962c6e567e7e3dc1"
 
 CXXFLAGS="-D_GNU_SOURCE"
+patch_args=-Np0
+lib32disabled=yes
 
 if [ "$CROSS_BUILD" ]; then
-	hostmakedepends+=" qt5-devel"
-	subpackages="ibus-mozc fcitx-mozc"
+	subpackages="ibus-mozc fcitx-mozc fcitx5-mozc"
 fi
 
 if [ "$XBPS_TARGET_ENDIAN" = "be" ]; then
@@ -35,45 +38,43 @@ if [ "$XBPS_TARGET_ENDIAN" = "be" ]; then
 fi
 
 post_extract() {
-	ln -s mozc-* mozc
-	rm -rf mozc/src/unix/fcitx5
+	mv mozc-* mozc
 
 	# symlink "submodules" into place
-	for _src_dest in gyp japanese-usage-dictionary:japanese_usage_dictionary; do
+	for _src_dest in gyp \
+		abseil-cpp \
+		japanese-usage-dictionary:japanese_usage_dictionary
+	do
 		_src=${_src_dest%:*}
 		_dst=mozc/src/third_party/${_src_dest#*:}
 		rmdir $_dst
 		ln -sr $_src-* $_dst
 	done
+}
 
-	if [ "$CROSS_BUILD" ]; then
-		# find fcitx4-config
-		sed -i -e "s;fcitx4-config;${XBPS_CROSS_BASE}/usr/bin/fcitx4-config;" mozc/src/unix/fcitx/fcitx.gyp
+post_patch() {
+	if [ "$XBPS_TARGET_LIBC" = musl ]; then
+		vsed -i -e 's|PTHREAD_MUTEX_RECURSIVE_NP|PTHREAD_MUTEX_RECURSIVE|g' base/mutex.cc
 	fi
 }
 
 do_configure() {
-	case "$XBPS_TARGET_MACHINE" in
-		*-musl) sed -i -e 's|PTHREAD_MUTEX_RECURSIVE_NP|PTHREAD_MUTEX_RECURSIVE|g' base/mutex.cc ;;
-	esac
 	GYP_DEFINES="
 	 document_dir=/usr/share/licenses/${pkgname}
 	 use_libprotobuf=1
 	 use_libzinnia=1
-	" python2 build_mozc.py gyp --target_platform=Linux
+	" python3 build_mozc.py gyp --target_platform=Linux
 }
 
 do_build() {
-	local targets
-	targets="
-	 server/server.gyp:mozc_server
-	 gui/gui.gyp:mozc_tool
-	 unix/emacs/emacs.gyp:mozc_emacs_helper
-	 unix/ibus/ibus.gyp:ibus_mozc
-	 renderer/renderer.gyp:mozc_renderer
-	 unix/fcitx/fcitx.gyp:fcitx-mozc
-	"
-	python2 build_mozc.py build -c Release $targets
+	python3 build_mozc.py build -c Release \
+		server/server.gyp:mozc_server \
+		gui/gui.gyp:mozc_tool \
+		unix/emacs/emacs.gyp:mozc_emacs_helper \
+		unix/ibus/ibus.gyp:ibus_mozc \
+		renderer/renderer.gyp:mozc_renderer \
+		unix/fcitx/fcitx.gyp:fcitx-mozc \
+		unix/fcitx5/fcitx5.gyp:fcitx5-mozc
 
 	sed -i 's|/usr/libexec/|/usr/lib/ibus-mozc/|g' out_linux/Release/gen/unix/ibus/mozc.xml
 }
@@ -82,15 +83,16 @@ do_install() {
 	vinstall out_linux/Release/mozc_server 755 usr/lib/mozc
 	vinstall out_linux/Release/mozc_tool 755 usr/lib/mozc
 
-	head -n 29 server/mozc_server.cc > LICENSE
-	for i in LICENSE data/installer/*.html; do
-		vlicense "$i"
-	done
+	head -n 29 unix/fcitx5/fcitx_key_translator.cc >mozc.LICENSE
+	vlicense mozc.LICENSE
+	vlicense data/installer/credits_en.html
+	vlicense third_party/japanese_usage_dictionary/LICENSE dict.LICENSE
 }
 
 ibus-mozc_package() {
 	short_desc="Mozc engine for IBus - Client of the Mozc input method"
 	depends="${sourcepkg}-${version}_${revision} ibus>=1.5.14"
+	lib32disabled=yes
 	pkg_install() {
 		vinstall out_linux/Release/ibus_mozc 755 usr/lib/ibus-mozc ibus-engine-mozc
 		vinstall out_linux/Release/gen/unix/ibus/mozc.xml 644 usr/share/ibus/component
@@ -105,6 +107,7 @@ ibus-mozc_package() {
 emacs-mozc_package() {
 	pkgdesc="Mozc for Emacs"
 	depends="${sourcepkg}-${version}_${revision} emacs"
+	lib32disabled=yes
 	pkg_install() {
 		vbin out_linux/Release/mozc_emacs_helper
 		vinstall unix/emacs/mozc.el 644 usr/share/emacs/site-lisp/emacs-mozc
@@ -115,10 +118,40 @@ fcitx-mozc_package() {
 	short_desc="Mozc engine for fcitx - Client of the Mozc input method"
 	depends="${sourcepkg}-${version}_${revision} fcitx>=4.2.9"
 	homepage="https://fcitx-im.org/"
-	license="GPL-2.0-or-later"
+	lib32disabled=yes
 	pkg_install() {
+		local _file _lang
 		vinstall out_linux/Release/fcitx-mozc.so 644 usr/lib/fcitx
 		vinstall unix/fcitx/fcitx-mozc.conf 644 usr/share/fcitx/addon
 		vinstall unix/fcitx/mozc.conf 644 usr/share/fcitx/inputmethod
+		vinstall data/images/unix/ime_product_icon_opensource-32.png \
+			644 usr/share/fcitx/icon mozc.png
+		for _file in out_linux/Release/gen/unix/fcitx/po/*.mo
+		do
+			_lang=${_file##*/}
+			_lang=${_lang%.mo}
+			vinstall "$_file" 644 usr/share/locale/$_lang fcitx-mozc.mo
+		done
+	}
+}
+
+fcitx5-mozc_package() {
+	short_desc="Mozc engine for fcitx v5"
+	depends="${sourcepkg}-${version}_${revision} fcitx5"
+	homepage="https://fcitx-im.org/"
+	lib32disabled=yes
+	pkg_install() {
+		local _file _lang
+		vinstall out_linux/Release/fcitx5-mozc.so 644 usr/lib/fcitx5
+		vinstall unix/fcitx5/mozc-addon.conf 644 \
+			usr/share/fcitx5/addon mozc.conf
+		vinstall unix/fcitx5/mozc.conf 644 usr/share/fcitx5/inputmethod
+		for _file in unix/fcitx5/po/*.po
+		do
+			_lang=${_file##*/}
+			_lang=${_lang%.po}
+			vmkdir usr/share/locale/$_lang
+			msgfmt "$_file" -o $PKGDESTDIR/usr/share/locale/$_lang/fcitx5-mozc.mo
+		done
 	}
 }
diff --git a/srcpkgs/mozc/update b/srcpkgs/mozc/update
new file mode 100644
index 000000000000..5a7df464ba79
--- /dev/null
+++ b/srcpkgs/mozc/update
@@ -0,0 +1,2 @@
+# Google never tags any releases.
+ignore="*"

  parent reply	other threads:[~2021-05-01  1:53 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-25 15:55 [PR PATCH] [WIP] mozc: update to 2.26.4346.100. " sgn
2021-04-27  1:26 ` [PR PATCH] [Updated] " sgn
2021-04-30  7:56 ` sgn
2021-04-30  7:57 ` mozc: update to 2.26.4353.100. " sgn
2021-04-30  7:57 ` sgn
2021-04-30  8:04 ` sgn
2021-04-30 13:51 ` noarchwastaken
2021-05-01  1:53 ` sgn [this message]
2021-05-01  2:00 ` sgn
2021-05-01  2:01 ` [PR PATCH] [Merged]: " sgn
2021-05-01 10:27 ` mvf
2021-05-01 12:18 ` ericonr
2021-05-01 12:33 ` mvf
2021-05-01 13:30 ` mvf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210501015325.7qRmJ1Le9saov5u_pGRg-j0-qECNK_AXQEZCfjsstK0@z \
    --to=sgn@users.noreply.github.com \
    --cc=ml@inbox.vuxu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).