summaryrefslogtreecommitdiffstats
path: root/util
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@qt.io>2019-02-27 13:37:01 +0100
committerTobias Hunger <tobias.hunger@qt.io>2019-02-28 08:08:00 +0000
commit8512f5179d2674dd9c0b89eeebbf2c6d32e3e4b4 (patch)
tree5670babf89f431652074c3aa8cbb7c67f0d9a3fb /util
parent04d69817027c37440a85b0f0ec8b9b0e8c037b56 (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-xutil/cmake/pro2cmake.py15
-rw-r--r--util/cmake/tests/data/for.pro11
-rwxr-xr-xutil/cmake/tests/test_parsing.py7
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