#!/usr/bin/env python # Copyright (c) 2012 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import shutil import sys import os def patch_msbuild(): """VS2010 MSBuild has a ULDI bug that we patch here. See http://goo.gl/Pn8tj. """ source_path = os.path.join(os.environ['ProgramFiles(x86)'], "MSBuild", "Microsoft.Cpp", "v4.0", "Microsoft.CppBuild.targets") backup_path = source_path + ".backup" if not os.path.exists(backup_path): try: print "Backing up %s..." % source_path shutil.copyfile(source_path, backup_path) except IOError: print "Could not back up %s to %s. Run as Administrator?" % ( source_path, backup_path) return 1 source = open(source_path).read() base = ('''<Target Name="GetResolvedLinkObjs" Returns="@(ObjFullPath)" ''' '''DependsOnTargets="$(CommonBuildOnlyTargets);ComputeCLOutputs;''' '''ResolvedLinkObjs"''') find = base + '>' replace = base + ''' Condition="'$(ConfigurationType)'=='StaticLibrary'">''' result = source.replace(find, replace) if result != source: open(source_path, "w").write(result) print "Patched %s." % source_path return 0 def main(): return patch_msbuild() if __name__ == "__main__": sys.exit(main())