Changeset 0565e1f in rtems-source-builder


Ignore:
Timestamp:
Apr 13, 2013, 8:29:30 AM (6 years ago)
Author:
Chris Johns <chrisj@…>
Branches:
4.10, 4.11, 4.9, master
Children:
e45a2e4
Parents:
667255c
Message:

Add support for snapshot testing.

User macro files passed on the command line allow a user to
override the defaults in configuration files to test new changes
in pending releases.

Fix macros issues with keys with more than one map.

Location:
source-builder/sb
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • source-builder/sb/build.py

    r667255c r0565e1f  
    240240        #
    241241        sources = package.sources()
    242         for sm in self.macros.find('source[0-9]*'):
    243             sources[sm] = [self.macros[sm]]
    244242        url = None
    245243        for s in sources:
  • source-builder/sb/config.py

    r667255c r0565e1f  
    104104
    105105    def get_info(self, info, expand = True):
    106         if info in self.infos:
     106        if info in self.config.macros:
     107            _info = self.config.macros[info].split('\n')
    107108            if expand:
    108                 return self.config.expand(self.infos[info])
     109                return self.config.expand(_info)
    109110            else:
    110                 return self.infos[info]
     111                return _info
    111112        return None
    112113
    113114    def extract_info(self, label, expand = True):
     115        ll = label.lower()
    114116        infos = {}
    115         for i in self.infos:
    116             il = i.lower()
    117             if il.startswith(label):
    118                 if il == label:
    119                     il = label + '0'
    120                 elif not il[len(label):].isdigit():
    121                     continue
    122                 infos[il] = self.config.expand(self.infos[i])
     117        keys = self.config.macros.find('%s.*' % (ll))
     118        for k in keys:
     119            if k == ll:
     120                k = '%s0' % (ll)
     121            elif not k[len(ll):].isdigit():
     122                continue
     123            infos[k] = [self.config.expand(self.config.macros[k])]
    123124        return infos
    124125
     126    def _find_macro(self, label, expand = True):
     127        if label in self.config.macros:
     128            macro = self.config.macros[label].split('\n')
     129            if expand:
     130                return self.config.expand(macro)
     131            else:
     132                return macro
     133        return None
     134
    125135    def find_info(self, label, expand = True):
    126         for i in self.infos:
    127             if i.lower() == label:
    128                 if expand:
    129                     return self.config.expand(self.infos[i])
    130                 else:
    131                     return self.infos[i]
    132         return None
     136        return self._find_macro(label, expand)
    133137
    134138    def find_directive(self, label, expand = True):
    135         for d in self.directives:
    136             if d.lower() == label:
    137                 if expand:
    138                     return self.config.expand(self.directives[d])
    139                 else:
    140                     return self.directives[d]
    141         return None
     139        return self._find_macro(label, expand)
    142140
    143141    def name(self):
  • source-builder/sb/macros.py

    r667255c r0565e1f  
    119119
    120120    def __iter__(self):
    121         return macros.macro_iterator(self.macros[self.read_map].keys())
     121        return macros.macro_iterator(self.keys())
    122122
    123123    def __getitem__(self, key):
    124124        macro = self.get(key)
    125         if macro is None:
     125        if macro is None or macro[1] == 'undefine':
    126126            raise IndexError('key: %s' % (key))
    127127        return macro[2]
     
    144144        if value[0] not in ['none', 'triplet', 'dir', 'file', 'exe']:
    145145            raise TypeError('bad value tuple (type field): %s' % (value[0]))
    146         if value[1] not in ['none', 'optional', 'required', 'override']:
     146        if value[1] not in ['none', 'optional', 'required', 'override', 'undefine']:
    147147            raise TypeError('bad value tuple (attrib field): %s' % (value[1]))
    148148        self.macros[self.write_map][self.key_filter(key)] = value
     
    158158
    159159    def keys(self):
    160         k = self.macros[self.read_map].keys()
     160
     161        def _map_keys(_map):
     162            u = []
     163            k = []
     164            for mk in _map:
     165                if _map[mk][1] == 'undefine':
     166                    u += [mk]
     167                else:
     168                    k += [mk]
     169            return k, u
     170
     171        keys, undefined = _map_keys(self.macros[self.read_map])
    161172        if map is not 'global':
    162             k += self.macros['global'].keys()
    163         return sorted(set(k))
     173            gk, u = _map_keys(self.macros['global'])
     174            undefined = set(undefined + u)
     175            for k in gk:
     176                if k not in undefined:
     177                    keys += [k]
     178        return sorted(set(keys))
    164179
    165180    def has_key(self, key):
    166181        if type(key) is not str:
    167182            raise TypeError('bad key type (want str): %s' % (type(key)))
    168         key = self.key_filter(key)
    169         if key not in self.macros[self.read_map].keys():
    170             if key not in self.macros['global'].keys():
    171                 return False
     183        if self.key_filter(key) not in self.keys():
     184            return False
    172185        return True
    173186
     
    278291                    token = ''
    279292                    state = 'key'
    280         return macros
     293        for m in macros:
     294            if m not in self.macros:
     295                self.macros[m] = {}
     296            for mm in macros[m]:
     297                self.macros[m][mm] = macros[m][mm]
    281298
    282299    def load(self, name):
     
    288305        macros = self.parse(mc)
    289306        mc.close()
    290         for m in macros:
    291             if m not in self.macros:
    292                 self.macros[m] = {}
    293             for mm in macros[m]:
    294                 self.macros[m][mm] = macros[m][mm]
    295307        self.files += [name]
    296308
     
    377389        print 'error: copy failed.'
    378390        sys.exit(1)
     391    m.parse("[test]\n" \
     392            "test1: none, undefine, ''\n" \
     393            "name:  none, override, 'pink'\n")
     394    m.set_read_map('test')
     395    if m['name'] != 'pink':
     396        print 'error: override failed. name is %s' % (m['name'])
     397        sys.exit(1)
     398    if m.has_key('test1'):
     399        print 'error: map undefine failed.'
     400        sys.exit(1)
    379401    print m
     402    print m.keys()
Note: See TracChangeset for help on using the changeset viewer.