- add sources.
[platform/framework/web/crosswalk.git] / src / ppapi / generators / idl_option.py
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 import getopt
6 import sys
7
8 from idl_log import ErrOut, InfoOut, WarnOut
9
10 OptionMap = { }
11
12
13 def GetOption(name):
14   if name not in OptionMap:
15     raise RuntimeError('Could not find option "%s".' % name)
16   return OptionMap[name].Get()
17
18 class Option(object):
19   def __init__(self, name, desc, default = None, callfunc = None,
20                testfunc = None, cookie = None):
21
22     # Verify this option is not a duplicate
23     if name in OptionMap:
24       raise RuntimeError('Option "%s" already exists.' % name)
25     self.name = name
26     self.desc = desc
27     self.default = default
28     self.value = default
29     self.callfunc = callfunc
30     self.testfunc = testfunc
31     self.cookie = cookie
32     OptionMap[name] = self
33
34   def Set(self, value):
35     if self.testfunc:
36       if not self.testfunc(self, value): return False
37     # If this is a boolean option, set it to true
38     if self.default is None:
39       self.value = True
40     else:
41       self.value = value
42     if self.callfunc:
43       self.callfunc(self)
44     return True
45
46   def Get(self):
47     return self.value
48
49
50 def DumpOption(option):
51   if len(option.name) > 1:
52     out = '  --%-15.15s\t%s' % (option.name, option.desc)
53   else:
54     out = '   -%-15.15s\t%s' % (option.name, option.desc)
55   if option.default:
56     out = '%s\n\t\t\t(Default: %s)\n' % (out, option.default)
57   InfoOut.Log(out)
58
59 def DumpHelp(option=None):
60   InfoOut.Log('Usage:')
61   for opt in sorted(OptionMap.keys()):
62     DumpOption(OptionMap[opt])
63   sys.exit(0)
64
65 #
66 # Default IDL options
67 #
68 # -h : Help, prints options
69 # --verbose : use verbose output
70 # --test : test this module
71 #
72 Option('h', 'Help', callfunc=DumpHelp)
73 Option('help', 'Help', callfunc=DumpHelp)
74 Option('verbose', 'Verbose')
75 Option('test', 'Test the IDL scripts')
76
77 def ParseOptions(args):
78   short_opts= ""
79   long_opts = []
80
81   # Build short and long option lists
82   for name in sorted(OptionMap.keys()):
83     option = OptionMap[name]
84     if len(name) > 1:
85       if option.default is None:
86         long_opts.append('%s' % name)
87       else:
88         long_opts.append('%s=' % name)
89     else:
90       if option.default is None:
91         short_opts += name
92       else:
93         short_opts += '%s:' % name
94
95   try:
96     opts, filenames = getopt.getopt(args, short_opts, long_opts)
97
98     for opt, val in opts:
99       if len(opt) == 2: opt = opt[1:]
100       if opt[0:2] == '--': opt = opt[2:]
101       OptionMap[opt].Set(val)
102
103   except getopt.error, e:
104     ErrOut.Log('Illegal option: %s\n' % str(e))
105     DumpHelp()
106     sys.exit(-1)
107
108   return filenames