| // Copyright 2014 The Bazel Authors. All rights reserved. | 
 | // | 
 | // Licensed under the Apache License, Version 2.0 (the "License"); | 
 | // you may not use this file except in compliance with the License. | 
 | // You may obtain a copy of the License at | 
 | // | 
 | //    http://www.apache.org/licenses/LICENSE-2.0 | 
 | // | 
 | // Unless required by applicable law or agreed to in writing, software | 
 | // distributed under the License is distributed on an "AS IS" BASIS, | 
 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
 | // See the License for the specific language governing permissions and | 
 | // limitations under the License. | 
 | // | 
 | // This file contains the protocol buffer representation of a build | 
 | // file or 'blaze query --output=proto' call. | 
 |  | 
 | syntax = "proto2"; | 
 |  | 
 | package blaze_query; | 
 |  | 
 | // option cc_api_version = 2; | 
 | // option java_api_version = 1; | 
 |  | 
 | option java_package = "com.google.devtools.build.lib.query2.proto.proto2api"; | 
 |  | 
 | message License { | 
 |   repeated string license_type = 1; | 
 |   repeated string exception = 2; | 
 | } | 
 |  | 
 | message StringDictEntry { | 
 |   required string key = 1; | 
 |   required string value = 2; | 
 | } | 
 |  | 
 | message LabelDictUnaryEntry { | 
 |   required string key = 1; | 
 |   required string value = 2; | 
 | } | 
 |  | 
 | message LabelListDictEntry { | 
 |   required string key = 1; | 
 |   repeated string value = 2; | 
 | } | 
 |  | 
 | message LabelKeyedStringDictEntry { | 
 |   required string key = 1; | 
 |   required string value = 2; | 
 | } | 
 |  | 
 | message StringListDictEntry { | 
 |   required string key = 1; | 
 |   repeated string value = 2; | 
 | } | 
 |  | 
 | // Represents an entry attribute of a Fileset rule in a build file. | 
 | message FilesetEntry { | 
 |   // Indicates what to do when a source file is actually a symlink. | 
 |   enum SymlinkBehavior { | 
 |     COPY = 1; | 
 |     DEREFERENCE = 2; | 
 |   } | 
 |  | 
 |   // The label pointing to the source target where files are copied from. | 
 |   required string source = 1; | 
 |  | 
 |   // The relative path within the fileset rule where files will be mapped. | 
 |   required string destination_directory = 2; | 
 |  | 
 |   // Whether the files= attribute was specified. This is necessary because | 
 |   // no files= attribute and files=[] mean different things. | 
 |   optional bool files_present = 7; | 
 |  | 
 |   // A list of file labels to include from the source directory. | 
 |   repeated string file = 3; | 
 |  | 
 |   // If this is a fileset entry representing files within the rule | 
 |   // package, this lists relative paths to files that should be excluded from | 
 |   // the set.  This cannot contain values if 'file' also has values. | 
 |   repeated string exclude = 4; | 
 |  | 
 |   // This field is optional because there will be some time when the new | 
 |   // PB is used by tools depending on blaze query, but the new blaze version | 
 |   // is not yet released. | 
 |   // TODO(bazel-team): Make this field required once a version of Blaze is | 
 |   // released that outputs this field. | 
 |   optional SymlinkBehavior symlink_behavior = 5 [ default=COPY ]; | 
 |  | 
 |   // The prefix to strip from the path of the files in this FilesetEntry. Note | 
 |   // that no value and the empty string as the value mean different things here. | 
 |   optional string strip_prefix = 6; | 
 | } | 
 |  | 
 | // A rule attribute. Each attribute must have a type and one of the various | 
 | // value fields populated - for the most part. | 
 | // | 
 | // Attributes of BOOLEAN and TRISTATE type may set all of the int, bool, and | 
 | // string values for backwards compatibility with clients that expect them to | 
 | // be set. | 
 | // | 
 | // Attributes of INTEGER, STRING, LABEL, LICENSE, BOOLEAN, and TRISTATE type | 
 | // may set *none* of the values. This can happen if the Attribute message is | 
 | // prepared for a client that doesn't support SELECTOR_LIST, but the rule has | 
 | // a selector list value for the attribute. (Selector lists for attributes of | 
 | // other types--the collection types--are handled differently when prepared | 
 | // for such a client. The possible collection values are gathered together | 
 | // and flattened.) | 
 | // | 
 | // By checking the type, the appropriate value can be extracted - see the | 
 | // comments on each type for the associated value.  The order of lists comes | 
 | // from the blaze parsing. If an attribute is of a list type, the associated | 
 | // list should never be empty. | 
 | message Attribute { | 
 |   // Indicates the type of attribute. | 
 |   enum Discriminator { | 
 |     INTEGER = 1;             // int_value | 
 |     STRING = 2;              // string_value | 
 |     LABEL = 3;               // string_value | 
 |     OUTPUT = 4;              // string_value | 
 |     STRING_LIST = 5;         // string_list_value | 
 |     LABEL_LIST = 6;          // string_list_value | 
 |     OUTPUT_LIST = 7;         // string_list_value | 
 |     DISTRIBUTION_SET = 8;    // string_list_value - order is unimportant | 
 |     LICENSE = 9;             // license | 
 |     STRING_DICT = 10;        // string_dict_value | 
 |     FILESET_ENTRY_LIST = 11; // fileset_list_value | 
 |     LABEL_LIST_DICT = 12;    // label_list_dict_value | 
 |     STRING_LIST_DICT = 13;   // string_list_dict_value | 
 |     BOOLEAN = 14;            // int, bool and string value | 
 |     TRISTATE = 15;           // tristate, int and string value | 
 |     INTEGER_LIST = 16;       // int_list_value | 
 |     UNKNOWN = 18;            // unknown type, use only for build extensions | 
 |     LABEL_DICT_UNARY = 19;   // label_dict_unary_value | 
 |     SELECTOR_LIST = 20;      // selector_list | 
 |     LABEL_KEYED_STRING_DICT = 21; // label_keyed_string_dict | 
 |  | 
 |     DEPRECATED_STRING_DICT_UNARY = 17; | 
 |  | 
 |   } | 
 |  | 
 |   // Values for the TriState field type. | 
 |   enum Tristate { | 
 |     NO = 0; | 
 |     YES = 1; | 
 |     AUTO = 2; | 
 |   } | 
 |  | 
 |   message SelectorEntry { | 
 |     // The key of the selector entry. At this time, this is the label of a | 
 |     // config_setting rule, or the pseudo-label "//conditions:default". | 
 |     optional string label = 1; | 
 |  | 
 |     // True if the entry's value is the default value for the type as a | 
 |     // result of the condition value being specified as None (ie: | 
 |     // {"//condition": None}). | 
 |     optional bool is_default_value = 16; | 
 |  | 
 |     // Exactly one of the following fields (except for glob_criteria) must be | 
 |     // populated - note that the BOOLEAN and TRISTATE caveat in Attribute's | 
 |     // comment does not apply here. The type field in the SelectorList | 
 |     // containing this entry indicates which of these fields is populated, | 
 |     // in accordance with the comments on Discriminator enum values above. | 
 |     // (To be explicit: BOOLEAN populates the boolean_value field and TRISTATE | 
 |     // populates the tristate_value field.) | 
 |     optional int32 int_value = 2; | 
 |     optional string string_value = 3; | 
 |     optional bool boolean_value = 4; | 
 |     optional Tristate tristate_value = 5; | 
 |     repeated string string_list_value = 6; | 
 |     optional License license = 7; | 
 |     repeated StringDictEntry string_dict_value = 8; | 
 |     repeated FilesetEntry fileset_list_value = 9; | 
 |     repeated LabelListDictEntry label_list_dict_value = 10; | 
 |     repeated StringListDictEntry string_list_dict_value = 11; | 
 |     repeated GlobCriteria glob_criteria = 12; | 
 |     repeated int32 int_list_value = 13; | 
 |     repeated LabelDictUnaryEntry label_dict_unary_value = 15; | 
 |     repeated LabelKeyedStringDictEntry label_keyed_string_dict_value = 17; | 
 |  | 
 |     repeated bytes DEPRECATED_string_dict_unary_value = 14; | 
 |   } | 
 |  | 
 |   message Selector { | 
 |     // The list of (label, value) pairs in the map that defines the selector. | 
 |     // At this time, this cannot be empty, i.e. a selector has at least one | 
 |     // entry. | 
 |     repeated SelectorEntry entries = 1; | 
 |  | 
 |     // Whether or not this has any default values. | 
 |     optional bool has_default_value = 2; | 
 |  | 
 |     // The error message when no condition matches. | 
 |     optional string no_match_error = 3; | 
 |   } | 
 |  | 
 |   message SelectorList { | 
 |     // The type that this selector list evaluates to, and the type that each | 
 |     // selector in the list evaluates to. At this time, this cannot be | 
 |     // SELECTOR_LIST, i.e. selector lists do not nest. | 
 |     optional Discriminator type = 1; | 
 |  | 
 |     // The list of selector elements in this selector list. At this time, this | 
 |     // cannot be empty, i.e. a selector list is never empty. | 
 |     repeated Selector elements = 2; | 
 |   } | 
 |  | 
 |   // The name of the attribute | 
 |   required string name = 1; | 
 |  | 
 |   // The location of the target in the BUILD file in a machine-parseable form. | 
 |   optional Location DEPRECATED_parseable_location = 12; | 
 |  | 
 |   // Whether the attribute was explicitly specified | 
 |   optional bool explicitly_specified = 13; | 
 |  | 
 |   // If this attribute has a string value or a string list value, then this | 
 |   // may be set to indicate that the value may be treated as a label that | 
 |   // isn't a dependency of this attribute's rule. | 
 |   optional bool nodep = 20; | 
 |  | 
 |   // The type of attribute.  This message is used for all of the different | 
 |   // attribute types so the discriminator helps for figuring out what is | 
 |   // stored in the message. | 
 |   required Discriminator type = 2; | 
 |  | 
 |   // If this attribute has an integer value this will be populated. | 
 |   // Boolean and TriState also use this field as [0,1] and [-1,0,1] | 
 |   // for [false, true] and [auto, no, yes] respectively. | 
 |   optional int32 int_value = 3; | 
 |  | 
 |   // If the attribute has a string value this will be populated.  Label and | 
 |   // path attributes use this field as the value even though the type may | 
 |   // be LABEL or something else other than STRING. | 
 |   optional string string_value = 5; | 
 |  | 
 |   // If the attribute has a boolean value this will be populated. | 
 |   optional bool boolean_value = 14; | 
 |  | 
 |   // If the attribute is a Tristate value, this will be populated. | 
 |   optional Tristate tristate_value = 15; | 
 |  | 
 |   // The value of the attribute has a list of string values (label and path | 
 |   // note from STRING applies here as well). | 
 |   repeated string string_list_value = 6; | 
 |  | 
 |   // If this is a license attribute, the license information is stored here. | 
 |   optional License license = 7; | 
 |  | 
 |   // If this is a string dict, each entry will be stored here. | 
 |   repeated StringDictEntry string_dict_value = 8; | 
 |  | 
 |   // If the attribute is part of a Fileset, the fileset entries are stored in | 
 |   // this field. | 
 |   repeated FilesetEntry fileset_list_value = 9; | 
 |  | 
 |   // If this is a label list dict, each entry will be stored here. | 
 |   repeated LabelListDictEntry label_list_dict_value = 10; | 
 |  | 
 |   // If this is a string list dict, each entry will be stored here. | 
 |   repeated StringListDictEntry string_list_dict_value = 11; | 
 |  | 
 |   // The glob criteria. This is non-empty if: | 
 |   // 1. This attribute is a list of strings or labels, and, | 
 |   // 2. It contained a glob() expression | 
 |   repeated GlobCriteria glob_criteria = 16; | 
 |  | 
 |   // The value of the attribute has a list of int32 values | 
 |   repeated int32 int_list_value = 17; | 
 |  | 
 |   // If this is a label dict unary, each entry will be stored here. | 
 |   repeated LabelDictUnaryEntry label_dict_unary_value = 19; | 
 |  | 
 |   // If this is a label-keyed string dict, each entry will be stored here. | 
 |   repeated LabelKeyedStringDictEntry label_keyed_string_dict_value = 22; | 
 |  | 
 |   // If this attribute's value is an expression containing one or more select | 
 |   // expressions, then its type is SELECTOR_LIST and a SelectorList will be | 
 |   // stored here. | 
 |   optional SelectorList selector_list = 21; | 
 |  | 
 |   repeated bytes DEPRECATED_string_dict_unary_value = 18; | 
 | } | 
 |  | 
 | // A rule from a BUILD file (e.g., cc_library, java_binary).  The rule class | 
 | // is the actual name of the rule (e.g., cc_library) and the name is the full | 
 | // label of the rule (e.g., //foo/bar:baz). | 
 | message Rule { | 
 |   // The name of the rule | 
 |   required string name = 1; | 
 |  | 
 |   // The rule class (e.g., java_library) | 
 |   required string rule_class = 2; | 
 |  | 
 |   // The BUILD file and line number of the rule. | 
 |   optional string location = 3; | 
 |  | 
 |   // All of the attributes that describe the rule. | 
 |   repeated Attribute attribute = 4; | 
 |  | 
 |   // All of the inputs to the rule.  These are predecessors in the dependency | 
 |   // graph.  A rule_input for a rule should always be described as a | 
 |   // source_file in some package (either the rule's package or some other one). | 
 |   repeated string rule_input = 5; | 
 |  | 
 |   // All of the outputs of the rule.  These are the successors in the | 
 |   // dependency graph. | 
 |   repeated string rule_output = 6; | 
 |  | 
 |   // The set of all default settings affecting this rule. The name of a default | 
 |   // setting is "<setting type>_<setting name>". There currently defined setting | 
 |   // types are: | 
 |   // | 
 |   // - 'blaze': settings implemented in Blaze itself | 
 |   repeated string default_setting = 7; | 
 |  | 
 |   // The location of the target in the BUILD file in a machine-parseable form. | 
 |   optional Location DEPRECATED_parseable_location = 8; | 
 |  | 
 |   // The rule's class's public by default value. | 
 |   optional bool public_by_default = 9; | 
 |  | 
 |   // If this rule is of a skylark-defined RuleClass. | 
 |   optional bool is_skylark = 10; | 
 |  | 
 |   // List of Skylark aspects that this rule applies. | 
 |   repeated AttributeAspect skylark_attribute_aspects = 11; | 
 |  | 
 |   // Hash encapsulating the behavior of this Skylark rule. Any change to this | 
 |   // rule's definition that could change its behavior will be reflected here. | 
 |   optional string skylark_environment_hash_code = 12; | 
 | } | 
 |  | 
 | // A pairing of attribute name and a Skylark aspect that is applied to that | 
 | // attribute. | 
 | message AttributeAspect { | 
 |   required string attribute_name = 1; | 
 |   required SkylarkAspect aspect = 2; | 
 | } | 
 |  | 
 | // Aspect defined in Skylark. | 
 | message SkylarkAspect { | 
 |   required string extension_file_label = 1; | 
 |   required string exported_name = 2; | 
 |   repeated Attribute attribute = 3; | 
 | } | 
 |  | 
 | // Summary of all transitive dependencies of 'rule,' where each dependent | 
 | // rule is included only once in the 'dependency' field.  Gives complete | 
 | // information to analyze the single build target labeled rule.name, | 
 | // including optional location of target in BUILD file. | 
 | message RuleSummary { | 
 |   required Rule rule = 1; | 
 |   repeated Rule dependency = 2; | 
 |   optional string location = 3; | 
 | } | 
 |  | 
 | // A package group. Aside from the name, it contains the list of packages | 
 | // present in the group (as specified in the BUILD file). | 
 | message PackageGroup { | 
 |   // The name of the package group | 
 |   required string name = 1; | 
 |  | 
 |   // The list of packages as specified in the BUILD file. Currently this is | 
 |   // only a list of packages, but some time in the future, there might be | 
 |   // some type of wildcard mechanism. | 
 |   repeated string contained_package = 2; | 
 |  | 
 |   // The list of sub package groups included in this one. | 
 |   repeated string included_package_group = 3; | 
 |  | 
 |   // The location of the target in the BUILD file in a machine-parseable form. | 
 |   optional Location DEPRECATED_parseable_location = 4; | 
 | } | 
 |  | 
 | // An environment group. | 
 | message EnvironmentGroup { | 
 |   // The name of the environment group. | 
 |   required string name = 1; | 
 |  | 
 |   // The environments that belong to this group (as labels). | 
 |   repeated string environment = 2; | 
 |  | 
 |   // The member environments that rules implicitly support if not otherwise | 
 |   // specified. | 
 |   repeated string default = 3; | 
 | } | 
 |  | 
 | // A file that is an input into the build system. | 
 | // Next-Id: 10 | 
 | message SourceFile { | 
 |   // The name of the source file (a label). | 
 |   required string name = 1; | 
 |  | 
 |   // The location of the source file.  This is a path with line numbers, not | 
 |   // a label in the build system. | 
 |   optional string location = 2; | 
 |  | 
 |   // The location of the corresponding label in the BUILD file in a | 
 |   // machine-parseable form. | 
 |   optional Location DEPRECATED_parseable_location = 7; | 
 |  | 
 |   // Labels of .bzl (Skylark) files that are transitively loaded in this BUILD | 
 |   // file. This is present only when the SourceFile represents a BUILD file that | 
 |   // loaded .bzl files. | 
 |   // TODO(bazel-team): Rename this field. | 
 |   repeated string subinclude = 3; | 
 |  | 
 |   // Labels of package groups that are mentioned in the visibility declaration | 
 |   // for this source file. | 
 |   repeated string package_group = 4; | 
 |  | 
 |   // Labels mentioned in the visibility declaration (including :__pkg__ and | 
 |   // //visibility: ones) | 
 |   repeated string visibility_label = 5; | 
 |  | 
 |   // The package-level features enabled for this package. Only present if the | 
 |   // SourceFile represents a BUILD file. | 
 |   repeated string feature = 6; | 
 |  | 
 |   // License attribute for the file. | 
 |   optional License license = 8; | 
 |  | 
 |   // True if the package contains an error. Only present if the SourceFile | 
 |   // represents a BUILD file. | 
 |   optional bool package_contains_errors = 9; | 
 | } | 
 |  | 
 | // A file that is the output of a build rule. | 
 | message GeneratedFile { | 
 |   // The name of the generated file (a label). | 
 |   required string name = 1; | 
 |  | 
 |   // The label of the target that generates the file. | 
 |   required string generating_rule = 2; | 
 |  | 
 |   // The path of the output file (not a label). | 
 |   optional string location = 3; | 
 | } | 
 |  | 
 | // A target from a blaze query execution.  Similar to the Attribute message, | 
 | // the Discriminator is used to determine which field contains information. | 
 | // For any given type, only one of these can be populated in a single Target. | 
 | message Target { | 
 |   enum Discriminator { | 
 |     RULE = 1; | 
 |     SOURCE_FILE = 2; | 
 |     GENERATED_FILE = 3; | 
 |     PACKAGE_GROUP = 4; | 
 |     ENVIRONMENT_GROUP = 5; | 
 |   } | 
 |  | 
 |   // The type of target contained in the message. | 
 |   required Discriminator type = 1; | 
 |  | 
 |   // If this target represents a rule, the rule is stored here. | 
 |   optional Rule rule = 2; | 
 |  | 
 |   // A file that is not generated by the build system (version controlled | 
 |   // or created by the test harness). | 
 |   optional SourceFile source_file = 3; | 
 |  | 
 |   // A generated file that is the output of a rule. | 
 |   optional GeneratedFile generated_file = 4; | 
 |  | 
 |   // A package group. | 
 |   optional PackageGroup package_group = 5; | 
 |  | 
 |   // An environment group. | 
 |   optional EnvironmentGroup environment_group = 6; | 
 | } | 
 |  | 
 | // Container for all of the blaze query results. | 
 | message QueryResult { | 
 |   // All of the targets returned by the blaze query. | 
 |   repeated Target target = 1; | 
 | } | 
 |  | 
 | //////////////////////////////////////////////////////////////////////////// | 
 | // Messages dealing with querying the BUILD language itself. For now, this is | 
 | // quite simplistic: Blaze can only tell the names of the rule classes, their | 
 | // attributes with their type. | 
 |  | 
 | // Information about allowed rule classes for a specific attribute of a rule. | 
 | message AllowedRuleClassInfo { | 
 |   enum AllowedRuleClasses { | 
 |     ANY = 1;  // Any rule is allowed to be in this attribute | 
 |     SPECIFIED = 2;  // Only the explicitly listed rules are allowed | 
 |   } | 
 |  | 
 |   required AllowedRuleClasses policy = 1; | 
 |  | 
 |   // Rule class names of rules allowed in this attribute, e.g "cc_library", | 
 |   // "py_binary". Only present if the allowed_rule_classes field is set to | 
 |   // SPECIFIED. | 
 |   repeated string allowed_rule_class = 2; | 
 | } | 
 |  | 
 | // This message represents a single attribute of a single rule. | 
 | message AttributeDefinition { | 
 |  | 
 |   // Attribute name, i.e. "name", "srcs", "deps" | 
 |   required string name = 1; | 
 |   required Attribute.Discriminator type = 2; | 
 |   required bool mandatory = 3; | 
 |  | 
 |   // Only present for attributes of type LABEL and LABEL_LIST. | 
 |   optional AllowedRuleClassInfo allowed_rule_classes = 4; | 
 |  | 
 |   optional string documentation = 5; | 
 | } | 
 |  | 
 | message RuleDefinition { | 
 |   required string name = 1; | 
 |   // Only contains documented attributes | 
 |   repeated AttributeDefinition attribute = 2; | 
 |   optional string documentation = 3; | 
 |   // Only for build extensions: label to file that defines the extension | 
 |   optional string label = 4; | 
 | } | 
 |  | 
 | message BuildLanguage { | 
 |   // Only contains documented rule definitions | 
 |   repeated RuleDefinition rule = 1; | 
 | } | 
 |  | 
 | message Location { | 
 |   optional int32 start_offset = 1; | 
 |   optional int32 start_line = 2; | 
 |   optional int32 start_column = 3; | 
 |   optional int32 end_offset = 4; | 
 |   optional int32 end_line = 5; | 
 |   optional int32 end_column = 6; | 
 | } | 
 |  | 
 | message MakeVarBinding { | 
 |   required string value = 1; | 
 |   required string platform_set_regexp = 2; | 
 | } | 
 |  | 
 | message MakeVar { | 
 |   required string name = 1; | 
 |   repeated MakeVarBinding binding = 2; | 
 | } | 
 |  | 
 | message GlobCriteria { | 
 |   // List of includes (or items if this criteria did not come from a glob) | 
 |   repeated string include = 1; | 
 |  | 
 |   // List of exclude expressions | 
 |   repeated string exclude = 2; | 
 |  | 
 |   // Whether this message came from a glob | 
 |   optional bool glob = 3; | 
 | } | 
 |  | 
 | message Event { | 
 |   enum EventKind { | 
 |     ERROR = 1; | 
 |     WARNING = 2; | 
 |     INFO = 3; | 
 |     PROGRESS = 4; | 
 |   } | 
 |  | 
 |   required EventKind kind = 1; | 
 |   optional Location DEPRECATED_location = 2; | 
 |   optional string message = 3; | 
 | } | 
 |  |