diff options
author | Chris Johns <chrisj@rtems.org> | 2016-03-03 16:46:18 +1100 |
---|---|---|
committer | Chris Johns <chrisj@rtems.org> | 2016-03-03 16:53:39 +1100 |
commit | b0fa2ae9981b0ccf6a66cb8df2241caa5038eb36 (patch) | |
tree | d4f7f225cd35334ff18c3189bf1cdefa0d3335b4 /rtemstoolkit/options.py | |
parent | 0e5d89d9469fb755402cbabc09280557c7e01fcc (diff) |
Update rtems-tool to support Python 2 and 3.
Add solaris and netbsd.
Close #2619.
Diffstat (limited to 'rtemstoolkit/options.py')
-rw-r--r-- | rtemstoolkit/options.py | 86 |
1 files changed, 64 insertions, 22 deletions
diff --git a/rtemstoolkit/options.py b/rtemstoolkit/options.py index 132445e..8ff9bb2 100644 --- a/rtemstoolkit/options.py +++ b/rtemstoolkit/options.py @@ -1,6 +1,6 @@ # # RTEMS Tools Project (http://www.rtems.org/) -# Copyright 2010-2014 Chris Johns (chrisj@rtems.org) +# Copyright 2010-2016 Chris Johns (chrisj@rtems.org) # All rights reserved. # # This file is part of the RTEMS Tools package in 'rtems-tools'. @@ -32,22 +32,36 @@ # Determine the defaults and load the specific file. # +from __future__ import print_function + import copy import glob import pprint import re import os import string - -import error -import execute -import git -import log -import macros -import path import sys -import version +# +# Support to handle use in a package and as a unit test. +# If there is a better way to let us know. +# +try: + from . import error + from . import execute + from . import git + from . import log + from . import macros + from . import path + from . import version +except (ValueError, SystemError): + import error + import execute + import git + import log + import macros + import path + import version basepath = 'tb' @@ -61,7 +75,7 @@ class command_line(object): def __init__(self, base_path = None, argv = None, optargs = None, defaults = None, long_opts = None, long_opts_help = None, - command_path = None, log_default = None): + command_path = '', log_default = None): if argv is None: return @@ -69,7 +83,7 @@ class command_line(object): global basepath if long_opts == None: - raise error.general('No options provided') + long_opts = {} basepath = base_path @@ -77,6 +91,9 @@ class command_line(object): raise error.general('log default is a list') self.log_default = log_default + if defaults is None: + defaults = macros.macros() + self.long_opts = { # key macro handler param defs init '--jobs' : ('_jobs', self._lo_jobs, True, 'default', True), @@ -128,7 +145,7 @@ class command_line(object): elif long_opts[lo][1] == 'string': handler = self._lo_string elif long_opts[lo][1] == 'path': - hanlder = self._lo_path + handler = self._lo_path elif long_opts[lo][1] == 'jobs': handler = self._lo_jobs elif long_opts[lo][1] == 'bool': @@ -139,9 +156,10 @@ class command_line(object): raise error.general('invalid option handler: %s: %s' % (lo, long_opts[lo][1])) self.long_opts[lo] = (long_opts[lo][0], handler, long_opts[lo][2], long_opts[lo][3], long_opts[lo][4]) - if lo not in long_opts_help: - raise error.general('no help for option: %s' % (lo)) - self.long_opts_help[lo] = long_opts_help[lo] + if long_opts_help is not None: + if lo not in long_opts_help: + raise error.general('no help for option: %s' % (lo)) + self.long_opts_help[lo] = long_opts_help[lo] def __copy__(self): new = type(self)() @@ -159,7 +177,7 @@ class command_line(object): def __str__(self): def _dict(dd): s = '' - ddl = dd.keys() + ddl = list(dd.keys()) ddl.sort() for d in ddl: s += ' ' + d + ': ' + str(dd[d]) + '\n' @@ -276,7 +294,7 @@ class command_line(object): print('%s: [options] [args]' % (self.command_name)) print('RTEMS Tools Project (c) 2012-2015 Chris Johns') print('Options and arguments:') - opts = self.long_opts_help.keys() + opts = list(self.long_opts_help.keys()) if self.optargs: opts += self.optargs.keys() indent = self._help_indent() @@ -518,6 +536,9 @@ def load(opts): command line. """ + if not isinstance(opts, command_line): + raise error.general('invalid options type passed to options loader') + global host_windows overrides = None @@ -532,20 +553,41 @@ def load(opts): uname = os.uname() try: if uname[0].startswith('CYGWIN_NT'): - import windows + try: + from . import windows + except: + import windows overrides = windows.load() elif uname[0] == 'Darwin': - import darwin + try: + from . import darwin + except: + import darwin overrides = darwin.load() elif uname[0] == 'FreeBSD': - import freebsd + try: + from . import freebsd + except: + import freebsd overrides = freebsd.load() elif uname[0] == 'NetBSD': - import netbsd + try: + from . import netbsd + except: + import netbsd overrides = netbsd.load() elif uname[0] == 'Linux': - import linux + try: + from . import linux + except: + import linux overrides = linux.load() + elif uname[0] == 'SunOS': + try: + from . import solaris + except: + import solaris + overrides = solaris.load() except: raise error.general('failed to load %s host support' % (uname[0])) else: |