CMake: pro2cmake.py: Add a way to debug merges of scopes

Generate debug output whenever a qmake scope with a variable
'PRO2CMAKE_MERGE_DEBUG' is involved in a scope merge.

Change-Id: I0ad94b881db9930de689c199adbac084efe6c03b
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
This commit is contained in:
Tobias Hunger 2019-01-31 10:18:14 +01:00
parent 645002cd43
commit ca4edbec66

View File

@ -233,13 +233,22 @@ class Scope(object):
self._total_condition = None # type: typing.Optional[str]
def __repr__(self):
return '{}:{}:{}'.format(self._basedir, self._file,
self._condition or '<NONE>')
debug_mark = ' [MERGE_DEBUG]' if self.merge_debug else ''
return '{}:{}:{}{}'.format(self._basedir, self._file,
self._condition or '<NONE>', debug_mark)
def reset_visited_keys(self):
self._visited_keys = set()
def merge(self, other: 'Scope') -> None:
assert self != other
merge_debug = self.merge_debug or other.merge_debug
if merge_debug:
print('..... [MERGE_DEBUG]: Merging scope {}:'.format(other))
other.dump(indent=1)
print('..... [MERGE_DEBUG]: ... into scope {}:'.format(self))
self.dump(indent=1)
for c in other._children:
self._add_child(c)
@ -249,6 +258,15 @@ class Scope(object):
else:
self._operations[key] = other._operations[key]
if merge_debug:
print('..... [MERGE_DEBUG]: Result scope {}:'.format(self))
self.dump(indent=1)
print('..... [MERGE_DEBUG]: <<END OF MERGE>>')
@property
def merge_debug(self) -> bool:
return self.getString('PRO2CMAKE_MERGE_DEBUG', None) != None
@property
def parent(self) -> typing.Optional[Scope]:
return self._parent