From e1e61daf39903b8b7595465c50a9871dea308f06 Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Tue, 6 Oct 2020 16:05:01 +0200 Subject: pro2cmake: Allow optional imports in qmldir In order to funnel this through CMakeLists.txt we add an OPTIONAL_IMPORTS entry in addition to the existing IMPORTS. Task-number: QTBUG-87130 Change-Id: I57e882e75d17f5bc68d99ce7837425981fe6938b Reviewed-by: Fabian Kosmale --- util/cmake/pro2cmake.py | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/util/cmake/pro2cmake.py b/util/cmake/pro2cmake.py index ba447cbbd7..1c2e224b0e 100755 --- a/util/cmake/pro2cmake.py +++ b/util/cmake/pro2cmake.py @@ -612,6 +612,7 @@ class QmlDir: self.plugin_path = "" self.classname = "" self.imports: List[str] = [] + self.optional_imports: List[str] = [] self.type_names: Dict[str, QmlDirFileInfo] = {} self.type_infos: List[str] = [] self.depends: List[Tuple[str, str]] = [] @@ -620,12 +621,14 @@ class QmlDir: def __str__(self) -> str: type_infos_line = " \n".join(self.type_infos) imports_line = " \n".join(self.imports) + optional_imports_line = " \n".join(self.optional_imports) string = f"""\ module: {self.module} plugin: {self.plugin_optional} {self.plugin_name} {self.plugin_path} classname: {self.classname} type_infos:{type_infos_line} imports:{imports_line} + optional_imports:{optional_imports_line} dependends: """ for dep in self.depends: @@ -702,12 +705,18 @@ class QmlDir: if len(entries) > 2: self.plugin_path = entries[2] elif entries[0] == "optional": - if entries[1] != "plugin": - raise RuntimeError("Only plugins can be optional in qmldir files") - self.plugin_name = entries[2] - self.plugin_optional = True - if len(entries) > 3: - self.plugin_path = entries[3] + if entries[1] == "plugin": + self.plugin_name = entries[2] + self.plugin_optional = True + if len(entries) > 3: + self.plugin_path = entries[3] + elif entries[1] == "import": + if len(entries) == 4: + self.optional_imports.append(entries[2] + "/" + entries[3]) + else: + self.optional_imports.append(entries[2]) + else: + raise RuntimeError("Only plugins and imports can be optional in qmldir files") elif entries[0] == "classname": self.classname = entries[1] elif entries[0] == "typeinfo": @@ -3694,6 +3703,9 @@ def write_example( add_target += f" IMPORTS\n{qml_dir_imports_line}" if qml_dir_dynamic_imports: add_target += " IMPORTS ${module_dynamic_qml_imports}\n" + if len(qml_dir.optional_imports) != 0: + qml_dir_optional_imports_line = " \n".join(qml_dir.optional_imports) + add_target += f" OPTIONAL_IMPORTS\n{qml_dir_optional_imports_line}" if qml_dir.plugin_optional: add_target += " PLUGIN_OPTIONAL\n" @@ -3986,6 +3998,9 @@ def write_qml_plugin( extra_lines.append("IMPORTS\n " f"{qml_dir_imports_line}") if qml_dir_dynamic_imports: extra_lines.append("IMPORTS ${module_dynamic_qml_imports}") + if len(qml_dir.optional_imports): + qml_dir_optional_imports_line = "\n ".join(qml_dir.optional_imports) + extra_lines.append("OPTIONAL_IMPORTS\n " f"{qml_dir_optional_imports_line}") if qml_dir.plugin_optional: extra_lines.append("PLUGIN_OPTIONAL") -- cgit v1.2.3