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()するだけのプログラムです。