summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2020-10-06 16:05:01 +0200
committerUlf Hermann <ulf.hermann@qt.io>2020-10-07 13:06:11 +0000
commite1e61daf39903b8b7595465c50a9871dea308f06 (patch)
tree81c22ab0f164efbdb71c2da8fe4ec952d1940638
parentae8ccbab45050dfce91f5220d774fba5a8251495 (diff)
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 <fabian.kosmale@qt.io>
-rwxr-xr-xutil/cmake/pro2cmake.py27
1 files 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")