2017-07-08 8 views
1

円形度の問題を避けるために2つのルールを生成するマクロがあります。私は、次のルールを生成したいyaspl_bootstrap_library(name=foo, deps=[":bar"])ような呼び出しの場合:ラベルと相対オフセットからラベルを計算する

yaspl_library(name=foo, deps=[":bar"]) yaspl_srcs(name=foo_srcs, deps=[":bar_srcs"])

したがって、私は":bar_srcs"":bar"を有効にする機能を必要としています。明らかな文字列連結はこの例では機能しますが、"//lib/foo""//lib/foo:foo_srcs"に変更する必要がある場合は失敗します。

これはマクロで起こりそうな共通のようですが、簡単に行うことはできません。

答えて

0

まず、この種の文字列操作はselect関数(https://docs.bazel.build/versions/master/be/functions.html#select)では機能しないことを指摘します。

問題がなければ、先に進むことができます。この関数は、.bzlファイルで記述することができます。このラベル操作機能が利用可能になるはずです。その間、この機能を試すことができます:

def explicit_label(label): 
    if ":" in label or "//" not in label: 
    return label 
    return label + ":" + label[label.rfind("/")+1:] 


explicit_label(dep) + "_srcs" 
関連する問題