Subversion Repositories HelenOS-historic

Rev

Rev 547 | Rev 550 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 547 Rev 549
Line 109... Line 109...
109
 
109
 
110
    def set_title(self,text):
110
    def set_title(self,text):
111
        self.title = text
111
        self.title = text
112
       
112
       
113
    def calldlg(self,*args,**kw):
113
    def calldlg(self,*args,**kw):
-
 
114
        "Wrapper for calling 'dialog' program"
114
        indesc, outdesc = os.pipe()
115
        indesc, outdesc = os.pipe()
115
        pid = os.fork()
116
        pid = os.fork()
116
        if not pid:
117
        if not pid:
117
            os.close(2)
118
            os.close(2)
118
            os.dup(outdesc)
119
            os.dup(outdesc)
Line 174... Line 175...
174
            print data
175
            print data
175
            raise EOFError
176
            raise EOFError
176
        return data
177
        return data
177
   
178
   
178
def read_defaults(fname,defaults):
179
def read_defaults(fname,defaults):
-
 
180
    "Read saved values from last configuration run"
179
    f = file(fname,'r')
181
    f = file(fname,'r')
180
    for line in f:
182
    for line in f:
181
        res = re.match(r'^(?:#!# )?([^#]\w*)\s*=\s*(.*?)\s*$', line)
183
        res = re.match(r'^(?:#!# )?([^#]\w*)\s*=\s*(.*?)\s*$', line)
182
        if res:
184
        if res:
183
            defaults[res.group(1)] = res.group(2)
185
            defaults[res.group(1)] = res.group(2)
184
    f.close()
186
    f.close()
185
 
187
 
186
def check_condition(text, defaults):
188
def check_condition(text, defaults):
-
 
189
    "Check that the condition specified on input line is True"
187
    result = False
190
    result = False
188
    conds = text.split('|')
191
    conds = text.split('|')
189
    for cond in conds:
192
    for cond in conds:
190
        condname,condval = cond.split('=')
193
        condname,condval = cond.split('=')
191
        if not defaults.has_key(condname):
194
        if not defaults.has_key(condname):
Line 197... Line 200...
197
        if  condval == defaults[condname]:
200
        if  condval == defaults[condname]:
198
            return True
201
            return True
199
    return False
202
    return False
200
 
203
 
201
def parse_config(input, output, dlg, defaults={}):
204
def parse_config(input, output, dlg, defaults={}):
-
 
205
    "Parse configuration file and create Makefile.config on the fly"
202
    f = file(input, 'r')
206
    f = file(input, 'r')
203
    outf = file(output, 'w')
207
    outf = file(output, 'w')
204
 
208
 
205
    outf.write('#########################################\n')
209
    outf.write('#########################################\n')
206
    outf.write('## AUTO-GENERATED FILE, DO NOT EDIT!!! ##\n')
210
    outf.write('## AUTO-GENERATED FILE, DO NOT EDIT!!! ##\n')
Line 209... Line 213...
209
    comment = ''
213
    comment = ''
210
    default = None
214
    default = None
211
    choices = []
215
    choices = []
212
    for line in f:        
216
    for line in f:        
213
        if line.startswith('!'):
217
        if line.startswith('!'):
-
 
218
            # Ask a question
214
            res = re.search(r'!\s*(?:\[(.*?)\])?\s*([^\s]+)\s*\((.*)\)\s*$', line)
219
            res = re.search(r'!\s*(?:\[(.*?)\])?\s*([^\s]+)\s*\((.*)\)\s*$', line)
215
            if not res:
220
            if not res:
216
                raise RuntimeError("Weird line: %s" % line)
221
                raise RuntimeError("Weird line: %s" % line)
217
            varname = res.group(2)
222
            varname = res.group(2)
218
            vartype = res.group(3)
223
            vartype = res.group(3)
Line 247... Line 252...
247
            default = None
252
            default = None
248
            choices = []
253
            choices = []
249
            continue
254
            continue
250
       
255
       
251
        if line.startswith('@'):
256
        if line.startswith('@'):
-
 
257
            # Add new line into the 'choice array' 
252
            res = re.match(r'@\s*(?:\[(.*?)\])?\s*"(.*?)"\s*(.*)$', line)
258
            res = re.match(r'@\s*(?:\[(.*?)\])?\s*"(.*?)"\s*(.*)$', line)
253
            if not res:
259
            if not res:
254
                raise RuntimeError("Bad line: %s" % line)
260
                raise RuntimeError("Bad line: %s" % line)
255
            if res.group(1):
261
            if res.group(1):
256
                if not check_condition(res.group(1),defaults):
262
                if not check_condition(res.group(1),defaults):
257
                    continue
263
                    continue
258
            choices.append((res.group(2), res.group(3)))
264
            choices.append((res.group(2), res.group(3)))
259
            continue
265
            continue
-
 
266
 
260
       
267
        # All other things print to output file
261
        outf.write(line)
268
        outf.write(line)
262
        if re.match(r'^#[^#]', line):
269
        if re.match(r'^#[^#]', line):
-
 
270
            # Last comment before question will be displayed to the user
263
            comment = line[1:].strip()
271
            comment = line[1:].strip()
264
        elif line.startswith('##'):
272
        elif line.startswith('##'):
-
 
273
            # Set title of the dialog window
265
            dlg.set_title(line[2:].strip())
274
            dlg.set_title(line[2:].strip())
266
       
275
       
267
    outf.close()
276
    outf.close()
268
    f.close()
277
    f.close()
269
 
278