#!/usr/bin/env python3
#
# 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/main/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, '..', '..', 'buildtools', 'windows-x64', 'clang')
)


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',
      '2022': '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'))):
    # Depot tools .zip layout:
    # \- DIA SDK
    # \- Windows Kits
    #   \- 10
    #     \- ... # Location of `DEPOT_TOOLS_WIN_TOOLCHAIN`
    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())
