summaryrefslogtreecommitdiffstats
path: root/lldb/test/argparse_compat.py
diff options
context:
space:
mode:
authorFilipe Cabecinhas <me@filcab.net>2013-02-16 09:05:23 +0000
committerFilipe Cabecinhas <me@filcab.net>2013-02-16 09:05:23 +0000
commit103e16e4cce5ee896a9d84cb52a880dfc9d906e0 (patch)
tree065e540fe8b2916a9420254491f7205d68df2067 /lldb/test/argparse_compat.py
parent49049ee8c7c461a62682030737c061844e1ebe4a (diff)
downloadbcm5719-llvm-103e16e4cce5ee896a9d84cb52a880dfc9d906e0.tar.gz
bcm5719-llvm-103e16e4cce5ee896a9d84cb52a880dfc9d906e0.zip
Include a small argparse compatibility layer for Python < 2.7
llvm-svn: 175341
Diffstat (limited to 'lldb/test/argparse_compat.py')
-rwxr-xr-xlldb/test/argparse_compat.py80
1 files changed, 80 insertions, 0 deletions
diff --git a/lldb/test/argparse_compat.py b/lldb/test/argparse_compat.py
new file mode 100755
index 00000000000..32f73db5a9f
--- /dev/null
+++ b/lldb/test/argparse_compat.py
@@ -0,0 +1,80 @@
+#!/usr/bin/env python
+
+"""
+Compatibility module to use the lldb test-suite with Python 2.6.
+
+Warning: This may be buggy. It has not been extensively tested and should only
+be used when it is impossible to use a newer Python version.
+It is also a special-purpose class for lldb's test-suite.
+"""
+
+import sys
+
+if sys.version_info >= (2, 7):
+ raise "This module shouldn't be used when argparse is available (Python >= 2.7)"
+else:
+ print "Using Python 2.6 compatibility layer. Some command line options may not be supported"
+
+
+import optparse
+
+
+class ArgumentParser(object):
+ def __init__(self, description="My program's description", prefix_chars='-', add_help=True):
+ self.groups = []
+ self.parser = optparse.OptionParser(description=description, add_help_option=add_help)
+ self.prefix_chars = prefix_chars
+
+ def add_argument_group(self, name):
+ group = optparse.OptionGroup(self.parser, name)
+ # Hack around our test directories argument (what's left after the
+ # options)
+ if name != 'Test directories':
+ self.groups.append(group)
+ return ArgumentGroup(group)
+
+ def add_argument(self, *opt_strs, **kwargs):
+ self.parser.add_option(*opt_strs, **kwargs)
+ # def add_argument(self, opt_str, action='store', dest=None, metavar=None, help=''):
+ # if dest is None and metavar is None:
+ # self.parser.add_argument(opt_str, action=action, help=help)
+
+ def parse_args(self, arguments=sys.argv[1:]):
+ map(lambda g: self.parser.add_option_group(g), self.groups)
+ (options, args) = self.parser.parse_args(arguments)
+ d = vars(options)
+ d['args'] = args
+ return Namespace(d)
+
+ def print_help(self):
+ self.parser.print_help()
+
+
+class ArgumentGroup(object):
+ def __init__(self, option_group):
+ self.option_group = option_group
+
+ def add_argument(self, *opt_strs, **kwargs):
+ # Hack around our positional argument (the test directories)
+ if opt_strs == ('args',):
+ return
+
+ # Hack around the options that start with '+'
+ if len(opt_strs) == 1 and opt_strs[0] == '+a':
+ opt_strs = ('--plus_a',)
+ if len(opt_strs) == 1 and opt_strs[0] == '+b':
+ opt_strs = ('--plus_b',)
+ self.option_group.add_option(*opt_strs, **kwargs)
+
+
+class Namespace(object):
+ def __init__(self, d):
+ self.__dict__ = d
+
+ def __str__(self):
+ strings = []
+ for (k, v) in self.__dict__.iteritems():
+ strings.append(str(k) + '=' + str(v))
+ strings.sort()
+
+ return self.__class__.__name__ + '(' + ', '.join(strings) + ')'
OpenPOWER on IntegriCloud