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