Changeset 795ff98 in mainline


Ignore:
Timestamp:
2005-12-06T19:30:53Z (19 years ago)
Author:
Ondrej Palkovsky <ondrap@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
d43d2f7
Parents:
3bb9c99
Message:

Added conditions to config system.

Files:
3 edited

Legend:

Unmodified
Added
Removed
  • kernel.config

    r3bb9c99 r795ff98  
    1616
    1717# Deadlock detection support for spinlocks
    18 ! CONFIG_DEBUG_SPINLOCK (y/n)
     18! [CONFIG_DEBUG=y] CONFIG_DEBUG_SPINLOCK (y/n)
    1919
    2020## Run-time configuration directives
     
    3232@ "synch/semaphore1" Semaphore test 1
    3333@ "synch/semaphore2" Sempahore test 2
    34 @ "fpu/fpu1" Intel fpu test 1
    35 @ "fpu/sse1" Intel Sse test 1
    36 @ "fpu/mips1" Mips FPU test 1
     34@ [ARCH=ia32|ARCH=amd64] "fpu/fpu1" Intel fpu test 1
     35@ [ARCH=ia32|ARCH=amd64] "fpu/sse1" Intel Sse test 1
     36@ [ARCH=mips] "fpu/mips1" Mips FPU test 1
    3737@ "print/print1" Printf test 1
    3838@ "thread/trhead1" Thread test 1
  • tools/build

    r3bb9c99 r795ff98  
    6161fi
    6262
    63 tools/config.py default
     63tools/config.py $ARCH default
    6464make all "ARCH=$ARCH" "TAG=$TAG" $ARGS
  • tools/config.py

    r3bb9c99 r795ff98  
    176176        return data
    177177   
    178 def read_defaults(fname):
    179     defaults = {}
     178def read_defaults(fname,defaults):
    180179    f = file(fname,'r')
    181180    for line in f:
    182         res = re.match(r'^([^#]\w*)\s*=\s*(.*?)\s*$', line)
     181        res = re.match(r'^(?:#!# )?([^#]\w*)\s*=\s*(.*?)\s*$', line)
    183182        if res:
    184183            defaults[res.group(1)] = res.group(2)
    185184    f.close()
    186     return defaults
     185
     186def check_condition(text, defaults):
     187    result = False
     188    conds = text.split('|')
     189    for cond in conds:
     190        condname,condval = cond.split('=')
     191        if not defaults.has_key(condname):
     192            raise RuntimeError("Condition var %s does not exist: %s" % \
     193                               (condname,line))
     194        # None means wildcard
     195        if defaults[condname] is None:
     196            return True
     197        if  condval == defaults[condname]:
     198            return True
     199    return False
    187200
    188201def parse_config(input, output, dlg, defaults={}):
     
    199212    for line in f:       
    200213        if line.startswith('!'):
    201             res = re.search(r'!\s*([^\s]+)\s*\((.*)\)\s*$', line)
     214            res = re.search(r'!\s*(?:\[(.*?)\])?\s*([^\s]+)\s*\((.*)\)\s*$', line)
    202215            if not res:
    203216                raise RuntimeError("Weird line: %s" % line)
    204             varname = res.group(1)
    205             vartype = res.group(2)
     217            varname = res.group(2)
     218            vartype = res.group(3)
    206219
    207220            default = defaults.get(varname,None)
     221
     222            if res.group(1):
     223                if not check_condition(res.group(1), defaults):
     224                    if default is not None:
     225                        outf.write('#!# %s = %s\n' % (varname, default))
     226                    continue
    208227
    209228            if vartype == 'y/n':
     
    222241                raise RuntimeError("Bad method: %s" % vartype)
    223242            outf.write('%s = %s\n' % (varname, result))
     243            # Remeber the selected value
     244            defaults[varname] = result
    224245            # Clear cumulated values
    225246            comment = ''
     
    229250       
    230251        if line.startswith('@'):
    231             res = re.match(r'@\s*"(.*?)"\s*(.*)$', line)
     252            res = re.match(r'@\s*(?:\[(.*?)\])?\s*"(.*?)"\s*(.*)$', line)
    232253            if not res:
    233254                raise RuntimeError("Bad line: %s" % line)
    234             choices.append((res.group(1), res.group(2)))
     255            if res.group(1):
     256                if not check_condition(res.group(1),defaults):
     257                    continue
     258            choices.append((res.group(2), res.group(3)))
    235259            continue
    236260       
     
    245269
    246270def main():
    247     defaults = {}
     271    defaults = {'ARCH':None}
    248272    try:
    249273        dlg = Dialog()
     
    253277    # Default run will update the configuration file
    254278    # with newest options
    255     if len(sys.argv) == 2 and sys.argv[1]=='default':
     279    if len(sys.argv) >= 2:
     280        defaults['ARCH'] = sys.argv[1]
     281    if len(sys.argv) == 3 and sys.argv[2]=='default':
    256282        dlg = DefaultDialog(dlg)
    257283
    258284    if os.path.exists(OUTPUT):
    259         defaults = read_defaults(OUTPUT)
     285        read_defaults(OUTPUT, defaults)
    260286   
    261287    parse_config(INPUT, TMPOUTPUT, dlg, defaults)
Note: See TracChangeset for help on using the changeset viewer.