diff options
Diffstat (limited to 'sources/pyside-tools/deploy_lib')
| -rw-r--r-- | sources/pyside-tools/deploy_lib/commands.py | 44 | ||||
| -rw-r--r-- | sources/pyside-tools/deploy_lib/config.py | 2 |
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)) |
