Rev 4341 | Rev 4343 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4341 | Rev 4342 | ||
---|---|---|---|
Line 35... | Line 35... | ||
35 | import re |
35 | import re |
36 | import commands |
36 | import commands |
37 | import xtui |
37 | import xtui |
38 | 38 | ||
39 | INPUT = sys.argv[1] |
39 | INPUT = sys.argv[1] |
40 | OUTPUT = 'Makefile.config' |
40 | MAKEFILE = 'Makefile.config' |
- | 41 | MACROS = 'config.h' |
|
- | 42 | DEFS = 'config.defs' |
|
41 | 43 | ||
42 | def read_defaults(fname, defaults): |
44 | def read_defaults(fname, defaults): |
43 | "Read saved values from last configuration run" |
45 | "Read saved values from last configuration run" |
44 | 46 | ||
45 | inf = file(fname,'r') |
47 | inf = file(fname, 'r') |
46 | 48 | ||
47 | for line in inf: |
49 | for line in inf: |
48 | res = re.match(r'^(?:#!# )?([^#]\w*)\s*=\s*(.*?)\s*$', line) |
50 | res = re.match(r'^(?:#!# )?([^#]\w*)\s*=\s*(.*?)\s*$', line) |
49 | if (res): |
51 | if (res): |
50 | defaults[res.group(1)] = res.group(2) |
52 | defaults[res.group(1)] = res.group(2) |
Line 214... | Line 216... | ||
214 | if (not defaults.has_key(varname)): |
216 | if (not defaults.has_key(varname)): |
215 | return False |
217 | return False |
216 | 218 | ||
217 | return True |
219 | return True |
218 | 220 | ||
219 | def create_output(fname, defaults, ask_names): |
221 | def create_output(mkname, mcname, dfname, defaults, ask_names): |
220 | "Create output configuration" |
222 | "Create output configuration" |
221 | 223 | ||
- | 224 | revision = commands.getoutput('svnversion . 2> /dev/null') |
|
222 | outf = file(fname, 'w') |
225 | timestamp = commands.getoutput('date "+%Y-%m-%d %H:%M:%S"') |
223 | 226 | ||
- | 227 | outmk = file(mkname, 'w') |
|
- | 228 | outmc = file(mcname, 'w') |
|
- | 229 | outdf = file(dfname, 'w') |
|
- | 230 | ||
- | 231 | outmk.write('#########################################\n') |
|
- | 232 | outmk.write('## AUTO-GENERATED FILE, DO NOT EDIT!!! ##\n') |
|
- | 233 | outmk.write('#########################################\n\n') |
|
- | 234 | ||
- | 235 | outmc.write('/***************************************\n') |
|
- | 236 | outmc.write(' * AUTO-GENERATED FILE, DO NOT EDIT!!! *\n') |
|
- | 237 | outmc.write(' ***************************************/\n\n') |
|
- | 238 | ||
224 | outf.write('#########################################\n') |
239 | outdf.write('#########################################\n') |
225 | outf.write('## AUTO-GENERATED FILE, DO NOT EDIT!!! ##\n') |
240 | outdf.write('## AUTO-GENERATED FILE, DO NOT EDIT!!! ##\n') |
226 | outf.write('#########################################\n\n') |
241 | outdf.write('#########################################\n\n') |
- | 242 | outdf.write('CONFIG_DEFS =') |
|
227 | 243 | ||
228 | for varname, vartype, name, choices, cond in ask_names: |
244 | for varname, vartype, name, choices, cond in ask_names: |
229 | if ((cond) and (not check_condition(cond, defaults, ask_names))): |
245 | if ((cond) and (not check_condition(cond, defaults, ask_names))): |
230 | continue |
246 | continue |
231 | 247 | ||
232 | if (not defaults.has_key(varname)): |
248 | if (not defaults.has_key(varname)): |
233 | default = '' |
249 | default = '' |
234 | else: |
250 | else: |
235 | default = defaults[varname] |
251 | default = defaults[varname] |
236 | 252 | ||
237 | outf.write('# %s\n%s = %s\n\n' % (name, varname, default)) |
253 | outmk.write('# %s\n%s = %s\n\n' % (name, varname, default)) |
- | 254 | ||
- | 255 | if ((vartype == "y") or (vartype == "y/n") or (vartype == "n/y")): |
|
- | 256 | if (default == "y"): |
|
- | 257 | outmc.write('/* %s */\n#define %s\n\n' % (name, varname)) |
|
- | 258 | outdf.write(' -D%s' % varname) |
|
- | 259 | else: |
|
- | 260 | outmc.write('/* %s */\n#define %s %s\n\n' % (name, varname, default)) |
|
- | 261 | outdf.write(' -D%s=%s' % (varname, default)) |
|
- | 262 | ||
- | 263 | outmk.write('REVISION = %s\n' % revision) |
|
- | 264 | outmk.write('TIMESTAMP = %s\n' % timestamp) |
|
238 | 265 | ||
239 | outf.write('REVISION = %s\n' % commands.getoutput('svnversion . 2> /dev/null')) |
266 | outmc.write('#define REVISION %s\n' % revision) |
- | 267 | outmc.write('#define TIMESTAMP %s\n' % timestamp) |
|
- | 268 | ||
240 | outf.write('TIMESTAMP = %s\n' % commands.getoutput('date "+%Y-%m-%d %H:%M:%S"')) |
269 | outdf.write(' "-DREVISION=%s" "-DTIMESTAMP=%s"\n' % (revision, timestamp)) |
- | 270 | ||
- | 271 | outmk.close() |
|
- | 272 | outmc.close() |
|
241 | outf.close() |
273 | outdf.close() |
242 | 274 | ||
243 | def main(): |
275 | def main(): |
244 | defaults = {} |
276 | defaults = {} |
245 | ask_names = [] |
277 | ask_names = [] |
246 | 278 | ||
247 | # Parse configuration file |
279 | # Parse configuration file |
248 | parse_config(INPUT, ask_names) |
280 | parse_config(INPUT, ask_names) |
249 | 281 | ||
250 | # Read defaults from previous run |
282 | # Read defaults from previous run |
251 | if os.path.exists(OUTPUT): |
283 | if os.path.exists(MAKEFILE): |
252 | read_defaults(OUTPUT, defaults) |
284 | read_defaults(MAKEFILE, defaults) |
253 | 285 | ||
254 | # Default mode: only check defaults and regenerate configuration |
286 | # Default mode: only check defaults and regenerate configuration |
255 | if ((len(sys.argv) >= 3) and (sys.argv[2] == 'default')): |
287 | if ((len(sys.argv) >= 3) and (sys.argv[2] == 'default')): |
256 | if (check_choices(defaults, ask_names)): |
288 | if (check_choices(defaults, ask_names)): |
257 | create_output(OUTPUT, defaults, ask_names) |
289 | create_output(MAKEFILE, MACROS, DEFS, defaults, ask_names) |
258 | return 0 |
290 | return 0 |
259 | 291 | ||
260 | # Check mode: only check defaults |
292 | # Check mode: only check defaults |
261 | if ((len(sys.argv) >= 3) and (sys.argv[2] == 'check')): |
293 | if ((len(sys.argv) >= 3) and (sys.argv[2] == 'check')): |
262 | if (check_choices(defaults, ask_names)): |
294 | if (check_choices(defaults, ask_names)): |
Line 291... | Line 323... | ||
291 | default = None |
323 | default = None |
292 | defaults.pop(varname) |
324 | defaults.pop(varname) |
293 | 325 | ||
294 | # If there is just one option, use it |
326 | # If there is just one option, use it |
295 | if (len(choices) == 1): |
327 | if (len(choices) == 1): |
296 | default = choices[0][0] |
328 | defaults[varname] = choices[0][0] |
297 | defaults[varname] = default |
329 | continue |
298 | 330 | ||
299 | options.append(" %s [%s] --> " % (name, default)) |
331 | options.append(" %s [%s] --> " % (name, default)) |
- | 332 | elif (vartype == 'y'): |
|
- | 333 | defaults[varname] = 'y' |
|
- | 334 | continue |
|
300 | elif (vartype == 'y/n'): |
335 | elif (vartype == 'y/n'): |
301 | if (default == None): |
336 | if (default == None): |
302 | default = 'y' |
337 | default = 'y' |
303 | defaults[varname] = default |
338 | defaults[varname] = default |
304 | options.append(" <%s> %s " % (yes_no(default), name)) |
339 | options.append(" <%s> %s " % (yes_no(default), name)) |
Line 344... | Line 379... | ||
344 | else: |
379 | else: |
345 | defaults[selname] = 'y' |
380 | defaults[selname] = 'y' |
346 | finally: |
381 | finally: |
347 | xtui.screen_done(screen) |
382 | xtui.screen_done(screen) |
348 | 383 | ||
349 | create_output(OUTPUT, defaults, ask_names) |
384 | create_output(MAKEFILE, MACROS, DEFS, defaults, ask_names) |
350 | return 0 |
385 | return 0 |
351 | 386 | ||
352 | if __name__ == '__main__': |
387 | if __name__ == '__main__': |
353 | sys.exit(main()) |
388 | sys.exit(main()) |