| Index: pylib/gyp/input.py
|
| diff --git a/pylib/gyp/input.py b/pylib/gyp/input.py
|
| index 7d3654aefcbd10947852131f03ef13c1137b4ac7..b15b9624e64d50dc992c0a4616f88aafa5b8c73c 100644
|
| --- a/pylib/gyp/input.py
|
| +++ b/pylib/gyp/input.py
|
| @@ -341,7 +341,8 @@ def ProcessToolsetsInDict(data):
|
| for condition in data['conditions']:
|
| if type(condition) is list:
|
| for condition_dict in condition[1:]:
|
| - ProcessToolsetsInDict(condition_dict)
|
| + if type(condition_dict) is dict:
|
| + ProcessToolsetsInDict(condition_dict)
|
|
|
|
|
| # TODO(mark): I don't love this name. It just means that it's going to load
|
| @@ -1037,17 +1038,40 @@ def EvalCondition(condition, conditions_key, phase, variables, build_file):
|
| that nothing should be used."""
|
| if type(condition) is not list:
|
| raise GypError(conditions_key + ' must be a list')
|
| - if len(condition) != 2 and len(condition) != 3:
|
| + if len(condition) < 2:
|
| # It's possible that condition[0] won't work in which case this
|
| # attempt will raise its own IndexError. That's probably fine.
|
| raise GypError(conditions_key + ' ' + condition[0] +
|
| - ' must be length 2 or 3, not ' + str(len(condition)))
|
| + ' must be at least length 2, not ' + str(len(condition)))
|
| +
|
| + i = 0
|
| + result = None
|
| + while i < len(condition):
|
| + cond_expr = condition[i]
|
| + true_dict = condition[i + 1]
|
| + if type(true_dict) is not dict:
|
| + raise GypError('{} {} must be followed by a dictionary, not {}'.format(
|
| + conditions_key, cond_expr, type(true_dict)))
|
| + if len(condition) > i + 2 and type(condition[i + 2]) is dict:
|
| + false_dict = condition[i + 2]
|
| + i = i + 3
|
| + if i != len(condition):
|
| + raise GypError('{} {} has {} unexpected trailing items'.format(
|
| + conditions_key, cond_expr, len(condition) - i))
|
| + else:
|
| + false_dict = None
|
| + i = i + 2
|
| + if result == None:
|
| + result = EvalSingleCondition(
|
| + cond_expr, true_dict, false_dict, phase, variables, build_file)
|
| +
|
| + return result
|
|
|
| - [cond_expr, true_dict] = condition[0:2]
|
| - false_dict = None
|
| - if len(condition) == 3:
|
| - false_dict = condition[2]
|
|
|
| +def EvalSingleCondition(
|
| + cond_expr, true_dict, false_dict, phase, variables, build_file):
|
| + """Returns true_dict if cond_expr evaluates to true, and false_dict
|
| + otherwise."""
|
| # Do expansions on the condition itself. Since the conditon can naturally
|
| # contain variable references without needing to resort to GYP expansion
|
| # syntax, this is of dubious value for variables, but someone might want to
|
|
|