PerlQt移植ヒストリ(第1回)

先日、古いCOMPAQのノートPCにインストールしたVine Linux 4.2にQt3環境をインストールし、PerlQt 3.009-b2をビルドして使って見た。
Qt Designerとpuicのコンビがたまらなく良い。

puicはさて置き、Zaurus SL-C3000で動くPerlQtが欲しい。
探しても無いようなので、Zaurus用Perl 5.6.1を公開されている塚本さんもご要望のPerlQtをZaurusに移植して見ようと思う。

SL-C3000Qtopia 1.5.4がQtのどのバージョンに相当するのかは不明であるが、年代とPerlQtソース一式の大きさの違いを考えるとQt3では無いと考えられる。
そこで、CPANから入手できるPerlQt 2.105を使用することにした。
READMEを見ると、Qt 2.0.2とQt 1.44に対応しているらしいが、やはりQtopia 1.5.4はどちらに相当するのかは不明である。
そのため、取り敢えず1.4用でコンパイルして見た。
ちなみに、ビルド環境はdev_img-1.3-2である。
また、Makefile.PLで設定したオプションは以下の通りである。

%Args = (
    CC => "gcc",
    CCFLAGS => "-pipe -fno-exceptions -fno-rtti -fsigned-char -Wall -W -x c++",
    DEFINE => "-DQT_QWS_EBX -DQT_QWS_CUSTOM -DQWS -DQT_NO_DRAGANDDROP " .
            "-DQT_NO_PROPERTIES",
    INC => "-I$ENV{QTDIR}/include -I$ENV{QTDIR}/include/qt -I/usr/local/include",
    LIBS => "-L$ENV{QTDIR}/lib -lqte -lqpe",
    OPTIMIZE => "-O2"
);


"perl Makefile.PL" → makeを実行したところ、クラスに定義されている列挙子がクラス名修飾なしで使用されていることや、クラス関数の引き数の型が合わないことが理由のエラーが多量に発生した。
暫くの間はソースを修正してコンパイルを通したが、どのソースも同じパターンのエラーが発生するため、Makefile.PLで "$MAKE = 'Qt-2.0'" を指定して2.0用を試して見ることにした。

その結果、ドラッグ&ドロップ関連の関数が未定義であることが理由のエラーが発生した。
QT_NO_DRAGANDDROPをオプションで設定したのだから当然である。
これにより、ドラッグ&ドロップ関連のコードをマクロで無効にしたところ、以下のオプションが示す未搭載の機能に関するソースと、Qtの定数をPerlに定義するpig_Qt.c以外のソースはコンパイルを通すことができた。
次に、マクロによって未搭載の機能をさらに無効にしてコンパイルを通すことによって、PerlQtのビルドが完了した。

$Args{DEFINE} .= "-DQT_NO_STYLE_MOTIF -DQT_NO_STYLE_PLATINUM -DQT_NO_PRINTER " .
        "-DQT_NO_SEMIMODAL -DQT_NO_SIZEGRIP -DQT_NO_SPLITTER -DQT_NO_WIZARD";


ここまで辿り着くのに、実際には2週間分の通勤時間と休日の数時間を費やした。