インストール: Fcitx | Linuxでの代表的なIM

GNOME Terminal

LinuxなどのUNIX系OSで採用されているIM (Input Method) のFcitxをソースコードからインストールする。

インストール手順

インストール情報
項目説明
配布元Fcitx – Fcitx
リポジトリー
手順INSTALL · master · fcitx / fcitx · GitLab
依存情報
依存先 (必須)
  • CMake
  • GUI用: LibX11, Cairo-Xlib
依存先 (任意)
  • pango-cairo, opencc, dbus, doxygen, qt, gtk,gir
  • ENABLE_LIBXML2: LibXml2, IsoCodes, XkbFile
  • ENABLE_QT: Qt4
  • ENABLE_GIR: gobject-introspection-1.0
  • ENABLE_DBUS: uuid
依存元fcitx-qt
インストールコマンド
sh -eux <<-"EOT"
PKG=fcitx VER=4.2.9.6 TAG=$VER
LOCAL=~/.local J=$(grep -cs '^processor' /proc/cpuinfo || echo 2)
mkdir -p "$LOCAL/src"
cd "$LOCAL/src"

if command -v git >/dev/null; then
  [ -e $PKG ] || git clone --depth 1 https://gitlab.com/fcitx/fcitx/ $PKG
  cd $PKG
  git fetch --depth 1 origin tag $TAG
  git checkout -f $TAG
  git clean -dfX
else
  [ -e $PKG-$VER ] || wget 
  tar -xf $PKG-$VER.*
  cd $PKG-$VER
  make -kj $J distclean clean || :
fi

cmake -D CMAKE_INSTALL_PREFIX="$LOCAL/stow/$PKG-$VER" \
-D ENABLE_LIBXML2=OFF -D ENABLE_QT=OFF -D ENABLE_GIR=OFF -D ENABLE_DBUS=OFF . make -j $J make -j $J install cd "$LOCAL/stow" echo $PKG-[0-9]* | xargs -n 1 stow --ignore=dir -D stow --ignore=dir $PKG-$VER EOT
インストール例
日付バージョンOS依存関係
2018-05-174.2.9.6Ubuntu 16.04
2019-06-154.2.9.6Ubuntu 18.04GNU Make 4.2.1, GCC 7.4.0, CMake 3.10.2

Fcitxは任意の依存関係が大量に存在している。cmakeのオプションで不要なオプションを解除 (-D ENABLE_LIBXML2=OFF -D ENABLE_QT=OFF -D ENABLE_GIR=OFF -D ENABLE_DBUS=OFF) してビルドした。

make実行中に辞書ファイルなどをダウンロードしにいくので,インターネット環境が必要と思われるので注意しておく。

fcitxにはテストは付属していないようで,ctestやmake check, make testを実行してもテストは実行されなかった。そのため,扱いには注意する。

ビルドエラー対応

オプションを何も指定しない場合,デフォルトでビルドが有効になっているため,必要な依存関係が不足していると,cmakeの実行時にエラーが出る。

まずENABLE_LIBXML2=ONの影響で,cmakeの実行時に以下のエラーが出る。

-- Checking for module 'xkbfile'
--   No package 'xkbfile' found
CMake Error at /usr/share/cmake-3.10/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
  Could NOT find XkbFile (missing: XKBFILE_LIBRARIES
  XKBFILE_MAIN_INCLUDE_DIR)
Call Stack (most recent call first):
  /usr/share/cmake-3.10/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
  cmake/FindXkbFile.cmake:33 (find_package_handle_standard_args)
  CMakeLists.txt:101 (find_package)


-- Configuring incomplete, errors occurred!

CMakeListx.txt:101付近は,ENABLE_LIBXML2のif文のブロックであり,XkbFileパッケージの不足のためエラーとなっている。

if (ENABLE_LIBXML2)                                                             
    find_package(LibXml2 REQUIRED)                                              
    find_package(IsoCodes REQUIRED)                                             
    find_package(XkbFile REQUIRED)                                              
endif (ENABLE_LIBXML2)

cmakeのオプションに,-D ENABLE_LIBXML2=OFFを指定することでこのビルドエラーを回避した。

ENABLE_QT=ONが原因でcmakeの実行時に以下のエラーが出る。

-- Could NOT find Enchant (missing: ENCHANT_LIBRARIES ENCHANT_INCLUDE_DIR ENCHANT_API_COMPATIBLE) 
-- Could NOT find Presage (missing: PRESAGE_LIBRARIES PRESAGE_INCLUDE_DIR PRESAGE_API_COMPATIBLE) 
CMake Error at /usr/share/cmake-3.10/Modules/FindQt4.cmake:1320 (message):
  Found unsuitable Qt version "5.9.5" from /usr/bin/qmake, this code requires
  Qt 4.x
Call Stack (most recent call first):
  CMakeLists.txt:111 (find_package)


-- Configuring incomplete, errors occurred!

CMakeLists.txt:111付近はENABLE_QTのif文のブロックで,Qt 4の不足のためエラーが出ている。

if(ENABLE_QT)                                                                   
  find_package(Qt4 4.8 COMPONENTS QtCore QtGui QtDBus REQUIRED)                 
