Use vswhere to detect Visual Studio 2017.

This commit is contained in:
gibbed 2017-04-19 21:31:30 -05:00
parent 1a3c4187d8
commit d2c84e37ee
1 changed files with 14 additions and 5 deletions

View File

@ -48,8 +48,9 @@ def main():
# Grab Visual Studio version and execute shell to set up environment. # Grab Visual Studio version and execute shell to set up environment.
if sys.platform == 'win32': if sys.platform == 'win32':
vs_version = import_vs_environment() vs_version = import_vs_environment()
if vs_version != 2015: if vs_version == 0:
print('ERROR: Visual Studio 2015 not found!') print('ERROR: Visual Studio not found!')
print('Visual Studio 2015 is the recommended version.')
print('Ensure you have the VS140COMNTOOLS environment variable!') print('Ensure you have the VS140COMNTOOLS environment variable!')
sys.exit(1) sys.exit(1)
return return
@ -98,15 +99,23 @@ def import_vs_environment():
A version such as 2015 or None if no VS is found. A version such as 2015 or None if no VS is found.
""" """
version = 0 version = 0
candidate_path = subprocess.check_output('third_party/vswhere/vswhere.exe -version "[15,)" -latest -format value -property installationPath', shell=False);
candidate_path = candidate_path.strip()
tools_path = '' tools_path = ''
if 'VS140COMNTOOLS' in os.environ: if candidate_path:
tools_path = os.path.join(candidate_path, 'vc\\auxiliary\\build\\vcvarsall.bat')
if os.path.isfile(tools_path) and os.access(tools_path, os.X_OK):
version = 2017
if version == 0 and 'VS140COMNTOOLS' in os.environ:
version = 2015 version = 2015
tools_path = os.environ['VS140COMNTOOLS'] tools_path = os.environ['VS140COMNTOOLS']
tools_path = os.path.join(tools_path, '..\\..\\vc\\vcvarsall.bat')
if version == 0: if version == 0:
return None return None
tools_path = os.path.join(tools_path, '..\\..\\vc\\vcvarsall.bat')
args = [tools_path, '&&', 'set'] args = [tools_path, 'x64', '&&', 'set']
popen = subprocess.Popen( popen = subprocess.Popen(
args, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) args, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
variables, _ = popen.communicate() variables, _ = popen.communicate()