[rtems-tools commit] Install the rtems-test command.

Chris Johns chrisj at rtems.org
Sun Feb 8 06:14:15 UTC 2015


Module:    rtems-tools
Branch:    master
Commit:    b7d48ef5a4a09010305a5981f64005161a34409d
Changeset: http://git.rtems.org/rtems-tools/commit/?id=b7d48ef5a4a09010305a5981f64005161a34409d

Author:    Chris Johns <chrisj at rtems.org>
Date:      Sun Feb  8 17:12:04 2015 +1100

Install the rtems-test command.

This installs the Python RTEMS Toolkit.

The copmiler has been switched from forcing gcc to allowing waf
to detect the host's tool chain.

---

 linkers/wscript                  |  8 +++----
 rtemstoolkit/macros.py           | 25 ++++++++++++++++++----
 rtemstoolkit/wscript             | 31 +++++++++++++++++++++++----
 tester/rt/options.py             | 23 ++++++++++++++++----
 tester/rt/test.py                |  2 +-
 tester/rtems-test                |  3 ++-
 tester/rtems/testing/defaults.mc |  1 -
 tester/wscript                   | 45 +++++++++++++++++++++++++++++++++++-----
 tools/gdb/python/wscript         |  8 ++++---
 9 files changed, 119 insertions(+), 27 deletions(-)

diff --git a/linkers/wscript b/linkers/wscript
index d48ce47..b1a99c6 100644
--- a/linkers/wscript
+++ b/linkers/wscript
@@ -8,12 +8,12 @@ version_minor = 0
 version_revision = 0
 
 def options(opt):
-    opt.load("g++")
-    opt.load("gcc")
+    opt.load('compiler_c')
+    opt.load('compiler_cxx')
 
 def configure(conf):
-    conf.load("g++")
-    conf.load("gcc")
+    conf.load('compiler_c')
+    conf.load('compiler_cxx')
 
     conf.env.C_OPTS = conf.options.c_opts.split(',')
     conf.env.RTEMS_VERSION = conf.options.rtems_version
diff --git a/rtemstoolkit/macros.py b/rtemstoolkit/macros.py
index d8c3175..8db0729 100644
--- a/rtemstoolkit/macros.py
+++ b/rtemstoolkit/macros.py
@@ -33,6 +33,7 @@
 #
 
 import copy
+import inspect
 import re
 import os
 import string
@@ -71,11 +72,21 @@ class macros:
             self.read_maps = []
             self.read_map_locked = False
             self.write_map = 'global'
+            self.rtpath = path.abspath(path.dirname(inspect.getfile(macros)))
+            if path.dirname(self.rtpath).endswith('/share/rtems'):
+                self.prefix = path.dirname(self.rtpath)[:-len('/share/rtems')]
+            else:
+                self.prefix = '.'
             self.macros['global'] = {}
             self.macros['global']['nil'] = ('none', 'none', '')
-            self.macros['global']['_cwd'] = ('dir', 'required', path.abspath(os.getcwd()))
-            self.macros['global']['_rtdir'] = ('dir', 'required', path.abspath(rtdir))
-            self.macros['global']['_rttop'] = ('dir', 'required', path.abspath(path.dirname(rtdir)))
+            self.macros['global']['_cwd'] = ('dir',
+                                             'required',
+                                             path.abspath(os.getcwd()))
+            self.macros['global']['_prefix'] = ('dir', 'required', self.prefix)
+            self.macros['global']['_rtdir'] = ('dir',
+                                               'required',
+                                               path.abspath(self.expand(rtdir)))
+            self.macros['global']['_rttop'] = ('dir', 'required', self.prefix)
         else:
             self.macros = {}
             for m in original.macros:
@@ -419,14 +430,19 @@ class macros:
 
     def expand(self, _str):
         """Simple basic expander of config file macros."""
+        start_str = _str
         expanded = True
+        count = 0
         while expanded:
+            count += 1
+            if count > 1000:
+                raise error.general('expansion looped over 1000 times "%s"' %
+                                    (start_str))
             expanded = False
             for m in self.macro_filter.findall(_str):
                 name = m[2:-1]
                 macro = self.get(name)
                 if macro is None:
-                    print self.macros
                     raise error.general('cannot expand default macro: %s in "%s"' %
                                         (m, _str))
                 _str = _str.replace(m, macro[2])
@@ -474,6 +490,7 @@ class macros:
 if __name__ == "__main__":
     import copy
     import sys