endif()

cmakeのオプションに,-D ENABLE_QT=OFFを指定することでこのビルドエラーを回避した。

ENABLE_GIR=ONが原因でcmakeの実行時に以下のエラーが出る。

-- Checking for module 'gobject-introspection-1.0'
--   No package 'gobject-introspection-1.0' found
CMake Error at /usr/share/cmake-3.10/Modules/FindPkgConfig.cmake:415 (message):
  A required package was not found
Call Stack (most recent call first):
  /usr/share/cmake-3.10/Modules/FindPkgConfig.cmake:593 (_pkg_check_modules_internal)
  cmake/GObjectIntrospection.cmake:4 (pkg_check_modules)
  src/lib/fcitx-gclient/CMakeLists.txt:67 (include)


-- Configuring incomplete, errors occurred!

src/lib/fcitx-gclient/CMakeLists.txt:67付近hENABLE_GIRのif文のブロックであり,include(GObjectIntrospection) でcmake/GObjectIntrospection.cmake:4 でpkg-config経由でgobject-introspection-1.0を参照して,不足のためエラーとなっている。

if(ENABLE_GIR)
  include(GObjectIntrospection)
  gobject_introspection(
    FILENAME Fcitx-1.0.gir
    NSVERSION 1.0
    INCLUDE Gio-2.0 GObject-2.0 GLib-2.0
    PACKAGE_EXPORT fcitx-gclient
    LIBRARY fcitx-gclient
    SCANNER_ARGS --warn-all --add-include-path=${CMAKE_CURRENT_SOURCE_DIR}
    COMPILER_ARGS "--includedir=${CMAKE_CURRENT_SOURCE_DIR}"
    SYMBOL_PREFIXES fcitx
    SOURCES ${FCITX_GCLIENT_SOURCES} ${FCITX_GCLIENT_HEADERS}
    QUIET
    )
  install(FILES "${CMAKE_CURRENT_BINARY_DIR}/Fcitx-1.0.gir"
    DESTINATION "${GOBJECT_INTROSPECTION_GIRDIR}")
  install(FILES "${CMAKE_CURRENT_BINARY_DIR}/Fcitx-1.0.typelib"
    DESTINATION "${GOBJECT_INTROSPECTION_TYPELIBDIR}")
endif()

cmakeのオプションに,-D ENABLE_GIR=OFFを指定することでこのビルドエラーを回避した。

ENABLE_DBUS=ONが原因でcmakeの実行時に以下のエラーが出る。

-- Checking for module 'uuid'
--   No package 'uuid' found
CMake Error at /usr/share/cmake-3.10/Modules/FindPkgConfig.cmake:415 (message):
  A required package was not found
Call Stack (most recent call first):
  /usr/share/cmake-3.10/Modules/FindPkgConfig.cmake:593 (_pkg_check_modules_internal)
  src/frontend/ipcportal/CMakeLists.txt:5 (pkg_check_modules)


-- Configuring incomplete, errors occurred!

src/frontend/ipcportal/CMakeLists.txt:5付近の_ENABLE_DBUSのブロック内で,uuidパッケージの不足のためエラーが出ている。

if(_ENABLE_DBUS)
  include_directories(${DBUS_INCLUDE_DIRS})
  link_directories(${DBUS_LIBRARY_DIRS})
  pkg_check_modules(LibUUID "uuid" IMPORTED_TARGET REQUIRED)
  set(FCITX_IPCPORTAL_LINK_LIBS ${FCITX_IPCPORTAL_LINK_LIBS} ${DBUS_LIBRARIES} PkgConfig::LibUUID)
  set(ipcportal_noinstall)
else()
  set(ipcportal_noinstall NO_INSTALL)
endif()

_ENABLE_DBUSはCMakeLists.txt:151付近のENABLE_DBUSのif文のブロックで設定している。

set(_ENABLE_DBUS 0)
if (ENABLE_DBUS)
    PKG_CHECK_MODULES(DBUS "dbus-1>=1.1.0" )
    if (DBUS_FOUND)
        set(_ENABLE_DBUS 1)
    endif (DBUS_FOUND)
endif (ENABLE_DBUS)

cmakeのオプションに,-D ENABLE_DBUS=OFFを指定することでこのビルドエラーを回避した。

なお,これらのビルドオプションを指定しても,以下の警告が出る。

-- Checking for module 'enchant'
--   No package 'enchant' found
-- Could NOT find Enchant (missing: ENCHANT_LIBRARIES ENCHANT_INCLUDE_DIR ENCHAN
T_API_COMPATIBLE)
-- Could NOT find Presage (missing: PRESAGE_LIBRARIES PRESAGE_INCLUDE_DIR PRESAG
E_API_COMPATIBLE)
-- Checking for module 'opencc'
--   No package 'opencc' found
-- Could NOT find OpenCC (missing: OPENCC_LIBRARIES OPENCC_INCLUDE_DIR OPENCC_AP
I_COMPATIBLE)

ビルド止まるわけではないので,enchantとopenccの不足による警告は無視した。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です