# Copyright 2014 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.

import("//build/config/chrome_build.gni")

declare_args() {
  # Minimum supported version of the Mac SDK.
  mac_sdk_min = "10.6"

  # Path to a specific version of the Mac SDKJ, not including a backslash at
  # the end. If empty, the path to the lowest version greater than or equal to
  # mac_sdk_min is used.
  mac_sdk_path = ""
}

find_sdk_args = [ "--print_sdk_path" ]
if (is_chrome_branded && is_official_build) {
  find_sdk_args += [
    "--verify",
    mac_sdk_min,
    "--sdk_path=" + mac_sdk_path,
  ]
} else {
  find_sdk_args += [ mac_sdk_min ]
}

# The tool will print the SDK path on the first line, and the version on the
# second line.
find_sdk_lines =
    exec_script("//build/mac/find_sdk.py", find_sdk_args, "list lines")
mac_sdk_version = find_sdk_lines[1]
if (mac_sdk_path == "") {
  # TODO(brettw) http://crbug.com/335325  when everybody moves to XCode 5 we
  # can remove the --print_sdk_path argument to find_sdk and instead just use
  # the following two lines to get the path. Although it looks longer here, it
  # saves forking a process in find_sdk.py so will be faster.
  #mac_sdk_root = "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX"
  #mac_sdk_path = mac_sdk_root + mac_sdk_version + ".sdk"
  mac_sdk_path = find_sdk_lines[0]
}
