Chromium Code Reviews| Index: visual_studio/NativeClientVSAddIn/InstallerResources/install.py |
| diff --git a/visual_studio/NativeClientVSAddIn/InstallerResources/install.py b/visual_studio/NativeClientVSAddIn/InstallerResources/install.py |
| index 0dd6d6c05b4fcbf9af50bb6fdb87b0909c77330d..1c29e4565f36112d50932cef8aab82e181ec236b 100644 |
| --- a/visual_studio/NativeClientVSAddIn/InstallerResources/install.py |
| +++ b/visual_studio/NativeClientVSAddIn/InstallerResources/install.py |
| @@ -1,193 +1,193 @@ |
| -#!/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. |
| - |
| -"""Copies necessary add-in files into place to install the add-in. |
| - |
| -This script will copy the necessary files for the Visual Studio add-in |
| -to where Visual Studio can find them. It assumes the current directory |
| -contains the necessary files to copy. |
| -""" |
| - |
| -import create_ppapi_platform |
| -import ctypes |
| -import os |
| -import optparse |
| -import platform |
| -import shutil |
| -import sys |
| - |
| -NACL_PLATFORM_NAME = 'NaCl' |
| -PEPPER_PLATFORM_NAME = 'PPAPI' |
| - |
| -DEFAULT_VS_USER_DIRECTORY = os.path.expandvars( |
| - '%USERPROFILE%\\My Documents\\Visual Studio 2010') |
| - |
| -DEFAULT_MS_BUILD_DIRECTORY = os.path.expandvars('%ProgramFiles(x86)%\\MSBuild') |
| - |
| -SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) |
| - |
| -ADDIN_FILES = ['NativeClientVSAddIn.AddIn', 'NativeClientVSAddIn.dll'] |
| - |
| -class InstallError(Exception): |
| - """Error class for this installer indicating a fatal but expected error.""" |
| - pass |
| - |
| -def UninstallDirectory(directory): |
| - if os.path.exists(directory): |
| - shutil.rmtree(directory) |
| - print 'Removed: %s' % (directory) |
| - else: |
| - print 'Failed to remove non-existant directory: %s' % (directory) |
| - |
| - |
| -def UninstallFile(file_path): |
| - if os.path.exists(file_path): |
| - os.remove(file_path) |
| - print 'Removed: %s' % (file_path) |
| - else: |
| - print 'Failed to remove non-existant file: %s' % (file_path) |
| - |
| - |
| -def Uninstall(nacl_directory, pepper_directory, addin_directory): |
| - UninstallDirectory(nacl_directory) |
| - UninstallDirectory(pepper_directory) |
| - for file_name in ADDIN_FILES: |
| - UninstallFile(os.path.join(addin_directory, file_name)) |
| - |
| - |
| -def main(): |
| - parser = optparse.OptionParser(usage='Usage: %prog [options]') |
| - parser.add_option('-b', '--msbuild-path', dest='msbuild_path', |
| - default=DEFAULT_MS_BUILD_DIRECTORY, metavar='PATH', |
| - help='Provide the path to the MSBuild directory') |
| - parser.add_option('-a', '--vsuser-path', dest='vsuser_path', |
| - default=DEFAULT_VS_USER_DIRECTORY, metavar='PATH', |
| - help='Provide the path to the Visual Studio user directory') |
| - parser.add_option('-f', '--force', action="store_true", dest='overwrite', |
| - default=False, help='Force an overwrite of existing files') |
| - parser.add_option('-p', '--ppapi', action="store_true", dest='install_ppapi', |
| - help='Install PPAPI template without asking.') |
| - parser.add_option('-n', '--no-ppapi', action="store_false", |
| - dest='install_ppapi', help='Do not install PPAPI template and do not ask') |
| - parser.add_option('-u', '--uninstall', action="store_true", |
| - dest='uninstall', help='Remove the add-in.') |
| - (options, args) = parser.parse_args() |
| - |
| - print "*************************************************" |
| - print "Native-Client Visual Studio 2010 Add-in Installer" |
| - print "*************************************************\n" |
| - print "Please ensure Visual Studio and MSBuild are closed " \ |
| - "during installation.\n" |
| - |
| - if platform.system() != 'Windows': |
| - raise InstallError('Must install to Windows system') |
| - |
| - if sys.version_info < (2, 6, 2): |
| - print "\n\nWARNING: Only python version 2.6.2 or greater is supported. " \ |
| - "Current version is %s\n\n" % (sys.version_info[:3],) |
| - |
| - # Admin is needed to write to the default platform directory. |
| - if ctypes.windll.shell32.IsUserAnAdmin() != 1: |
| - raise InstallError("Not running as administrator. The install script needs " |
| - "write access to protected Visual Studio directories.") |
| - |
| - # Ensure install directories exist. |
| - if not os.path.exists(options.vsuser_path): |
| - raise InstallError("Could not find user Visual Studio directory: %s" % ( |
| - options.vsuser_path)) |
| - if not os.path.exists(options.msbuild_path): |
| - raise InstallError("Could not find MS Build directory: %s" % ( |
| - options.msbuild_path)) |
| - |
| - addin_directory = os.path.join(options.vsuser_path, 'Addins') |
| - platform_directory = os.path.join( |
| - options.msbuild_path, 'Microsoft.Cpp\\v4.0\\Platforms') |
| - nacl_directory = os.path.join(platform_directory, NACL_PLATFORM_NAME) |
| - pepper_directory = os.path.join(platform_directory, PEPPER_PLATFORM_NAME) |
| - |
| - # If uninstalling then redirect to uninstall program. |
| - if options.uninstall: |
| - Uninstall(nacl_directory, pepper_directory, addin_directory) |
| - print "\nUninstall complete!\n" |
| - exit(0) |
| - |
| - if not os.path.exists(platform_directory): |
| - raise InstallError("Could not find path: %s" % platform_directory) |
| - if not os.path.exists(addin_directory): |
| - os.mkdir(addin_directory) |
| - |
| - # Ensure environment variables are set. |
| - nacl_sdk_root = os.getenv('NACL_SDK_ROOT', None) |
| - chrome_path = os.getenv('CHROME_PATH', None) |
| - if nacl_sdk_root is None: |
| - raise InstallError('Environment Variable NACL_SDK_ROOT is not set') |
| - if chrome_path is None: |
| - raise InstallError('Environment Variable CHROME_PATH is not set') |
| - |
| - # Remove existing installation. |
| - if os.path.exists(nacl_directory) or os.path.exists(pepper_directory): |
| - # If not forced then ask user permission. |
| - if not options.overwrite: |
| - print "\nWarning: Pre-existing add-in installation will be overwritten." |
| - print "Continue? ((Yes))/((No))" |
| - remove_answer = raw_input().strip() |
| - if not (remove_answer.lower() == "yes" or remove_answer.lower() == "y"): |
| - raise InstallError('User did not allow overwrite of existing install.') |
| - print "Removing existing install..." |
| - Uninstall(nacl_directory, pepper_directory, addin_directory) |
| - |
| - # Ask user before installing PPAPI template. |
| - if options.install_ppapi is None: |
| - print "\n" |
| - print "Set up configuration to enable Pepper development " \ |
| - "with Visual Studio?" |
| - print "((Yes)) - I want to create and copy relevant files into a " \ |
| - "Pepper subdirectory" |
| - print "((No)) - I am not interested or will set up the configuration later" |
| - ppapi_answer = raw_input().strip() |
| - if ppapi_answer.lower() == "yes" or ppapi_answer.lower() == "y": |
| - options.install_ppapi = True |
| - print "Confirmed installer will include PPAPI platform." |
| - else: |
| - options.install_ppapi = False |
| - print "Will not install PPAPI platform during installation." |
| - |
| - print "\nBegin installing components..." |
| - |
| - try: |
| - # Copy the necessary files into place. |
| - for file_name in ADDIN_FILES: |
| - shutil.copy(os.path.join(SCRIPT_DIR, file_name), addin_directory) |
| - print "Add-in installed." |
| - |
| - shutil.copytree(os.path.join(SCRIPT_DIR, 'NaCl'), nacl_directory) |
| - print "NaCl platform installed." |
| - |
| - if options.install_ppapi: |
| - create_ppapi_platform.CreatePPAPI(options.msbuild_path) |
| - print "PPAPI platform installed." |
| - except: |
| - print "\nException occured! Rolling back install...\n" |
| - Uninstall(nacl_directory, pepper_directory, addin_directory) |
| - raise |
| - else: |
| - print "\nInstallation complete!\n" |
| - |
| -if __name__ == '__main__': |
| - try: |
| - main() |
| - except InstallError as e: |
| - print e |
| - except shutil.Error as e: |
| - print "Error while copying file. Please ensure file is not in use." |
| - print e |
| - except WindowsError as e: |
| - if e.winerror == 5: |
| - print "Access denied error. Please ensure Visual Studio and MSBuild" |
| - print "processes are closed." |
| - else: |
| - raise |
| - |
| +#!/usr/bin/env python |
| +# Copyright (c) 2012 The Native Client Authors. All rights reserved. |
|
noelallen1
2012/09/19 19:47:25
same
|
| +# Use of this source code is governed by a BSD-style license that can be |
| +# found in the LICENSE file. |
| + |
| +"""Copies necessary add-in files into place to install the add-in. |
| + |
| +This script will copy the necessary files for the Visual Studio add-in |
| +to where Visual Studio can find them. It assumes the current directory |
| +contains the necessary files to copy. |
| +""" |
| + |
| +import create_ppapi_platform |
| +import ctypes |
| +import os |
| +import optparse |
| +import platform |
| +import shutil |
| +import sys |
| + |
| +NACL_PLATFORM_NAME = 'NaCl' |
| +PEPPER_PLATFORM_NAME = 'PPAPI' |
| + |
| +DEFAULT_VS_USER_DIRECTORY = os.path.expandvars( |
| + '%USERPROFILE%\\My Documents\\Visual Studio 2010') |
| + |
| +DEFAULT_MS_BUILD_DIRECTORY = os.path.expandvars('%ProgramFiles(x86)%\\MSBuild') |
| + |
| +SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) |
| + |
| +ADDIN_FILES = ['NativeClientVSAddIn.AddIn', 'NativeClientVSAddIn.dll'] |
| + |
| +class InstallError(Exception): |
| + """Error class for this installer indicating a fatal but expected error.""" |
| + pass |
| + |
| +def UninstallDirectory(directory): |
| + if os.path.exists(directory): |
| + shutil.rmtree(directory) |
| + print 'Removed: %s' % (directory) |
| + else: |
| + print 'Failed to remove non-existant directory: %s' % (directory) |
| + |
| + |
| +def UninstallFile(file_path): |
| + if os.path.exists(file_path): |
| + os.remove(file_path) |
| + print 'Removed: %s' % (file_path) |
| + else: |
| + print 'Failed to remove non-existant file: %s' % (file_path) |
| + |
| + |
| +def Uninstall(nacl_directory, pepper_directory, addin_directory): |
| + UninstallDirectory(nacl_directory) |
| + UninstallDirectory(pepper_directory) |
| + for file_name in ADDIN_FILES: |
| + UninstallFile(os.path.join(addin_directory, file_name)) |
| + |
| + |
| +def main(): |
| + parser = optparse.OptionParser(usage='Usage: %prog [options]') |
| + parser.add_option('-b', '--msbuild-path', dest='msbuild_path', |
| + default=DEFAULT_MS_BUILD_DIRECTORY, metavar='PATH', |
| + help='Provide the path to the MSBuild directory') |
| + parser.add_option('-a', '--vsuser-path', dest='vsuser_path', |
| + default=DEFAULT_VS_USER_DIRECTORY, metavar='PATH', |
| + help='Provide the path to the Visual Studio user directory') |
| + parser.add_option('-f', '--force', action="store_true", dest='overwrite', |
| + default=False, help='Force an overwrite of existing files') |
| + parser.add_option('-p', '--ppapi', action="store_true", dest='install_ppapi', |
| + help='Install PPAPI template without asking.') |
| + parser.add_option('-n', '--no-ppapi', action="store_false", |
| + dest='install_ppapi', help='Do not install PPAPI template and do not ask') |
| + parser.add_option('-u', '--uninstall', action="store_true", |
| + dest='uninstall', help='Remove the add-in.') |
| + (options, args) = parser.parse_args() |
| + |
| + print "*************************************************" |
| + print "Native-Client Visual Studio 2010 Add-in Installer" |
| + print "*************************************************\n" |
| + print "Please ensure Visual Studio and MSBuild are closed " \ |
| + "during installation.\n" |
| + |
| + if platform.system() != 'Windows': |
| + raise InstallError('Must install to Windows system') |
| + |
| + if sys.version_info < (2, 6, 2): |
| + print "\n\nWARNING: Only python version 2.6.2 or greater is supported. " \ |
| + "Current version is %s\n\n" % (sys.version_info[:3],) |
| + |
| + # Admin is needed to write to the default platform directory. |
| + if ctypes.windll.shell32.IsUserAnAdmin() != 1: |
| + raise InstallError("Not running as administrator. The install script needs " |
| + "write access to protected Visual Studio directories.") |
| + |
| + # Ensure install directories exist. |
| + if not os.path.exists(options.vsuser_path): |
| + raise InstallError("Could not find user Visual Studio directory: %s" % ( |
| + options.vsuser_path)) |
| + if not os.path.exists(options.msbuild_path): |
| + raise InstallError("Could not find MS Build directory: %s" % ( |
| + options.msbuild_path)) |
| + |
| + addin_directory = os.path.join(options.vsuser_path, 'Addins') |
| + platform_directory = os.path.join( |
| + options.msbuild_path, 'Microsoft.Cpp\\v4.0\\Platforms') |
| + nacl_directory = os.path.join(platform_directory, NACL_PLATFORM_NAME) |
| + pepper_directory = os.path.join(platform_directory, PEPPER_PLATFORM_NAME) |
| + |
| + # If uninstalling then redirect to uninstall program. |
| + if options.uninstall: |
| + Uninstall(nacl_directory, pepper_directory, addin_directory) |
| + print "\nUninstall complete!\n" |
| + exit(0) |
| + |
| + if not os.path.exists(platform_directory): |
| + raise InstallError("Could not find path: %s" % platform_directory) |
| + if not os.path.exists(addin_directory): |
| + os.mkdir(addin_directory) |
| + |
| + # Ensure environment variables are set. |
| + nacl_sdk_root = os.getenv('NACL_SDK_ROOT', None) |
| + chrome_path = os.getenv('CHROME_PATH', None) |
| + if nacl_sdk_root is None: |
| + raise InstallError('Environment Variable NACL_SDK_ROOT is not set') |
| + if chrome_path is None: |
| + raise InstallError('Environment Variable CHROME_PATH is not set') |
| + |
| + # Remove existing installation. |
| + if os.path.exists(nacl_directory) or os.path.exists(pepper_directory): |
| + # If not forced then ask user permission. |
| + if not options.overwrite: |
| + print "\nWarning: Pre-existing add-in installation will be overwritten." |
| + print "Continue? ((Yes))/((No))" |
| + remove_answer = raw_input().strip() |
| + if not (remove_answer.lower() == "yes" or remove_answer.lower() == "y"): |
| + raise InstallError('User did not allow overwrite of existing install.') |
| + print "Removing existing install..." |
| + Uninstall(nacl_directory, pepper_directory, addin_directory) |
| + |
| + # Ask user before installing PPAPI template. |
| + if options.install_ppapi is None: |
| + print "\n" |
| + print "Set up configuration to enable Pepper development " \ |
| + "with Visual Studio?" |
| + print "((Yes)) - I want to create and copy relevant files into a " \ |
| + "Pepper subdirectory" |
| + print "((No)) - I am not interested or will set up the configuration later" |
| + ppapi_answer = raw_input().strip() |
| + if ppapi_answer.lower() == "yes" or ppapi_answer.lower() == "y": |
| + options.install_ppapi = True |
| + print "Confirmed installer will include PPAPI platform." |
| + else: |
| + options.install_ppapi = False |
| + print "Will not install PPAPI platform during installation." |
| + |
| + print "\nBegin installing components..." |
| + |
| + try: |
| + # Copy the necessary files into place. |
| + for file_name in ADDIN_FILES: |
| + shutil.copy(os.path.join(SCRIPT_DIR, file_name), addin_directory) |
| + print "Add-in installed." |
| + |
| + shutil.copytree(os.path.join(SCRIPT_DIR, 'NaCl'), nacl_directory) |
| + print "NaCl platform installed." |
| + |
| + if options.install_ppapi: |
| + create_ppapi_platform.CreatePPAPI(options.msbuild_path) |
| + print "PPAPI platform installed." |
| + except: |
| + print "\nException occured! Rolling back install...\n" |
| + Uninstall(nacl_directory, pepper_directory, addin_directory) |
| + raise |
| + else: |
| + print "\nInstallation complete!\n" |
| + |
| +if __name__ == '__main__': |
| + try: |
| + main() |
| + except InstallError as e: |
| + print e |
| + except shutil.Error as e: |
| + print "Error while copying file. Please ensure file is not in use." |
| + print e |
| + except WindowsError as e: |
| + if e.winerror == 5: |
| + print "Access denied error. Please ensure Visual Studio and MSBuild" |
| + print "processes are closed." |
| + else: |
| + raise |
| + |