var_expand_grammar その3

今日は残りの変数展開修飾子を実装しました。
差分

  • :D (親ディレクトリの選択)
  • :D=path (親ディレクトリの置換)
  • :B (ベースファイル名の選択)
  • :B=base (ベースファイル名の置換)
  • :S (拡張子の選択)
  • :S=suf (拡張子の置換)
  • :M (アーカイブメンバの選択)
  • :M=mem (アーカイブメンバの置換)
  • :R=root (フルパスでない場合にrootを前につける)
  • :E=val (変数が空ならvalで置換)
  • :J=joinval (joinvalで区切った文字列に置換)
  • :T (「/」を「\」に置換)


アーカイブメンバ」というのがbjamでどういうときに使われるのか知らないのですが、bjamの想定する文字列の形式は、

<grist>path/base.suf(mem)

というもので、この「(mem)」の部分に当たります。


そのほか、

d = $(d:R=$(path)) ;

http://boost.cvs.sourceforge.net/boost/boost/tools/build/v2/build/virtual-target.jam?revision=1.123&view=markup

のように、変数展開修飾子のパラメータにも変数が使えることに気が付いたので対応しました。
差分


ついでに、面白い例をもう一つ。

$(:E=python:R=$(bin-path))

http://boost.cvs.sourceforge.net/boost/boost/tools/build/v2/tools/python.jam?revision=1.51&view=markup

最初の変数の名前がなくて(値は常に空)、「:E」で「python」という文字列に置換しています。
わざわざ変数に代入しなくても、変数展開修飾子の恩恵を受けられるというわけです。