6 Author : Valentin Kuznetsov <vkuznet@gmail.com> 14 from optparse
import OptionParser
17 from FWCore.Skeletons.utils
import code_generator, test_env
19 if sys.version_info < (2, 6):
20 raise Exception(
"This script requires python 2.6 or greater")
23 "Retturn default location of template directory" 24 return '%s/templates' %
'/'.
join(__file__.split(
'/')[:-1])
27 "Skeleton option parser" 29 cname = os.environ.get(
'MKTMPL_CMD',
'main.py')
30 usage =
"Usage: %s [options]\n" % cname
31 self.
parser = OptionParser(usage=usage)
33 self.parser.add_option(
"--debug", action=
"store_true",
34 default=
False, dest=
"debug", help=msg)
35 msg =
"specify template, e.g. EDProducer" 36 self.parser.add_option(
"--tmpl", action=
"store", type=
"string",
37 default=
'', dest=
"tmpl", help=msg)
38 msg =
"specify package name, e.g. MyProducer" 39 self.parser.add_option(
"--name", action=
"store", type=
"string",
40 default=
"TestPkg", dest=
"pname", help=msg)
41 msg =
"specify author name" 42 self.parser.add_option(
"--author", action=
"store", type=
"string",
43 default=
"", dest=
"author", help=msg)
44 msg =
"specify file type to generate, " 45 msg +=
"e.g. --ftype=header, default is all files" 46 self.parser.add_option(
"--ftype", action=
"store", type=
"string",
47 default=
"all", dest=
"ftype", help=msg)
48 msg =
"list examples tags which should be kept in " 49 msg +=
"generate code, e.g. " 50 msg +=
"--keep-etags='@example_trac,@example_hist'" 51 self.parser.add_option(
"--keep-etags", action=
"store", type=
"string",
52 default=
None, dest=
"ketags", help=msg)
53 msg =
"specify template directory, " 54 self.parser.add_option(
"--tdir", action=
"store", type=
"string",
55 default=
tmpl_dir(), dest=
"tdir", help=msg)
56 msg =
"list template tags" 57 self.parser.add_option(
"--tags", action=
"store_true",
58 default=
False, dest=
"tags", help=msg)
59 msg =
"list template example tags" 60 self.parser.add_option(
"--etags", action=
"store_true",
61 default=
False, dest=
"etags", help=msg)
62 msg =
"list supported templates" 63 self.parser.add_option(
"--templates", action=
"store_true",
64 default=
False, dest=
"templates", help=msg)
66 "Returns parse list of options" 67 return self.parser.parse_args()
70 "Parse input arguments" 73 key, val = arg.split(
'=')
76 if val[0] ==
'[' and val[-1] ==
']':
77 val = eval(val, {
"__builtins__":
None }, {})
83 Code generator function, parse user arguments and load appropriate 84 template module. Once loaded, run its data method depending on 85 user requested input parameter, e.g. print_etags, print_tags or 86 generate template code. 89 opts, args = optmgr.get_opt()
90 test_env(os.path.join(opts.tdir, opts.tmpl), opts.tmpl)
91 config = {
'pname': opts.pname,
'tmpl': opts.tmpl,
'author': opts.author,
93 'ftype': opts.ftype,
'tmpl_dir': opts.tdir}
95 etags = opts.ketags.split(
',')
96 config.update({
'tmpl_etags': etags})
98 config.update({
'tmpl_etags': []})
107 for name
in os.listdir(opts.tdir):
112 if __name__ ==
'__main__':
static std::string join(char **cmd)