summaryrefslogtreecommitdiffstats
path: root/util
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@qt.io>2019-01-18 12:46:08 +0100
committerTobias Hunger <tobias.hunger@qt.io>2019-01-23 15:41:34 +0000
commit2f504669951e3d5538b55ce4dbad2e05f466ff19 (patch)
tree223d04cb88f32b6d9c19cc455f39b39231ce4399 /util
parent024edf4bfdd8652f0a87a90044127dc582239590 (diff)
CMake: pro2cmake.py: Give up on faithful representation of -=, +=, *= and =
Having a good representation is nice, but unfortunately very hard: pro2cmake.py sees just a small part of the entire qmake build system at a time, so the information it has is incomplete to start with. It is not worthwhile to pass the supposedly full information around -- which will then need to get de-duplicated again -- considering that the information is not complete in the first place. So go back to the simplistic approach we used earsier. That is good enough and does not suffer from the problem of having multi-part arguments getting messed up when the scopes get de-duplicated. Change-Id: I553329650d6b8046f7ad8b1282e3d0c961293a28 Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
Diffstat (limited to 'util')
-rwxr-xr-xutil/cmake/pro2cmake.py54
1 files changed, 11 insertions, 43 deletions
diff --git a/util/cmake/pro2cmake.py b/util/cmake/pro2cmake.py
index f4d929ab0c..ca53234f06 100755
--- a/util/cmake/pro2cmake.py
+++ b/util/cmake/pro2cmake.py
@@ -228,25 +228,6 @@ class Scope:
def currentdir(self) -> str:
return self._currentdir
- def diff(self, key: str,
- default: typing.Optional[typing.List[str]] = []) \
- -> typing.List[str]:
- mine = self.get(key, default)
-
- if self._parent:
- parent = self._parent.get(key, default)
- if (parent == mine):
- return []
-
- parent_set = set(parent)
- mine_set = set(mine)
-
- added = [x for x in mine if x not in parent_set]
- removed = [x for x in parent if x not in mine_set]
-
- return added + list('# {}'.format(x) for x in removed)
- return mine
-
@staticmethod
def FromDict(parent_scope: typing.Optional['Scope'],
file: str, statements, cond: str = '', base_dir: str = ''):
@@ -366,19 +347,9 @@ class Scope:
return self._visited_keys;
def get(self, key: str, default=None) -> typing.List[str]:
- assert key != '_INCLUDED' # Special case things that may not recurse!
self._visited_keys.add(key)
result = [] # type: typing.List[str]
- if self._parent:
- result = self._parent.get(key, default)
- else:
- if default:
- if isinstance(default, list):
- result = default
- else:
- result = [str(default), ]
-
for op in self._operations.get(key, []):
result = op.process(result)
return result
@@ -401,10 +372,7 @@ class Scope:
or os.path.splitext(os.path.basename(self.file()))[0]
def getIncludes(self) -> typing.List[str]:
- result = []
- for op in self._operations.get('_INCLUDED', []):
- result = op.process(result)
- return result
+ return self.get('_INCLUDED', [])
class QmakeParser:
@@ -639,10 +607,10 @@ def write_sources_section(cm_fh: typing.IO[str], scope: Scope, *,
if plugin_type:
cm_fh.write('{} TYPE {}\n'.format(ind, plugin_type[0]))
- sources = scope.diff('SOURCES') + scope.diff('HEADERS') \
- + scope.diff('OBJECTIVE_SOURCES') + scope.diff('NO_PCH_SOURCES') \
- + scope.diff('FORMS')
- resources = scope.diff('RESOURCES')
+ sources = scope.get('SOURCES') + scope.get('HEADERS') \
+ + scope.get('OBJECTIVE_SOURCES') + scope.get('NO_PCH_SOURCES') \
+ + scope.get('FORMS')
+ resources = scope.get('RESOURCES')
if resources:
qrc_only = True
for r in resources:
@@ -663,26 +631,26 @@ def write_sources_section(cm_fh: typing.IO[str], scope: Scope, *,
for l in sort_sources(sources):
cm_fh.write('{} {}\n'.format(ind, l))
- defines = scope.diff('DEFINES')
+ defines = scope.get('DEFINES')
if defines:
cm_fh.write('{} DEFINES\n'.format(ind))
for d in defines:
d = d.replace('=\\\\\\"$$PWD/\\\\\\"',
'="${CMAKE_CURRENT_SOURCE_DIR}/"')
cm_fh.write('{} {}\n'.format(ind, d))
- includes = scope.diff('INCLUDEPATH')
+ includes = scope.get('INCLUDEPATH')
if includes:
cm_fh.write('{} INCLUDE_DIRECTORIES\n'.format(ind))
for i in includes:
i = i.rstrip('/') or ('/')
cm_fh.write('{} {}\n'.format(ind, i))
- dependencies = [map_qt_library(q) for q in scope.diff('QT')
+ dependencies = [map_qt_library(q) for q in scope.get('QT')
if map_qt_library(q) not in known_libraries]
- dependencies += [map_qt_library(q) for q in scope.diff('QT_FOR_PRIVATE')
+ dependencies += [map_qt_library(q) for q in scope.get('QT_FOR_PRIVATE')
if map_qt_library(q) not in known_libraries]
- dependencies += scope.diff('QMAKE_USE_PRIVATE') \
- + scope.diff('LIBS_PRIVATE') + scope.diff('LIBS')
+ dependencies += scope.get('QMAKE_USE_PRIVATE') \
+ + scope.get('LIBS_PRIVATE') + scope.get('LIBS')
if dependencies:
cm_fh.write('{} LIBRARIES\n'.format(ind))
is_framework = False