summaryrefslogtreecommitdiffstats
path: root/util
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@qt.io>2019-02-13 12:24:14 +0100
committerTobias Hunger <tobias.hunger@qt.io>2019-02-28 08:06:41 +0000
commit951e297362917675f605154ff6da89fb1acb3d40 (patch)
tree7980480b682bc4aa2f37031e9d6aa2dd6d1435ce /util
parent84af8f9b0bca0e615d45d600834bca31ca66059c (diff)
CMake: pro2cmake.py: Warn and fix broken line continuation
Warn on broken line continuation in .pro-files, but fix up the issue and proceed. Change-Id: Ibe68011b312bcea25620ce790a0b44b2983fbd88 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'util')
-rwxr-xr-xutil/cmake/pro2cmake.py18
-rwxr-xr-xutil/cmake/tests/test_lc_fixup.py46
2 files changed, 63 insertions, 1 deletions
diff --git a/util/cmake/pro2cmake.py b/util/cmake/pro2cmake.py
index 1f85e977aa..eccf045559 100755
--- a/util/cmake/pro2cmake.py
+++ b/util/cmake/pro2cmake.py
@@ -72,6 +72,13 @@ def _parse_commandline():
return parser.parse_args()
+def fixup_linecontinuation(contents: str) -> str:
+ contents = re.sub(r'([^\t ])\\[ \t]*\n', '\\1 \\\n', contents)
+ contents = re.sub(r'\\[ \t]*\n', '\\\n', contents)
+
+ return contents
+
+
def spaces(indent: int) -> str:
return ' ' * indent
@@ -622,7 +629,16 @@ class QmakeParser:
def parseFile(self, file: str):
print('Parsing \"{}\"...'.format(file))
try:
- result = self._Grammar.parseFile(file, parseAll=True)
+ with open(file, 'r') as file_fd:
+ contents = file_fd.read()
+
+ old_contents = contents
+ contents = fixup_linecontinuation(contents)
+
+ if old_contents != contents:
+ print('Warning: Fixed line continuation in .pro-file!\n'
+ ' Position information in Parsing output might be wrong!')
+ result = self._Grammar.parseString(contents, parseAll=True)
except pp.ParseException as pe:
print(pe.line)
print(' '*(pe.col-1) + '^')
diff --git a/util/cmake/tests/test_lc_fixup.py b/util/cmake/tests/test_lc_fixup.py
new file mode 100755
index 0000000000..d3680e895d
--- /dev/null
+++ b/util/cmake/tests/test_lc_fixup.py
@@ -0,0 +1,46 @@
+#!/usr/bin/env python3
+#############################################################################
+##
+## Copyright (C) 2018 The Qt Company Ltd.
+## Contact: https://www.qt.io/licensing/
+##
+## This file is part of the plugins of the Qt Toolkit.
+##
+## $QT_BEGIN_LICENSE:GPL-EXCEPT$
+## Commercial License Usage
+## Licensees holding valid commercial Qt licenses may use this file in
+## accordance with the commercial license agreement provided with the
+## Software or, alternatively, in accordance with the terms contained in
+## a written agreement between you and The Qt Company. For licensing terms
+## and conditions see https://www.qt.io/terms-conditions. For further
+## information use the contact form at https://www.qt.io/contact-us.
+##
+## GNU General Public License Usage
+## Alternatively, this file may be used under the terms of the GNU
+## General Public License version 3 as published by the Free Software
+## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+## included in the packaging of this file. Please review the following
+## information to ensure the GNU General Public License requirements will
+## be met: https://www.gnu.org/licenses/gpl-3.0.html.
+##
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+from pro2cmake import fixup_linecontinuation
+
+from textwrap import dedent
+
+
+def test_no_change():
+ input = "test \\\nline2\n line3"
+ result = fixup_linecontinuation(input)
+ assert input == result
+
+
+def test_fix():
+ input = "test \\\t\nline2\\\n line3\\ \nline4 \\ \t\nline5\\\n\n\n"
+ result = fixup_linecontinuation(input)
+ assert 'test \\\nline2 \\\n line3 \\\nline4 \\\nline5 \\\n\n\n' == result
+
+