![]() |
C++ GUIツールキットQt 4.xを入れる |
Qt 4.xをCentOS 5に設定します。
2009年6月27日現在、Qt 4.5.2が最新リリースです。
CentOS 5で標準パッケージングされているGUIツールキットQtのバージョンは3.3.6です。また、Qt4.2.1も別途yumでインストールできますが、Qtの最新版は4.5ですので、ここはQt4.5を入れることを目標にしています。
Qtは、大半のLinuxディストリビューションに標準で含まれています。しかし、ライセンスは少々複雑です。Qtは、商用ライセンス/オープンソースライセンスのデュアル・ライセンスを採用しています。オープンソースライセンスのQtを使用する場合、GPLまたはLGPLの選択ができます(Ver.4.5より前のバージョンではGPLのみ選択可能)。GPLを選択した場合、GPLのQtを使用したアプリケーション・プログラムはGPLが適用されることになります。LGPLのQtを使用したアプリケーション・プログラムは、LGPLと互換性のあるライセンスを選択可能です。
Qt 4.5 をインストールする方法はいくつか考えられます。
RedHat Enterprise Linux 5用にQt 4.3.5のバイナリパッケージを提供しているサイトがありました。
ただし、Qt以外にもCentOS 5に含まれるパッケージとバージョン違いのためにQtが依存するパッケージをalcanceから入れることになります。
Trolltechのサイトから、オープンソース版のソースを入手し、ビルドします。
CentOSの標準パッケージ qt4-4.2.1-1から作ろうとしましたが、バージョンが違うため手間がかかります。ちょうどFedora 12(development)のパッケージに、qt-4.5.2があるので、このFedoraのソースRPMパッケージから作成することにしました。
展開すると、以下のファイルが含まれています。
work$ mkdir qt4-srpm work$ cd qt4-srpm qt4-srpm$ rpm2cpio /tmp/qt-4.5.2-2.fc12.src.rpm : qt4-srpm$ ls Trolltech.conf qt-x11-opensource-src-4.2.2-multilib-QMAKEPATH.patch assistant.desktop qt-x11-opensource-src-4.2.2-multilib-optflags.patch designer.desktop qt-x11-opensource-src-4.5.0-fix-qatomic-inline-asm.patch gstreamer-logo.svg qt-x11-opensource-src-4.5.0-gcc_hack.patch hi128-app-qt4-logo.png qt-x11-opensource-src-4.5.0-qdoc3.patch hi48-app-qt4-logo.png qt-x11-opensource-src-4.5.1-enable_ft_lcdfilter.patch linguist.desktop qt-x11-opensource-src-4.5.1-kde4_plugins.patch phonon-4.2.96-pluseaudio.patch qt-x11-opensource-src-4.5.1-mysql_config.patch qconfig-multilib.h qt-x11-opensource-src-4.5.1-phonon.patch qt-4.5-sparc64.patch qt-x11-opensource-src-4.5.2.tar.bz2 qt-all-opensource-src-4.4.0-rc1-as_IN-437440.patch qt.spec qt-copy-20080626-qt452.patch qtconfig.desktop qt-copy-patches-20090626svn.tar.bz2 qtdemo.desktop qt-copy-patches-svn_checkout.sh qt4-srpm$
展開されたファイルのうち、qt.specを、RPMビルド作業用の~/rpm/SPECSへコピーし、それ以外のファイルは~/rpm/SOURCESへコピーします。
Fedora用のソースRPMのファイルのうち、使用するものとCentOS用に修正する内容をまとめます。
Fedora12(開発中)のqt-4.5.2に含まれれるqt.specは、RHEL 5を考慮して記述されているので、修正なしでこのままビルド可能ですが、ビルド後インストールするとき、phonon pluginが依存関係解決できなかったので、以下の修正を加えました。
SPECファイルを修正するので、リリース番号を1増やし、またビルド時にコマンドラインでdistに.el5を追加します。
-Release: 2%{?dist} +Release: 3%{?dist}
KDEが鋭意開発している、サウンド共通APIがphononですが、まだ利用には敷居が高く、CentOS 5.xでは外しておきます。
-%define phonon -phonon -%define phonon_backend -phonon-backend +%define phonon -no-phonon +%define phonon_backend -no-phonon-backend
+%if "%{?phonon_backend}" == "-phonon-backend" %package -n phonon-backend-gstreamer Summary: Gstreamer phonon backend Group: Applications/Multimedia :中略 Provides: %{name}-backend-gst = %{phonon_version}-%{phonon_release} %description -n phonon-backend-gstreamer %{summary}. +%endif
phononマクロは、"-phonon"か"-no-phonon"のどちらかが値として設定されているので、%if 0%{?phonon:1}は必ず1となって条件が成立してしまう。複数個所にこの条件マクロが登場するので修正。
-%if 0%{?phonon:1} +%if "%{?phonon}" == "-phonon"
webkitマクロは、"-webkit"か"-no-webkit"のどちらかが値として設定されているので、%if 0%{?webkit:1}は必ず1となって条件が成立してしてまう。複数個所に以下のパターンで登場するので修正。
-%if 0%{?webkit:1} +%if "%{?webkit}" == "-webkit"
-%{?webkit:%{_qt4_libdir}/libQtWebKit.so.*} +%if "%{?webkit}" == "-webkit" +%{_qt4_libdir}/libQtWebKit.so.* +%endif
%changelog +* Sun Jun 28 2009 Toru Takahashi <torutk@gmail.com> - 4.5.2-3 +- fix condition macro for phonon and phonon-backend +- fix condition macro for webkit
エラー: 依存性の欠如: phonon-backend >= 4.3 は qt4-x11-4.5.2-2.i386 に必要とされています
fedora 12のパッケージにはphononがありますが、これをビルドするには、CentOSにはないパッケージやCentOSのパッケージより新しいバージョンが必要であったりと厳しい状況です。phononはあきらめてqtをビルドするのがよいようです。
rpmbuildを実行するとすぐにこのエラーが発生します。CentOS 5には、GraphicsMagickパッケージは用意されていないので、別途インストールします。CentOS 5用バイナリパッケージのページにGraphicsMagickパッケージの作成について記述しているので、そちらの手順で作成し、インストールして回避します。
Qt.4.5.0での対処と同じ。
src/3rdparty/webkit/WebCore/platform/sql/SQLiteStatement.cpp のコンパイルで関数sqlite3_column_valueが見つからずエラーが発生します。sqlite-develパッケージの提供するsqlite3.hは、CentOS 5に標準搭載されているsqlite3のバージョン3.3.6ではこの関数が公開されていないためです。2009年3月16日現在でsqlite3の最新版は3.6.11です。
回避策1) WebKitをビルドしない
せっかくの新機能なので入れたいのが人情ですが、涙を呑んで外します。
qt.specを修正します。
-%define webkit -webkit +%define webkit -no-webkit
回避策2)sqlite3のバージョンアップ
SQLiteパッケージを最新に作り直します。CentOS 5用バイナリパッケージのページにSQLite3パッケージの作成について記述しているので、そちらの手順で最新版(3.6.11)をインストールします。
rpmbuildコマンドでビルドします。
~$ cd ~/rpm/SPECS SPECS$ rpmbuild -ba --define="dist .el5" qt.spec : (数時間後) SPECS$
生成されたRPMバイナリパッケージは以下です。
SPECS$ cd ../RPMS/i386 i386$ ls qt4* qt4-4.5.2-3.el5.i386.rpm qt4-examples-4.5.2-3.el5.i386.rpm qt4-debuginfo-4.5.2-3.el5.i386.rpm qt4-mysql-4.5.2-3.el5.i386.rpm qt4-demos-4.5.2-3.el5.i386.rpm qt4-odbc-4.5.2-3.el5.i386.rpm qt4-devel-4.5.2-3.el5.i386.rpm qt4-postgresql-4.5.2-3.el5.i386.rpm qt4-doc-4.5.2-3.el5.i386.rpm qt4-x11-4.5.2-3.el5.i386.rpm i386$