BUILD ファイル

問題を報告する

BUILD ファイルで利用可能なメソッド。BUILD ファイルでも使用できる追加の関数とビルドルールについては、ビルドエンサイクロペディアもご覧ください。

メンバー

依存関係

depset depset(direct=None, order="default", *, transitive=None)

depset を作成します。direct パラメータは、depset の直接要素のリストです。transitive パラメータは、その要素が、作成されたデ pset の間接要素になる依存関係のリストです。depset をリストに変換する際に要素が返される順序は、order パラメータで指定されます。詳細については、依存関係の概要をご覧ください。

依存関係にあるすべての要素(直接要素と間接要素)は、式 type(x) で取得される型と同じ型でなければなりません。

反復処理の際に重複を排除するためにハッシュベースのセットが使用されるため、depset のすべての要素をハッシュ可能にする必要があります。ただし、この不変条件は現在、すべてのコンストラクタで一貫してチェックされるわけではありません。整合性チェックを有効にするには、--compatible_always_check_depset_elements フラグを使用します。これは、今後のリリースではデフォルトの動作になります。問題 10313 をご覧ください。

また、要素は現在不変である必要がありますが、この制限は今後緩和される予定です。

作成された依存関係の順序は、transitive 依存関係の順序と互換性がある必要があります。"default" の注文は他の注文と互換性があり、他のすべての注文はそれ自体にのみ対応しています。

パラメータ

パラメータ 説明
direct sequence、または None、デフォルトは None
depset の直接要素のリスト。
order デフォルトは "default" です。
新しい依存関係の走査戦略。設定可能な値については、こちらをご覧ください。
transitive depsetシーケンス。または None。デフォルトは None
要素が depset の間接要素になる依存関係のリスト。

existing_rule

unknown existing_rule(name)

このスレッドのパッケージでインスタンス化されたルールの属性を表す不変の辞書のようなオブジェクトを返します。その名前のルール インスタンスが存在しない場合は None を返します。

ここで、不変の辞書のようなオブジェクトとは、辞書のような反復処理、len(x)name in xx[name]x.get(name)x.items()x.keys()x.values() をサポートする、高度に不変のオブジェクト x を意味します。

--noincompatible_existing_rules_immutable_view フラグが設定されている場合、代わりに同じ内容の新しい可変の dict を返します。

結果には、各属性のエントリが含まれます。ただし、非公開の属性(名前が文字で始まらない)や、表現できない以前の属性タイプがいくつか含まれます。また、辞書にはルール インスタンスの namekind のエントリが含まれます(例: 'cc_binary')。

結果の値は、属性値を次のように表します。

  • str、int、bool 型の属性はそのまま表されます。
  • ラベルは、同じパッケージ内のターゲットの場合は ':foo' という形式の文字列に変換され、別のパッケージ内のターゲットの場合は '//pkg:name' という形式の文字列に変換されます。
  • リストはタプルとして表され、辞書は新しい変更可能な辞書に変換されます。これらの要素は、同じ方法で再帰的に変換されます。
  • select 値は、上記のように変換された内容で返されます。
  • ルールのインスタンス化時に値が指定されず、デフォルト値が計算される属性は、結果から除外されます。(計算済みデフォルト値は、分析フェーズまで計算できません)。

可能であれば、この関数の使用は避けてください。これにより、BUILD ファイルが不安定になり、順序に依存することになります。また、内部形式から Starlark へのルール属性値の変換とは、微妙に異なる点にも注意してください。1 つは計算済みデフォルトに使用され、もう 1 つは ctx.attr.foo で使用されます。

パラメータ

パラメータ 説明
name required
ターゲットの名前。

existing_rules

unknown existing_rules()

このスレッドのパッケージでこれまでにインスタンス化されたルールを記述する不変の辞書のようなオブジェクトを返します。辞書のようなオブジェクトの各エントリは、ルール インスタンスの名前を existing_rule(name) によって返される結果にマッピングします。