+    print inspect.getfile(macros)
     m = macros(name = 'defaults.mc')
     d = copy.copy(m)
     m['test1'] = 'something'
diff --git a/rtemstoolkit/wscript b/rtemstoolkit/wscript
index 07703a0..229deeb 100644
--- a/rtemstoolkit/wscript
+++ b/rtemstoolkit/wscript
@@ -14,12 +14,12 @@ top = '.'
 out = 'build-' + sys.platform
 
 def options(opt):
-    opt.load("g++")
-    opt.load("gcc")
+    opt.load('compiler_c')
+    opt.load('compiler_cxx')
 
 def configure(conf):
-    conf.load("g++")
-    conf.load("gcc")
+    conf.load('compiler_c')
+    conf.load('compiler_cxx')
     conf_libiberty(conf)
     conf_libelf(conf)
 
@@ -100,6 +100,29 @@ def build(bld):
               cxxflags = conf['cxxflags'] + conf['warningflags'],
               linkflags = conf['linkflags'])
 
+    #
+    # The Python toolkit.
+    #
+    bld(features = 'py',
+        source = ['__init__.py',
+                  'check.py',
+                  'config.py',
+                  'darwin.py',
+                  'error.py',
+                  'execute.py',
+                  'freebsd.py',
+                  'git.py',
+                  'linux.py',
+                  'log.py',
+                  'macros.py',
+                  'mailer.py',
+                  'options.py',
+                  'path.py',
+                  'stacktraces.py',
+                  'version.py',
+                  'windows.py'],
+        install_path = '${PREFIX}/share/rtems/rtemstoolkit')
+
 def rebuild(ctx):
     import waflib.Options
     waflib.Options.commands.extend(['clean', 'build'])
diff --git a/tester/rt/options.py b/tester/rt/options.py
index f637017..2190818 100644
--- a/tester/rt/options.py
+++ b/tester/rt/options.py
@@ -48,6 +48,11 @@ from rtemstoolkit import path
 
 import version
 
+#
+# The path for the defaults.
+#
+defaults_mc = 'rtems/testing/defaults.mc'
+
 class command_line(options.command_line):
     """Process the command line in a common way for all Tool Builder commands."""
 
@@ -71,7 +76,7 @@ class command_line(options.command_line):
 
 def load(args, optargs = None,
          command_path = None,
-         defaults = '%{_rtdir}/rtems/testing/defaults.mc'):
+         defaults = '%s' % (defaults_mc)):
     #
     # The path to this command if not supplied by the upper layers.
     #
