Chromium Code Reviews| Index: visual_studio/NativeClientVSAddIn/InstallerResources/create_ppapi_platform.py |
| diff --git a/visual_studio/NativeClientVSAddIn/InstallerResources/create_ppapi_platform.py b/visual_studio/NativeClientVSAddIn/InstallerResources/create_ppapi_platform.py |
| index 252ae5a5ec559e251e7837013b91f217d65f8bef..085ed4bde0d1b81d6946694349d632e56cff4b83 100644 |
| --- a/visual_studio/NativeClientVSAddIn/InstallerResources/create_ppapi_platform.py |
| +++ b/visual_studio/NativeClientVSAddIn/InstallerResources/create_ppapi_platform.py |
| @@ -17,7 +17,7 @@ import shutil |
| import string |
| import xml_patch |
| import third_party.etree.ElementTree as ElementTree |
| - |
| +import sys |
| PEPPER_PLATFORM_NAME = 'PPAPI' |
| @@ -25,23 +25,37 @@ DEFAULT_MS_BUILD_DIRECTORY = os.path.expandvars('%ProgramFiles(x86)%\\MSBuild') |
| SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) |
| -PLATFORM_FILES = [ |
| +PLATFORM_FILES_2010 = [ |
| ('Microsoft.Cpp.Win32.default.props', |
| - 'Microsoft.Cpp.[platform].default.props.patch', |
| + 'Microsoft.Cpp.Win32.default.props.patch', |
| 'Microsoft.Cpp.PPAPI.default.props'), |
| ('Microsoft.Cpp.Win32.props', |
| - 'Microsoft.Cpp.[platform].props.patch', |
| + 'Microsoft.Cpp.Win32.props.patch', |
| 'Microsoft.Cpp.PPAPI.props'), |
| ('Microsoft.Cpp.Win32.targets', |
| - 'Microsoft.Cpp.[platform].targets.patch', |
| + 'Microsoft.Cpp.Win32.targets.patch', |
| 'Microsoft.Cpp.PPAPI.targets'), |
| ('PlatformToolsets\\v100\\Microsoft.Cpp.Win32.v100.props', |
| - 'PlatformToolsets\\v100\\Microsoft.Cpp.[platform].v100.props.patch', |
| + 'PlatformToolsets\\v100\\Microsoft.Cpp.Win32.v100.props.patch', |
| 'PlatformToolsets\\v100\\Microsoft.Cpp.PPAPI.v100.props'), |
| ('PlatformToolsets\\v100\\Microsoft.Cpp.Win32.v100.targets', |
| - 'PlatformToolsets\\v100\\Microsoft.Cpp.[platform].v100.targets.patch', |
| + 'PlatformToolsets\\v100\\Microsoft.Cpp.Win32.v100.targets.patch', |
| 'PlatformToolsets\\v100\\Microsoft.Cpp.PPAPI.v100.targets')] |
| +PLATFORM_FILES_2012 = [ |
| + ('Microsoft.Cpp.Win32.default.props', |
| + 'V110/Microsoft.Cpp.Win32.default.props.patch', |
| + 'Microsoft.Cpp.PPAPI.default.props'), |
| + ('Microsoft.Cpp.Win32.targets', |
| + 'V110/Microsoft.Cpp.Win32.targets.patch', |
| + 'Microsoft.Cpp.PPAPI.targets'), |
| + ('PlatformToolsets\\v110\\Microsoft.Cpp.Win32.v110.props', |
| + 'V110\\PlatformToolsets\\v110\\Microsoft.Cpp.Win32.v110.props.patch', |
| + 'PlatformToolsets\\v110\\Microsoft.Cpp.PPAPI.v110.props'), |
| + ('PlatformToolsets\\v110\\Microsoft.Cpp.Win32.v110.targets', |
| + 'V110\\PlatformToolsets\\v110\\Microsoft.Cpp.Win32.v110.targets.patch', |
| + 'PlatformToolsets\\v110\\Microsoft.Cpp.PPAPI.v110.targets')] |
| + |
| UI_FILES = [ |
| ('general.xml', |
| 'Props\\ppapi_general.xml.patch', |
| @@ -50,10 +64,14 @@ UI_FILES = [ |
| 'Props\\ppapi_general_ps.xml.patch', |
| 'Props\\ppapi_general_ps.xml')] |
| -COPY_FILES = [ |
| +ADD_FILES = [ |
| 'ImportAfter\\PPAPI.override.props'] |
| +class Error(Exception): |
| + pass |
| + |
| + |
| def PrependCopyright(source_file_name, dest_file_name): |
| """Adds the copyright notice from source file to the dest file. |
| @@ -102,7 +120,11 @@ def CreateTemplateFile(source, patch, dest): |
| """ |
| source_xml = ElementTree.parse(source) |
| patch_xml = ElementTree.parse(patch) |
| - modified_xml = xml_patch.PatchXML(source_xml, patch_xml) |
| + print "Patching: %s" % dest |
| + try: |
| + modified_xml = xml_patch.PatchXML(source_xml, patch_xml) |
| + except Exception as e: |
| + raise Error("Error patching file: %s: %s" % (source, e)) |
| if not os.path.exists(os.path.dirname(dest)): |
| os.makedirs(os.path.dirname(dest)) |
| @@ -143,34 +165,41 @@ def FixAttributesNamespace(tree): |
| elem.attrib = new_attrib |
| -def CreatePPAPI(msbuild_dir): |
| - """Creates the PPAPI template. |
| +def CreatePPAPIPlatform(install_dir): |
| + if not os.path.exists(install_dir): |
| + raise Error('install directory was not found: %s' % install_dir) |
| - Args: |
| - msbuild_dir: The path to the MSBuild installation. |
| - |
| - Returns: |
| - Nothing. |
| - |
| - Raises: |
| - Exception indicating Win32 platform was not found. |
| - """ |
| - if not os.path.exists(msbuild_dir): |
| - raise Exception('MSBuild directory was not found!') |
| - |
| - install_dir = os.path.join(msbuild_dir, 'Microsoft.Cpp\\v4.0\\Platforms') |
| # Note 1033 is code for the english language. |
| - ui_xml_dir = os.path.join(msbuild_dir, 'Microsoft.Cpp\\v4.0\\1033') |
| + ui_xml_dir = os.path.join(os.path.dirname(install_dir), '1033') |
| win32_dir = os.path.join(install_dir, 'Win32') |
| ppapi_dir = os.path.join(install_dir, PEPPER_PLATFORM_NAME) |
| patch_dir = os.path.join(SCRIPT_DIR, 'PPAPI_Patch') |
| if not os.path.exists(win32_dir): |
| - raise Exception('Win32 platform is not installed on this machine!') |
| + raise Error('Win32 MSBuild folder not found: %s' % win32_dir) |
|
binji
2013/05/25 00:02:55
s/folder/directory/
Sam Clegg
2013/05/29 04:58:33
Done.
|
| + |
| + print "Cloning Win32 platform from: %s" % win32_dir |
| + |
| + for root, dirs, files in os.walk(win32_dir): |
| + root = root.replace(win32_dir, '')[1:] |
| - for template_creation in PLATFORM_FILES: |
| + if not os.path.exists(os.path.join(ppapi_dir, root)): |
| + os.makedirs(os.path.join(ppapi_dir, root)) |
| + |
| + for filename in files: |
| + src = os.path.join(win32_dir, root, filename) |
| + dest = os.path.join(ppapi_dir, root, filename.replace('Win32', 'PPAPI')) |
| + #print "duplicating: %s" % dest |
|
binji
2013/05/25 00:02:55
remove
Sam Clegg
2013/05/29 04:58:33
Done.
|
| + shutil.copyfile(src, dest) |
| + |
| + if 'V110' in install_dir: |
| + platform_files = PLATFORM_FILES_2012 |
| + else: |
| + platform_files = PLATFORM_FILES_2010 |
| + |
| + for template_creation in platform_files: |
| CreateTemplateFile( |
| os.path.join(win32_dir, template_creation[0]), |
| os.path.join(patch_dir, template_creation[1]), |
| @@ -182,25 +211,53 @@ def CreatePPAPI(msbuild_dir): |
| os.path.join(patch_dir, template_creation[1]), |
| os.path.join(ppapi_dir, template_creation[2])) |
| - for file_name in COPY_FILES: |
| + for file_name in ADD_FILES: |
| copy_from = os.path.join(patch_dir, file_name) |
| copy_to = os.path.join(ppapi_dir, file_name) |
| if not os.path.exists(os.path.dirname(copy_to)): |
| os.makedirs(os.path.dirname(copy_to)) |
| shutil.copyfile(copy_from, copy_to) |
| - shutil.copyfile( |
| - os.path.join(win32_dir, 'Microsoft.Build.CPPTasks.Win32.dll'), |
| - os.path.join(ppapi_dir, 'Microsoft.Build.CPPTasks.PPAPI.dll')) |
| +def CreatePPAPI(msbuild_dir): |
| + """Creates the PPAPI template. |
| + |
| + Args: |
| + msbuild_dir: The path to the MSBuild installation. |
| + |
| + Returns: |
| + Nothing. |
| + |
| + Raises: |
| + Error indicating Win32 platform was not found. |
| + """ |
| + |
| + if not os.path.exists(msbuild_dir): |
| + raise Error('MSBuild directory was not found: %s' % msbuild_dir) |
| + |
| + install_dir = os.path.join(msbuild_dir, 'Microsoft.Cpp\\v4.0\\Platforms') |
|
binji
2013/05/25 00:02:55
vs 2012 has this directory too?
Sam Clegg
2013/05/29 04:58:33
Done.
|
| + CreatePPAPIPlatform(install_dir) |
| + |
| + install_dir = os.path.join(msbuild_dir, |
| + 'Microsoft.Cpp\\v4.0\\V110\\Platforms') |
| + if os.path.exists(install_dir): |
| + CreatePPAPIPlatform(install_dir) |
| + |
| + |
| +def main(args): |
| + try: |
| + parser = optparse.OptionParser(usage='Usage: %prog [options]') |
| + parser.add_option('-b', '--msbuild-path', |
| + default=DEFAULT_MS_BUILD_DIRECTORY, |
| + help='Provide the path to the MSBuild directory', metavar='PATH') |
| + options, args = parser.parse_args(args) |
| + CreatePPAPI(options.msbuild_path) |
| + |
| + except Error as e: |
| + sys.stderr.write("error: %s\n" % e) |
| + return 1 |
| -def main(): |
| - parser = optparse.OptionParser(usage='Usage: %prog [options]') |
| - parser.add_option('-b', '--msbuild-path', dest='msbuild_path', |
| - default=DEFAULT_MS_BUILD_DIRECTORY, |
| - help='Provide the path to the MSBuild directory', metavar='PATH') |
| - (options, args) = parser.parse_args() |
| - CreatePPAPI(options.msbuild_path) |
| + return 0 |
| if __name__ == '__main__': |
| - main() |
| + sys.exit(main(sys.argv[1:])) |