diff options
author | Tobias Hunger <tobias.hunger@qt.io> | 2019-02-27 13:37:01 +0100 |
---|---|---|
committer | Tobias Hunger <tobias.hunger@qt.io> | 2019-02-28 08:08:00 +0000 |
commit | 8512f5179d2674dd9c0b89eeebbf2c6d32e3e4b4 (patch) | |
tree | 5670babf89f431652074c3aa8cbb7c67f0d9a3fb /util | |
parent | 04d69817027c37440a85b0f0ec8b9b0e8c037b56 (diff) |
CMake: pro2cmake.py: Fix parsing of for loops
Ignore for loops in the pro2cmake.py parser and add a unit test for that.
Change-Id: I2a0c075c45cf56f4f24ada2d53e8e8e94ce19f26
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'util')
-rwxr-xr-x | util/cmake/pro2cmake.py | 15 | ||||
-rw-r--r-- | util/cmake/tests/data/for.pro | 11 | ||||
-rwxr-xr-x | util/cmake/tests/test_parsing.py | 7 |
3 files changed, 24 insertions, 9 deletions
diff --git a/util/cmake/pro2cmake.py b/util/cmake/pro2cmake.py index 9dbcac9fc4..6002f78037 100755 --- a/util/cmake/pro2cmake.py +++ b/util/cmake/pro2cmake.py @@ -520,7 +520,6 @@ class QmakeParser: LC = pp.Suppress(pp.Literal('\\\n')) EOL = pp.Suppress(pp.Literal('\n')) 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='$(', @@ -560,17 +559,15 @@ class QmakeParser: Operation = Key('key') + pp.Optional(LC) \ + Op('operation') + pp.Optional(LC) \ + Values('value') - CallArgs = pp.nestedExpr() + CallArgs = pp.Optional(LC) + pp.nestedExpr() CallArgs.setParseAction(lambda x: ' '.join(chain(*x))) Load = pp.Keyword('load') + CallArgs('loaded') Include = pp.Keyword('include') + CallArgs('included') Option = pp.Keyword('option') + CallArgs('option') - DefineTestDefinition = pp.Suppress(DefineTest + CallArgs \ - + pp.nestedExpr(opener='{', closer='}')) # ignore the whole thing... - ForLoop = pp.Suppress(pp.Keyword('for') + pp.nestedExpr() - + pp.nestedExpr(opener='{', closer='}', - ignoreExpr=None) - + pp.LineEnd()) # ignore the whole thing... + DefineTestDefinition = pp.Suppress(pp.Keyword('defineTest') + CallArgs + + pp.nestedExpr(opener='{', closer='}', ignoreExpr=pp.LineEnd())) # ignore the whole thing... + ForLoop = pp.Suppress(pp.Keyword('for') + CallArgs + + pp.nestedExpr(opener='{', closer='}', ignoreExpr=pp.LineEnd())) # ignore the whole thing... FunctionCall = pp.Suppress(Identifier + pp.nestedExpr()) Scope = pp.Forward() @@ -617,7 +614,7 @@ class QmakeParser: 'Key Op Values Value BracedValue ' \ 'Scope Block ' \ 'StatementGroup StatementLine Statement '\ - 'Load Include Option DefineTest ForLoop ' \ + 'Load Include Option DefineTestDefinition ForLoop ' \ 'FunctionCall CallArgs Operation'.split(): expr = locals()[ename] expr.setName(ename) diff --git a/util/cmake/tests/data/for.pro b/util/cmake/tests/data/for.pro new file mode 100644 index 0000000000..5751432980 --- /dev/null +++ b/util/cmake/tests/data/for.pro @@ -0,0 +1,11 @@ +SOURCES = main.cpp +for (config, SIMD) { + uc = $$upper($$config) + DEFINES += QT_COMPILER_SUPPORTS_$${uc} + + add_cflags { + cflags = QMAKE_CFLAGS_$${uc} + !defined($$cflags, var): error("This compiler does not support $${uc}") + QMAKE_CXXFLAGS += $$eval($$cflags) + } +} diff --git a/util/cmake/tests/test_parsing.py b/util/cmake/tests/test_parsing.py index f0c80f560e..d0a9960dc7 100755 --- a/util/cmake/tests/test_parsing.py +++ b/util/cmake/tests/test_parsing.py @@ -173,6 +173,13 @@ def test_definetest(): assert result[0] == [] +def test_for(): + result = parse_file(_tests_path + '/data/for.pro') + assert len(result) == 2 + validate_op('SOURCES', '=', ['main.cpp'], result[0]) + assert result[1] == [] + + def test_unset(): result = parse_file(_tests_path + '/data/unset.pro') assert len(result) == 1 |