Changeset 62bb73e in mainline for tools/config.py


Ignore:
Timestamp:
2010-12-03T22:05:46Z (14 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
4756634
Parents:
e4d540b
Message:

Clean up nomenclature in configuration script.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • tools/config.py

    re4d540b r62bb73e  
    33# Copyright (c) 2006 Ondrej Palkovsky
    44# Copyright (c) 2009 Martin Decky
     5# Copyright (c) 2010 Jiri Svoboda
    56# All rights reserved.
    67#
     
    4041import xtui
    4142
    42 INPUT = sys.argv[1]
     43RULES_FILE = sys.argv[1]
    4344MAKEFILE = 'Makefile.config'
    4445MACROS = 'config.h'
    45 PRECONF = 'defaults'
    46 
    47 def read_defaults(fname, defaults):
     46PRESETS_DIR = 'defaults'
     47
     48def read_config(fname, config):
    4849        "Read saved values from last configuration run"
    4950       
     
    5354                res = re.match(r'^(?:#!# )?([^#]\w*)\s*=\s*(.*?)\s*$', line)
    5455                if (res):
    55                         defaults[res.group(1)] = res.group(2)
     56                        config[res.group(1)] = res.group(2)
    5657       
    5758        inf.close()
    5859
    59 def check_condition(text, defaults, ask_names):
     60def check_condition(text, config, rules):
    6061        "Check that the condition specified on input line is True (only CNF and DNF is supported)"
    6162       
     
    7475                        cond = cond[1:-1]
    7576               
    76                 inside = check_inside(cond, defaults, ctype)
     77                inside = check_inside(cond, config, ctype)
    7778               
    7879                if (ctype == 'cnf') and (not inside):
     
    8687        return False
    8788
    88 def check_inside(text, defaults, ctype):
     89def check_inside(text, config, ctype):
    8990        "Check for condition"
    9091       
     
    103104                condval = res.group(3)
    104105               
    105                 if (not condname in defaults):
     106                if (not condname in config):
    106107                        varval = ''
    107108                else:
    108                         varval = defaults[condname]
     109                        varval = config[condname]
    109110                        if (varval == '*'):
    110111                                varval = 'y'
     
    128129        return True
    129130
    130 def parse_config(fname, ask_names):
    131         "Parse configuration file"
     131def parse_rules(fname, rules):
     132        "Parse rules file"
    132133       
    133134        inf = open(fname, 'r')
     
    149150                        vartype = res.group(3)
    150151                       
    151                         ask_names.append((varname, vartype, name, choices, cond))
     152                        rules.append((varname, vartype, name, choices, cond))
    152153                        name = ''
    153154                        choices = []
     
    214215## Infer and verify configuration values.
    215216#
    216 # Augment @a defaults with values that can be inferred, purge invalid ones
     217# Augment @a config with values that can be inferred, purge invalid ones
    217218# and verify that all variables have a value (previously specified or inferred).
    218219#
    219 # @param defaults       Configuration to work on
    220 # @param ask_names      Rules
    221 #
    222 # @return               True if configuration is complete and valid, False
    223 #                       otherwise.
    224 #
    225 def infer_verify_choices(defaults, ask_names):
     220# @param config Configuration to work on
     221# @param rules  Rules
     222#
     223# @return       True if configuration is complete and valid, False
     224#               otherwise.
     225#
     226def infer_verify_choices(config, rules):
    226227        "Infer and verify configuration values."
    227228       
    228         for varname, vartype, name, choices, cond in ask_names:
    229                 if ((cond) and (not check_condition(cond, defaults, ask_names))):
     229        for varname, vartype, name, choices, cond in rules:
     230                if ((cond) and (not check_condition(cond, config, rules))):
    230231                        continue
    231232               
    232                 if (not varname in defaults):
     233                if (not varname in config):
    233234                        default = None
    234235                else:
    235                         default = defaults[varname]
     236                        default = config[varname]
    236237
    237238                if not rule_value_is_valid((varname, vartype, name, choices, cond), default):
     
    241242                if rdef != None:
    242243                        default = rdef
    243                         defaults[varname] = rdef
    244 
    245                 if (not varname in defaults):
     244                        config[varname] = rdef
     245
     246                if (not varname in config):
    246247                        return False
    247248       
     
    336337        return True
    337338
    338 def create_output(mkname, mcname, defaults, ask_names):
     339def create_output(mkname, mcname, config, rules):
    339340        "Create output configuration"
    340341       
     
    371372        defs = 'CONFIG_DEFS ='
    372373       
    373         for varname, vartype, name, choices, cond in ask_names:
    374                 if ((cond) and (not check_condition(cond, defaults, ask_names))):
     374        for varname, vartype, name, choices, cond in rules:
     375                if ((cond) and (not check_condition(cond, config, rules))):
    375376                        continue
    376377               
    377                 if (not varname in defaults):
     378                if (not varname in config):
    378379                        default = ''
    379380                else:
    380                         default = defaults[varname]
     381                        default = config[varname]
    381382                        if (default == '*'):
    382383                                default = 'y'
     
    411412        return list
    412413
    413 def read_preconfigured(root, fname, screen, defaults):
     414## Choose a profile and load configuration presets.
     415#
     416def load_presets(root, fname, screen, config):
    414417        options = []
    415418        opt2path = {}
     
    445448                return None
    446449       
    447         read_defaults(opt2path[value][0], defaults)
     450        read_config(opt2path[value][0], config)
    448451        if (opt2path[value][1] != None):
    449                 read_defaults(opt2path[value][1], defaults)
     452                read_config(opt2path[value][1], config)
    450453
    451454def main():
    452         defaults = {}
    453         ask_names = []
    454        
    455         # Parse configuration file
    456         parse_config(INPUT, ask_names)
    457        
    458         # Read defaults from previous run
     455        config = {}
     456        rules = []
     457       
     458        # Parse rules file
     459        parse_rules(RULES_FILE, rules)
     460       
     461        # Read configuration from previous run
    459462        if os.path.exists(MAKEFILE):
    460                 read_defaults(MAKEFILE, defaults)
    461        
    462         # Default mode: only check defaults and regenerate configuration
     463                read_config(MAKEFILE, config)
     464       
     465        # Default mode: only check values and regenerate configuration files
    463466        if ((len(sys.argv) >= 3) and (sys.argv[2] == 'default')):
    464                 if (infer_verify_choices(defaults, ask_names)):
    465                         create_output(MAKEFILE, MACROS, defaults, ask_names)
     467                if (infer_verify_choices(config, rules)):
     468                        create_output(MAKEFILE, MACROS, config, rules)
    466469                        return 0
    467470       
    468         # Check mode: only check defaults
     471        # Check mode: only check configuration
    469472        if ((len(sys.argv) >= 3) and (sys.argv[2] == 'check')):
    470                 if (infer_verify_choices(defaults, ask_names)):
     473                if (infer_verify_choices(config, rules)):
    471474                        return 0
    472475                return 1
     
    478481                while True:
    479482                       
    480                         # Cancel out all defaults which have to be deduced
    481                         for varname, vartype, name, choices, cond in ask_names:
    482                                 if ((vartype == 'y') and (varname in defaults) and (defaults[varname] == '*')):
    483                                         defaults[varname] = None
     483                        # Cancel out all values which have to be deduced
     484                        for varname, vartype, name, choices, cond in rules:
     485                                if ((vartype == 'y') and (varname in config) and (config[varname] == '*')):
     486                                        config[varname] = None
    484487                       
    485488                        options = []
     
    489492                        options.append("  --- Load preconfigured defaults ... ")
    490493                       
    491                         for rule in ask_names:
     494                        for rule in rules:
    492495                                varname, vartype, name, choices, cond = rule
    493496                               
    494                                 if ((cond) and (not check_condition(cond, defaults, ask_names))):
     497                                if ((cond) and (not check_condition(cond, config, rules))):
    495498                                        continue
    496499                               
     
    498501                                        position = cnt
    499502                               
    500                                 if (not varname in defaults):
     503                                if (not varname in config):
    501504                                        default = None
    502505                                else:
    503                                         default = defaults[varname]
     506                                        default = config[varname]
    504507                               
    505508                                if not rule_value_is_valid(rule, default):
     
    509512                                if rdef != None:
    510513                                        default = rdef
    511                                         defaults[varname] = rdef
     514                                        config[varname] = rdef
    512515
    513516                                option = rule_get_option(rule, default)
     
    528531                       
    529532                        if (button == 'done'):
    530                                 if (infer_verify_choices(defaults, ask_names)):
     533                                if (infer_verify_choices(config, rules)):
    531534                                        break
    532535                                else:
     
    535538                       
    536539                        if (value == 0):
    537                                 read_preconfigured(PRECONF, MAKEFILE, screen, defaults)
     540                                load_presets(PRESETS_DIR, MAKEFILE, screen, config)
    538541                                position = 1
    539542                                continue
     
    545548                        (selname, seltype, name, choices) = opt2row[value]
    546549                       
    547                         if (not selname in defaults):
     550                        if (not selname in config):
    548551                                default = None
    549552                        else:
    550                                 default = defaults[selname]
     553                                default = config[selname]
    551554                       
    552555                        if (seltype == 'choice'):
    553                                 defaults[selname] = subchoice(screen, name, choices, default)
     556                                config[selname] = subchoice(screen, name, choices, default)
    554557                        elif ((seltype == 'y/n') or (seltype == 'n/y')):
    555                                 if (defaults[selname] == 'y'):
    556                                         defaults[selname] = 'n'
     558                                if (config[selname] == 'y'):
     559                                        config[selname] = 'n'
    557560                                else:
    558                                         defaults[selname] = 'y'
     561                                        config[selname] = 'y'
    559562        finally:
    560563                xtui.screen_done(screen)
    561564       
    562         create_output(MAKEFILE, MACROS, defaults, ask_names)
     565        create_output(MAKEFILE, MACROS, config, rules)
    563566        return 0
    564567
Note: See TracChangeset for help on using the changeset viewer.