外部ライブラリのコンフィグ

これまでBBv2での外部ライブラリのコンフィグレーションはBBv2のドキュメントに従い、site-config.jamで行ってきましたが、この方法だと、

  • user-config.jamでカスタマイズできない
  • site-config.jamが/etcか%SystemRoot%にインストールされている場合、site-config.jamを置き換える手段がない

といった問題があります。
そこで、ライブラリ毎にその場でプロジェクトを作る方法に変更してみました。

module hoge
{
    # 多くのルールでこれが必須
    __name__ = hoge ;

    # モジュールをプロジェクトにする
    import project ;
    project.initialize $(__name__) ;
    project $(__name__) ;

    # ヘッダのみのライブラリ
    alias headers : : : : <include>C:/hoge/include ;
}

このようにuser-config.jamで定義して、使う場合は/hoge//headersをソースに追加します。
プロジェクトの初期化が面倒なので、簡易ルールを作りました。

local rule make-project ( name )
{
    modules.poke $(name) : __name__ : $(name) ;
    module $(name)
    {
        import project ;
        project.initialize $(__name__) ;
        project $(__name__) ;
    }
}

# お試し
make-project hoge ;
module hoge
{
    alias headers : : : : <include>C:/hoge/include ;
}

なお、モジュールの名前はsite-configのままでも良かったんですが、紛らわしいのでライブラリ毎にasio/directx/ogg/vorbisといった名前にしています。
そろそろBBv2版のドキュメントも書かないといけませんね。