CMake: pro2cmake.py: Handle values with () in assignments

Change-Id: I0f59c7fa57cd6c64b151f439d4eea4ae56dca288
Reviewed-by: Albert Astals Cid <albert.astals.cid@kdab.com>
This commit is contained in:
Tobias Hunger 2019-02-13 10:42:56 +01:00
parent 22dc78f417
commit c971d2d359
3 changed files with 17 additions and 2 deletions

View File

@ -515,6 +515,12 @@ class QmakeParser:
Else = pp.Keyword('else')
DefineTest = pp.Keyword('defineTest')
Identifier = pp.Word(pp.alphas + '_', bodyChars=pp.alphanums+'_-./')
BracedValue = pp.nestedExpr(ignoreExpr=pp.quotedString \
| pp.QuotedString(quoteChar='$(',
endQuoteChar=')',
escQuote='\\',
unquoteResults=False)
).setParseAction(lambda s, l, t: ['(', *t[0], ')'])
Substitution \
= pp.Combine(pp.Literal('$')
@ -534,7 +540,8 @@ class QmakeParser:
| pp.Literal('$')))
Value = pp.NotAny(Else | pp.Literal('}') | EOL | pp.Literal('\\')) \
+ (pp.QuotedString(quoteChar='"', escChar='\\')
| SubstitutionValue)
| SubstitutionValue
| BracedValue)
Values = pp.ZeroOrMore(Value + pp.Optional(LC))('value')
@ -598,7 +605,7 @@ class QmakeParser:
'Else ElseBranch SingleLineElse MultiLineElse ' \
'SingleLineScope MultiLineScope ' \
'Identifier ' \
'Key Op Values Value ' \
'Key Op Values Value BracedValue ' \
'Scope Block ' \
'StatementGroup StatementLine Statement '\
'Load Include Option DefineTest ForLoop ' \

View File

@ -0,0 +1,2 @@
qmake-clean.commands += (cd qmake && $(MAKE) clean ":-(==)-:" '(Foo)' )

View File

@ -254,3 +254,9 @@ def test_realworld_contains_scope():
result = parse_file(_tests_path + '/data/contains_scope.pro')
assert len(result) == 2
def test_realworld_complex_assign():
result = parse_file(_tests_path + '/data/complex_assign.pro')
assert len(result) == 1
validate_op('qmake-clean.commands', '+=', '( cd qmake && $(MAKE) clean ":-(==)-:" \'(Foo)\' )'.split(),
result[0])