@@ -80,20 +85,30 @@ def load(args, optargs = None,
         if len(command_path) == 0:
             command_path = '.'
     #
+    # Check if there is a defaults.mc file under the command path. If so this is
+    # the tester being run from within the git repo. If not found assume the tools
+    # have been installed and the defaults is in the install prefix.
+    #
+    print path.join(command_path, defaults_mc)
+    if path.exists(path.join(command_path, defaults_mc)):
+        rtdir = command_path
+    else:
+        rtdir = '%{_prefix}/share/rtems/tester'
+    defaults = '%s/%s' % (rtdir, defaults_mc)
+    #
     # The command line contains the base defaults object all build objects copy
     # and modify by loading a configuration.
     #
     opts = command_line(args,
                         optargs,
-                        macros.macros(name = defaults,
-                                      rtdir = command_path),
+                        macros.macros(name = defaults, rtdir = rtdir),
                         command_path)
     options.load(opts)
     return opts
 
 def run(args):
     try:
-        _opts = load(args = args, defaults = 'rtems/testing/defaults.mc')
+        _opts = load(args = args, defaults = defaults_mc)
         log.notice('RTEMS Test - Defaults, v%s' % (version.str()))
         _opts.log_info()
         log.notice('Options:')
diff --git a/tester/rt/test.py b/tester/rt/test.py
index b1ae0cd..d9a04da 100644
--- a/tester/rt/test.py
+++ b/tester/rt/test.py
@@ -307,7 +307,7 @@ def run(command_path = None):
     except error.exit, eerr:
         sys.exit(2)
     except KeyboardInterrupt:
-        if opts.find_arg('--stacktrace'):
+        if opts is not None and opts.find_arg('--stacktrace'):
             print '}} dumping:', threading.active_count()
             for t in threading.enumerate():
                 print '}} ', t.name
diff --git a/tester/rtems-test b/tester/rtems-test
index 53c81cd..1684abc 100755
--- a/tester/rtems-test
+++ b/tester/rtems-test
@@ -32,7 +32,8 @@
 import sys, os
 base = os.path.dirname(os.path.abspath(sys.argv[0]))
 parent = os.path.dirname(base)
-sys.path = [base, parent] + sys.path
+rtems = os.path.join(parent, 'share', 'rtems')
+sys.path = [base, parent, rtems] + sys.path
 
 try:
     import rt.test
diff --git a/tester/rtems/testing/defaults.mc b/tester/rtems/testing/defaults.mc
index bf220f3..bf3186c 100644
--- a/tester/rtems/testing/defaults.mc
+++ b/tester/rtems/testing/defaults.mc
@@ -75,7 +75,6 @@ _infodir:            dir,     none,     '%{_datarootdir}/info'
 _localedir:          dir,     none,     '%{_datarootdir}/locale'
 _localedir:          dir,     none,     '%{_datadir}/locale'
 _localstatedir:      dir,     none,     '%{_prefix}/var'
-_prefix:             dir,     none,     '%{_usr}'
 _usr:                dir,     none,     '/usr/local'
 _usrsrc:             dir,     none,     '%{_usr}/src'
 _var:                dir,     none,     '/usr/local/var'
diff --git a/tester/wscript b/tester/wscript
index 1c5139c..16030df 100644
--- a/tester/wscript
+++ b/tester/wscript
@@ -1,6 +1,6 @@
 #
 # RTEMS Tools Project (http://www.rtems.org/)
-# Copyright 2014 Chris Johns (chrisj at rtems.org)
+# Copyright 2015 Chris Johns (chrisj at rtems.org)
 # All rights reserved.
 #
 # This file is part of the RTEMS Tools package in 'rtems-tools'.
@@ -34,14 +34,49 @@ def recurse(ctx):
     for sd in subdirs:
         ctx.recurse(sd)
 
-def options(ctx):
-    recurse(ctx)
+def options(opt):
+    recurse(opt)
+    opt.load('python')
 
 def configure(ctx):
     recurse(ctx)
+    conf.load('python')
+    conf.check_python_version((2,7,3))
 
-def build(ctx):
-    recurse(ctx)
+def build(bld):
+    recurse(bld)
+
+    #
+    # Install the tester code.
+    #
+    bld(features = 'py',
+        source = ['rt/__init__.py',
+                  'rt/bsps.py',
+                  'rt/config.py',
+                  'rt/console.py',
+                  'rt/gdb.py',
+                  'rt/options.py',
+                  'rt/report.py',
+                  'rt/stty.py',
+                  'rt/test.py',
+                  'rt/version.py'],
+        install_path = '${PREFIX}/share/rtems/rt')
+    bld(features = 'py',
+        source = ['rt/pygdb/__init__.py',
+                  'rt/pygdb/mi_parser.py',
+                  'rt/pygdb/spark.py'],
+        install_path = '${PREFIX}/share/rtems/rt/pygdb')
+    bld.install_files('${PREFIX}/bin', ['rtems-test'], chmod = 0755)
+    bld.install_files('${PREFIX}/bin', ['rtems-test'], chmod = 0755)
+
+    #
+    # Install the tester configuration files.
+    #
+    config = bld.path.find_dir('rtems')
+    bld.install_files('${PREFIX}/share/rtems/tester/rtems',
+                      config.ant_glob('**', excl=['*~']),
+                      cwd = config,
+                      relative_trick = True)
 
 def install(ctx):
     recurse(ctx)
diff --git a/tools/gdb/python/wscript b/tools/gdb/python/wscript
index 5c898c1..0cb5bb8 100644
--- a/tools/gdb/python/wscript
+++ b/tools/gdb/python/wscript
@@ -3,10 +3,11 @@
 #
 
 def options(opt):
-    pass
+    opt.load('python')
 
 def configure(conf):
     conf.load('python')
+    conf.check_python_version((2,7,3))
 
 def build(bld):
     source = ['__init__.py',
@@ -26,5 +27,6 @@ def build(bld):
               'supercore_printer.py',
               'threads.py',
               'watchdog.py']
-    bld(features = 'py', source = source, install_path = None)
-    bld.install_files('${PREFIX}/share/gdb/python/rtems', source)
+    bld(features = 'py',
+        source = source,
+        install_path = '${PREFIX}/share/gdb/python/rtems')



More information about the vc mailing list