Ticket #3848: libbsd-library-check.diff

File libbsd-library-check.diff, 6.2 KB (added by Chris Johns, on 03/04/20 at 11:53:19)

Add libbsd library check support

  • builder.py

    diff --git a/builder.py b/builder.py
    index 2921bab8..0eda461f 100755
    a b class SourceFileIfHeaderComposer(SourceFileFragmentComposer): 
    505505
    506506class TestFragementComposer(BuildSystemFragmentComposer):
    507507
    508     def __init__(self, testName, fileFragments, runTest = True, netTest = False, extraLibs = []):
     508    def __init__(self, testName, fileFragments, configTest = None, runTest = True, netTest = False, extraLibs = []):
    509509        self.testName = testName
    510510        self.fileFragments = fileFragments
     511        self.configTest = configTest
    511512        self.runTest = runTest
    512513        self.netTest = netTest
    513514        self.extraLibs = extraLibs
    514515
    515516    def compose(self, path):
    516         return ['tests', self.testName, ('default', None)], { 'files': self.fileFragments,
     517        return ['tests', self.testName, ('default', None)], { 'configTest': self.configTest,
     518                                                              'files': self.fileFragments,
    517519                                                              'run': self.runTest,
    518520                                                              'net': self.netTest,
    519521                                                              'libs': self.extraLibs}
    class TestIfHeaderComposer(TestFragementComposer): 
    524526        if headers is not list:
    525527            headers = [headers]
    526528        self.headers = headers
    527         super(TestIfHeaderComposer, self).__init__(testName, fileFragments,
     529        super(TestIfHeaderComposer, self).__init__(testName, fileFragments, 'header',
    528530                                                   runTest = runTest, netTest = netTest,
    529531                                                   extraLibs = extraLibs)
    530532
    class TestIfHeaderComposer(TestFragementComposer): 
    539541        r[0][2] = (define_keys.strip(), self.headers)
    540542        return r
    541543
     544class TestIfLibraryComposer(TestFragementComposer):
     545
     546    def __init__(self, testName, libraries, fileFragments, runTest = True, netTest = False, extraLibs = []):
     547        if libraries is not list:
     548            libraries = [libraries]
     549        self.libraries = libraries
     550        super(TestIfLibraryComposer, self).__init__(testName, fileFragments, 'library',
     551                                                    runTest = runTest, netTest = netTest,
     552                                                    extraLibs = extraLibs)
     553
     554    def compose(self, path):
     555        r = TestFragementComposer.compose(self, path)
     556        define_keys = ''
     557        for l in self.libraries:
     558            l = l.upper()
     559            for c in '\/-.':
     560                l = l.replace(c, '_')
     561            define_keys += ' ' + l
     562        r[0][2] = (define_keys.strip(), self.libraries)
     563        return r
     564
    542565class KVMSymbolsFragmentComposer(BuildSystemFragmentComposer):
    543566
    544567    def compose(self, path):
    class ModuleManager(object): 
    857880
    858881        self.generator['source-if-header'] = SourceFileIfHeaderComposer
    859882        self.generator['test-if-header'] = TestIfHeaderComposer
     883        self.generator['test-if-library'] = TestIfLibraryComposer
  • libbsd.py

    diff --git a/libbsd.py b/libbsd.py
    index 3823c03f..c2693e20 100644
    a b class tests(builder.Module): 
    52785278        self.addTest(mm.generator['test']('termios06', ['test_main',
    52795279                                                        '../termios/test_termios_driver',
    52805280                                                        '../termios/test_termios_utilities']))
    5281         self.addTest(mm.generator['test-if-header']('debugger01', 'rtems/rtems-debugger.h',
    5282                                                     ['test_main'], runTest = False, netTest = True,
     5281        self.addTest(mm.generator['test-if-library']('debugger01', 'debugger',
     5282                                                     ['test_main'], runTest = False, netTest = True,
    52835283                                                    extraLibs = ['debugger']))
    52845284        self.addTest(mm.generator['test']('crypto01', ['test_main']))
    52855285        self.addTest(mm.generator['test']('ipsec01', ['test_main']))
  • waf_libbsd.py

    diff --git a/waf_libbsd.py b/waf_libbsd.py
    index 84f22b76..c552bef1 100644
    a b class Builder(builder.ModuleManager): 
    109109                if config != 'default':
    110110                    if 'configure' not in data:
    111111                        data['configure'] = { }
    112                     data['configure'][config] = frag[0][2][1]
     112                    configTest = frag[1]['configTest']
     113                    if configTest not in data['configure']:
     114                        data['configure'][configTest] = { }
     115                    data['configure'][configTest][config] = frag[0][2][1]
    113116                if type(frag[1]) is list:
    114117                    if config not in d[cpu]:
    115118                        d[cpu][config] = []
    class Builder(builder.ModuleManager): 
    149152
    150153    def bsp_configure(self, conf, arch_bsp):
    151154        if 'configure' in self.data:
    152             for cfg in self.data['configure']:
    153                 for h in self.data['configure'][cfg]:
    154                     conf.check(header_name = h,
    155                                features = "c",
    156                                includes = conf.env.IFLAGS,
    157                                mandatory = False)
     155            for configTest in self.data['configure']:
     156                for cfg in self.data['configure'][configTest]:
     157                    if configTest == 'header':
     158                        for h in self.data['configure'][configTest][cfg]:
     159                            conf.check(header_name = h,
     160                                       features = "c",
     161                                       includes = conf.env.IFLAGS,
     162                                       mandatory = False)
     163                    elif configTest == 'library':
     164                        for l in self.data['configure'][configTest][cfg]:
     165                            conf.check_cc(lib = l,
     166                                          linkflags = '-L ' + conf.env.LIBDIR,
     167                                          mandatory = False)
     168                    else:
     169                        bld.fatal('invalid config test: %s' % (configTest))
     170
    158171
    159172    def build(self, bld):
    160173        #