mozcをFreeBSDでビルドしようとして挫折
Google日本語入力のOSS版であるところのmozcをFreeBSDでビルドしようとして普通に挫折し,予告通り不毛な週末を過ごしたので,そのメモ.っていや本当に全部つぶしたワケじゃないけど.よい子は真似するの禁止.
LinuxBuildInstructionsに従いコードを入手し,Compilation に移る前に色々と修正する.
makeとしてgmakeを使うようにしとく
% export BUILD_COMMAND=gmake
QTDIRなる環境変数があるので,よく分からんけど /usr/local を指すようにしとく
% export QTDIR=/usr/local
何かしらんけどデフォルトの g++ じゃ駄目だったので,LLVMのg++を使う*1.ついでにgccもLLVMのにしとく.
% export CC=/usr/local/bin/llvm-gcc % export CXX=/usr/local/bin/llvm-g++
ビルドスクリプトがFreeBSDをLinuxとして認識するようにしとく.build_mozc.py 編集
def IsLinux(): """Returns true if the platform is Linux.""" - return os.name == 'posix' and os.uname()[0] == 'Linux' + return os.name == 'posix' and os.uname()[0] == 'Linux' or os.name == 'posix' and os.uname()[0] == 'FreeBSD'
インクルードディレクトリなどの設定.gyp/commons.gypi編集して追記*2
'include_dirs': [ (略) + '-I/usr/local/include' ], +'ldflags': [ + '-L/usr/local/lib' +],
const charとcharでハマってるので,base/iconv.cc 編集*3
void IconvHelper(iconv_t ic, const string &input, string *output) { (略) - char *ibuf = const_cast<char *>(input.data()); + const char *ibuf = const_cast<char *>(input.data()); (略) - if (iconv(ic, reinterpret_cast<char **>(&ibuf),&ilen, &obuf, &olen) + if (iconv(ic, &ibuf, &ilen, &obuf, &olen) (略) }
PTHREAD_MUTEX_RECURSIVE_NP が使えるのはLinuxだけみたいなので,PTHREAD_MUTEX_RECURSIVEに置き換える.base/mutex.h 編集
#ifdef OS_LINUX - #define PTHREAD_MUTEX_RECURSIVE_VALUE PTHREAD_MUTEX_RECURSIVE_NP + #define PTHREAD_MUTEX_RECURSIVE_VALUE PTHREAD_MUTEX_RECURSIVE #endif
で,Compilationの手順を追っていくと,以下のエラーで落ちる.
Running: gmake -j4 BUILDTYPE=Release build_tools out/Release/.deps/out/Release/obj.target/gen_suggestion_filter_main/prediction/gen_suggestion_filter_main.o.d:9: *** タ ーゲットパターンが `%' を含んでいません. 中止. Traceback (most recent call last): File "build_mozc.py", line 586, in <module> main() File "build_mozc.py", line 576, in main BuildToolsMain(original_directory_name) File "build_mozc.py", line 541, in BuildToolsMain BuildMain(original_directory_name) File "build_mozc.py", line 520, in BuildMain BuildOnLinux(options, targets) File "build_mozc.py", line 393, in BuildOnLinux target_names) File "build_mozc.py", line 312, in RunOrDie '=========='])) __main__.RunOrDieError: ========== ERROR: gmake -j4 BUILDTYPE=Release build_tools ==========
見たところ自動生成されたMakefile (正確にはインクルードされる依存関係記述)が壊れているらしい.どのタイミングで誰が生成してるのか全く不明なので,ここで挫折.個別対処しようにも,どう直せば良いのかよく分からない上,同様に壊れてるファイルが大量に存在するし.ということで続きはまた来週 *4.