おがさわらなるひこのオープンソースとかプログラミングとか印刷技術とか

おがさわらなるひこ @naru0ga が技術系で興味を持ったりなんだりしたことをたまーに書くブログです。最近はてなダイアリー放置しすぎて記事書くたびにはてな記法忘れるのではてなブログに移行しました。

クリエイティブ・コモンズ・ライセンス
特に断りがない場合は、本ブログの筆者によるコンテンツは クリエイティブ・コモンズ 表示 - 継承 4.0 国際 ライセンスの下に提供されています。

続・Common Printing Dialog をビルドしてみた。

d:id:naruoga:20081122:1227319637 の続きというかなんというか。


このブログエントリを元にちょっとまとめていたら、ビルドに必要なパッケージとか再調査することになったので、せっかくだからブログにも残しておこうと。

道具立て

  • Ubuntu 9.04 (Jaunty Jackalope)
  • aptitute (パッケージ名の断片と解説からパッケージ名を知る)
  • apt-file (パッケージに入っているファイル名からパッケージ名を知る)

aptitude はデフォルトで入ってるけど、apt-file は入ってないので入れときましょう。
http://packages.ubuntu.com/ でも調べられるけど、ソースコンパイルするぐらいのひとなら入れといて損はないでしょう。

$ sudo aptitude install apt-file
...
$ sudo apt-file update

bzr のインストールとレポジトリの追加

これは前回のエントリと一緒。

$ sudo aptitude install bzr
...
$ bzr branch http://bzr.openprinting.org/misc/common-printing-dialog

これでカレントディレクトリに common-printing-dialog というフォルダができてファイルがごそっと降ってくる。

まずは KDE 版のインストール

結論から言ってしまえば、Ubuntu 9.04 のクリーンな環境下で、common-printing-dialog 以下で次のように行えばコンパイルが成功します (たぶん……ちょっと弱気)。

$ sudo aptitude install cmake g++ kdelibs-bin kdelibs5-dev libpoppler-qt4-dev
$ rm -rf build
$ mkdir build
$ cd build
$ cmake -DCMAKE_INSTALL_PREFIX=/usr/bin/kde4 ..
$ make

順を追って説明しましょう。
参考 URL を参照して、

$ rm -rf build
$ mkdir build
$ cd build
$ cmake -DCMAKE_INSTALL_PREFIX=/usr/bin/kde4 ..

とやると*1、いきなり

プログラム 'cmake' はまだインストールされていません。  次のように入力することでインストールできます:
sudo apt-get install cmake
bash: cmake: command not found

と出てきてずっこけます。入ってないのか、cmake。
ということで aptitude で入れまして、再度 cmake すると、

$ cmake -DCMAKE_INSTALL_PREFIX=/usr/lib/kde4 ..
-- The C compiler identification is GNU
-- The CXX compiler identification is unknown
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
CMake Error: your CXX compiler: "CMAKE_CXX_COMPILER-NOTFOUND" was not found.   Please set CMAKE_CXX_COMPILER to a valid compiler path or name.---(1)
CMake Error: your CXX compiler: "CMAKE_CXX_COMPILER-NOTFOUND" was not found.   Please set CMAKE_CXX_COMPILER to a valid compiler path or name.
CMake Error at /usr/share/cmake-2.6/Modules/FindKDE4.cmake:44 (MESSAGE):
  ERROR: Could not find KDE4 kde4-config---(2)
Call Stack (most recent call first):
  kde4-dialog/CMakeLists.txt:4 (find_package)


-- Configuring incomplete, errors occurred!

この手の作業に手慣れた人はもうお分かりでしょうが、(1) の "Please set CMAKE_CXX_COMPILER ..." というエラーは c++コンパイラがないということなので g++ を入れればおっけーです。
(2) は KDE4 がないといってるんですが、具体的には kde4-config が見つからないと。これは apt-file で探せば kdelibs-bin というパッケージに入っていることがわかる。これら二つを入れまして、再度 cmake しますと、

CMake Error at /usr/share/cmake-2.6/Modules/FindKDE4.cmake:84 (MESSAGE):
  ERROR: cmake/modules/FindKDE4Internal.cmake not found in
  /home/naruhiko/.kde/share/apps;/usr/share/kde4/apps

FindKDE4Internal.cmake が見つからない、というのでこれも apt-file で探せば kdelibs5-dev パッケージが必要なことがわかります。これを入れると,

