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

declare_args() {
  # Path to Visual Studio. If empty, the default is used which is to use the
  # automatic toolchain in depot_tools. If set, you must also set the
  # visual_studio_version and wdk_path.
  visual_studio_path = ""

  # Version of Visual Studio pointed to by the visual_studio_path.
  # Currently always "2015".
  visual_studio_version = ""

  # Directory of the Windows driver kit. If visual_studio_path is empty, this
  # will be auto-filled.
  wdk_path = ""

  # Full path to the Windows SDK, not including a backslash at the end.
  # This value is the default location, override if you have a different
  # installation location.
  windows_sdk_path = "C:\Program Files (x86)\Windows Kits\10"
}

if (visual_studio_path == "") {
  toolchain_data =
      exec_script("../../vs_toolchain.py", [ "get_toolchain_dir" ], "scope")
  visual_studio_path = toolchain_data.vs_path
  windows_sdk_path = toolchain_data.sdk_path
  visual_studio_version = toolchain_data.vs_version
  wdk_path = toolchain_data.wdk_dir
  visual_studio_runtime_dirs = toolchain_data.runtime_dirs
} else {
  assert(visual_studio_version != "",
         "You must set the visual_studio_version if you set the path")
  assert(wdk_path != "",
         "You must set the wdk_path if you set the visual studio path")
  visual_studio_runtime_dirs = []
}
