From 9d545a2b2871a004f0b4b7ad624aadf72a1c1c61 Mon Sep 17 00:00:00 2001 From: Mark Lobodzinski Date: Fri, 18 Nov 2016 14:12:01 -0700 Subject: scripts: Move determine_vs_version into scripts dir - Moved determine_vs_version.py into scripts dir - Updated build_windows_targets.bat - Updated update_external_sources.bat Change-Id: I951a05763a7004f2ba641dad72ae3c109ce0aa5c --- scripts/determine_vs_version.py | 115 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100755 scripts/determine_vs_version.py (limited to 'scripts') diff --git a/scripts/determine_vs_version.py b/scripts/determine_vs_version.py new file mode 100755 index 00000000..9dec7223 --- /dev/null +++ b/scripts/determine_vs_version.py @@ -0,0 +1,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 + +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 " ". +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)) -- cgit v1.2.3