Qt 5 のビルドが通らなかった
日本語環境の Linux 上で、3月の中旬ごろから Qt 5 の stable/dev ブランチのビルドが通らなくなっていました。
エラーが発生する場所は(おそらく最初に moc が走るところと思われる) qtbase/src/corelib/ で、以下のようなメッセージがでます。
/home/tasuku/org/qt-project/qt-5.1-alpha/build2/qtbase/bin/moc -DQT_NO_XKBCOMMON -DQT_NO_USING_NAMESPACE -DQT_BUILD_CORE_LIB -DQT_BUILDING_QT -DQT_NO_CAST_TO_ASCII -DQT_ASCII_CAST_WARNINGS -DQT_MOC_COMPAT -DQT_USE_QSTRINGBUILDER -DQT_DEPRECATED_WARNINGS -DQT_DISABLE_DEPRECATED_BEFORE=0x050000 -DELF_INTERPRETER=\"/lib64/ld-linux-x86-64.so.2\" -DQT_USE_ICU -DPCRE_HAVE_CONFIG_H -DQT_CORE_LIB -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -I/home/tasuku/org/qt-project/qt-5.1-alpha/qt-everywhere-opensource-src-5.1.0-alpha/qtbase/mkspecs/linux-g++-64 -I/home/tasuku/org/qt-project/qt-5.1-alpha/qt-everywhere-opensource-src-5.1.0-alpha/qtbase/src/corelib -I../../include -I../../include/QtCore -I../../include/QtCore/5.1.0 -I../../include/QtCore/5.1.0/QtCore -Iglobal -I/home/tasuku/org/qt-project/qt-5.1-alpha/qt-everywhere-opensource-src-5.1.0-alpha/qtbase/src/3rdparty/pcre -I/home/tasuku/org/qt-project/qt-5.1-alpha/qt-everywhere-opensource-src-5.1.0-alpha/qtbase/src/3rdparty/harfbuzz/src -I/home/tasuku/org/qt-project/qt-5.1-alpha/qt-everywhere-opensource-src-5.1.0-alpha/qtbase/src/3rdparty/md5 -I/home/tasuku/org/qt-project/qt-5.1-alpha/qt-everywhere-opensource-src-5.1.0-alpha/qtbase/src/3rdparty/md4 -I/home/tasuku/org/qt-project/qt-5.1-alpha/qt-everywhere-opensource-src-5.1.0-alpha/qtbase/src/3rdparty/sha3 -I.moc/debug-shared -I. -I/usr/include -I/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.3/include -I/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.3/include-fixed -I/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.3/include/g++-v4 -I/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.3/include/g++-v4/backward -I/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.3/include/g++-v4/x86_64-pc-linux-gnu -I/usr/local/include -IIBRARY_PATH=/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.3/:/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.3/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.3/../../../../x86_64-pc-linux-gnu/lib/:/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.3/../../../:/lib/:/usr/lib/ -IOLLECT_GCC_OPTIONS='-m64' '-pipe' '-E' '-v' '-shared-libgcc' '-mtune=generic' '-march=x86-64' -IOMPILER_PATH=/usr/libexec/gcc/x86_64-pc-linux-gnu/4.6.3/:/usr/libexec/gcc/x86_64-pc-linux-gnu/4.6.3/:/usr/libexec/gcc/x86_64-pc-linux-gnu/:/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.3/:/usr/lib/gcc/x86_64-pc-linux-gnu/:/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.3/../../../../x86_64-pc-linux-gnu/bin/ -I索リストの終わりです。 /home/tasuku/org/qt-project/qt-5.1-alpha/qt-everywhere-opensource-src-5.1.0-alpha/qtbase/src/corelib/animation/qabstractanimation.h -o .moc/debug-shared/moc_qabstractanimation.cpp Qt Meta Object Compiler version 67 (Qt 5.1.0) make[3]: *** [.moc/debug-shared/moc_qabstractanimation.cpp] エラー 1 make[3]: ディレクトリ `/home/tasuku/org/qt-project/qt-5.1-alpha/build2/qtbase/src/corelib' から出ます make[2]: *** [sub-corelib-make_first] エラー 2 make[2]: ディレクトリ `/home/tasuku/org/qt-project/qt-5.1-alpha/build2/qtbase/src' から出ます make[1]: *** [sub-src-make_first] エラー 2 make[1]: ディレクトリ `/home/tasuku/org/qt-project/qt-5.1-alpha/build2/qtbase' から出ます make: *** [module-qtbase-make_first] エラー 2
根本的な原因は make configure set up QMAKE_DEFAULT_{INC,LIB}DIRS で行われた INCLUDE パスの捜索の自動化 が、英語環境以外を想定していないということです。ここで取得された誤ったパスが、append $$QMAKE_DEFAULT_INCDIRS to moc invocations の変更で moc の引数に渡されるようになったため、上記のようなエラーが発生するようになりました。
この問題は既にリポジトリ上では Ensure GCC prints its messages in English when we parse them というコミットで修正されていますが、Qt 5.0.2 や Qt 5.1.0 alpha1 でにはこの変更は含まれていないため、ソースからビルドする際にこのようなエラーが発生する場合は このパッチ を当てる必要があります。