Exemplo n.º 1
0
 def iterateModifications(list):
     while len(list) > 0:
         newList = []
         if config.verbose:
             sys.stdout.write('[%i]' % len(list))
             sys.stdout.flush()
         for dict, obj, target in list:
             if dict == None:
                 expr = obj.value
             else:
                 expr = dict[obj]
             mk.__resetUsageTracker(reset_coverage=0)
             try:
                 new = mk.evalExpr(expr, target=target)
             except Exception, e:
                 raise errors.Error("failed to set variable '%s' to value '%s': %s" % (obj, expr, e))
             if expr != new:
                 if dict == None: obj.value = new
                 else: dict[obj] = new
             if (mk.__usageTracker.vars + 
                 mk.__usageTracker.pyexprs - mk.__usageTracker.refs > 0) \
                        and ('$' in new):
                 newList.append((dict,obj,target))
         list = newList
Exemplo n.º 2
0
 def iterateModifications(list):
     while len(list) > 0:
         newList = []
         if config.verbose:
             sys.stdout.write('[%i]' % len(list))
             sys.stdout.flush()
         for dict, obj, target in list:
             if dict == None:
                 expr = obj.value
             else:
                 expr = dict[obj]
             mk.__resetUsageTracker(reset_coverage=0)
             try:
                 new = mk.evalExpr(expr, target=target)
             except Exception, e:
                 raise errors.Error("failed to set variable '%s' to value '%s': %s" % (obj, expr, e))
             if expr != new:
                 if dict == None: obj.value = new
                 else: dict[obj] = new
             if (mk.__usageTracker.vars + 
                 mk.__usageTracker.pyexprs - mk.__usageTracker.refs > 0) \
                        and ('$' in new):
                 newList.append((dict,obj,target))
         list = newList
Exemplo n.º 3
0
def finalEvaluation(outputVarsOnly=1):
    """Evaluates all variables, so that unneccessary $(...) parts are
       removed in cases when <set eval="0" ...> was used.

       Noteworthy effect is that after calling this function all variables
       are fully evaluated except for conditional and make vars and options,
       meaning that outputVarsOnly=0 is only needed when running
       finalEvaluation for the first time, because no ordinary variable depends
       (by using $(varname)) on another ordinary variable in subsequent runs.
    """

    mk.__trackUsage = 1
    mk.__resetUsageTracker(reset_coverage=1)

    list = []

    if outputVarsOnly:
        interestingVars = mk.vars['FORMAT_OUTPUT_VARIABLES'].strip()
        if interestingVars != '':
            interestingVars = interestingVars.split()
            optimizeVars = len(interestingVars) > 0
        else:
            optimizeVars = 0
    else:
        optimizeVars = 0

    for v in mk.make_vars:
        if '$' in mk.make_vars[v]:
            list.append((mk.make_vars,v,None))
    
    for c in mk.cond_vars.values():
        for v in c.values:
            if '$' in v.value:
                list.append((None,v,c.target))

    if optimizeVars:
        for v in interestingVars:
            if v in mk.vars and '$' in mk.vars[v]:
                list.append((mk.vars,v,None))
    else:
        for v in mk.vars:
            if type(mk.vars[v]) is StringType:
                if '$' in mk.vars[v]:
                    list.append((mk.vars,v,None))
   
    if optimizeVars:
        for t in mk.targets.values():
            for v in interestingVars:
                if v in t.vars and '$' in t.vars[v]:
                    list.append((t.vars,v,t))
    else:
        for t in mk.targets.values():
            for v in t.vars:
                if type(t.vars[v]) is StringType:
                    if '$' in t.vars[v]:
                        list.append((t.vars,v,t))

    
    def iterateModifications(list):
        while len(list) > 0:
            newList = []
            if config.verbose:
                sys.stdout.write('[%i]' % len(list))
                sys.stdout.flush()
            for dict, obj, target in list:
                if dict == None:
                    expr = obj.value
                else:
                    expr = dict[obj]
                mk.__resetUsageTracker(reset_coverage=0)
                try:
                    new = mk.evalExpr(expr, target=target)
                except Exception, e:
                    raise errors.Error("failed to set variable '%s' to value '%s': %s" % (obj, expr, e))
                if expr != new:
                    if dict == None: obj.value = new
                    else: dict[obj] = new
                if (mk.__usageTracker.vars + 
                    mk.__usageTracker.pyexprs - mk.__usageTracker.refs > 0) \
                           and ('$' in new):
                    newList.append((dict,obj,target))
            list = newList
Exemplo n.º 4
0
def finalEvaluation(outputVarsOnly=1):
    """Evaluates all variables, so that unneccessary $(...) parts are
       removed in cases when <set eval="0" ...> was used.

       Noteworthy effect is that after calling this function all variables
       are fully evaluated except for conditional and make vars and options,
       meaning that outputVarsOnly=0 is only needed when running
       finalEvaluation for the first time, because no ordinary variable depends
       (by using $(varname)) on another ordinary variable in subsequent runs.
    """

    mk.__trackUsage = 1
    mk.__resetUsageTracker(reset_coverage=1)

    list = []

    if outputVarsOnly:
        interestingVars = mk.vars['FORMAT_OUTPUT_VARIABLES'].strip()
        if interestingVars != '':
            interestingVars = interestingVars.split()
            optimizeVars = len(interestingVars) > 0
        else:
            optimizeVars = 0
    else:
        optimizeVars = 0

    for v in mk.make_vars:
        if '$' in mk.make_vars[v]:
            list.append((mk.make_vars,v,None))
    
    for c in mk.cond_vars.values():
        for v in c.values:
            if '$' in v.value:
                list.append((None,v,c.target))

    if optimizeVars:
        for v in interestingVars:
            if v in mk.vars and '$' in mk.vars[v]:
                list.append((mk.vars,v,None))
    else:
        for v in mk.vars:
            if type(mk.vars[v]) is StringType:
                if '$' in mk.vars[v]:
                    list.append((mk.vars,v,None))
   
    if optimizeVars:
        for t in mk.targets.values():
            for v in interestingVars:
                if v in t.vars and '$' in t.vars[v]:
                    list.append((t.vars,v,t))
    else:
        for t in mk.targets.values():
            for v in t.vars:
                if type(t.vars[v]) is StringType:
                    if '$' in t.vars[v]:
                        list.append((t.vars,v,t))

    
    def iterateModifications(list):
        while len(list) > 0:
            newList = []
            if config.verbose:
                sys.stdout.write('[%i]' % len(list))
                sys.stdout.flush()
            for dict, obj, target in list:
                if dict == None:
                    expr = obj.value
                else:
                    expr = dict[obj]
                mk.__resetUsageTracker(reset_coverage=0)
                try:
                    new = mk.evalExpr(expr, target=target)
                except Exception, e:
                    raise errors.Error("failed to set variable '%s' to value '%s': %s" % (obj, expr, e))
                if expr != new:
                    if dict == None: obj.value = new
                    else: dict[obj] = new
                if (mk.__usageTracker.vars + 
                    mk.__usageTracker.pyexprs - mk.__usageTracker.refs > 0) \
                           and ('$' in new):
                    newList.append((dict,obj,target))
            list = newList