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()
|
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) + '^')
|
||||||
|
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