# 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. import getopt import sys from idl_log import ErrOut, InfoOut, WarnOut OptionMap = { } def GetOption(name): if name not in OptionMap: raise RuntimeError('Could not find option "%s".' % name) return OptionMap[name].Get() class Option(object): def __init__(self, name, desc, default = None, callfunc = None, testfunc = None, cookie = None): # Verify this option is not a duplicate if name in OptionMap: raise RuntimeError('Option "%s" already exists.' % name) self.name = name self.desc = desc self.default = default self.value = default self.callfunc = callfunc self.testfunc = testfunc self.cookie = cookie OptionMap[name] = self def Set(self, value): if self.testfunc: if not self.testfunc(self, value): return False # If this is a boolean option, set it to true if self.default is None: self.value = True else: self.value = value if self.callfunc: self.callfunc(self) return True def Get(self): return self.value def DumpOption(option): if len(option.name) > 1: out = ' --%-15.15s\t%s' % (option.name, option.desc) else: out = ' -%-15.15s\t%s' % (option.name, option.desc) if option.default: out = '%s\n\t\t\t(Default: %s)\n' % (out, option.default) InfoOut.Log(out) def DumpHelp(option=None): InfoOut.Log('Usage:') for opt in sorted(OptionMap.keys()): DumpOption(OptionMap[opt]) sys.exit(0) # # Default IDL options # # -h : Help, prints options # --verbose : use verbose output # --test : test this module # Option('h', 'Help', callfunc=DumpHelp) Option('help', 'Help', callfunc=DumpHelp) Option('verbose', 'Verbose') Option('test', 'Test the IDL scripts') def ParseOptions(args): short_opts= "" long_opts = [] # Build short and long option lists for name in sorted(OptionMap.keys()): option = OptionMap[name] if len(name) > 1: if option.default is None: long_opts.append('%s' % name) else: long_opts.append('%s=' % name) else: if option.default is None: short_opts += name else: short_opts += '%s:' % name try: opts, filenames = getopt.getopt(args, short_opts, long_opts) for opt, val in opts: if len(opt) == 2: opt = opt[1:] if opt[0:2] == '--': opt = opt[2:] OptionMap[opt].Set(val) except getopt.error, e: ErrOut.Log('Illegal option: %s\n' % str(e)) DumpHelp() sys.exit(-1) return filenames