2019年10月6日日曜日

ports からインストールした qt5-gui のアップデート時のトラブルについて

 これは 2019年9月〜10月に起こったことについて書いている(言い換えると,時間が経ったら根本的に解決してると期待している)。

 事の発端は,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 
     54 #else
     55 #include 
     56 #endif
     57
 どうやら,qevdevtouchhandler.cppというファイルの 52行目から56行目を消せ,ということみたいだった。 じゃあ qevdevtouchhandler.cpp を探せばいいのだが,それがどこにあるかがちょっとわかりにくかった。 当初「src/」とあるので「/usr/src/」などを見たが「qevdevtouchhandler.cpp」のようなファイルはなかった。 そもそも「platformsupport/」なるディレクトリがなかった。

 しばし途方に暮れたが,なにかのタイミングで以下の場所にあるのがわかった。

 まず「/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 #include 
     L.54 #else
     L.55 #include 
     L.56 #endif

 早く根本的に直してくれないかなぁ…。そうしないとアップデートの度に「qevdevtouchhandler.cpp」を書き換えないといけない…。

0 件のコメント: