3
# WARNING! Do not edit! http://waf.googlecode.com/git/docs/wafbook/single.html#_obtaining_the_waf_file
6
if sys.hexversion < 0x020400f0: from sets import Set as set
8
from waflib import Logs,Utils
9
re_imp=re.compile('^(#)*?([^#=]*?)\ =\ (.*?)$',re.M)
10
class ConfigSet(object):
11
__slots__=('table','parent')
12
def __init__(self,filename=None):
16
def __contains__(self,key):
17
if key in self.table:return True
18
try:return self.parent.__contains__(key)
19
except AttributeError:return False
24
keys.update(cur.table.keys())
25
cur=getattr(cur,'parent',None)
30
return"\n".join(["%r %r"%(x,self.__getitem__(x))for x in self.keys()])
31
def __getitem__(self,key):
34
x=self.table.get(key,None)
38
except AttributeError:
40
def __setitem__(self,key,value):
42
def __delitem__(self,key):
44
def __getattr__(self,name):
45
if name in self.__slots__:
46
return object.__getattr__(self,name)
49
def __setattr__(self,name,value):
50
if name in self.__slots__:
51
object.__setattr__(self,name,value)
54
def __delattr__(self,name):
55
if name in self.__slots__:
56
object.__delattr__(self,name)
64
tbl=self.get_merged_dict()
66
delattr(self,'parent')
67
except AttributeError:
72
tbl[x]=copy.deepcopy(tbl[x])
74
def get_flat(self,key):
76
if isinstance(s,str):return s
78
def _get_list_value_for_modification(self,key):
82
try:value=self.parent[key]
83
except AttributeError:value=[]
84
if isinstance(value,list):
89
if not isinstance(value,list):
93
def append_value(self,var,val):
94
current_value=self._get_list_value_for_modification(var)
95
if isinstance(val,str):
97
current_value.extend(val)
98
def prepend_value(self,var,val):
99
if isinstance(val,str):
101
self.table[var]=val+self._get_list_value_for_modification(var)
102
def append_unique(self,var,val):
103
if isinstance(val,str):
105
current_value=self._get_list_value_for_modification(var)
107
if x not in current_value:
108
current_value.append(x)
109
def get_merged_dict(self):
113
table_list.insert(0,env.table)
115
except AttributeError:break
117
for table in table_list:
118
merged_table.update(table)
120
def store(self,filename):
122
os.makedirs(os.path.split(filename)[0])
128
merged_table=self.get_merged_dict()
129
keys=list(merged_table.keys())
133
f.write('%s = %r\n'%(k,merged_table[k]))
137
def load(self,filename):
139
code=Utils.readf(filename)
140
for m in re_imp.finditer(code):
143
Logs.debug('env: %s'%str(self.table))
145
for k,v in d.items():
148
self.undo_stack=self.undo_stack+[self.table]
149
self.table=self.table.copy()
151
self.table=self.undo_stack.pop(-1)