forked from KhronosGroup/Vulkan-LoaderAndValidationLayers
-
Notifications
You must be signed in to change notification settings - Fork 0
/
determine_vs_version.py
executable file
·115 lines (97 loc) · 3.71 KB
/
determine_vs_version.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#!/usr/bin/env python3
#
# Copyright (c) 2016 The Khronos Group Inc.
# Copyright (c) 2016 Valve Corporation
# Copyright (c) 2016 LunarG, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Author: Mark Young <[email protected]>
import sys
import os
# Following function code snippet was found on StackOverflow (with a change to lower
# camel-case on the variable names):
# http://stackoverflow.com/questions/377017/test-if-executable-exists-in-python
def find_executable(program):
def is_exe(fPath):
return os.path.isfile(fPath) and os.access(fPath, os.X_OK)
fPath, fName = os.path.split(program)
if fPath:
if is_exe(program):
return program
else:
for path in os.environ["PATH"].split(os.pathsep):
path = path.strip('"')
exe_file = os.path.join(path, program)
if is_exe(exe_file):
return exe_file
return None
def determine_year(version):
if version == 8:
return 2005
elif version == 9:
return 2008
elif version == 10:
return 2010
elif version == 11:
return 2012
elif version == 12:
return 2013
elif version == 14:
return 2015
else:
return 0000
# Determine if msbuild is in the path, then call it to determine the version and parse
# it into a format we can use, which is "<version_num> <version_year>".
if __name__ == '__main__':
exeName = 'msbuild.exe'
versionCall = exeName + ' /ver'
# Determine if the executable exists in the path, this is critical.
#
foundExeName = find_executable(exeName)
# If not found, return an invalid number but in the appropriate format so it will
# fail if the program above tries to use it.
if foundExeName == None:
print('00 0000')
print('Executable ' + exeName + ' not found in PATH!')
else:
sysCallOut = os.popen(versionCall).read()
version = None
# Split around any spaces first
spaceList = sysCallOut.split(' ')
for spaceString in spaceList:
# If we've already found it, bail.
if version != None:
break
# Now split around line feeds
lineList = spaceString.split('\n')
for curLine in lineList:
# If we've already found it, bail.
if version != None:
break
# We only want to continue if there's a period in the list
if '.' not in curLine:
continue
# Get the first element and determine if it is a number, if so, we've
# got our number.
splitAroundPeriod = curLine.split('.')
if splitAroundPeriod[0].isdigit():
version = int (splitAroundPeriod[0])
break
# Failsafe to return a number in the proper format, but one that will fail.
if version == None:
version = 00
# Determine the year associated with that version
year = determine_year(version)
# Output the string we need for Cmake to properly build for this version
print(str(version) + ' ' + str(year))