# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

declare_args() {
  # SDK path to use. When empty this will use the default SDK based on the
  # value of use_ios_simulator.
  ios_sdk_path = ""

  # Set to true when targeting a simulator build on iOS. False means that the
  # target is for running on the device. The default value is to use the
  # Simulator except when targeting GYP's Xcode builds (for compat with the
  # existing GYP build).
  use_ios_simulator = true

  # Version of iOS that we're targeting.
  ios_deployment_target = "6.0"

  # The iOS Code signing identity to use
  ios_code_signing_identity = ""

  # The path to the iOS device SDK.
  ios_device_sdk_path = ""

  # The path to the iOS simulator SDK.
  ios_simulator_sdk_path = ""
}

if (ios_device_sdk_path == "") {
  _ios_device_sdk_result =
      exec_script("ios_sdk.py", [ "iphoneos" ], "list lines")
  ios_device_sdk_path = _ios_device_sdk_result[0]
}

if (ios_simulator_sdk_path == "") {
  _ios_sim_sdk_result =
      exec_script("ios_sdk.py", [ "iphonesimulator" ], "list lines")
  ios_simulator_sdk_path = _ios_sim_sdk_result[0]
}

# Compute default target.
if (use_ios_simulator) {
  ios_sdk_path = ios_simulator_sdk_path
} else {
  ios_sdk_path = ios_device_sdk_path
}

if (use_ios_simulator) {
  # Always disable code signing on the simulator
  ios_code_signing_identity = ""
} else {
  # If an identity is not provided, look for one on the host
  if (ios_code_signing_identity == "") {
    _ios_identities = exec_script("find_signing_identity.py", 
                                  [], "list lines")
    ios_code_signing_identity = _ios_identities[0]
  }
}
