Arch Linux 에는 이미 aur 로 nimf 가 제공되고 있다. 그냥 그걸 설치하면 별 문제는 없는데..
이 nimf 는 하모니카라는 곳에서 관리되고 있다. (이 하모니카가 뭔지 잘 모르는 건 몇 년째 변함이 없는데..)
아무튼, 딱 한가지. 안 그래도 별로 예쁘지 않은 아이콘이 더 이상해졌고, KDE Plasma 에선 더더욱 모양이 영 아니올시다이기에.. 우분투용으로 손봐뒀던 nimf 소스를 사용해보기로 했다.
여기에 사용한 소스는, qt4 삭제, 한글/일본어 anthy 외 삭제, dvorak 문제점 해결, 마지막으로 최신판 libhangul 과 호환이 되게끔 수정돼 있다. 이름하여 nimf 2020.04.28 판이 되겠다.
그런데.. 왜 그런지 make 시 오류가 발생한다.
nimf-libhangul.c:657:42: error: 'HANGUL_IC_OPTION_AUTO_REORDER' undeclared (first use in this function)
이게 뭔지 혼자서 고민을 하다가.. (C 라고는 콧털만큼도 모르면서) 결국 답을 찾았다.
아치리눅스에서 기본 제공되는 libhangul 이 예전 판이어서, 최신판 libhangul 과 호환되게 해놓은게 오히려 에러를 불러왔다. 우분투에는 좀 더 최신판이 들어있는데, 첨단을 걷는 아치가 이렇다니..
이를 해결하기 위해선, aur 로 libhangul-git 을 먼저 설치해야한다.
그리고 나서 nimf 를 빌드하면 오류없이 끝낼 수 있다.
단, gcc 판본 차이로 인해서, 몇군데 사소한 수정은 필요하다.
$ diff -cr nimf-2020.04.28-ubuntu nimf-2020.04.28-archlinux diff --color -cr nimf-2020.04.28-ubuntu/configure.ac nimf-2020.04.28-archlinux/configure.ac *** nimf-2020.04.28-ubuntu/configure.ac 2021-01-20 20:32:27.000000000 +0900 --- nimf-2020.04.28-archlinux/configure.ac 2021-12-28 16:45:21.000000000 +0900 *************** *** 21,27 **** AC_ARG_ENABLE([hardening], AS_HELP_STRING([--disable-hardening], [Disable hardening])) ! EXTRA_CFLAGS="-Wall -Werror" AS_IF([test "x$enable_hardening" != "xno"], [EXTRA_CFLAGS+=" -D_FORTIFY_SOURCE=2"]) --- 21,28 ---- AC_ARG_ENABLE([hardening], AS_HELP_STRING([--disable-hardening], [Disable hardening])) ! #EXTRA_CFLAGS="-Wall -Werror" ! EXTRA_CFLAGS="-Wall" AS_IF([test "x$enable_hardening" != "xno"], [EXTRA_CFLAGS+=" -D_FORTIFY_SOURCE=2"]) diff --color -cr nimf-2020.04.28-ubuntu/libnimf/nimf-im.c nimf-2020.04.28-archlinux/libnimf/nimf-im.c *** nimf-2020.04.28-ubuntu/libnimf/nimf-im.c 2021-01-20 20:14:36.000000000 +0900 --- nimf-2020.04.28-archlinux/libnimf/nimf-im.c 2021-12-28 16:46:21.000000000 +0900 *************** *** 154,160 **** sizeof (NimfPreeditAttr *)); for (i = 0; i < n_attr; i++) ! im->priv->preedit_attrs[i] = g_memdup (message->data + str_len + 1 + i * sizeof (NimfPreeditAttr), sizeof (NimfPreeditAttr)); im->priv->preedit_attrs[n_attr] = NULL; --- 154,160 ---- sizeof (NimfPreeditAttr *)); for (i = 0; i < n_attr; i++) ! im->priv->preedit_attrs[i] = g_memdup2 (message->data + str_len + 1 + i * sizeof (NimfPreeditAttr), sizeof (NimfPreeditAttr)); im->priv->preedit_attrs[n_attr] = NULL; diff --color -cr nimf-2020.04.28-ubuntu/libnimf/nimf-types.c nimf-2020.04.28-archlinux/libnimf/nimf-types.c *** nimf-2020.04.28-ubuntu/libnimf/nimf-types.c 2019-08-14 21:06:07.000000000 +0900 --- nimf-2020.04.28-archlinux/libnimf/nimf-types.c 2021-12-28 16:46:04.000000000 +0900 *************** *** 204,210 **** for (i = 0; attrs[i] != NULL; i++) { preedit_attrs = g_realloc_n (preedit_attrs, 1 + i + 1, sizeof (NimfPreeditAttr *)); ! preedit_attrs[i] = g_memdup (attrs[i], sizeof (NimfPreeditAttr)); preedit_attrs[i + 1] = NULL; } --- 204,210 ---- for (i = 0; attrs[i] != NULL; i++) { preedit_attrs = g_realloc_n (preedit_attrs, 1 + i + 1, sizeof (NimfPreeditAttr *)); ! preedit_attrs[i] = g_memdup2 (attrs[i], sizeof (NimfPreeditAttr)); preedit_attrs[i + 1] = NULL; }
configure.ac
와 libnimf/nimf-im.c
, libnimf/nimf-types.c
에서 살짝 수정해주면 된다.
그리고, 이왕 하는 김에 PKGBUILD 를 만들어 makepkg
로 해주면 다른 곳에서도 쓸 수 있으니..
# # PKGBUILD # This file is part of Nimf. # # Unlike other files in the Nimf project, # this PKGBUILD file is in the public domain. pkgname=nimf pkgver="2020.04.28" pkgrel=1 pkgdesc="Nimf is an input method framework." arch=('any') #url="https://gitlab.com/nimf-i18n/nimf" license=('LGPL3') makedepends=('binutils' 'autoconf' 'automake' 'gcc' 'make' 'glib2' 'intltool' 'gtk3' 'gtk2' 'qt5-base' 'libappindicator-gtk3' 'librsvg' 'noto-fonts-cjk' 'libhangul' 'libxkbcommon' 'wayland' 'libxklavier' 'gtk-doc') depends=('glib2' 'gtk3' 'gtk2' 'qt5-base' 'libappindicator-gtk3' 'libhangul' 'libxkbcommon' 'wayland' 'libxklavier') optdepends=('noto-fonts-cjk: Google Noto CJK fonts') #source=("https://gitlab.com/nimf-i18n/nimf/-/archive/master/nimf-master.tar.bz2") source=($pkgname-${pkgver}.tar.xz) md5sums=('SKIP') pkgver() { cd "$srcdir/$pkgname-$pkgver" grep AC_INIT configure.ac | grep -Po '\d{4}.\d{2}.\d{2}' } build() { cd "$srcdir/$pkgname-$pkgver" ./autogen.sh --prefix=/usr --enable-gtk-doc make -j 4 } package() { cd "$srcdir/$pkgname-$pkgver" make DESTDIR="${pkgdir}/" install }
url 을 지우고(그냥 놔둬도 빌드엔 지장이 없을 듯은 하지만), source 를 현재 디렉토리에 있는 파일로 대체해서 빌드하도록 했다.
아울러, 환경변수를 설정해줘야 제대로 입력이 가능하다.
$HOME/.config/plasma-workspace/env
에 nimf.sh 등을 만들고 다음을 붙여넣는다.
export GTK_IM_MODULE=nimf export QT4_IM_MODULE="nimf" export QT_IM_MODULE=nimf export XMODIFIERS="@im=nimf" nimf
작동엔 아무 이상없는 듯?