にゃははー

はへらー

bjam AdC jp 2011 23日目

はー

Boost.Build PythonPortとは

ラスト二回はPythonPortについてにします。と言っても使ったこと無いのでドキュメント見ながら書いてます。
Boost.Build PythonPortに関するドキュメントはこちら

※注 Boost.Build PythonPortは現状でexperimental扱いです。www.boost.orgではアンドキュメント扱いなので場合によっては正しくビルドされないかも知れません。

とりあえずこのPythonPortとはなんぞやということから。本家ではBoost.Build(bjam)には以下問題があると言っています。

  • どマイナーすぎてだれも使ってないし開発者がいないのはやばい
  • bjamいみわからん
  • 標準ライブラリないし使えない
  • データ構造が文字列のリストしか無くて使えないし遅い

肯定しかできないのが素晴らしいですね。
ということで、メジャーだしBoost.PythonあるしPython使おうということになったのです。

現状ですべて実装されているようです。また、1:1で対応がとれているらしいので使ってみるといいかも知れないです。
と書かれてますが一部エラーになったりしました...

Boost.Build PythonPortのビルド

実はtools/build/v2/bootstrap.shを実行するだけではPythonPortは有効になりません。
1.48.0現在は以下のようにする必要があります。

cd $BOOST_ROOT/tools/build/v2
./bootstrap.sh
cd engine
./build.sh --with-python=/usr
TOOLSET=`./build.sh --guess-toolset`
ARCH=`./bootstrap/jam0 -d0 -f build.jam --toolset=$TOOLSET --toolset-root= --show-locate-target`
cp -f engine/$ARCH/b2 engine/$ARCH/bjam ..
cd ..
sudo ./b2 install --prefix=$PREFIX
sudo cp -f *.py *.pyc $PREFIX/share/boost_build/

bootstrap.shに特設渡すことができないので面倒です。Windows環境では--with-pythonPythonがインストールされてるパスを渡した上で、Boost.Buildがインストールされたディレクトリにも必要なファイルをコピーする必要があります。

Boost.Build PythonPortでビルドする

以上のことをしてPythonPortが有効なbjamを用意したらあとは手元のプロジェクトをビルドするだけです。
いつもの通りbjamを起動するだけではPythonPortは使用されません。bjamに--pythonを渡します。

tools/build/v2/example/helloをPythonPortでビルドしてみると以下のようになります。

$ bjam --python
Boost.Build V2 Python port (experimental)
...found 10 targets...
...updating 4 targets...
common.MkDir1-quick-fix-for-unix ./bin/gcc-4.6.3
common.MkDir1-quick-fix-for-unix ./bin/gcc-4.6.3/debug
gcc.compile.c++ ./bin/gcc-4.6.3/debug/hello.o
gcc.link ./bin/gcc-4.6.3/debug/hello
...updated 4 targets...

ちなみにJamでビルドするとこんな感じ。微妙に違います。

$ bjam
...found 9 targets...
...updating 5 targets...
common.mkdir bin
common.mkdir bin/gcc-4.6.3
common.mkdir bin/gcc-4.6.3/debug
gcc.compile.c++ bin/gcc-4.6.3/debug/hello.o
gcc.link bin/gcc-4.6.3/debug/hello
...updated 5 targets...

つまり

次回はPythonで書きましょう。