// 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.

package com.google.devtools.build.lib.runtime;

import com.google.devtools.common.options.Option;
import com.google.devtools.common.options.OptionsBase;

import java.util.List;

/**
 * Options that will be evaluated by the blaze client startup code only.
 *
 * The only reason we have this interface is that we'd like to print a nice
 * help page for the client startup options. These options do not affect the
 * server's behavior in any way.
 */
public class HostJvmStartupOptions extends OptionsBase {

  @Option(name = "host_jvm_args",
          defaultValue = "", // NOTE: purely decorative!  See BlazeServerStartupOptions.
          category = "host jvm startup",
          allowMultiple = true,
          valueHelp = "<jvm_arg>",
          help = "Flags to pass to the JVM executing Blaze.")
  public List<String> hostJvmArgs;

  @Option(name = "host_jvm_profile",
          defaultValue = "", // NOTE: purely decorative!  See BlazeServerStartupOptions.
          category = "host jvm startup",
          valueHelp = "<profiler_name>",
          help = "Convenience option to add some profiler/debugger-specific JVM startup flags. "
              + "Blaze has a list of known values that it maps to hard-coded JVM startup flags, "
              + "possibly searching some hardcoded paths for certain files.")
  public String hostJvmProfile;

  @Option(name = "host_jvm_debug",
          defaultValue = "null", // NOTE: purely decorative!  See BlazeServerStartupOptions.
          category = "host jvm startup",
          help = "Convenience option to add some additional JVM startup flags, which cause "
              + "the JVM to wait during startup until you connect from a JDWP-compliant debugger "
              + "(like Eclipse) to port 5005.",
          expansion = {
              "--host_jvm_args=-Xdebug",
              "--host_jvm_args=-Xrunjdwp:transport=dt_socket,server=y,address=5005",
          })
  public Void hostJvmDebug;
}
