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>
This commit is contained in:
Tobias Hunger 2019-02-13 12:24:14 +01:00
parent 84af8f9b0b
commit 951e297362
2 changed files with 63 additions and 1 deletions

View File

@ -72,6 +72,13 @@ def _parse_commandline():
return parser.parse_args() 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: def spaces(indent: int) -> str:
return ' ' * indent return ' ' * indent
@ -622,7 +629,16 @@ class QmakeParser:
def parseFile(self, file: str): def parseFile(self, file: str):
print('Parsing \"{}\"...'.format(file)) print('Parsing \"{}\"...'.format(file))
try: 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: except pp.ParseException as pe:
print(pe.line) print(pe.line)
print(' '*(pe.col-1) + '^') print(' '*(pe.col-1) + '^')

View File

@ -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