にゃははー

はへらー

tools/boostbook/setup_boostbook.(sh|py)が加えるuser-config.jamへの変更

$HOMEにuser-config.jamを置いている場合、user-config.jamが変更されるため単なるビルドでもエラーになってしまう場合があります。

もちろんuser-config.jamを$HOMEに置いたりbjam Advent Calendar jp 2011を読むぐらいの皆さんですからこんな事書かなくてもいいかとも思いましたが、C++を初めて触ったのに変な人達の圧力からBoostをインストールさせられた方々はbjamをよく知らないと思うので一応書いておきます。

BoostBookをセットアップすると$HOME/user-config.jamに以下のものが追記されます。

using boostbook
  : /home/flast/projects/boost/tools/boostbook/docbook-xsl-1.75.2
  : /home/flast/projects/boost/tools/boostbook/docbook-dtd-4.2
  ;
using xsltproc : /usr/bin/xsltproc ;
using doxygen : /usr/bin/doxygen ;
using fop : /home/flast/projects/boost/tools/boostbook/fop-0.94/fop : : /usr/bin/java ;

/home/flast/projects/boost の部分は$BOOST_ROOTなりに読み替えてください。

これが追記された状態でBoostのビルドやドキュメントのビルドを行なっても何も問題は起きませんが、Boost以外のところでbjamを実行すると以下のようなエラーが発生します。

error: at /home/flast/user-config.jam:62
error: error: BoostBook: could not find boostbook XSL stylesheets.

このような問題に直面したらみなさんなら迷わず/usr/local/share/boost-build/tools/boostbook.jamを見に行きますよね
そうすると大体理由はわかります。toolsetについてはbjam AdCで解説してるので、rule initが3引数をとることに気づけたらこの問題は解決します。

rule init ( docbook-xsl-dir ? : docbook-dtd-dir ? : boostbook-dir ? )

追記された$HOME/user-config.jamでは最後のboostbook-dirが指定されていません。$BOOST_ROOTでbjamを走らせる場合は$BOOST_ROOT以下からboostbookを探し出すので問題ないですが、それ以外の場合だとboostbookのディレクトリを探し出すことができないのでエラーになります。

ということで$HOME/user-config.jamのusing boostbookの箇所を

using boostbook
  : /home/flast/projects/boost/tools/boostbook/docbook-xsl-1.75.2
  : /home/flast/projects/boost/tools/boostbook/docbook-dtd-4.2
  : /home/flast/projects/boost/tools/boostbook
  ;

のようにすれば解決します。

ちなみにtools/boostbook.jamをしっかり読んだ人はboostbookが/usr以下などにインストールされていれば問題ないことに気づくでしょう。boostbookをインストールすれば$HOME/user-config.jamは変更しないでもいいはずです。
が、私はboostbookのインストール方法がわからないので$HOME/user-config.jamを変更しました。

bjam AdCのおかげでbjam読めるようになってちょっとした問題もすぐ解決できますね!やった!