summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@qt.io>2019-01-31 10:18:14 +0100
committerTobias Hunger <tobias.hunger@qt.io>2019-01-31 15:22:59 +0000
commitca4edbec6616b30256dcbc81a2d5d8e2e82cc202 (patch)
treef8c0215ad19e1e6c41a912b4ea70dd4c8d4c7c68
parent645002cd43eb24051504d7dc60ea3ac961d16121 (diff)
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>
-rwxr-xr-xutil/cmake/pro2cmake.py22
1 files changed, 20 insertions, 2 deletions
diff --git a/util/cmake/pro2cmake.py b/util/cmake/pro2cmake.py
index aa993f5a62..88869a8346 100755
--- a/util/cmake/pro2cmake.py
+++ b/util/cmake/pro2cmake.py
@@ -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