2012年8月1日水曜日

MacPortsのqt4-macをMountain Lionでコンパイルする

山獅子について、Xcode 4.4にバージョンが上がったこともあり、いろいろと不安はあったが、特にこれといって大きな問題はなかった。

しかし、Qtについてはこれまで避けてきたのであまり困っていなかったのだが、フリーのノンリニアビデオ編集ソフトウェアKdenliveを入れるにあたってqt4-macを入れる必要が生じ、格闘することとなった。

まず、最新版のQt libraries 4.8.2が山獅子に対応していない。単純なところでは、OSのバージョンチェックに引っかかるのであれもこれもコンパイルが通らない。

これは、src/corelib/global/qglobal.hに書かれているバージョンチェックをごまかしてやればよい。とりあえず、まっさらなところで手を入れたいので、先に

  $ port patch qt4-mac

で、ソースの展開とパッチ当てまでやっておく。

そのあと編集するわけだが、具体的には、以下のようにMAC_OS_X_VERSION_10_7の定義をしているところに続いて10_8を作ってやる。

#  if !defined(MAC_OS_X_VERSION_10_8)
#       define MAC_OS_X_VERSION_10_8 MAC_OS_X_VERSION_10_7 + 1
#  endif
#  if (MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_8)
最後の行は、もとは10_7だったのを8に変えた。

これでcorelibのコンパイルは進むのだが、途中でファイルシステムがらみのところでdeprecateの警告が出る。おそらく、SandBox対応あたりではないかと思うが、とりあえず無視しておく。

しかし、最後にライブラリをリンクするところで未定義シンボルのエラーが出る。これは、Bug Trac Ticket 35313にあるように、いったんport configure qt4-macでMakefileまで作ってから、このMakefileのLIBSの末尾に「-framework Foundation」を追記してやればよい。

あと、WebKitの山獅子版が出ているらしいので、同じTicketのリンクにあるように、src/3rdparty/webkit/source/WebKit/qt/QtWebKit.proを置き換えるのと、山獅子用のWebKitライブラリを、同じディレクトリにダウンロードして入れてやる。

これで、コンパイルは通るようだ。

しかし巨大なフレームワークだなぁ。長大なコンパイル時間がかかる。

あとひとつ気になるのだが、いつのまにやらOpenVGが紛れ込んでいて(/opt/local/include/VG)、でもqt4-macのconfigure時にコンパイルができずに、「OpenVGを使わないQt4」ができたようだ。OpenVGのサポートはX11R7.5からということなのだが、XQuartzに入っているわけでもなく、よくわからない。