BBv2

続 boost-prebuiltモジュール

Fedora8をインストールして、ビルド済みBoostへ対応中です。 とりあえず以下を直しました。 NO_BOOST_STD_LIB_NAMEを定義していても無視されるバグを修正 regressionツールのビルドでビルド済みBoostに対応 以前作ったboost-prebuiltですが、Fedora8(という…

directx.jam

directxのコンフィギュレーションを専用のツールセットとしてjamファイルにまとめました。 tools/build/directx.jam 書式は、 using directx : [root] : [includes] : [libraries] : [condition] ; で、引数の意味は以下の通りです。 root DirectX SDKのイン…

framework

BBv2のdarwinツールセットで-frameworkオプションを使いたい場合、 exe hoge : hoge.cpp : <framework>/System/Library/Frameworks/AudioUnit.framework ;のようにフレームワークのディレクトリを指定するみたいです。 ベース名が-frameworkオプションに、ディレクトリ</framework>…

exec.register-exec-all

execルールをさらに改良しました。 exec.jamの差分 execルールの目的は、 ユニットテストとは関係なく単に実行したい 実行の成否に関わらず、毎回明示的に実行したい bjamで生成したDLLへのPATHを自動で設定したい なので、予め決まったラウンチャや引数で実…

execルール

引き続きJamfileの調整をしつつ、以前作りかけだったexecルールを仕上げました。 exec.jam import exec ; exe a : a.cpp ; exec a-test : a ; # a.exeを実行 exec b-test : b.cpp ; # b.exeを実行自動でexplicitターゲットになるようにしたので、そのままbja…

prebuiltの選択

HamigakiライブラリのビルドをBoostのビルド済みライブラリに対応させています。 今のところ、user-config.jamで次のように設定する感じです。 # boost-libモジュールのためにBOOST_BUILD_PATHを追加 module { BOOST_BUILD_PATH += C:/hamigaki/tools/build …

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

これまでBBv2での外部ライブラリのコンフィグレーションはBBv2のドキュメントに従い、site-config.jamで行ってきましたが、この方法だと、 user-config.jamでカスタマイズできない site-config.jamが/etcか%SystemRoot%にインストールされている場合、site-c…

複数のツールセットからICUを使う

今日も引き続きビルド環境の整備中です。 Boost.RegexにはICUを使うオプションがあるのですが、ツールセット毎に設定を行えるわけではないので困ります。 そこでこれを無理やりカスタマイズする方法を考えました。 以下はVC7.1用のビルド済みICUをC:\tools\i…

boost-prebuiltモジュール

BBv2でもBoostのビルド済みライブラリを使いたいと思って、Hamigakiライブラリのビルド処理を改良中です。 とりあえずビルド済みライブラリをひっぱてくるモジュールboost-prebuiltはできました。 boost-prebuilt.jam 使い方はこんな感じです。 import boost…

独自のテストルール

BBv2のtesting.runだとコマンドライン引数が使えるけれど出力がキャプチャされ、testing.unit-testだとキャプチャされないけど引数が使えないわけですが、引数は使いたいけれどキャプチャしなくてもいい場合用に独自のルールを作りました。 あと、何度でも実…

BBv2解析メモ その2

generator property-setとsourcesからvirtual-targetのリストを生成するrunルールを持つ 各ツールセットは独自のgeneratorを持っている virtual-target BBv2上のターゲットを表す抽象クラス(っぽいもの) bjamの実ターゲットのセットアップを行うactualizeル…

BBv2解析メモ その1

Jambase bjam実行ファイルに組み込み ARGV[0]にbjamが含まれているかBOOST_ROOTが定義(BBv1互換)されていればbjamモード、それ以外の場合はjamモード 作業ディレクトリからルートへ向かって順にboost-build.jamを検索する 見つからない場合はBBv1互換のためB…

bjamの字句解析

moduleとclassの実装はそれほど面倒でもなさそうなので、Hamigaki.Bjamを復活させてフルスペックのbjamを実装してみようかなという気になってきました。 手始めに、bjamの字句解析部分(scan.cとscan.h)を読んでいたところ、 # define SCAN_NORMAL 0 // 通常 …

class

bjam_grammarの精度を上げるにはmoduleとclassの実装が不可欠な気がしてきたので、bjamのclassについて調べてみました。

MATCH

bjam_grammarにMATCHルールを実装するのを忘れていたので追加しました。 差分 MATCHルールは拡張正規表現のマッチングを行い、マッチした場合は部分式のリストを返します。 ECHO [ MATCH (.)b(.) : abc ] ; # 「a c」を表示正規表現に括弧を含めていないと、…

bjam_target_path

property.as-path相当のパス生成アルゴリズムを実装しました。 今日の差分 property.as-pathは、グリスト化されたプロパティのリストを渡すと、 デフォルト値またはABIに関係のないプロパティを削除、featureの属性がimplicitなら非グリスト化(feature.minim…

peek/poke/constant

bjam_grammarに以下のルールを追加しました。 pathモジュール(make/glob) project-rulesモジュール(glob/path-constant/constant) modulesモジュール(poke/peek) 以下、実装していて分かったpeek/poke/constantの解説です。

ルールの呼び出し

bjamのルール呼び出しと代入を区別するのに四苦八苦しています。 ふと思いつきで、次のbjamコードを試したところ、ECHOルールの呼び出しとして解釈されました。 hoge = ECHO ; $(hoge) abc ; # 「abc」を出力次のコードも同様です。 hoge = ECHO abc ; $(hog…

glob()

インタプリタ自体の実装になかなか取り掛かる気になれず、現実逃避的にGLOBルール相当のglob()関数を作りました。 std::vector<std::string> glob( const boost::filesystem::path& work, // 作業ディレクトリ(フルパス) const std::string& dir, // 調べるディレクトリ(</std::string>…

toolsetの指定方法

Boost.Build v2でツールセットを指定する場合、「gcc-mingw-3.4.2」のような指定は駄目なようで、この場合「gcc-3.4.2/toolset-gcc:flavor=mingw」とするのが正しいようです。 以下、有効な指定方法 gcc-3.4.2/toolset-gcc:flavor=mingw gcc/toolset-gcc:fla…

sound_playerのリライト完了

サンプルsound_playerをWin32 GUI Genericsを使わずに書き直しました。 libs/audio/example/win32/sound_player/ Win32 APIを直接読んでいること以外は、元のコードとほぼ同じです。 ついでにWAVファイルにも対応しています。 Jamfile.v2はこうなっています…

library-path feature

昨日の<search>に関する問題は、BBv1同様<library-path>を使うことで解決できました。 <library-path>はマニュアルに記述がありませんが、BBv1のものと同じと考えてよさそうです。 これを使うと、昨日の例も素直に実装できます。 # site-config.jam # 前半部は略 # 汎用 alias dxsdk : : : : <include>$(DX</include></library-path></library-path></search>…

search feature

昨日の<search>が動かない問題は、<search>の使い方を間違えていただけでした。 BBv1の<library-path>に相当するものだと思って使っていたのですが、どうも<search>は<name>と一緒に使わなくてはいけないようです。 ドキュメントでも、 The name property specifies the name that should be passed to th</name></search></library-path></search></search>…

続 xinclude-scanner

id:y-hamigaki:20060706 の続きです。 XIncludeの依存関係はboostbook.jamのxinclude-scannerで行われています。 class xinclude-scanner : scanner { // 略 rule pattern ( ) { return "xi:include[ ]*href=\"([^\"]*)\"" ; } // 略 }単純なパターンマッチ…

xinclude-scanner

最近はドキュメント書きがメインなので、またBoostBookネタです。 BoostBookは<boostbook>をルートとする一つのXMLですが、通常は適当な単位でファイルを分割し、XIncludeで一つのツリーにまとめます。 BoostBookのスタイルシートを適用する際、bjamはXIncludeによるフ</boostbook>…

BBv1とBBv2

今日はドキュメント書きしかしてないので、引き続きBoostBuildネタを。 BBv1を採用していたHamigakiライブラリですが、ドキュメントにBootBookを採用するにあたり、BBv2を混在させることになりました。Boostパッケージもv1/v2混在の状態なので、まずこれが何…

BoostBook始めました

肝心の中身がまだまだですが、BoostBook形式のドキュメントをつけました。BBv2、BoostBookの情報は少ないので早めに公開してみます。BoostBookの設定に関しては、Cryoliteさんの投稿が参考になります。ここでは、BBv2に用意されている〜-config.jamをなるべ…