Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(24)

Unified Diff: visual_studio/NativeClientVSAddIn/InstallerResources/install.py

Issue 14122017: [VS Addin] Add visual studio 2012 support (Closed) Base URL: https://nativeclient-sdk.googlecode.com/svn/trunk/src
Patch Set: Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: visual_studio/NativeClientVSAddIn/InstallerResources/install.py
diff --git a/visual_studio/NativeClientVSAddIn/InstallerResources/install.py b/visual_studio/NativeClientVSAddIn/InstallerResources/install.py
index 774175a8f39a2681f47168b2b9a3a54fdc10fc29..649e823a967bd4eba046bb9f38f412cff7bff9f2 100644
--- a/visual_studio/NativeClientVSAddIn/InstallerResources/install.py
+++ b/visual_studio/NativeClientVSAddIn/InstallerResources/install.py
@@ -26,13 +26,19 @@ PNACL_PLATFORM = 'PNaCl'
NACL_PLATFORM_OLD = 'NaCl'
PEPPER_PLATFORM = 'PPAPI'
-DEFAULT_VS_USER_DIRECTORY = os.path.expandvars(
- '%USERPROFILE%\\My Documents\\Visual Studio 2010')
+DEFAULT_VS_DIRECTORIES = ('%USERPROFILE%\\My Documents\\Visual Studio 2010',
+ '%USERPROFILE%\\My Documents\\Visual Studio 2012')
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
ADDIN_FILES = ['NativeClientVSAddIn.AddIn', 'NativeClientVSAddIn.dll']
+options = None
+
+if sys.version_info < (2, 6, 2):
+ print "\n\nWARNING: Python version 2.6.2 or greater is required. " \
+ "Current version is %s\n\n" % (sys.version_info[:3],)
+
class InstallError(Exception):
"""Error class for this installer indicating a fatal but expected error."""
@@ -54,12 +60,6 @@ def UninstallFile(file_path):
print 'Removed: %s' % (file_path)
-def Uninstall(platform_dirs, addin_dir):
- for dirname in platform_dirs:
- UninstallDirectory(dirname)
- for file_name in ADDIN_FILES:
- UninstallFile(os.path.join(addin_dir, file_name))
-
def CheckForRunningProgams():
tasklist = os.popen('tasklist.exe').readlines()
@@ -79,12 +79,161 @@ def Ask(question):
return False
+def UninstallAddin(vsuser_path):
+ addin_dir = os.path.join(vsuser_path, 'Addins')
+ for file_name in ADDIN_FILES:
+ UninstallFile(os.path.join(addin_dir, file_name))
+
+
+def InstallAddin(vsuser_path):
+ vsuser_path = os.path.expandvars(vsuser_path)
+
+ vsname = os.path.basename(vsuser_path)
+ if '2012' in vsname:
+ vs_version = '2012'
+ elif '2010' in vsname:
+ vs_version = '2010'
+ else:
+ raise InstallError("Unable to determine valid VS version (2010 or 2012) "
+ "from path: %s" % vsuser_path)
+
+ # Ensure install directories exist.
+ if not os.path.exists(vsuser_path):
+ raise InstallError("Could not find user Visual Studio directory: %s" % (
+ vsuser_path))
+
+ addin_dir = os.path.join(vsuser_path, 'Addins')
+
+ if not os.path.exists(addin_dir):
+ os.makedirs(addin_dir)
+
+ print "\nInstalling Add-in: %s" % vsuser_path
+ # Copy the necessary files into place.
+ for file_name in ADDIN_FILES:
+ shutil.copy(os.path.join(SCRIPT_DIR, vs_version, file_name), addin_dir)
+
+ print "Add-in installed."
+
+
+def InstallMSBuildPlatforms(platform_root):
+ if not os.path.exists(platform_root):
+ raise InstallError("Could not find path: %s" % platform_root)
+
+ if not os.access(platform_root, os.W_OK):
+ # 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.")
+ raise InstallError("install script needs write access to: %s"
+ % platform_root)
+
+ nacl_dir_32 = os.path.join(platform_root, NACL32_PLATFORM)
+ nacl_dir_64 = os.path.join(platform_root, NACL64_PLATFORM)
+ nacl_dir_arm = os.path.join(platform_root, NACLARM_PLATFORM)
+ pnacl_dir = os.path.join(platform_root, PNACL_PLATFORM)
+ nacl_dir_old = os.path.join(platform_root, NACL_PLATFORM_OLD)
+ nacl_common = os.path.join(os.path.dirname(platform_root), 'NaCl')
+ all_dirs = (nacl_dir_32, nacl_dir_64, nacl_dir_arm,
+ pnacl_dir, nacl_dir_old, nacl_common)
+
+ # Remove existing installation.
+ if any(os.path.exists(d) for d in all_dirs):
+ # If not forced then ask user permission.
+ if not options.force:
+ if not Ask("Warning: Pre-existing add-in installation "
+ "will be overwritten."):
+ raise InstallError('User did not allow overwrite of existing install.')
+ print "Removing existing install..."
+ UninstallMSBuild(platform_root)
+
+ print "\nInstalling MSBuild components..."
+
+ shutil.copytree(os.path.join(SCRIPT_DIR, 'NaCl'), nacl_common)
+ print "NaCl common resources installed."
+
+ shutil.copytree(os.path.join(SCRIPT_DIR, NACL32_PLATFORM), nacl_dir_32)
+ print "%s platform installed." % NACL32_PLATFORM
+
+ shutil.copytree(os.path.join(SCRIPT_DIR, NACL64_PLATFORM), nacl_dir_64)
+ print "%s platform installed." % NACL64_PLATFORM
+
+ shutil.copytree(os.path.join(SCRIPT_DIR, NACLARM_PLATFORM), nacl_dir_arm)
+ print "%s platform installed." % NACLARM_PLATFORM
+
+ shutil.copytree(os.path.join(SCRIPT_DIR, PNACL_PLATFORM), pnacl_dir)
+ print "PNaCl platform installed."
+
+
+def InstallMSBuild():
+
+ # Ask user before installing PPAPI template.
+ if options.install_ppapi is None:
+ ppapi_answer = Ask("Set up configuration to enable Pepper development "
+ "with Visual Studio?\n"
+ "((Yes)) - I want to create and copy relevant files into a "
+ "Pepper subdirectory\n"
+ "((No)) - I am not interested or will set up the configuration later")
+ if ppapi_answer:
+ options.install_ppapi = True
+ print "Confirmed installer will include PPAPI platform."
+ else:
+ options.install_ppapi = False
+ print "Will not install PPAPI platform during installation."
+
+ if not os.path.exists(options.msbuild_path):
+ raise InstallError("Could not find MS Build directory: %s" % (
+ options.msbuild_path))
+
+ root_2010 = os.path.join(options.msbuild_path,
+ 'Microsoft.Cpp', 'v4.0', 'Platforms')
+ InstallMSBuildPlatforms(root_2010)
+
+ root_2012 = os.path.join(options.msbuild_path,
+ 'Microsoft.Cpp', 'v4.0', 'V110', 'Platforms')
+ InstallMSBuildPlatforms(root_2012)
+
+ if options.install_ppapi:
+ pepper_dir = os.path.join(root_2010, PEPPER_PLATFORM)
+ pepper_dir2 = os.path.join(root_2012, PEPPER_PLATFORM)
+ UninstallDirectory(pepper_dir)
+ UninstallDirectory(pepper_dir2)
+ create_ppapi_platform.CreatePPAPI(options.msbuild_path)
+ print "PPAPI platform installed."
+
+
+def UninstallMSBuild(platform_root):
+ nacl_dir_32 = os.path.join(platform_root, NACL32_PLATFORM)
binji 2013/05/25 00:02:55 make getting these paths into a function?
+ nacl_dir_64 = os.path.join(platform_root, NACL64_PLATFORM)
+ nacl_dir_arm = os.path.join(platform_root, NACLARM_PLATFORM)
+ pnacl_dir = os.path.join(platform_root, PNACL_PLATFORM)
+ nacl_dir_old = os.path.join(platform_root, NACL_PLATFORM_OLD)
+ nacl_common = os.path.join(os.path.dirname(platform_root), 'NaCl')
+ remove_dirs = (nacl_dir_32, nacl_dir_64, nacl_dir_arm,
+ pnacl_dir, nacl_dir_old, nacl_common)
+ for dirname in remove_dirs:
+ UninstallDirectory(dirname)
+
+
+def Uninstall():
+ root_2010 = os.path.join(options.msbuild_path,
+ 'Microsoft.Cpp', 'v4.0', 'Platforms')
+ root_2012 = os.path.join(options.msbuild_path,
+ 'Microsoft.Cpp', 'v4.0', 'V110', 'Platforms')
+ UninstallMSBuild(root_2010)
+ UninstallMSBuild(root_2012)
+
+ for vsuser_path in options.vsuser_path:
+ UninstallAddin(vsuser_path)
+
+
def main():
+ global options
parser = optparse.OptionParser(usage='Usage: %prog [options]')
- parser.add_option('-b', '--msbuild-path', dest='msbuild_path',
+ parser.add_option('-b', '--msbuild-path',
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',
+ parser.add_option('-a', '--vsuser-path',
+ default=DEFAULT_VS_DIRECTORIES, metavar='PATH', action='append',
help='Provide the path to the Visual Studio user directory')
parser.add_option('-f', '--force', action="store_true",
default=False, help='Force an overwrite of existing files')
@@ -93,12 +242,12 @@ def main():
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()
+ help='Remove the add-in.')
+ options, args = parser.parse_args()
- print "*************************************************"
- print "Native-Client Visual Studio 2010 Add-in Installer"
- print "*************************************************\n"
+ print "*********************************************"
+ print "Native-Client Visual Studio Add-in Installer"
+ print "*********************************************\n"
if platform.system() != 'Windows':
raise InstallError('Must install to Windows system')
@@ -113,7 +262,6 @@ def main():
else:
options.msbuild_path = os.path.expandvars('%ProgramFiles%\\MSBuild')
-
if CheckForRunningProgams():
if not options.force:
print "Visual Studio and MSBuild must be closed during installation"
@@ -135,54 +283,6 @@ def main():
if CheckForRunningProgams():
raise InstallError('Failed to kill Visual Studio and MSBuild instances')
- 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],)
-
- # 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_dir = os.path.join(options.vsuser_path, 'Addins')
- platform_root = os.path.join(options.msbuild_path,
- 'Microsoft.Cpp', 'v4.0', 'Platforms')
- if not os.path.exists(platform_root):
- raise InstallError("Could not find path: %s" % platform_root)
-
- if not os.access(platform_root, os.W_OK):
- # 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.")
- raise InstallError("install script needs write access to: %s"
- % platform_root)
-
- nacl_dir_32 = os.path.join(platform_root, NACL32_PLATFORM)
- nacl_dir_64 = os.path.join(platform_root, NACL64_PLATFORM)
- nacl_dir_arm = os.path.join(platform_root, NACLARM_PLATFORM)
- pnacl_dir = os.path.join(platform_root, PNACL_PLATFORM)
- nacl_dir_old = os.path.join(platform_root, NACL_PLATFORM_OLD)
- nacl_common = os.path.join(os.path.dirname(platform_root), 'NaCl')
- pepper_dir = os.path.join(platform_root, PEPPER_PLATFORM)
- remove_dirs = (nacl_dir_32, nacl_dir_64, nacl_dir_arm,
- pnacl_dir, nacl_dir_old, pepper_dir,
- nacl_common)
- # If uninstalling then redirect to uninstall program.
- if options.uninstall:
- Uninstall(remove_dirs, addin_dir)
- print "\nUninstall complete!\n"
- sys.exit(0)
-
- if not os.path.exists(platform_root):
- raise InstallError("Could not find path: %s" % platform_root)
- if not os.path.exists(addin_dir):
- os.makedirs(addin_dir)
-
# Ensure environment variables are set.
if not options.force:
nacl_sdk_root = os.getenv('NACL_SDK_ROOT', None)
@@ -192,59 +292,20 @@ def main():
if chrome_path is None:
raise InstallError('Environment Variable CHROME_PATH is not set')
- # Remove existing installation.
- if any(os.path.exists(d) for d in remove_dirs):
- # If not forced then ask user permission.
- if not options.force:
- if not Ask("Warning: Pre-existing add-in installation "
- "will be overwritten."):
- raise InstallError('User did not allow overwrite of existing install.')
- print "Removing existing install..."
- Uninstall(remove_dirs, addin_dir)
-
- # Ask user before installing PPAPI template.
- if options.install_ppapi is None:
- ppapi_answer = Ask("Set up configuration to enable Pepper development "
- "with Visual Studio?\n"
- "((Yes)) - I want to create and copy relevant files into a "
- "Pepper subdirectory\n"
- "((No)) - I am not interested or will set up the configuration later")
- if ppapi_answer:
- 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..."
+ # If uninstalling then redirect to uninstall program.
+ if options.uninstall:
+ Uninstall()
+ print "\nUninstall complete!\n"
+ return 0
try:
- # Copy the necessary files into place.
- for file_name in ADDIN_FILES:
- shutil.copy(os.path.join(SCRIPT_DIR, file_name), addin_dir)
- print "Add-in installed."
-
- shutil.copytree(os.path.join(SCRIPT_DIR, 'NaCl'), nacl_common)
- print "NaCl common resources installed."
-
- shutil.copytree(os.path.join(SCRIPT_DIR, NACL32_PLATFORM), nacl_dir_32)
- print "%s platform installed." % NACL32_PLATFORM
-
- shutil.copytree(os.path.join(SCRIPT_DIR, NACL64_PLATFORM), nacl_dir_64)
- print "%s platform installed." % NACL64_PLATFORM
-
- shutil.copytree(os.path.join(SCRIPT_DIR, NACLARM_PLATFORM), nacl_dir_arm)
- print "%s platform installed." % NACLARM_PLATFORM
-
- shutil.copytree(os.path.join(SCRIPT_DIR, PNACL_PLATFORM), pnacl_dir)
- print "PNaCl platform installed."
+ InstallMSBuild()
- if options.install_ppapi:
- create_ppapi_platform.CreatePPAPI(options.msbuild_path)
- print "PPAPI platform installed."
+ for vsuser_path in options.vsuser_path:
+ InstallAddin(vsuser_path)
except:
print "\nException occured! Rolling back install...\n"
- Uninstall(remove_dirs, addin_dir)
+ Uninstall()
raise
else:
print "\nInstallation complete!\n"

Powered by Google App Engine
This is Rietveld 408576698