From 7d3350d0bbcb7468fecfd9abffb3fe9f34c0c6c3 Mon Sep 17 00:00:00 2001 From: Chris Johns Date: Tue, 25 Apr 2017 00:31:44 +1000 Subject: rtemstoolkit: Move host support access into a separate module. Moving the host support into a module lets it get used where options is not being used. --- rtemstoolkit/config.py | 4 +- rtemstoolkit/darwin.py | 17 +++++--- rtemstoolkit/freebsd.py | 19 ++++++--- rtemstoolkit/host.py | 111 ++++++++++++++++++++++++++++++++++++++++++++++++ rtemstoolkit/linux.py | 18 +++++--- rtemstoolkit/netbsd.py | 19 ++++++--- rtemstoolkit/options.py | 63 ++------------------------- rtemstoolkit/solaris.py | 19 ++++++--- rtemstoolkit/windows.py | 21 +++++---- tester/rt/stty.py | 8 ++-- 10 files changed, 192 insertions(+), 107 deletions(-) create mode 100644 rtemstoolkit/host.py diff --git a/rtemstoolkit/config.py b/rtemstoolkit/config.py index 697bcaf..a16261b 100644 --- a/rtemstoolkit/config.py +++ b/rtemstoolkit/config.py @@ -51,12 +51,14 @@ import sys try: from . import error from . import execute + from . import host from . import log from . import options from . import path except (ValueError, SystemError): import error import execute + import host import log import options import path @@ -211,7 +213,7 @@ class file(object): if len(sl): e = execute.capture_execution() for s in sl: - if options.host_windows: + if host.is_windows: cmd = '%s -c "%s"' % (self.macros.expand('%{__sh}'), s[2:-1]) else: cmd = s[2:-1] diff --git a/rtemstoolkit/darwin.py b/rtemstoolkit/darwin.py index 57c8197..0400174 100644 --- a/rtemstoolkit/darwin.py +++ b/rtemstoolkit/darwin.py @@ -1,6 +1,6 @@ # # RTEMS Tools Project (http://www.rtems.org/) -# Copyright 2010-2016 Chris Johns (chrisj@rtems.org) +# Copyright 2010-2017 Chris Johns (chrisj@rtems.org) # All rights reserved. # # This file is part of the RTEMS Tools package in 'rtems-tools'. @@ -44,15 +44,19 @@ try: except (ValueError, SystemError): import execute -def load(): - uname = os.uname() +def cpus(): sysctl = '/usr/sbin/sysctl ' e = execute.capture_execution() exit_code, proc, output = e.shell(sysctl + 'hw.ncpu') if exit_code == 0: - ncpus = output.split(' ')[1].strip() + ncpus = int(output.split(' ')[1].strip()) else: - ncpus = '1' + ncpus = 1 + return ncpus + +def overrides(): + uname = os.uname() + ncpus = '%d' % (cores()) defines = { '_ncpus': ('none', 'none', ncpus), '_os': ('none', 'none', 'darwin'), @@ -83,4 +87,5 @@ def load(): if __name__ == '__main__': import pprint - pprint.pprint(load()) + pprint.pprint(cpus()) + pprint.pprint(overrides()) diff --git a/rtemstoolkit/freebsd.py b/rtemstoolkit/freebsd.py index 499d7dd..2842394 100644 --- a/rtemstoolkit/freebsd.py +++ b/rtemstoolkit/freebsd.py @@ -1,6 +1,6 @@ # # RTEMS Tools Project (http://www.rtems.org/) -# Copyright 2010-2016 Chris Johns (chrisj@rtems.org) +# Copyright 2010-2017 Chris Johns (chrisj@rtems.org) # All rights reserved. # # This file is part of the RTEMS Tools package in 'rtems-tools'. @@ -33,7 +33,6 @@ # RTEMS project's spec files. # -import pprint import os # @@ -47,15 +46,19 @@ except (ValueError, SystemError): import check import execute -def load(): - uname = os.uname() +def cpus(): sysctl = '/sbin/sysctl ' e = execute.capture_execution() exit_code, proc, output = e.shell(sysctl + 'hw.ncpu') if exit_code == 0: - ncpus = output.split(' ')[1].strip() + ncpus = int(output.split(' ')[1].strip()) else: - ncpus = '1' + ncpus = 1 + return ncpus + +def overrides(): + uname = os.uname() + ncpus = '%d' % (cpus()) if uname[4] == 'amd64': cpu = 'x86_64' else: @@ -104,4 +107,6 @@ def load(): return defines if __name__ == '__main__': - pprint.pprint(load()) + import pprint + pprint.pprint(cpus()) + pprint.pprint(overrides()) diff --git a/rtemstoolkit/host.py b/rtemstoolkit/host.py new file mode 100644 index 0000000..bae56b6 --- /dev/null +++ b/rtemstoolkit/host.py @@ -0,0 +1,111 @@ +# +# RTEMS Tools Project (http://www.rtems.org/) +# Copyright 2017 Chris Johns (chrisj@rtems.org) +# All rights reserved. +# +# This file is part of the RTEMS Tools package in 'rtems-tools'. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# + +# +# Host specifics. +# + +from __future__ import print_function + +import os + +# +# 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 +except (ValueError, SystemError): + import error + +is_windows = False +platform = None +name = None + +def _load(): + + global is_windows + global platform + global name + + if os.name == 'nt': + name = 'windows' + is_windows = True + elif os.name == 'posix': + uname = os.uname() + if uname[0].startswith('CYGWIN_NT'): + name = 'windows' + elif uname[0] == 'Darwin': + name = darwin + elif uname[0] == 'FreeBSD': + name = 'freebsd' + elif uname[0] == 'NetBSD': + name = netbsd + elif uname[0] == 'Linux': + name = 'linux' + elif uname[0] == 'SunOS': + name = 'solaris' + + if name is None: + raise error.general('unsupported host type; please add') + + #try: + # try: + # platform = __import__(name, globals(), locals(), ['.']) + # except: + # platform = __import__(name, globals(), locals()) + #except: + # raise error.general('failed to load %s host support' % (name)) + + platform = __import__(name, globals(), locals(), ['.', '']) + + if platform is None: + raise error.general('failed to load %s host support' % (name)) + +def cpus(): + _load() + return platform.cpus() + +def overrides(): + _load() + return platform.overrides() + +if __name__ == '__main__': + import pprint + _load() + print('Name : %s' % (name)) + if is_windows: + status = 'Yes' + else: + status = 'No' + print('Windows : %s' % (status)) + print('CPUs : %d' % (cpus())) + print('Overrides :') + pprint.pprint(overrides()) diff --git a/rtemstoolkit/linux.py b/rtemstoolkit/linux.py index 7aea43e..1d7f577 100644 --- a/rtemstoolkit/linux.py +++ b/rtemstoolkit/linux.py @@ -1,6 +1,6 @@ # # RTEMS Tools Project (http://www.rtems.org/) -# Copyright 2010-2016 Chris Johns (chrisj@rtems.org) +# Copyright 2010-2017 Chris Johns (chrisj@rtems.org) # All rights reserved. # # This file is part of the RTEMS Tools package in 'rtems-tools'. @@ -33,7 +33,6 @@ # RTEMS project's spec files. # -import pprint import os import platform @@ -48,9 +47,7 @@ except (ValueError, SystemError): import execute import path -def load(): - uname = os.uname() - smp_mflags = '' +def cpus(): processors = '/bin/grep processor /proc/cpuinfo' e = execute.capture_execution() exit_code, proc, output = e.shell(processors) @@ -63,7 +60,12 @@ def load(): ncpus = int(count) except: pass - ncpus = str(ncpus + 1) + return ncpus + 1 + +def overrides(): + uname = os.uname() + smp_mflags = '' + ncpus = '%d' % cpus() if uname[4].startswith('arm'): cpu = 'arm' else: @@ -153,4 +155,6 @@ def load(): return defines if __name__ == '__main__': - pprint.pprint(load()) + import pprint + pprint.pprint(cpus()) + pprint.pprint(overrides()) diff --git a/rtemstoolkit/netbsd.py b/rtemstoolkit/netbsd.py index 5883682..112fba1 100644 --- a/rtemstoolkit/netbsd.py +++ b/rtemstoolkit/netbsd.py @@ -1,6 +1,6 @@ # # RTEMS Tools Project (http://www.rtems.org/) -# Copyright 2010-2016 Chris Johns (chrisj@rtems.org) +# Copyright 2010-2017 Chris Johns (chrisj@rtems.org) # All rights reserved. # # This file is part of the RTEMS Tools package in 'rtems-tools'. @@ -24,7 +24,6 @@ # RTEMS project's spec files. # -import pprint import os try: @@ -34,15 +33,19 @@ except (ValueError, SystemError): import check import execute -def load(): - uname = os.uname() +def cpus(): sysctl = '/sbin/sysctl ' e = execute.capture_execution() exit_code, proc, output = e.shell(sysctl + 'hw.ncpu') if exit_code == 0: - ncpus = output.split(' ')[1].strip() + ncpus = int(output.split(' ')[1].strip()) else: - ncpus = '1' + ncpus = 1 + return ncpus + +def overrides(): + uname = os.uname() + ncpus = '%d' % (cpus()) if uname[4] == 'amd64': cpu = 'x86_64' else: @@ -93,4 +96,6 @@ def load(): return defines if __name__ == '__main__': - pprint.pprint(load()) + import pprint + pprint.pprint(cpus()) + pprint.pprint(overrides()) diff --git a/rtemstoolkit/options.py b/rtemstoolkit/options.py index 8ff9bb2..70e9786 100644 --- a/rtemstoolkit/options.py +++ b/rtemstoolkit/options.py @@ -50,6 +50,7 @@ try: from . import error from . import execute from . import git + from . import host from . import log from . import macros from . import path @@ -58,6 +59,7 @@ except (ValueError, SystemError): import error import execute import git + import host import log import macros import path @@ -65,11 +67,6 @@ except (ValueError, SystemError): basepath = 'tb' -# -# Save the host state. -# -host_windows = False - class command_line(object): """Process the command line in a common way for all Tool Builder commands.""" @@ -539,61 +536,7 @@ def load(opts): if not isinstance(opts, command_line): raise error.general('invalid options type passed to options loader') - global host_windows - - overrides = None - if os.name == 'nt': - try: - import windows - overrides = windows.load() - host_windows = True - except: - raise error.general('failed to load Windows host support') - elif os.name == 'posix': - uname = os.uname() - try: - if uname[0].startswith('CYGWIN_NT'): - try: - from . import windows - except: - import windows - overrides = windows.load() - elif uname[0] == 'Darwin': - try: - from . import darwin - except: - import darwin - overrides = darwin.load() - elif uname[0] == 'FreeBSD': - try: - from . import freebsd - except: - import freebsd - overrides = freebsd.load() - elif uname[0] == 'NetBSD': - try: - from . import netbsd - except: - import netbsd - overrides = netbsd.load() - elif uname[0] == '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: - raise error.general('unsupported host type; please add') - if overrides is None: - raise error.general('no hosts defaults found; please add') + overrides = host.overrides() for k in overrides: opts.defaults[k] = overrides[k] diff --git a/rtemstoolkit/solaris.py b/rtemstoolkit/solaris.py index 397df68..dc3e490 100644 --- a/rtemstoolkit/solaris.py +++ b/rtemstoolkit/solaris.py @@ -1,6 +1,6 @@ # # RTEMS Tools Project (http://www.rtems.org/) -# Copyright 2010-2016 Chris Johns (chrisj@rtems.org) +# Copyright 2010-2017 Chris Johns (chrisj@rtems.org) # All rights reserved. # # This file is part of the RTEMS Tools package in 'rtems-tools'. @@ -22,7 +22,6 @@ # RTEMS project's spec files. # -import pprint import os try: @@ -34,15 +33,19 @@ except (ValueError, SystemError): import error import execute -def load(): - uname = os.uname() +def cpus(): psrinfo = '/sbin/psrinfo|wc -l' e = execute.capture_execution() exit_code, proc, output = e.shell(psrinfo) if exit_code == 0: - ncpus = output + ncpus = int(output) else: - ncpus = '1' + ncpus = 1 + return ncpus + +def overrides(): + uname = os.uname() + ncpus = '%d' % (cpus()) if uname[4] == 'i86pc': cpu = 'i386' else: @@ -87,4 +90,6 @@ def load(): return defines if __name__ == '__main__': - pprint.pprint(load()) + import pprint + pprint.pprint(cpus()) + pprint.pprint(overrides()) diff --git a/rtemstoolkit/windows.py b/rtemstoolkit/windows.py index 2c08258..8f51069 100644 --- a/rtemstoolkit/windows.py +++ b/rtemstoolkit/windows.py @@ -1,6 +1,6 @@ # # RTEMS Tools Project (http://www.rtems.org/) -# Copyright 2010-2016 Chris Johns (chrisj@rtems.org) +# Copyright 2010-2017 Chris Johns (chrisj@rtems.org) # All rights reserved. # # This file is part of the RTEMS Tools package in 'rtems-tools'. @@ -32,7 +32,6 @@ # Windows specific support and overrides. # -import pprint import os # @@ -46,7 +45,14 @@ except (ValueError, SystemError): import error import execute -def load(): +def cpus(): + if os.environ.has_key('NUMBER_OF_PROCESSORS'): + ncpus = int(os.environ['NUMBER_OF_PROCESSORS']) + else: + ncpus = 1 + return ncpus + +def overrides(): # Default to the native Windows Python. uname = 'win32' system = 'mingw32' @@ -76,10 +82,7 @@ def load(): except: pass - if os.environ.has_key('NUMBER_OF_PROCESSORS'): - ncpus = os.environ['NUMBER_OF_PROCESSORS'] - else: - ncpus = '1' + ncpus = '%d' % (cpus()) defines = { '_ncpus': ('none', 'none', ncpus), @@ -140,4 +143,6 @@ def load(): return defines if __name__ == '__main__': - pprint.pprint(load()) + import pprint + pprint.pprint(cpus()) + pprint.pprint(overrides()) diff --git a/tester/rt/stty.py b/tester/rt/stty.py index b6f0204..55c4ed6 100644 --- a/tester/rt/stty.py +++ b/tester/rt/stty.py @@ -37,11 +37,11 @@ import sys import termios from rtemstoolkit import error -from rtemstoolkit import options +from rtemstoolkit import host from rtemstoolkit import path def save(): - if not options.host_windows: + if not host.is_windows: try: sin = termios.tcgetattr(sys.stdin) sout = termios.tcgetattr(sys.stdout) @@ -60,13 +60,13 @@ def restore(attributes): class tty: def __init__(self, dev): - if options.host_windows: + if host.is_windows: raise error.general('termios not support on host') self.dev = dev self.default_attr = None self.fd = None self.if_on = False - if options.host_windows: + if host.is_windows: raise error.general('TTY consoles not supported on Windows.') if not path.exists(dev): raise error.general('dev not found: %s' % (dev)) -- cgit v1.2.3