aboutsummaryrefslogtreecommitdiffstats
path: root/sources/pyside-tools/deploy_lib
diff options
context:
space:
mode:
Diffstat (limited to 'sources/pyside-tools/deploy_lib')
-rw-r--r--sources/pyside-tools/deploy_lib/commands.py44
-rw-r--r--sources/pyside-tools/deploy_lib/config.py2
2 files changed, 29 insertions, 17 deletions
diff --git a/sources/pyside-tools/deploy_lib/commands.py b/sources/pyside-tools/deploy_lib/commands.py
index ee1abcb15..a45ced374 100644
--- a/sources/pyside-tools/deploy_lib/commands.py
+++ b/sources/pyside-tools/deploy_lib/commands.py
@@ -5,7 +5,11 @@ from __future__ import annotations
import json
import subprocess
import sys
+import shutil
+import tempfile
from pathlib import Path
+from functools import lru_cache
+
"""
All utility functions for deployment
@@ -37,24 +41,32 @@ def run_command(command, dry_run: bool, fetch_output: bool = False):
return command_str, output
+@lru_cache
def run_qmlimportscanner(qml_files: list[Path], dry_run: bool):
"""
- Runs pyside6-qmlimportscanner to find all the imported qml modules
+ Runs pyside6-qmlimportscanner to find all the imported qml modules in project_dir
"""
- if not qml_files:
- return []
-
qml_modules = []
- cmd = ["pyside6-qmlimportscanner", "-qmlFiles"]
- cmd.extend([str(qml_file) for qml_file in qml_files])
-
- if dry_run:
- run_command(command=cmd, dry_run=True)
-
- # we need to run qmlimportscanner during dry_run as well to complete the
- # command being run by nuitka
- _, json_string = run_command(command=cmd, dry_run=False, fetch_output=True)
- json_string = json_string.decode("utf-8")
- json_array = json.loads(json_string)
- qml_modules = [item['name'] for item in json_array if item['type'] == "module"]
+ # Create a temporary directory to copy all the .qml_files
+ # TODO: Modify qmlimportscanner code in qtdeclarative to include a flag to ignore directories
+ # Then, this copy into a temporary directory can be avoided
+ # See 36b425ea8bf36d47694ea69fa7d129b6d5a2ca2d in gerrit
+ with tempfile.TemporaryDirectory() as temp_dir:
+ temp_path = Path(temp_dir)
+ # Copy only files with .qml suffix
+ for qml_file in qml_files:
+ if qml_file.suffix == ".qml":
+ shutil.copy2(qml_file.resolve(), temp_path / qml_file.name)
+
+ cmd = ["pyside6-qmlimportscanner", "-rootPath", str(temp_path)]
+
+ if dry_run:
+ run_command(command=cmd, dry_run=True)
+
+ # Run qmlimportscanner during dry_run as well to complete the command being run by nuitka
+ _, json_string = run_command(command=cmd, dry_run=False, fetch_output=True)
+ json_string = json_string.decode("utf-8")
+ json_array = json.loads(json_string)
+ qml_modules = [item['name'] for item in json_array if item['type'] == "module"]
+
return qml_modules
diff --git a/sources/pyside-tools/deploy_lib/config.py b/sources/pyside-tools/deploy_lib/config.py
index 777290155..05806af75 100644
--- a/sources/pyside-tools/deploy_lib/config.py
+++ b/sources/pyside-tools/deploy_lib/config.py
@@ -350,7 +350,7 @@ class Config(BaseConfig):
"""Identify if QtQuick is used in QML files and add them as dependency
"""
extra_modules = []
- if not self.qml_modules:
+ if not self.qml_modules and self.qml_files:
self.qml_modules = set(run_qmlimportscanner(qml_files=self.qml_files,
dry_run=self.dry_run))