From d08b27fa9701fecfdb69e1b0d1ac2459efc2129b Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Wed, 25 Feb 2015 16:45:20 +0100 Subject: Update from Google. -- MOE_MIGRATED_REVID=85702957 --- src/main/protobuf/build.proto | 467 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 467 insertions(+) create mode 100644 src/main/protobuf/build.proto (limited to 'src/main/protobuf/build.proto') diff --git a/src/main/protobuf/build.proto b/src/main/protobuf/build.proto new file mode 100644 index 0000000000..b5d6346276 --- /dev/null +++ b/src/main/protobuf/build.proto @@ -0,0 +1,467 @@ +// Copyright 2014 Google Inc. 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 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 StringDictUnaryEntry { + required string key = 1; + required string value = 2; +} + +message LabelListDictEntry { + required string key = 1; + repeated 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 can only have one of +// the various value fields populated. 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 and 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 + STRING_DICT_UNARY = 17; // string_dict_unary_value + UNKNOWN = 18; // unknown type, use only for build extensions + } + + // Values for the TriState field type. + enum Tristate { + NO = 0; + YES = 1; + AUTO = 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 parseable_location = 12; + + // Whether the attribute was explicitly specified + optional bool explicitly_specified = 13; + + // 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 + // 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 string dict unary, each entry will be stored here. + repeated StringDictUnaryEntry 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 "_". 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 parseable_location = 8; +} + +// 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 parseable_location = 4; +} + +// A file that is an input into the build system. +// Next-Id: 8 +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 parseable_location = 7; + + // Labels of files that are transitively subincluded in this BUILD file. This + // is present only when the SourceFile represents a BUILD file that + // subincludes other files. The subincluded file can be either a Python + // preprocessed build extension or a Skylark file. + 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; +} + +// 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 rule, input_file or output_file can be +// populated in a single Target. +message Target { + enum Discriminator { + RULE = 1; + SOURCE_FILE = 2; + GENERATED_FILE = 3; + PACKAGE_GROUP = 4; + } + + // 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; +} + +// 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 { + + // Rule name, e.g. "cc_library" + 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 location = 2; + optional string message = 3; +} + +message Package { + enum State { + PRESENT = 1; // The package is present and has changed at this CL + TOMBSTONE = 2; // The package got deleted at this CL + UNKNOWN = 3; // The database does not contain enough information to know + } + + required string name = 1; + optional string repository = 2; + optional string build_file_path = 3; + + // Default values + repeated string default_visibility_label = 1001; + optional bool default_obsolete = 1002; + optional bool default_testonly = 1003; + optional string default_deprecation = 1004; + optional string default_strict_java_deps = 1005; + repeated string default_copt = 1006; + optional string default_hdrs_check = 1007; + optional License default_license = 1008; + repeated string default_distrib = 1009; + optional bool default_visibility_set = 1010; + + // Package-level data + repeated string default_setting = 2002; + repeated string subinclude_label = 2003; + repeated MakeVar make_variable = 2004; + repeated string file_system_dep = 2005; + optional bool depends_on_external_files = 2006; + optional bool dependencies_recorded = 2007; + optional bool contains_errors = 2008; + optional bool contains_temporary_errors = 2009; + repeated string skylark_label = 2010; + + // Targets + repeated SourceFile source_file = 3001; + repeated PackageGroup package_group = 3002; + repeated Rule rule = 3003; + + // Metadata + // Reason why the package could not be serialized. + optional string failure_reason = 4001; + optional State state = 4002; + repeated Event event = 4003; +} -- cgit v1.2.3