xref: /aosp_15_r20/external/skia/gn/find_msvc.py (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker#!/usr/bin/env python
2*c8dee2aaSAndroid Build Coastguard Worker# Copyright 2019 Google Inc.
3*c8dee2aaSAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
4*c8dee2aaSAndroid Build Coastguard Worker# found in the LICENSE file.
5*c8dee2aaSAndroid Build Coastguard Worker
6*c8dee2aaSAndroid Build Coastguard Workerimport os
7*c8dee2aaSAndroid Build Coastguard Workerimport sys
8*c8dee2aaSAndroid Build Coastguard Workerimport subprocess
9*c8dee2aaSAndroid Build Coastguard Worker
10*c8dee2aaSAndroid Build Coastguard Worker'''
11*c8dee2aaSAndroid Build Coastguard WorkerLook for the first match in the format
12*c8dee2aaSAndroid Build Coastguard Worker    C:\\Program Files (x86)\\Microsoft Visual Studio\\${RELEASE}\\${VERSION}\\VC
13*c8dee2aaSAndroid Build Coastguard Worker'''
14*c8dee2aaSAndroid Build Coastguard Workerdef find_msvc():
15*c8dee2aaSAndroid Build Coastguard Worker  if sys.platform.startswith('win'):
16*c8dee2aaSAndroid Build Coastguard Worker    default_dir = r'C:\Program Files (x86)\Microsoft Visual Studio'
17*c8dee2aaSAndroid Build Coastguard Worker    for release in ['2019', '2017']:
18*c8dee2aaSAndroid Build Coastguard Worker      for version in ['Enterprise', 'Professional', 'Community', 'BuildTools', 'Preview']:
19*c8dee2aaSAndroid Build Coastguard Worker        path = os.path.join(default_dir, release, version, 'VC')
20*c8dee2aaSAndroid Build Coastguard Worker        if os.path.isdir(path):
21*c8dee2aaSAndroid Build Coastguard Worker          return path
22*c8dee2aaSAndroid Build Coastguard Worker
23*c8dee2aaSAndroid Build Coastguard Worker    # Fall back to vswhere.exe to determine non-standard installation paths
24*c8dee2aaSAndroid Build Coastguard Worker    # Fixed location, https://github.com/Microsoft/vswhere/wiki/Installing
25*c8dee2aaSAndroid Build Coastguard Worker    vswhere = os.path.join(os.getenv('ProgramFiles(x86)'),
26*c8dee2aaSAndroid Build Coastguard Worker              'Microsoft Visual Studio', 'Installer', 'vswhere.exe')
27*c8dee2aaSAndroid Build Coastguard Worker    command = (vswhere + ' -prerelease -legacy -products * -sort -utf8 '
28*c8dee2aaSAndroid Build Coastguard Worker              '-property installationPath')
29*c8dee2aaSAndroid Build Coastguard Worker    paths = subprocess.check_output(command).decode('utf-8').splitlines()
30*c8dee2aaSAndroid Build Coastguard Worker    if paths:
31*c8dee2aaSAndroid Build Coastguard Worker      return paths[0] + '\\VC'
32*c8dee2aaSAndroid Build Coastguard Worker
33*c8dee2aaSAndroid Build Coastguard Worker  return None
34*c8dee2aaSAndroid Build Coastguard Worker
35*c8dee2aaSAndroid Build Coastguard Workerif __name__ == '__main__':
36*c8dee2aaSAndroid Build Coastguard Worker  result = find_msvc()
37*c8dee2aaSAndroid Build Coastguard Worker  if result:
38*c8dee2aaSAndroid Build Coastguard Worker    sys.stdout.write(result + '\n')
39