$ sudo aptitude install kdelibs5-dev
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
拡張状態情報を読み込んでいます       
パッケージの状態を初期化しています... 完了
以下の新規パッケージがインストールされます:
  automoc{a} comerr-dev{a} hspell{a} kdelibs5-dev libacl1-dev{a} 
  libasound2-dev{a} libattr1-dev{a} libaudio-dev{a} libavahi-common-dev{a} 
  libbz2-dev{a} libcups2-dev{a} libdbus-1-dev{a} libenchant-dev{a} 
  libexpat1-dev{a} libfontconfig1-dev{a} libfreetype6-dev{a} 
  libgcrypt11-dev{a} libgif-dev{a} libgl1-mesa-dev{a} libglib2.0-dev{a} 
  libglu1-mesa-dev{a} libglu1-xorg-dev{a} libgnutls-dev{a} 
  libgpg-error-dev{a} libice-dev{a} libilmbase-dev{a} libjasper-dev{a} 
  libjpeg62-dev{a} libkadm55{a} libkeyutils-dev{a} libkrb5-dev{a} 
  liblcms1-dev{a} libmng-dev{a} libopenexr-dev{a} libpcre3-dev{a} 
  libpcrecpp0{a} libphonon-dev{a} libplasma-dev{a} libplasma3{a} 
  libpng12-dev{a} libpq-dev{a} libpthread-stubs0{a} 
  libpthread-stubs0-dev{a} libqt4-assistant{a} libqt4-dev{a} libqt4-help{a} 
  libqt4-opengl{a} libqt4-opengl-dev{a} libqt4-scripttools{a} 
  libqt4-test{a} libqt4-webkit{a} libqt4-xmlpatterns{a} libsm-dev{a} 
  libsoprano-dev{a} libsqlite0-dev{a} libssl-dev{a} 
  libstreamanalyzer-dev{a} libstreams-dev{a} libtasn1-3-dev{a} 
  libtiff4-dev{a} libtiffxx0c2{a} libx11-dev{a} libxau-dev{a} 
  libxcb1-dev{a} libxcursor-dev{a} libxdmcp-dev{a} libxext-dev{a} 
  libxfixes-dev{a} libxft-dev{a} libxi-dev{a} libxinerama-dev{a} 
  libxml2-dev{a} libxmu-dev{a} libxmu-headers{a} libxrandr-dev{a} 
  libxrender-dev{a} libxslt1-dev{a} libxt-dev{a} libxtst-dev{a} 
  mesa-common-dev{a} phonon{a} phonon-backend-gstreamer{a} pkg-kde-tools{a} 
  qt4-qmake{a} x11proto-core-dev{a} x11proto-fixes-dev{a} 
  x11proto-input-dev{a} x11proto-kb-dev{a} x11proto-randr-dev{a} 
  x11proto-record-dev{a} x11proto-render-dev{a} x11proto-xext-dev{a} 
  x11proto-xinerama-dev{a} xlibmesa-gl-dev{a} xtrans-dev{a} zlib1g-dev{a} 
0 個のパッケージを更新、 96 個を新たにインストール、 0 個を削除予定、0 個が更新されていない。
アーカイブ 27.0MB 中 8146kB を取得する必要があります。 展開後に 125MB のディスク領域が新たに消費されます。
先に進みますか? [Y/n/?] 

のように、依存パッケージがどっちゃり入るのでまとめて入れてしまってください。
最後の cmake では今度は libpoppler-qt4-dev がないと怒られるので入れれば、cmake も make も (たくさんのメッセージとともに) 通ります。これで、build/kde4-dialog ディレクトリ以下に kde4-cpd および view-dialog という二つの実行ファイルができているはずです。

GTK+ 版のインストール

これは前回の報告 d:id:naruoga:20081122:1227319637 とあまり変わらないのですが、参考文献のとおり、

$ cd common-printing-dialog
$ cd gtk-dialog
$ make

とすると、まずは、

$ make
Generating manager-glue.h from org.openprinting.printdialog.manager.xml
/bin/sh: dbus-binding-tool: not found

と出力されます。apt-file で dbus-binding-tool を探してみると libdbug-glib-1-dev が必要とのことなので入れて再度 make するとエラーがわらわら出てきます。

$ make
Checking for "gtk+-2.0 poppler-glib cairo dbus-glib-1"
Package gtk+-2.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `gtk+-2.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'gtk+-2.0' found
Package poppler-glib was not found in the pkg-config search path.
Perhaps you should add the directory containing `poppler-glib.pc'
to the PKG_CONFIG_PATH environment variable
No package 'poppler-glib' found
Package cairo was not found in the pkg-config search path.
Perhaps you should add the directory containing `cairo.pc'
to the PKG_CONFIG_PATH environment variable
No package 'cairo' found

Debian のパッケージングルールに詳しい人はもう調べなくても何が必要かわかるでしょうから入れてしまいましょう。

$ sudo aptitude install libgtk2.0-dev libpoppler-glib-dev libcairo-dev
...

すると "libcairo-dev は仮想パッケージだから libcairo2-dev を入れるよ" などと出てくるが気にしないで OK。
しかしなぜかコンパイルに失敗する。原因は未だ究明できていないが、make 中に自動生成したファイルがパッケージ不足で不完全に生成されるとかそのような理由かと思います。
make clean ; make するとちゃんと実行ファイルが作成されます。

これも前回の繰り返しになりますが、printdialog.c に PDF ファイルを直読みしているところがあるのでこれを適当な PDF ファイルに (フルパスで) 置き換えます。

static void setup_preview_widget(GtkDrawingArea *previewwidget)
{
    GError *error = NULL;
    PopplerDocument *doc;

    doc = poppler_document_new_from_file("file:///home/lars/Documents/doc/DSC_Spec.pdf",  /* ←ここを書き換える */
                                         NULL,
                                         &error);
...

これで make すると cpd-glib という実行ファイルができてます。めでたしめでたし。


ではこいつらを実行するとどうなるか? はまたの機会に。

*1:あーそうそう、この cmake の CMAKE_INSTALL_PREFIX ってオプションは上記参考 URL に「Ubuntu Hardy 以上は入れてね」って書いてあるんですけど、たぶん KDE3/4 が混在できる環境で KDE4 の環境を /usr/bin/kde4 に置くディストリは全部同じでしょう。