summaryrefslogtreecommitdiffstats
path: root/source-builder/sb/macros.py
diff options
context:
space:
mode:
authorChris Johns <chrisj@rtems.org>2014-05-13 23:26:09 +1000
committerChris Johns <chrisj@rtems.org>2014-05-13 23:26:09 +1000
commit9a15c40e1b2ac56a678e79519e1e78160009af92 (patch)
tree308f3f407a06c4073612b813d4d40ed0c5c5c60e /source-builder/sb/macros.py
parent4.11/rtems-lm32: Use gcc-4.9.0 and fix gdb simulator build on Windows. (diff)
downloadrtems-source-builder-9a15c40e1b2ac56a678e79519e1e78160009af92.tar.bz2
sb: Implement %source and %patch to manage source and patches.
Remove the numbered source and patches and automatically manage sources and patches. This removes the overhead in maintaining large collections of patches.
Diffstat (limited to 'source-builder/sb/macros.py')
-rw-r--r--source-builder/sb/macros.py48
1 files changed, 40 insertions, 8 deletions
diff --git a/source-builder/sb/macros.py b/source-builder/sb/macros.py
index 194d4ed..1f37ae4 100644
--- a/source-builder/sb/macros.py
+++ b/source-builder/sb/macros.py
@@ -84,7 +84,10 @@ class macros:
text = ''
for f in self.files:
text += '> %s%s' % (f, os.linesep)
- for map in self.macros:
+ maps = sorted(self.macros)
+ maps.remove('global')
+ maps += ['global']
+ for map in maps:
text += '[%s]%s' % (map, os.linesep)
for k in sorted(self.macros[map].keys()):
d = self.macros[map][k]
@@ -162,8 +165,11 @@ class macros:
def __len__(self):
return len(self.keys())
- def keys(self):
- keys = self.macros['global'].keys()
+ def keys(self, globals = True):
+ if globals:
+ keys = self.macros['global'].keys()
+ else:
+ keys = []
for rm in self.get_read_maps():
for mk in self.macros[rm]:
if self.macros[rm][mk][1] == 'undefine':
@@ -180,9 +186,25 @@ class macros:
return False
return True
+ def create_map(self, _map):
+ if _map not in self.macros:
+ self.macros[_map] = {}
+
+ def delete_map(self, _map):
+ if _map in self.macros:
+ self.macros.pop(_map, None)
+
def maps(self):
return self.macros.keys()
+ def map_keys(self, _map):
+ if _map in self.macros:
+ return self.macros[_map].keys()
+ return []
+
+ def map_num_keys(self, _map):
+ return len(self.map_keys(_map))
+
def get_read_maps(self):
return [rm[5:] for rm in self.read_maps]
@@ -348,14 +370,21 @@ class macros:
raise error.general('opening macro file: %s' % \
(path.host(self.expand(name))))
- def get(self, key):
+ def get(self, key, globals = True, maps = None):
if type(key) is not str:
raise TypeError('bad key type: %s' % (type(key)))
key = self.key_filter(key)
- for rm in self.get_read_maps():
+ if maps is None:
+ maps = self.get_read_maps()
+ else:
+ if type(maps) is str:
+ maps = [maps]
+ if type(maps) != list:
+ raise TypeError('bad maps type: %s' % (type(map)))
+ for rm in maps:
if key in self.macros[rm]:
return self.macros[rm][key]
- if key in self.macros['global']:
+ if globals and key in self.macros['global']:
return self.macros['global'][key]
return None
@@ -408,10 +437,10 @@ class macros:
expanded = True
return _str
- def find(self, regex):
+ def find(self, regex, globals = True):
what = re.compile(regex)
keys = []
- for key in self.keys():
+ for key in self.keys(globals):
if what.match(key):
keys += [key]
return keys
@@ -440,6 +469,9 @@ class macros:
return True
return False
+ def unset_write_map(self):
+ self.write_map = 'global'
+
def lock_read_map(self):
self.read_map_locked = True