// Copyright 2015 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.
syntax = "proto2";

package devtools.xcode;
option java_outer_classname = "PlMergeProtos";
option java_package = "com.google.devtools.build.xcode.plmerge.proto";

// Contains necessary arguments for PlMerge, which is responsible for merging
// plist files.
// Next Id: 8
message Control {
  // Paths to the plist files to merge relative to execution root.
  repeated string source_file = 1;

  // Paths to plist files to merge relative to execution root.  Unlike
  // source_file, these keys cannot be overwritten by other plists.
  // Plmerge will throw an error if any of these keys occur more than once.
  repeated string immutable_source_file = 6;

  // Path to the output file to merge relative to execution root.
  required string out_file = 2;

  // Key-value substitutions to support templating for plists.  A substitution
  // is made if the substitution key appears as a value for any key-value pair
  // in any source_file.
  // For example, a plist with the entry:
  //    <key>CFBundleExecutable</key>
  //    <string>EXECUTABLE_NAME</string>
  // could be templated by passing a variable substitution like
  //    {"EXECUTABLE_NAME", "PrenotCalculator"}
  map<string, string> variable_substitution_map = 3;

  // A reverse-DNS string identifier for this bundle associated with output
  // binary plist.  Overrides the bundle id specified in the CFBundleIdentifier
  // plist field.
  optional string primary_bundle_id = 4;

  // A fallback reverse-DNS string identifier for this bundle when bundle
  // identifier is not specified in primary_bundle_id or an associated plist
  // file.
  optional string fallback_bundle_id = 5;

  // Name of executable for the bundle this merged plist is intended for, or
  // unset if no such executable exists.  If a value for CFBundleExecutable is
  // given in a source_file or immutable_source_file, that value mut not
  // conflict with this key.
  optional string executable_name = 7;
}