ここで、不変の辞書のようなオブジェクトとは、辞書のような反復処理、len(x)name in xx[name]x.get(name)x.items()x.keys()x.values() をサポートする、高度に不変のオブジェクト x を意味します。

--noincompatible_existing_rules_immutable_view フラグが設定されている場合、代わりに同じ内容の新しい可変の dict を返します。

注: 可能であれば、この関数の使用は避けてください。これにより、BUILD ファイルが不安定になり、順序に依存することになります。さらに、 --noincompatible_existing_rules_immutable_view フラグが設定されていると、この関数は特にループ内で呼び出されると、非常に高コストになる可能性があります。

exports_files

None exports_files(srcs, visibility=None, licenses=None)

このパッケージに属し、他のパッケージにエクスポートされるファイルのリストを指定します。

パラメータ

パラメータ 説明
srcs 文字列シーケンス。必須
エクスポートするファイルのリスト。
visibility sequence、または None。デフォルトは None
可視性の宣言を指定できます。ファイルは、指定したターゲットに表示されます。公開設定が指定されていない場合、ファイルはすべてのパッケージに表示されます。
licenses 文字列シーケンス。または None。デフォルトは None
指定するライセンス。

glob

sequence glob(include=[], exclude=[], exclude_directories=1, allow_empty=unbound)

Glob は、現在のパッケージ内のすべてのファイルのリストのうち、次のような新しい可変の並べ替え済みリストを返します。
  • include の少なくとも 1 つのパターンと一致します。
  • exclude のどのパターンとも一致しない(デフォルト [])。
exclude_directories 引数が有効な場合(1 に設定した場合)、ディレクトリ タイプのファイルは結果から除外されます(デフォルト: 1)。

パラメータ

パラメータ 説明
include 文字列シーケンス(デフォルトは [])。
含める glob パターンのリスト。
exclude 文字列シーケンス。デフォルトは []
除外する glob パターンのリスト。
exclude_directories デフォルトは 1 です。
ディレクトリを除外するかどうかのフラグ。
allow_empty デフォルトは unbound です。
glob パターンが何も一致しないことを許可するかどうか。「allow_empty」が False の場合、個々の include パターンが一致し、最終結果が空でない必要があります(「exclude」パターンの一致が除外された後)。

module_name

string module_name()

このパッケージが存在するリポジトリに関連付けられている Bazel モジュールの名前。このパッケージが MODULE.bazel ではなく WORKSPACE で定義されたリポジトリにある場合は空です。モジュール拡張機能によって生成されたリポジトリの場合、これは拡張機能をホストするモジュールの名前です。これは、module_ctx.modulesmodule.name フィールドと同じです。 None を返す場合があります。

module_version

string module_version()

このパッケージが存在するリポジトリに関連付けられている Bazel モジュールのバージョン。このパッケージが MODULE.bazel ではなく WORKSPACE で定義されたリポジトリにある場合は空です。モジュール拡張機能によって生成されたリポジトリの場合、これは拡張機能をホストするモジュールのバージョンです。これは、module_ctx.modulesmodule.version フィールドと同じです。 None を返す場合があります。

package_group

None package_group(name, packages=[], includes=[])

この関数は一連のパッケージを定義し、グループにラベルを割り当てます。ラベルは visibility 属性で参照できます。

パラメータ

パラメータ 説明
name 必須
このルールの一意の名前。
packages stringシーケンス。デフォルトは []
このグループ内のパッケージの完全な列挙。
includes 文字列シーケンス。デフォルトは []
これに含まれる他のパッケージ グループ。

package_name

string package_name()

評価対象のパッケージの名前(リポジトリ名なし)。たとえば、BUILD ファイル some/package/BUILD では、値は some/package になります。BUILD ファイルが .bzl ファイルで定義された関数を呼び出す場合、package_name() は呼び出し元の BUILD ファイル パッケージと一致します。

