真 もわ爛漫

しゃーら、しゃーらしゃーら

xpdf を apt-get source から make して使ってみる

debianを何年か使ってるくせにaptの扱いもまともに知らんとは……(ーー;

ということでやってみる。

まずapt-get source xpdfする。すると4つくらいファイルが出来る。現状(2006/12/16)では以下の通り。

  • xpdf-3.01
  • xpdf_3.01-9.diff.gz
  • xpdf_3.01-9.dsc
  • xpdf_3.01.orig.tar.gz

debパッケージをつくってインストールしたい場合はこちら→http://d.hatena.ne.jp/mowamowa/20061215#1166173451

今回はdebianのxpdfをそのままコンパイルしたいものとする

xpdfはオリジナルのバージョンだと./configureでfreetype2のチェックに失敗し、makeでは謎のエラーを吐く。freetype2の方はヘッダファイルの位置を指定すれば良いのだが、makeの方は対処が難しい。

g++ -g -O2 -DHAVE_CONFIG_H -I.. -I./../goo -I./../fofi -I.  -I/usr/include/freetype2/ -c 
SplashFTFont.cc
SplashFTFont.cc:17:10: error: #include expects "FILENAME" or 
SplashFTFont.cc: In constructor 'SplashFTFont::SplashFTFont(SplashFTFontFile*, SplashCoord*)'

"17行目"は FT_INTERNAL_OBJECTS_H という文字列をincludeしている文で、これがマクロとして定義されていないためにエラーが吐かれる。このマクロはFT_New_Sizeを得るために必要なヘッダファイルのファイル名を示すものらしいのだが、freetype2側でこのマクロを定義している様子はない。おっかしーなー。

……freetype2のことなんかどうでも良いんだった :-)

当然debiandebianの環境下においてxpdfをコンパイル出来るようにしなくてはならないので、上の事態に対処するためのパッチを既に用意している。apt-get sourceして得たデータの中にもそのパッチは入っていて、具体的には apt-source で取ってきたディレクトリ(今回はxpdf-3.01/)の debian/patches/ 下にある。

デフォルトではdebianパッチは適用されていない。つまりオリジナルのソースのまま。debian流儀のソースに変えるには、debian/rulesを使ってパッチを明示的に適用する必要がある。

今回の場合は xpdf-3.01/debian/rules patchすれば良い。xpdf-3.01/ にcdしないとうまくいかない。

>~/xpdf-test/xpdf-3.01% debian/rules patch
dpatch apply-all
applying patch 01_manpage to ./ ... ok.
applying patch 02_permissions to ./ ... ok.
applying patch 03_freetype-build to ./ ... ok.
applying patch 04_freetype-glyph to ./ ... ok.
applying patch 05_freetype-2.2 to ./ ... ok.
applying patch 05_gmem to ./ ... ok.
applying patch 06_splashpath to ./ ... ok.
applying patch 07_decrypt to ./ ... ok.
applying patch 08_core_action to ./ ... ok.
applying patch 20_resize to ./ ... ok.
applying patch 23_security3 to ./ ... ok.
applying patch 30_3.01pl2 to ./ ... ok.
applying patch 31_fullscreen to ./ ... ok.
applying patch 32_vscroll to ./ ... ok.
applying patch 40_lesstif_copy to ./ ... ok.
applying patch 41_lesstif_cpp to ./ ... ok.
applying patch 99_autoconf to ./ ...smr.m4:42: warning: underquoted definition of smr_SWITCH
  run info '(automake)Extending aclocal'
  or see http://sources.redhat.com/automake/automake.html#Extending-aclocal
smr.m4:94: warning: underquoted definition of smr_ARG_WITHLIB
smr.m4:147: warning: underquoted definition of smr_ARG_WITHINCLUDES
smr.m4:207: warning: underquoted definition of smr_CHECK_LIB
 ok.
#dpatch call-all -a=pkg-info >patch-stamp
touch patch-stamp

ちなみにunpatchも出来る :-)

これで上記の2つの問題(freetype2のヘッダファイル、コンパイル出来ない)が改善される。後は./configure → makeをすればOK。

……なのだが、当然debianのパッケージ管理ソフトが手で「めーく(っ´▽`)つつ」してるわけもない。実は debian/rules にはコンパイルまで全部やってくれるコードも入っている。気づいた。俺。偉い。

debian/rules build と打てば、パッチ当て、./configure、コンパイルを通しでやってくれる。

つまり、apt-get sourceしてdebian/rules bulidすれば良い。コンパイルに必要なパッケージが足りないのならapt-get build-depで引っ張ってくればOK。

だったら最初にそう書けって。