Changeset fd5042a in rtems-source-builder


Ignore:
Timestamp:
Apr 20, 2013, 11:42:39 AM (6 years ago)
Author:
Chris Johns <chrisj@…>
Branches:
4.10, 4.11, 4.9, master
Children:
4ce931b
Parents:
b0c2756
Message:

Support multiple read maps.

A build could require more than one map to be active at once. This
change allows more than one map to be set. An example is gcc and
newlib. Having separate maps allows a user to control which part
they test.

File:
1 edited

Legend:

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

    rb0c2756 rfd5042a  
    5757        if original is None:
    5858            self.macros = {}
    59             self.read_map = 'global'
     59            self.read_maps = []
    6060            self.write_map = 'global'
    61             self.macros[self.read_map] = {}
    62             self.macros[self.read_map]['_cwd'] = ('dir', 'required', path.shell(os.getcwd()))
    63             self.macros[self.read_map]['_sbdir'] = ('dir', 'required', path.shell(sbdir))
     61            self.macros['global'] = {}
     62            self.macros['global']['_cwd'] = ('dir', 'required', path.shell(os.getcwd()))
     63            self.macros['global']['_sbdir'] = ('dir', 'required', path.shell(sbdir))
    6464        else:
    6565            self.macros = {}
     
    6969                for k in original.macros[m]:
    7070                    self.macros[m][k] = original.macros[m][k]
    71             self.read_map = original.read_map
     71            self.read_maps = sorted(original.read_maps)
    7272            self.write_map = original.write_map
    7373        if name is not None:
     
    158158
    159159    def keys(self):
    160 
    161         def _map_keys(_map):
    162             u = []
    163             k = []
    164             for mk in _map:
    165                 if _map[mk][1] == 'undefine':
    166                     u += [mk]
     160        keys = self.macros['global'].keys()
     161        for rm in self.get_read_maps():
     162            for mk in self.macros[rm]:
     163                if self.macros[rm][mk][1] == 'undefine':
     164                    if mk in keys:
     165                        keys.remove(mk)
    167166                else:
    168                     k += [mk]
    169             return k, u
    170 
    171         keys, undefined = _map_keys(self.macros[self.read_map])
    172         if map is not 'global':
    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]
     167                    keys.append(mk)
    178168        return sorted(set(keys))
    179169
     
    187177    def maps(self):
    188178        return self.macros.keys()
     179
     180    def get_read_maps(self):
     181        return [rm[5:] for rm in self.read_maps]
    189182
    190183    def key_filter(self, key):
     
    311304            raise TypeError('bad key type: %s' % (type(key)))
    312305        key = self.key_filter(key)
    313         if self.read_map is not 'global'and key in self.macros[self.read_map]:
    314             return self.macros[self.read_map][key]
     306        for rm in self.get_read_maps():
     307            if key in self.macros[rm]:
     308                return self.macros[rm][key]
    315309        if key in self.macros['global']:
    316310            return self.macros['global'][key]
     
    368362        return keys
    369363
    370     def set_read_map(self, map):
    371         if map in self.macros:
    372             self.read_map = map
     364    def set_read_map(self, _map):
     365        if _map in self.macros:
     366            if _map not in self.get_read_maps():
     367                rm = '%04d_%s' % (len(self.read_maps), _map)
     368                self.read_maps = sorted(self.read_maps + [rm])
     369            return True
     370        return False
     371
     372    def unset_read_map(self, _map):
     373        if _map in self.get_read_maps():
     374            for i in range(0, len(self.read_maps)):
     375                if '%04d_%s' % (i, _map) == self.read_maps[i]:
     376                    self.read_maps.pop(i)
    373377            return True
    374378        return False
     
    392396            "test1: none, undefine, ''\n" \
    393397            "name:  none, override, 'pink'\n")
    394     m.set_read_map('test')
     398    print 'set test:', m.set_read_map('test')
    395399    if m['name'] != 'pink':
    396400        print 'error: override failed. name is %s' % (m['name'])
     
    399403        print 'error: map undefine failed.'
    400404        sys.exit(1)
     405    print 'unset test:', m.unset_read_map('test')
    401406    print m
    402407    print m.keys()
Note: See TracChangeset for help on using the changeset viewer.