Home | History | Annotate | Download | only in win
      1 #!/usr/bin/env python
      2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
      3 # Use of this source code is governed by a BSD-style license that can be
      4 # found in the LICENSE file.
      5 
      6 import shutil
      7 import sys
      8 import os
      9 
     10 def patch_msbuild():
     11   """VS2010 MSBuild has a ULDI bug that we patch here. See http://goo.gl/Pn8tj.
     12   """
     13   source_path = os.path.join(os.environ['ProgramFiles(x86)'],
     14                              "MSBuild",
     15                              "Microsoft.Cpp",
     16                              "v4.0",
     17                              "Microsoft.CppBuild.targets")
     18   backup_path = source_path + ".backup"
     19   if not os.path.exists(backup_path):
     20     try:
     21       print "Backing up %s..." % source_path
     22       shutil.copyfile(source_path, backup_path)
     23     except IOError:
     24       print "Could not back up %s to %s. Run as Administrator?" % (
     25           source_path, backup_path)
     26       return 1
     27 
     28   source = open(source_path).read()
     29   base = ('''<Target Name="GetResolvedLinkObjs" Returns="@(ObjFullPath)" '''
     30           '''DependsOnTargets="$(CommonBuildOnlyTargets);ComputeCLOutputs;'''
     31           '''ResolvedLinkObjs"''')
     32   find = base + '>'
     33   replace = base + ''' Condition="'$(ConfigurationType)'=='StaticLibrary'">'''
     34   result = source.replace(find, replace)
     35 
     36   if result != source:
     37     open(source_path, "w").write(result)
     38     print "Patched %s." % source_path
     39   return 0
     40 
     41 
     42 def main():
     43   return patch_msbuild()
     44 
     45 
     46 if __name__ == "__main__":
     47   sys.exit(main())
     48