wime(1.8.0)のビルドメモとebuild
wime(www.venus.sannet.ne.jp/thomas/wime/)というプログラムを用いることで、Wineの力を借りてWindows用の日本語入力システム(IME)をCannaと同様に扱うことができる。
ここでは、そのインストール(x86_64上のビルドについてとGentoo Linuxのebuild)を扱う。
x86_64上でのビルドメモ
wimeはx86_64上でも動作することを確認済みだが、バージョン1.8.0の時点では、そのまま普通にmakeでビルドしようとしても失敗してしまう。色々試行錯誤した末
cid-3f9be5b1cd4a806c.skydrive.live.com/browse.aspx/%E5%85%AC%E9%96%8B/Gentoo%20Linux%20ebuild/app-i18n/wime/files
にアップロードした差分による修正でビルドがうまくいくようになり、動作状態も良好。
$ tar jxf [wime-1.8.0.tar.bz2の場所] $ cd wime-1.8.0/ $ patch -p1 < [wime-1.8.0-x86_64.patchの場所] patching file Makefile patching file dll/Makefile patching file exe/Makefile patching file lib/Makefile patching file so/Makefile patching file tools/hinshi-list/Makefile $ make -j1 for d in lib so dll exe tools;do make -C $d all || exit 1; done make[1]: Entering directory `/tmp/work/wime-1.8.0/lib' cc -g -Wall -fPIC -std=gnu99 -Wno-multichar -fgnu89-inline -m32 -c -o lib.o lib.c make[1]: Leaving directory `/tmp/work/wime-1.8.0/lib' make[1]: Entering directory `/tmp/work/wime-1.8.0/so' cc -g -Wall -fPIC -std=gnu99 -Wno-multichar -fgnu89-inline -m32 -I../lib -I../exe -I../so -c -o libwime.o libwime.c cc -shared -Wl,-soname,libwime.so -o libwime.so libwime.o ../lib/lib.o -m32 make[1]: Leaving directory `/tmp/work/wime-1.8.0/so' make[1]: Entering directory `/tmp/work/wime-1.8.0/dll' winegcc -g -Wall -fPIC -std=gnu99 -Wno-multichar -fgnu89-inline -m32 -I../so -c -o libwime.o libwime.c winegcc -shared libwime.dll.spec -mno-cygwin -L../so -lwime -m32 -o libwime.dll.so libwime.o make[1]: Leaving directory `/tmp/work/wime-1.8.0/dll' make[1]: Entering directory `/tmp/work/wime-1.8.0/exe' winegcc -g -Wall -fPIC -std=gnu99 -Wno-multichar -fgnu89-inline -m32 -I../so -I../lib -mconsole -mno-cygwin -c -o apisup.o apisup.c apisup.c: In function 'CloseConnection': apisup.c:45: warning: generating trampoline in object (requires executable stack) winegcc -g -Wall -fPIC -std=gnu99 -Wno-multichar -fgnu89-inline -m32 -I../so -I../lib -mconsole -mno-cygwin -c -o cannaapi.o cannaapi.c winegcc -g -Wall -fPIC -std=gnu99 -Wno-multichar -fgnu89-inline -m32 -I../so -I../lib -mconsole -mno-cygwin -c -o ut.o ut.c winegcc -g -Wall -fPIC -std=gnu99 -Wno-multichar -fgnu89-inline -m32 -I../so -I../lib -mconsole -mno-cygwin -c -o wime.o wime.c winegcc -g -Wall -fPIC -std=gnu99 -Wno-multichar -fgnu89-inline -m32 -I../so -I../lib -mconsole -mno-cygwin -m32 -limm32 -o wime.exe apisup.o cannaapi.o ut.o wime.o ../lib/lib.o make[1]: Leaving directory `/tmp/work/wime-1.8.0/exe' make[1]: Entering directory `/tmp/work/wime-1.8.0/tools' for d in hinshi-list wimectrl;do make -C $d all || exit 1; done make[2]: Entering directory `/tmp/work/wime-1.8.0/tools/hinshi-list' winegcc -g -Wall -fPIC -std=gnu99 -Wno-multichar -fgnu89-inline -m32 -I../../so -mconsole -mno-cygwin -DNOTFIX_GCS_COMPREADCLAUSE -c -o hinshi-list.o hinshi-list.c winegcc -g -Wall -fPIC -std=gnu99 -Wno-multichar -fgnu89-inline -m32 -I../../so -mconsole -mno-cygwin -DNOTFIX_GCS_COMPREADCLAUSE -m32 -limm32 -o hinshi-list.exe hinshi-list.o make[2]: Leaving directory `/tmp/work/wime-1.8.0/tools/hinshi-list' make[2]: Entering directory `/tmp/work/wime-1.8.0/tools/wimectrl' cc -g -Wall -fPIC -std=gnu99 -Wno-multichar -fgnu89-inline -I../../{exe,lib} -c -o main.o main.c cc -g -Wall -fPIC -std=gnu99 -Wno-multichar -fgnu89-inline -I../../{exe,lib} -c -o ut.o ../../exe/ut.c cc -g -Wall -fPIC -std=gnu99 -Wno-multichar -fgnu89-inline -I../../{exe,lib} -c -o lib.o ../../lib/lib.c cc -g -Wall -fPIC -std=gnu99 -Wno-multichar -fgnu89-inline -I../../{exe,lib} -c -o corr.o corr.c cc -g -Wall -fPIC -std=gnu99 -Wno-multichar -fgnu89-inline -I../../{exe,lib} -c -o wimeapi.o wimeapi.c cc -lcanna -o wimectrl main.o ut.o lib.o corr.o wimeapi.o make[2]: Leaving directory `/tmp/work/wime-1.8.0/tools/wimectrl' make[1]: Leaving directory `/tmp/work/wime-1.8.0/tools'
インストールは、上のパッチを当てた状態で
$ sudo make -j1 install PREFIX=/usr LIBDIR=/usr/lib32
とする。ただし、プログラム以外は入らないため、レジストリファイルなどは手動でどこかにコピーしておく。
その他メモ
GCCの-O系オプションを付けるとmake[1]: Entering directory `/tmp/work/wime-1.8.0/so' cc -O -g -Wall -fPIC -std=gnu99 -Wno-multichar -fgnu89-inline -m32 -I../lib -I../exe -I../so -c -o libwime.o libwime.c libwime.c:22: error: expected identifier or '(' before '__extension__' make[1]: *** [libwime.o] Error 1
のようにエラーが出るが、「char* strdup(const char* s);」の行をコメントアウト*1もしくは削除することで、ビルドは正常に行われた。
Gentoo Linux向けのebuild
Gentoo Linuxのパッケージとしてインストールするためのebuildファイルをcid-3f9be5b1cd4a806c.skydrive.live.com/browse.aspx/%E5%85%AC%E9%96%8B/Gentoo%20Linux%20ebuild/app-i18n/wime
に作成・アップロードした。
(2008/7/20)バージョン1.8.1に合わせて、パッチとebuildを更新した。strdup()の記述が消えたため、それをコメントアウトする処理は外している。
(2008/7/28)バージョン1.8.2に合わせた更新を行ったが、パッチは1.8.1のものをそのまま使えるため、ebuildの変更点はそのパッチのファイル名の変更のみ。
インストールされるファイルは以下(x86_64上の場合)。qlistで一覧した各行(ファイル)に対してfileで種類を調べている。
$ qlist wime | while read f; do file ${f}; done /usr/share/doc/wime-1.8.0/Readme.bz2: bzip2 compressed data, block size = 900k /usr/share/doc/wime-1.8.0/Changelog.bz2: bzip2 compressed data, block size = 900k /usr/share/wime-1.8.0/hinshi: ISO-8859 text /usr/share/wime-1.8.0/atok.reg: ASCII text /usr/share/wime-1.8.0/atok-taiken.reg: Non-ISO extended-ASCII text /usr/bin/wime.exe.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped /usr/bin/hinshi-list.exe.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped /usr/bin/wimectrl: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), stripped /usr/bin/hinshi-list: Bourne shell script text executable /usr/bin/wime: Bourne shell script text executable /usr/lib32/libwime.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped /usr/lib32/wine/libwime.dll.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
配布されているパッケージのビルドシステムによるインストールと違うのは
- レジストリファイルatok-taiken.regのエンコーディングをShift_JISに変更*2するようにした
- レジストリファイルを/usr/share/wime-[バージョン]/以下に配置している
- hinshiファイルも/usr/share/wime-[バージョン]/以下に配置し、更にこれをwimeの初回実行時*3に[ホームディレクトリ]/.wime/に自動的にコピーするようにした
という点。
使用したバージョン: