Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 546 → Rev 547

/kernel/trunk/tools/config.py
175,16 → 175,29
raise EOFError
return data
def read_defaults(fname):
defaults = {}
def read_defaults(fname,defaults):
f = file(fname,'r')
for line in f:
res = re.match(r'^([^#]\w*)\s*=\s*(.*?)\s*$', line)
res = re.match(r'^(?:#!# )?([^#]\w*)\s*=\s*(.*?)\s*$', line)
if res:
defaults[res.group(1)] = res.group(2)
f.close()
return defaults
 
def check_condition(text, defaults):
result = False
conds = text.split('|')
for cond in conds:
condname,condval = cond.split('=')
if not defaults.has_key(condname):
raise RuntimeError("Condition var %s does not exist: %s" % \
(condname,line))
# None means wildcard
if defaults[condname] is None:
return True
if condval == defaults[condname]:
return True
return False
 
def parse_config(input, output, dlg, defaults={}):
f = file(input, 'r')
outf = file(output, 'w')
198,14 → 211,20
choices = []
for line in f:
if line.startswith('!'):
res = re.search(r'!\s*([^\s]+)\s*\((.*)\)\s*$', line)
res = re.search(r'!\s*(?:\[(.*?)\])?\s*([^\s]+)\s*\((.*)\)\s*$', line)
if not res:
raise RuntimeError("Weird line: %s" % line)
varname = res.group(1)
vartype = res.group(2)
varname = res.group(2)
vartype = res.group(3)
 
default = defaults.get(varname,None)
 
if res.group(1):
if not check_condition(res.group(1), defaults):
if default is not None:
outf.write('#!# %s = %s\n' % (varname, default))
continue
 
if vartype == 'y/n':
result = dlg.yesno(comment, default)
elif vartype == 'n/y':
221,6 → 240,8
else:
raise RuntimeError("Bad method: %s" % vartype)
outf.write('%s = %s\n' % (varname, result))
# Remeber the selected value
defaults[varname] = result
# Clear cumulated values
comment = ''
default = None
228,10 → 249,13
continue
if line.startswith('@'):
res = re.match(r'@\s*"(.*?)"\s*(.*)$', line)
res = re.match(r'@\s*(?:\[(.*?)\])?\s*"(.*?)"\s*(.*)$', line)
if not res:
raise RuntimeError("Bad line: %s" % line)
choices.append((res.group(1), res.group(2)))
if res.group(1):
if not check_condition(res.group(1),defaults):
continue
choices.append((res.group(2), res.group(3)))
continue
outf.write(line)
244,7 → 268,7
f.close()
 
def main():
defaults = {}
defaults = {'ARCH':None}
try:
dlg = Dialog()
except NotImplementedError:
252,11 → 276,13
 
# Default run will update the configuration file
# with newest options
if len(sys.argv) == 2 and sys.argv[1]=='default':
if len(sys.argv) >= 2:
defaults['ARCH'] = sys.argv[1]
if len(sys.argv) == 3 and sys.argv[2]=='default':
dlg = DefaultDialog(dlg)
 
if os.path.exists(OUTPUT):
defaults = read_defaults(OUTPUT)
read_defaults(OUTPUT, defaults)
parse_config(INPUT, TMPOUTPUT, dlg, defaults)
if os.path.exists(OUTPUT):