package_relative_label

Label package_relative_label(input)

現在初期化中のパッケージ(つまり、現在のマクロが実行されている BUILD ファイル)のコンテキストで、入力文字列を Label オブジェクトに変換します。入力がすでに Label の場合は、変更されずに返されます。

この関数は、BUILD ファイルと、そのファイルによって直接的または間接的に呼び出されるマクロを評価するときにのみ呼び出すことができます。ルール実装関数などで呼び出すことはできません。

この関数の結果は、BUILD ファイルで宣言されたターゲットのラベル値属性に指定された文字列を渡すことで生成される Label 値と同じになります。

使用上の注意: この関数と Label() の違いは、Label()BUILD ファイルのパッケージではなく、呼び出し元の .bzl ファイルのパッケージのコンテキストを使用する点です。コンパイラなど、マクロにハードコードされた固定ターゲットを参照する必要がある場合は、Label() を使用します。BUILD ファイルで指定されたラベル文字列を Label オブジェクトに正規化する必要がある場合は、package_relative_label() を使用します。(BUILD ファイルまたは呼び出し側の .bzl ファイル以外のパッケージのコンテキストで文字列を Label に変換することはできません。そのため、外部マクロからは常にラベル文字列ではなく、内部マクロにラベル オブジェクトを渡す必要があります。)

パラメータ

パラメータ 説明
input 文字列、またはラベル(必須)
入力ラベル文字列またはラベル オブジェクト。ラベル オブジェクトが渡された場合は、そのまま返されます。

repo_name

string repo_name()

現在評価されているパッケージを含むリポジトリの正規名。先頭にアットマークは付けません。

repository_name

string repository_name()

試験運用版。この API は試験運用版であり、いつでも変更される可能性があります。これに頼らないでください。試験運用版で有効にするには、--+incompatible_enable_deprecated_label_apis
非推奨を設定します。代わりに repo_name を使用することをおすすめします。先頭に偽のアットマークは含まれませんが、それ以外の場合は同じように動作します。

現在評価されているパッケージを含むリポジトリの正規名。先頭に 1 つのアットマーク(@)を付けます。たとえば、WORKSPACE スタンザ local_repository(name='local', path=...) によって存在するように呼び出されるパッケージでは、@local に設定されます。メイン リポジトリのパッケージでは、@ に設定されます。

select

unknown select(x, no_match_error='')

select() は、ルール属性を構成可能にするヘルパー関数です。詳細については、ビルドの百科事典をご覧ください。

パラメータ

パラメータ 説明
x required
構成条件を値にマッピングする辞書。各キーは、config_setting または constraint_value インスタンスを識別するラベルまたはラベル文字列です。文字列の代わりにラベルを使用するタイミングについては、マクロに関するドキュメントをご覧ください。
no_match_error デフォルトは '' です。
条件の一致がない場合に報告するカスタムエラー(省略可)。

サブパッケージ

sequence subpackages(include, exclude=[], allow_empty=False)

ファイル システム ディレクトリの深さに関係なく、現在のパッケージのすべての直接サブパッケージの新しい変更可能なリストを返します。返されるリストは並べ替えられ、現在のパッケージを基準とするサブパッケージの名前を含みます。この関数を直接呼び出すよりも、bazel_skylib.subpackages モジュールのメソッドを使用することをおすすめします。

パラメータ

パラメータ 説明
include 文字列シーケンス(必須)
サブパッケージ スキャンに含める glob パターンのリスト。
exclude 文字列シーケンス(デフォルトは [])。
サブパッケージ スキャンから除外する glob パターンのリスト。
allow_empty デフォルトは False です。
呼び出しが空のリストを返したときに失敗するかどうか。デフォルトでは、空のリストは、subpackages() の呼び出しが不要な BUILD ファイルの潜在的なエラーを示します。true に設定すると、この関数が成功します。