[PATCH] waf: Change the test configure check for libdebugger to it's lib

chrisj at rtems.org chrisj at rtems.org
Thu Mar 5 10:23:15 UTC 2020


From: Chris Johns <chrisj at rtems.org>

- Add support for a 'test-if-library'

- Use rtems_waf's 'test_application()' fragment in the check_cc
  call

Closes #3948
---
 builder.py    | 30 +++++++++++++++++++++++++++---
 libbsd.py     |  4 ++--
 waf_libbsd.py | 28 +++++++++++++++++++++-------
 3 files changed, 50 insertions(+), 12 deletions(-)

diff --git a/builder.py b/builder.py
index 2921bab8..0eda461f 100755
--- a/builder.py
+++ b/builder.py
@@ -505,15 +505,17 @@ class SourceFileIfHeaderComposer(SourceFileFragmentComposer):
 
 class TestFragementComposer(BuildSystemFragmentComposer):
 
-    def __init__(self, testName, fileFragments, runTest = True, netTest = False, extraLibs = []):
+    def __init__(self, testName, fileFragments, configTest = None, runTest = True, netTest = False, extraLibs = []):
         self.testName = testName
         self.fileFragments = fileFragments
+        self.configTest = configTest
         self.runTest = runTest
         self.netTest = netTest
         self.extraLibs = extraLibs
 
     def compose(self, path):
-        return ['tests', self.testName, ('default', None)], { 'files': self.fileFragments,
+        return ['tests', self.testName, ('default', None)], { 'configTest': self.configTest,
+                                                              'files': self.fileFragments,
                                                               'run': self.runTest,
                                                               'net': self.netTest,
                                                               'libs': self.extraLibs}
@@ -524,7 +526,7 @@ class TestIfHeaderComposer(TestFragementComposer):
         if headers is not list:
             headers = [headers]
         self.headers = headers
-        super(TestIfHeaderComposer, self).__init__(testName, fileFragments,
+        super(TestIfHeaderComposer, self).__init__(testName, fileFragments, 'header',
                                                    runTest = runTest, netTest = netTest,
                                                    extraLibs = extraLibs)
 
@@ -539,6 +541,27 @@ class TestIfHeaderComposer(TestFragementComposer):
         r[0][2] = (define_keys.strip(), self.headers)
         return r
 
+class TestIfLibraryComposer(TestFragementComposer):
+
+    def __init__(self, testName, libraries, fileFragments, runTest = True, netTest = False, extraLibs = []):
+        if libraries is not list:
+            libraries = [libraries]
+        self.libraries = libraries
+        super(TestIfLibraryComposer, self).__init__(testName, fileFragments, 'library',
+                                                    runTest = runTest, netTest = netTest,
+                                                    extraLibs = extraLibs)
+
+    def compose(self, path):
+        r = TestFragementComposer.compose(self, path)
+        define_keys = ''
+        for l in self.libraries:
+            l = l.upper()
+            for c in '\/-.':
+                l = l.replace(c, '_')
+            define_keys += ' ' + l
+        r[0][2] = (define_keys.strip(), self.libraries)
+        return r
+
 class KVMSymbolsFragmentComposer(BuildSystemFragmentComposer):
 
     def compose(self, path):
@@ -857,3 +880,4 @@ class ModuleManager(object):
 
         self.generator['source-if-header'] = SourceFileIfHeaderComposer
         self.generator['test-if-header'] = TestIfHeaderComposer
+        self.generator['test-if-library'] = TestIfLibraryComposer
diff --git a/libbsd.py b/libbsd.py
index 3823c03f..c2693e20 100644
--- a/libbsd.py
+++ b/libbsd.py
@@ -5278,8 +5278,8 @@ class tests(builder.Module):
         self.addTest(mm.generator['test']('termios06', ['test_main',
                                                         '../termios/test_termios_driver',
                                                         '../termios/test_termios_utilities']))
-        self.addTest(mm.generator['test-if-header']('debugger01', 'rtems/rtems-debugger.h',
-                                                    ['test_main'], runTest = False, netTest = True,
+        self.addTest(mm.generator['test-if-library']('debugger01', 'debugger',
+                                                     ['test_main'], runTest = False, netTest = True,
                                                     extraLibs = ['debugger']))
         self.addTest(mm.generator['test']('crypto01', ['test_main']))
         self.addTest(mm.generator['test']('ipsec01', ['test_main']))
diff --git a/waf_libbsd.py b/waf_libbsd.py
index 84f22b76..e6f3c21c 100644
--- a/waf_libbsd.py
+++ b/waf_libbsd.py
@@ -109,7 +109,10 @@ class Builder(builder.ModuleManager):
                 if config != 'default':
                     if 'configure' not in data:
                         data['configure'] = { }
-                    data['configure'][config] = frag[0][2][1]
+                    configTest = frag[1]['configTest']
+                    if configTest not in data['configure']:
+                        data['configure'][configTest] = { }
+                    data['configure'][configTest][config] = frag[0][2][1]
                 if type(frag[1]) is list:
                     if config not in d[cpu]:
                         d[cpu][config] = []
@@ -149,12 +152,23 @@ class Builder(builder.ModuleManager):
 
     def bsp_configure(self, conf, arch_bsp):
         if 'configure' in self.data:
-            for cfg in self.data['configure']:
-                for h in self.data['configure'][cfg]:
-                    conf.check(header_name = h,
-                               features = "c",
-                               includes = conf.env.IFLAGS,
-                               mandatory = False)
+            for configTest in self.data['configure']:
+                for cfg in self.data['configure'][configTest]:
+                    if configTest == 'header':
+                        for h in self.data['configure'][configTest][cfg]:
+                            conf.check(header_name = h,
+                                       features = "c",
+                                       includes = conf.env.IFLAGS,
+                                       mandatory = False)
+                    elif configTest == 'library':
+                        for l in self.data['configure'][configTest][cfg]:
+                            conf.check_cc(lib = l,
+                                          fragment = rtems.test_application(),
+                                          execute = False,
+                                          mandatory = False)
+                    else:
+                        bld.fatal('invalid config test: %s' % (configTest))
+
 
     def build(self, bld):
         #
-- 
2.23.0



More information about the devel mailing list