続・玩式草子 ―戯れせんとや生まれけん―

第5回 Plamoメンテナのすゝめ(下)

この記事を読むのに必要な時間:およそ 7 分

前回までにPlamoBuildスクリプトの基本的な使い方を紹介しました。今回は,もう少し踏み込んだ使い方を紹介します。

設定オプションの指定

ソースコードに必要な設定を施すconfigureスクリプトは,オプション引数で動作を調整することができます。前回取りあげた--disable-static --enable-sharedなどが代表的なオプション引数です。

オプション引数には,インストール先を指定する--prefix=..や設定ファイルの置き場所を指定する--sysconfdir=..など,configureを採用しているほとんどのソフトウェアで使用可能なものと,それぞれのソフトウェアごとに用意されたものがあります。

どのようなオプション引数が使用可能かはconfigure --helpで確認できます。前回までに紹介してきたfluxboxの場合,以下のようなオプションが用意されています。

$ ./configure --help | cat -n
  ....
  76      --enable-regexp         regular expression support (default=yes)
  77      --enable-slit           include code for the Slit (default=yes)
  78      --enable-systray        include SystemTray (default=yes)
  79      --enable-toolbar        include Toolbar (default=yes)
  80      --enable-ewmh           enable support for Extended Window Manager Hints
  81                              (default=yes)
  82      --enable-debug          include verbose debugging code (default=no)
  83      --enable-test           build programs used in testing fluxbox (default=no)
  84      --enable-nls            include native language support (default=yes)
  85      --enable-timedcache     use new timed pixmap cache (default=yes)
  86      --enable-xmb            XMB (multibyte font, utf-8) support (default=yes)
  87      --disable-imlib2        disable imlib2 support
  88      --disable-xft           disable xft support
  89      --disable-freetype2     disable freetype2 support
  90      --disable-xrender       disable xrender support
  91      --disable-xpm           disable xpm support
  92      --disable-xinerama      disable xinerama support
  93      --disable-xext          disable Misc X Extension Library support
  94      --disable-xrandr        disable xrandr support
  95      --disable-fribidi       disable fribidi support
  ...

各引数はそれぞれどのような機能を追加,あるいは削除するかを指定し,引数を指定しなかった場合のデフォルト値が括弧内に記載されています。このリストを見ると,82行目の"--enable-debug"と83行めの"--enable-test"というデバッグ以外の機能は(default=yes)となっており,敢えて指定する必要はなさそうです。

一方,ライブラリ等が不足していて特定の機能を無効にしたい場合は,"--enable-xmb=no --disable-fribidi"のように指定することになります。

PlamoBuildスクリプトではconfigureに渡す引数はヘッダ部のOPT_CONFIGで設定します。上記設定の場合,前回紹介したPlamoBuild.fluxbox-1.3.7の9行目に追加することになります。

9  OPT_CONFIG="--enable-xmb=no --disable-fribidi"

この設定は,configureを起動している59行目に直接追加してもいいものの,⁠configureオプションをどう設定したか」はパッケージにとって重要な意味を持つので,PlamoBuildスクリプトを開けばすぐ目に入る,ヘッダ部分に設定するようにしています。

設定オプションの虎の巻

紹介してきたfluxbox-1.3.7のように,最近では多くのソフトウェアがあらかじめ用意されたデフォルト値で最適な設定になるよう調整されています。しかしながら,設定オプションでの機能調整が必須なソフトウェアもよくあり,どのような設定オプションを指定するかはパッケージ作成時の悩みの種です。

設定オプションに悩んだ時は,他のディストリビューションを参考にするのが便利です。手元では,主にLFS/BLFSArch Linuxのビルドスクリプトを見ています。

LFS(Linux From Scratch)/BLFS(Beyond Linux From Scratch)は本連載でも何度か紹介したことがあるように,必要最小限の機能を目指した設計になっており,彼らが選択している設定オプションはどのLinux環境でも必要になります。

一方,Arch Linuxは,シンプルながら先進的で高機能な環境を目指していて,新しく追加された機能なども積極的に採用しています。そのため両者を見比べれば,可能な設定範囲はほぼカバーでき,その中からPlamo Linuxに必要な機能を考えることができます。

