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:
parent
84af8f9b0b
commit
951e297362
@ -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) + '^')
|
||||
|
46
util/cmake/tests/test_lc_fixup.py
Executable file
46
util/cmake/tests/test_lc_fixup.py
Executable 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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user