#!/usr/bin/env python
# Copyright (c) 2012 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.

"""
This script is based on chromium/chromium/master/tools/clang/scripts/update.py.

It is used on Windows platforms to copy the correct msdia*.dll to the
clang folder, as a "gclient hook".
"""

import os
import shutil
import stat
import sys


# Path constants. (All of these should be absolute paths.)
THIS_DIR = os.path.abspath(os.path.dirname(__file__))
LLVM_BUILD_DIR = os.path.abspath(os.path.join(THIS_DIR, '..', '..', 'third_party',
                                              'llvm-build', 'Release+Asserts'))


def GetDiaDll():
  """Get the location of msdia*.dll for the platform."""

  # Bump after VC updates.
  DIA_DLL = {
    '2013': 'msdia120.dll',
    '2015': 'msdia140.dll',
    '2017': 'msdia140.dll',
    '2019': 'msdia140.dll',
  }

  # Don't let vs_toolchain overwrite our environment.
  environ_bak = os.environ

  sys.path.append(os.path.join(THIS_DIR, '..', '..', 'build'))
  import vs_toolchain
  win_sdk_dir = vs_toolchain.SetEnvironmentAndGetSDKDir()
  msvs_version = vs_toolchain.GetVisualStudioVersion()

  if bool(int(os.environ.get('DEPOT_TOOLS_WIN_TOOLCHAIN', '1'))):
    dia_path = os.path.join(win_sdk_dir, '..', 'DIA SDK', 'bin', 'amd64')
  else:
    if 'GYP_MSVS_OVERRIDE_PATH' in os.environ:
      vs_path = os.environ['GYP_MSVS_OVERRIDE_PATH']
    else:
      vs_path = vs_toolchain.DetectVisualStudioPath()
    dia_path = os.path.join(vs_path, 'DIA SDK', 'bin', 'amd64')

  os.environ = environ_bak
  return os.path.join(dia_path, DIA_DLL[msvs_version])


def CopyFile(src, dst):
  """Copy a file from src to dst."""
  print("Copying %s to %s" % (str(src), str(dst)))
  shutil.copy(src, dst)


def CopyDiaDllTo(target_dir):
  # This script always wants to use the 64-bit msdia*.dll.
  dia_dll = GetDiaDll()
  CopyFile(dia_dll, target_dir)


def main():
  CopyDiaDllTo(os.path.join(LLVM_BUILD_DIR, 'bin'))
  return 0


if __name__ == '__main__':
  sys.exit(main())