取りあげてきたfluxboxの場合,BLFSでは"./configure --prefix=/usr"となっているのに対し,Arch Linuxでは"./configure --prefix=/usr --enable-imlib2 --enable-nls --enable-xft --enable-xinerama"となっていました。

Arch Linuxで指定している各オプションの意味は何だろう,とヘルプメッセージを調べたところ,先に紹介したように,それら機能はデフォルトで"yes"になっていたため,OPT_CONFIGには何も指定する必要はないだろう,と判断した次第です。

主要ディストリビューションであるRedHat/Fedora系やDebian系も重要なものの,SRPMや.deb.tar.xzといった独自のビルドシステムを構築しているこれら系統よりも,コマンドラインやシェルスクリプトをそのまま流用できるLFS/BLFSやArch Linuxの方が,Plamo Linuxからは利用しやすいです。

なお,LFS/BLFSでは,ソースコードを修正する際,パッチファイルではなくsed等のコマンドを多用しています。そのような修正をPlamoBuildスクリプトに取り込む場合,設定処理部のconfigureスクリプトを起動する前,前回紹介したPlamoBuild.fluxbox-1.3.7を例にすれば,47行目から56行目の間あたりに追加する必要があります。

configure以外への対応

make_PlamoBuild.pyはconfigure以外にもCMakePythonのsetup.pyPerlのMakefile.PLに対応しており,それぞれに応じたPlamoBuildスクリプトを作ります。といっても,違いはconfigureの代わりにcmakeやsetup.pyを実行する程度です。

たとえば,Qtを用いたターミナルソフトqterminal-0.8.0はビルドシステムにCMakeを使っており,設定にcmakeコマンドを使います。

 54      cd $B
 55      export PKG_CONFIG_PATH=/usr/${libdir}/pkgconfig:/usr/share/pkgconfig:/opt/lxqt/${libdir}/pkgconfig
 56      export LDFLAGS='-Wl,--as-needed' 
 57      cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ${OPT_CONFIG[$i]} $S
 58 

cmakeコマンドはconfigureと同じように,システムにインストールされているライブラリ等を調べてその環境に適したMakefileを作るので,以後の処理はconfigure同様,makeコマンドが担います。

Perl用のソフトウェアが採用しているMakefile.PLも,環境に応じたMakefileを作るように設計されており,ビルドやパッケージ化にはmakeコマンドを用います。

一方,Python用のソフトウェアはsetup.pyというPythonスクリプトで設定からビルド,インストールまで対応しています。以下に示すのはPythonで書かれたカードゲームPySolFC-2.2.0用のビルドスクリプトの設定からインストールするまでの処理で,52行目の設定,62行目のビルド,73行目のインストールそれぞれが"setup.py"によって実行されています。

 47      cd $B
 48      for patch in $patchfiles ; do
 49         patch -p1 < $W/$patch
 50      done
 51  
 52      python setup.py config
 53      
 ...
 58  fi
 59      
 60  if [ $opt_build -eq 1 ] ; then
 61      cd $B
 62      python setup.py build
 ...
 67  fi
 68  
 69  if [ $opt_package -eq 1 ] ; then
 70    check_root
 71    if [ -d $P ] ; then rm -rf $P ; fi ; mkdir -p $P
 72    cd $B
 73    python setup.py install --root $P
 74 

これら4種のビルドシステムはmake_PlamoBuild.pyが見分けられるので,設定オプションの調整程度の作業でパッケージ作成が可能です。また,最新版のmake_PlamoBuild.pyでは,新しくmeson/ninjaビルドシステムにも対応しました。

著者プロフィール

こじまみつひろ

Plamo Linuxとりまとめ役。もともとは人類学的にハッカー文化を研究しようとしていたものの,いつの間にかミイラ取りがミイラになってOSSの世界にどっぷりと漬かってしまいました。最近は田舎に隠棲して半農半自営な生活をしながらソフトウェアと戯れています。

URLhttp://www.linet.gr.jp/~kojima/Plamo/index.html