#!/usr/bin/env python '''Install P4V addins''' # Copyright (c) 2006 Qualcomm # Miki Tebeka from re import match from user import home from os.path import join, isfile, dirname, isdir from sys import stdout, path, platform from urllib import quote, unquote from shutil import copy2 from os import mkdir, popen from glob import glob from win32pdh import EnumObjectItems, PERF_DETAIL_WIZARD # Configuration file specifying the addins CONFIG_FILE = "install.cfg" # Application directory APPDIR = path[0] if isfile(APPDIR): # py2exe APPDIR = dirname(APPDIR) def is_process_running(process): '''Check if process is running''' junk, names = EnumObjectItems(None, None, "Process", PERF_DETAIL_WIZARD) return process.lower() in [name.lower() for name in names] # General install error class InstallError(Exception): pass def config_file(): '''Name of configuration file''' return join(APPDIR, CONFIG_FILE) _DEFAULTS = { "name" : "", "command" : "", "arguments" : "", "directory" : "", "prompttext" : "", "console" : "no", "prompt" : "no", "closeOnExit" : "no", "subMenu" : "no", "showBrowse" : "no", "addToContext" : "yes", "refresh" : "no" } _BOOL_OPTS = set([ "console" "prompt" "closeOnExit" "subMenu" "showBrowse", "addToContext" "refresh" ]) def is_boolean(optname): return optname in _BOOL_OPTS def load_config(): '''Load addins config file''' addin_list = [] def CustomTool(**kw): addin = _DEFAULTS.copy() addin.update(kw) if not addin["name"]: raise InstallError("Custom tool without a name") if not addin["command"]: raise InstallError("Custom tool %s don't have a command" % \ addin["name"]) for opt in addin.keys(): if not is_boolean(opt): continue if addin[opt] not in ("yes", "no"): raise InstallError( "Bad value for %s in %s (can be \"yes\" or \"no\"" % \ (opt, addin["name"])) addin_list.append(addin) env = {"CustomTool" : CustomTool} try: execfile(config_file(), env, env) except Exception, e: raise InstallError(e) return addin_list