事の発端は,FreeBSD の ports からインストールしたアプリケーションソフトである「qt5-gui」をアップデートしようとしたことにある。 いつものように ports ツリーのアップデートを行い,アップデートすべきアプリケーションをアップデートしようとすると,この「qt5-gui」もアップデートの対象となっていた。
この「qt5-gui」は,Qtというクロスプラットフォームの GUI ツールキットらしい。GUI なので FreeBSD や Linux など異なるプラットフォームでの graphical user interface 用のいろいろな便利なアプリケーションみたい。読み方は「キュート」らしい。 「qt5」はバージョン5かな? そのコアとなるルーチンが「qt5-gui」らしい。
今回はその「qt5-gui」をアップデートしようとすると,以下のようなエラーが発生してアップデートできなかった。
..... /usr/include/dev/evdev/input.h:232:8: note: previous definition is here struct ff_rumble_effect { ^ In file included from evdevtouch/qevdevtouchhandler.cpp:62: In file included from /usr/local/include/mtdev.h:36: /usr/local/include/linux/input.h:444:8: error: redefinition of 'ff_effect' struct ff_effect { ^ /usr/include/dev/evdev/input.h:253:8: note: previous definition is here struct ff_effect { ^ 13 errors generated. *** [.obj/qevdevtouchhandler.o] Error code 1 .....なんかディレクトリの指定が違うぞ,みたいにも見えるがいまいち何を言いたいのかがわからなかった。 このエラーは何度アップデート作業をしても起こるし,1週間ほど待って ports ツリーをアップデートしても改善されなかった。 portmaster 以外に,make install としてインストールしなおしてもうまくいかなかった。
そこで,ネットで調べると以下のような英文のサイトを見つけた。
FreeBSD Bugzilla – Bug 240964 x11-toolkits/qt5-gui: 5.13.0 fails to build
そこには以下のような解決策が書かれていた。
It builds if I remove in src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp: 52 #ifdef Q_OS_FREEBSD 53 #includeどうやら,qevdevtouchhandler.cppというファイルの 52行目から56行目を消せ,ということみたいだった。 じゃあ qevdevtouchhandler.cpp を探せばいいのだが,それがどこにあるかがちょっとわかりにくかった。 当初「src/」とあるので「/usr/src/」などを見たが「qevdevtouchhandler.cpp」のようなファイルはなかった。 そもそも「platformsupport/」なるディレクトリがなかった。54 #else 55 #include 56 #endif 57
しばし途方に暮れたが,なにかのタイミングで以下の場所にあるのがわかった。
まず「/usr/ports/x11-toolkits/qt5-gui/」のディレクトリに行き,「# make install」としてインストール作業を行う。 その途中でエラーが起こって止まるが,その状態にしておく。それにより,作業用に作られた「/usr/ports/x11-toolkits/qt5-gui/work/」というディレクトリが残された状態になる。
そこで,その中の「qtbase-everywhere-src-5.13.0/src/platformsupport/input/evdevtouch/」の中に「qevdevtouchhandler.cpp」が存在する。 フルパスで書くと以下のようになる…,長い…。
/usr/ports/x11-toolkits/qt5-gui/work/qtbase-everywhere-src-5.13.0/src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp
その「qevdevtouchhandler.cpp」の中の下記の行を消してから,インストール(あるいはアップデート)を行うとうまくいった。
L.52 #ifdef Q_OS_FREEBSD L.53 #includeL.54 #else L.55 #include L.56 #endif
早く根本的に直してくれないかなぁ…。そうしないとアップデートの度に「qevdevtouchhandler.cpp」を書き換えないといけない…。
0 件のコメント:
コメントを投稿