From de5c873c8bf39aa1a7142d8054c31cf9b0cfa7f2 Mon Sep 17 00:00:00 2001 From: Jean-Christophe Fillion-Robin Date: Sun, 26 Oct 2025 12:15:49 -0400 Subject: [PATCH 1/3] fix: Ensure typesystem settings can be loaded from Qt resources This updates `build_all.txt` to reference dependent typesystem files as Qt resources and adds the missing `typesystem_uitools.xml` entry. This change removes the need to copy the `typesystem_*.xml` files alongside the generator executable or start the executable from the generator source directory. --- generator/build_all.txt | 30 +++++++++++++++--------------- generator/generator.qrc | 31 ++++++++++++++++--------------- 2 files changed, 31 insertions(+), 30 deletions(-) diff --git a/generator/build_all.txt b/generator/build_all.txt index ee2a6c6c1..c24ad4ad6 100644 --- a/generator/build_all.txt +++ b/generator/build_all.txt @@ -1,17 +1,17 @@ - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + diff --git a/generator/generator.qrc b/generator/generator.qrc index 7eac8aa69..3c9bdad42 100644 --- a/generator/generator.qrc +++ b/generator/generator.qrc @@ -1,20 +1,21 @@ - + qtscript_masterinclude.h build_all.txt -typesystem_general.xml -typesystem_core.xml -typesystem_gui.xml -typesystem_sql.xml -typesystem_opengl.xml -typesystem_svg.xml -typesystem_network.xml -typesystem_xml.xml -typesystem_webkit.xml -typesystem_webenginewidgets.xml -typesystem_xmlpatterns.xml -typesystem_multimedia.xml -typesystem_qml.xml -typesystem_quick.xml +typesystem_general.xml +typesystem_core.xml +typesystem_gui.xml +typesystem_sql.xml +typesystem_opengl.xml +typesystem_svg.xml +typesystem_network.xml +typesystem_xml.xml +typesystem_webkit.xml +typesystem_webenginewidgets.xml +typesystem_xmlpatterns.xml +typesystem_uitools.xml +typesystem_multimedia.xml +typesystem_qml.xml +typesystem_quick.xml From 51795d6423f78e6c20fda8d68b6a98ee26f676a2 Mon Sep 17 00:00:00 2001 From: Jean-Christophe Fillion-Robin Date: Sun, 26 Oct 2025 12:47:52 -0400 Subject: [PATCH 2/3] ci: Update workflow to run generator outside of source directory This allows checking that the fix integrated in the previous commit effectively works. Since by default the generator output the generated files in the parent directory, the output directory is explicitly specified to be the current directory. --- .github/workflows/build.yml | 17 +++++++++-------- .github/workflows/build_latest.yml | 4 ++-- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index aea5e4103..93ad6dfa9 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -73,9 +73,9 @@ jobs: # workaround to allow to find the Qt include dirs for installed standard qt packages mkdir /usr/include/qt5; ln -s /usr/include/x86_64-linux-gnu/qt5 /usr/include/qt5/include export QTDIR=/usr/include/qt5 - cd generator UBSAN_OPTIONS="halt_on_error=1" ASAN_OPTIONS="detect_leaks=0:detect_stack_use_after_return=1:fast_unwind_on_malloc=0" \ - ./pythonqt_generator + ./generator/pythonqt_generator \ + --output-directory=. - name: Build PythonQt (exclude_generator) run: | @@ -169,10 +169,11 @@ jobs: - name: Generate Wrappers run: | export QTDIR=/usr/include/qt5 - cd generator # Specify "/usr/include" so that header "bits/wordsize.h" included from "qconfig.h" is found. # See https://git.rockylinux.org/staging/rpms/qt5-qtbase/-/blob/r8/SOURCES/qconfig-multilib.h - ./pythonqt_generator --include-paths=/usr/include + ./generator/pythonqt_generator \ + --include-paths=/usr/include \ + --output-directory=. - name: Build PythonQt (exclude_generator) run: | @@ -270,9 +271,9 @@ jobs: - name: Generate Wrappers run: | - cd generator UBSAN_OPTIONS="halt_on_error=1" ASAN_OPTIONS="detect_leaks=0:detect_stack_use_after_return=1:fast_unwind_on_malloc=0" \ - ./pythonqt_generator + ./generator/pythonqt_generator \ + --output-directory=. - name: Build PythonQt (exclude_generator) run: | @@ -397,9 +398,9 @@ jobs: - name: Generate Wrappers shell: cmd run: | - cd generator set QTDIR=%QT_ROOT_DIR% - pythonqt_generator + generator\pythonqt_generator ^ + --output-directory=. - name: Build PythonQt (exclude_generator) shell: cmd diff --git a/.github/workflows/build_latest.yml b/.github/workflows/build_latest.yml index a367f3c54..ff683411b 100644 --- a/.github/workflows/build_latest.yml +++ b/.github/workflows/build_latest.yml @@ -85,11 +85,11 @@ jobs: - name: Generate Wrappers shell: bash run: | - cd generator QTDIR="$QT_ROOT_DIR" \ UBSAN_OPTIONS="halt_on_error=1" \ ASAN_OPTIONS="detect_leaks=0:detect_stack_use_after_return=1:fast_unwind_on_malloc=0" \ - ./pythonqt_generator + ./generator/pythonqt_generator \ + --output-directory=. - name: Upload Wrappers uses: actions/upload-artifact@v4 From f3f5314d6e8f54d0b8c89702ff2c887228c768c4 Mon Sep 17 00:00:00 2001 From: Jean-Christophe Fillion-Robin Date: Tue, 28 Oct 2025 01:43:33 -0400 Subject: [PATCH 3/3] fix: Improve loading of typesystem files from resources Ensure that typesystem files are loaded from the Qt resources only if not found in the specified file path. Suggested-by: Uwe Siems --- generator/build_all.txt | 30 +++++++++++++++--------------- generator/typesystem.cpp | 11 ++++++++++- 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/generator/build_all.txt b/generator/build_all.txt index c24ad4ad6..ee2a6c6c1 100644 --- a/generator/build_all.txt +++ b/generator/build_all.txt @@ -1,17 +1,17 @@ - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + diff --git a/generator/typesystem.cpp b/generator/typesystem.cpp index c1c91b6ec..320567db3 100644 --- a/generator/typesystem.cpp +++ b/generator/typesystem.cpp @@ -1600,7 +1600,16 @@ bool TypeDatabase::parseFile(const QString &filename, unsigned int qtVersion, bo { QFile file(filename); - Q_ASSERT(file.exists()); + // Attempt to open the file from the specified path + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + // If opening fails, attempt to load from Qt resources + file.setFileName(":/trolltech/generator/" + filename); + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + qWarning() << "Could not open file:" << filename; + return false; + } + } + QXmlInputSource source(&file); int count = m_entries.size();