bjam_win その8 clean
今日はバグ修正とパーサーの改良が主です。
バグ修正の差分
clean対応の差分
- 「a"b"c」のようなリテラルに対応
- 「〜-fail」のパースがおかしかったのを修正
- 「bpl-test」に対応
- ターゲットのCleanに対応
BoostのJamfile.v2をいろいろ試して、新たに見つかったダメパターンは、
[ run libs/function/test/function_test.cpp : : : : lib_function_test ]
のようにテストのターゲット名を指定している場合です。
5番目のフィールドがターゲット名で、省略時は最初のフィールドのベース名が使用されます。
後ろのフィールドは省略可能なので、最初のフィールドを覚えておいて、5番目が見つかったかどうかで追加するターゲット名を変更する必要があります。
Boost.Spiritだと、クロージャやεパーサを使うのかな。
あと、MinGWでコンパイルしたbjam_winが動かない謎現象が発生していたのですが、gdbで追ってみると、なぜかWinMain()の代わりにbzip2のテストプログラムmk251.cのmain()が呼ばれていました。
原因はBoost.IostreamsのJamfile.v2がバグっていて、ライブラリにmk251.cが追加されているせいでした。
リンカがWinMain()より先にmain()を見つけてリンクしてしまったようです。
"-mwindows"オプション以外でも、Boost.Testのようなmain()を含むライブラリと競合する可能性もあるので、MLに報告しときました。
ちなみに、このmk251.cは251を48500000回putchar()するだけのプログラムです。