78 lines
2.5 KiB
Python
78 lines
2.5 KiB
Python
#!/usr/bin/python
|
|
# Copyright 2014 Google Inc. All rights reserved.
|
|
#
|
|
# 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.
|
|
|
|
"""Simple script that locates the newest MSBuild in one of several locations.
|
|
|
|
This script will find the highest version number of MSBuild and run it,
|
|
passing its arguments through to MSBuild.
|
|
"""
|
|
|
|
import glob
|
|
import os
|
|
import re
|
|
import string
|
|
import subprocess
|
|
import sys
|
|
|
|
SYSTEMROOT = os.getenv("SYSTEMROOT", "c:\\windows")
|
|
PROGRAM_FILES = os.getenv("ProgramFiles", "c:\\Program Files")
|
|
PROGRAM_FILES_X86 = os.getenv("ProgramFiles(x86)", "c:\\Program Files (x86)")
|
|
|
|
SEARCH_FOLDERS = [ PROGRAM_FILES + "\\MSBuild\\*\\Bin\\MSBuild.exe",
|
|
PROGRAM_FILES_X86 + "\\MSBuild\\*\\Bin\\MSBuild.exe",
|
|
SYSTEMROOT + "\\Microsoft.NET\Framework\\*\\MSBuild.exe" ]
|
|
|
|
def compare_version(a, b):
|
|
"""Compare two version number strings of the form W.X.Y.Z.
|
|
|
|
The numbers are compared most-significant to least-significant.
|
|
For example, 12.345.67.89 > 2.987.88.99.
|
|
|
|
Args:
|
|
a: First version number string to compare
|
|
b: Second version number string to compare
|
|
|
|
Returns:
|
|
0 if the numbers are identical, a positive number if 'a' is larger, and
|
|
a negative number if 'b' is larger.
|
|
"""
|
|
aa = string.split(a, ".")
|
|
bb = string.split(b, ".")
|
|
for i in range(0, 4):
|
|
if aa[i] != bb[i]:
|
|
return cmp(int(aa[i]), int(bb[i]))
|
|
return 0
|
|
|
|
def main():
|
|
msbuilds = []
|
|
|
|
for folder in SEARCH_FOLDERS:
|
|
for file in glob.glob(folder):
|
|
p = subprocess.Popen([file, "/version"], stdout=subprocess.PIPE)
|
|
out, err = p.communicate()
|
|
match = re.search("^[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+$", out, re.M)
|
|
if match:
|
|
msbuilds.append({ 'ver':match.group(), 'exe':file })
|
|
msbuilds.sort(lambda x, y: compare_version(x['ver'], y['ver']), reverse=True)
|
|
if len(msbuilds) == 0:
|
|
print "Unable to find MSBuild.\n"
|
|
return -1;
|
|
cmd = [msbuilds[0]['exe']]
|
|
cmd.extend(sys.argv[1:])
|
|
return subprocess.call(cmd)
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(main())
|