Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Qml modules #13304

Merged
merged 6 commits into from
Jan 9, 2025
Merged

Qml modules #13304

merged 6 commits into from
Jan 9, 2025

Conversation

chubinou
Copy link
Contributor

@chubinou chubinou commented Jun 7, 2024

This MR aims to bring the support of QML modules to meson, the goal is to
provide something similar to CMake qt_add_qml_module function provided by Qt
(see https://doc.qt.io/qt-6/qt-add-qml-module.html)

fixes: #6988 #9683

what's provided

  • qml module generation, qmldir and qrc are automatically generated
  • automatic type registration, C++ classes can be automatically registered in
    the QML module
  • cache generation, the qmlcachegen tool can be invoked on qml files.

what's missing:

the scope of this PR is already large, I voluntary put aside some aspect of the module generation.

  • no qmltc integration
  • no plugin code generation
  • no linter target
  • no qml import scanning
  • no failsafe regarding which tool is available with a given version of Qt, some
    tools (or options) are not available with older version of Qt,
  • no 'past version' support, this would require being able to tag version to
    specific Qml files, which is not very practical in terms of API
  • cmake copies every qml in the build directory, maybe that's necessary for qml
    tooling, I haven't investigated this
CMake argument support comment
VERSION yes
PAST_MAJOR_VERSIONS no shipping different version of the same unit would probably require to be able to tag version per file
STATIC / SHARED N/A we don't generated the final target, the output of the function should be added to a lib/exe target
PLUGIN_TARGET no plugin is not generated
OUTPUT_DIRECTORY yes
RESOURCE_PREFIX yes
CLASS_NAME no plugin is not generated
TYPEINFO yes
IMPORTS yes
OPTIONAL_IMPORTS yes
DEFAULT_IMPORTS yes
DEPENDENCIES yes
IMPORT_PATH yes
SOURCES yes source can be provided for moc, sources should be added to the final target
QML_FILES yes
RESOURCES no resources can be added to the final target independently, there is no point supporting it there
OUTPUT_TARGETS N/A
DESIGNER_SUPPORTED yes
FOLLOW_FOREIGN_VERSIONING no
NAMESPACE yes
NO_PLUGIN no plugin is not generated
NO_PLUGIN_OPTIONAL no plugin is not generated
NO_CREATE_PLUGIN_TARGET no plugin is not generated
NO_GENERATE_PLUGIN_SOURCE no plugin is not generated
NO_GENERATE_QMLTYPES yes
NO_GENERATE_QMLDIR yes
NO_LINT no qmllint not supported
NO_CACHEGEN yes
NO_RESOURCE_TARGET_PATH
NO_IMPORT_SCAN no not supported
ENABLE_TYPE_COMPILER no qmltc is not supported
TYPE_COMPILER_NAMESPACE no qmltc is not supported
QMLTC_EXPORT_DIRECTIVE no qmltc is not supported
QMLTC_EXPORT_FILE_NAME no qmltc is not supported

@chubinou chubinou requested a review from jpakkane as a code owner June 7, 2024 15:43
@chubinou chubinou changed the title Qml modules Draft: Qml modules Jun 7, 2024
@chubinou chubinou force-pushed the qml_modules branch 2 times, most recently from 5a309af to 2c9b9eb Compare June 21, 2024 12:01
@chubinou
Copy link
Contributor Author

arch tests are failing because the CI doesn't provide QtQml for qt 6 which is a new requirement for the test

@chubinou chubinou changed the title Draft: Qml modules Qml modules Jun 21, 2024
Copy link
Member

@dcbaker dcbaker left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for working on this! I've taken a cursory glance, and there's a few smallish things I've noticed. I'd like to have another look later when I have more time to get into more of the details

Comment on lines 180 to 181
for check in checklist:
if check not in choices:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you can simplify (and make a better error message) this to something like:

invalid = set(checklist).difference(choices)
if invalid:
    return f"invalid selections {', '.join(sorted(invalid))}, valid elements are {', '.join(sorted(choices))}."

preserve_paths: bool

class HasToolKwArgs(kwargs.ExtractRequired):

method: str
tools: T.List[str]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you can make this a little more powerful (and maybe remove an assert later on) with:
tools: T.List[Literal['moc, 'lrelease', <insert reset of valid tools>]]

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

Comment on lines 746 to 747
else:
assert False, "unreachable"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm happy to trust the type annotations for the final release, though this might be useful for bringup

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I changed this function quite a bit, I took inspiration from the one in gnome.py

basename: str = os.path.basename(sourcepath)
classname: str = basename.rsplit('.', maxsplit=1)[0]

if not any(basename.endswith(ext) for ext in ['.qml', '.js', '.mjs']):
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if not any(basename.endswith(ext) for ext in ['.qml', '.js', '.mjs']):
if not basename.endswith(('.qml', '.js', '.mjs')):

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

if not any(basename.endswith(ext) for ext in ['.qml', '.js', '.mjs']):
raise MesonException(f'unexpected file type declared in qml sources {s}')

if len(classname) == 0 or '.' in classname or classname[0].islower():
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if len(classname) == 0 or '.' in classname or classname[0].islower():
if not classname or '.' in classname or classname[0].islower():

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed


cmd.extend(kwargs['extra_args'])

if namespace != '':
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if namespace != '':
if namespace:

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

description=f'Qml type registration for {target_name}',
)

@FeatureNew('qt.qml_module', '1.0')
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
@FeatureNew('qt.qml_module', '1.0')
@FeatureNew('qt.qml_module', '1.6')

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

Comment on lines 996 to 997
qrc_resouces: T.List[T.Union[FileOrString, build.CustomTarget, build.CustomTargetIndex, build.GeneratedList]] = []
all_qml_files: T.Sequence[T.Union[FileOrString, build.CustomTarget]] = list(kwargs['qml_sources']) + list(kwargs['qml_singletons']) + list(kwargs['qml_internals'])
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm wondering if it would be beneficial to use the Interpreter.source_strings_to_files method here to remove the strings and just have list[File | CustomTarget | CustomTargetIndex | GeneratedList] here, and then not have to do string handling internally.

@chubinou
Copy link
Contributor Author

some self comments on the PR:

I tried to follow Qt module directory structure

for the file MyClass.qml in the module Foo.Bar, this should looks like
Foo
|- Bar
|   |- qmldir
|   |- MyClass.qml
|   |- module.qmltypes

at the moment this is still a bit clumpsy:

  • for the tools to actually be able to use this, we should copy the .qml files to the Bar directory, but Meson doesn't really let me copy files to a subdirectory (I can probably cheat my way out of it, but choosed not to for the moment)
  • this is not really needed for the compilation parts, we could generate everything on a flat level, and do the file mapping in the qrc (it defines the internal paths of each resources). I thought that maybe I can make a special target to install the qml module tree for tooling purpose, maybe some custom target with an install_tag like in the gnome module, I haven't looked in depth at this.

@AdelKS
Copy link
Contributor

AdelKS commented Jul 12, 2024

Thank you for undertaking this work !

I wanted to give a try to registering QML modules but I am afraid I've hit against a regression introduced in this MR before I could get to it. Here's the reproducer:

git clone --depth=1 https://github.com/AdelKS/ZeGrapher.git
cd ZeGrapher
meson setup build
cd build
meson compile

which outputs this error

[59/203] Compiling C++ object src/libZeGrapherLib.a.p/meson-generated_moc_polynomialregression.cpp.o
FAILED: src/libZeGrapherLib.a.p/meson-generated_moc_polynomialregression.cpp.o 
c++ -Isrc/libZeGrapherLib.a.p -Isrc -I../src -Isubprojects/zecalculator/include -I../subprojects/zecalculator/include -I/usr/include/qt6/QtCore -I/usr/include/qt6 -I/usr/lib/qt6/mkspecs/linux-g++ -I/usr/include/qt6/QtGui -I/usr/include/qt6/QtWidgets -I/usr/include/qt6/QtNetwork -I/usr/include/qt6/QtSvg -I/usr/include/qt6/QtQuick -I/usr/include/qt6/QtQmlModels -I/usr/include/qt6/QtQmlIntegration -I/usr/include/qt6/QtOpenGL -I/usr/include/qt6/QtQml -I/usr/include/qt6/QtQuickWidgets -I/usr/include -fdiagnostics-color=always -DNDEBUG -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -Wpedantic -std=c++20 -O3 '-D QT_NO_DEBUG_OUTPUT' '-D QT_NO_INFO_OUTPUT' '-D QT_NO_WARNING_OUTPUT' '-D QT_NO_DEBUG' -pipe -fPIC -DBOOST_ALL_NO_LIB -DQT_QUICKWIDGETS_LIB -DQT_QUICK_LIB -DQT_QMLMODELS_LIB -DQT_QMLINTEGRATION_LIB -DQT_OPENGL_LIB -DQT_QML_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -MD -MQ src/libZeGrapherLib.a.p/meson-generated_moc_polynomialregression.cpp.o -MF src/libZeGrapherLib.a.p/meson-generated_moc_polynomialregression.cpp.o.d -o src/libZeGrapherLib.a.p/meson-generated_moc_polynomialregression.cpp.o -c src/libZeGrapherLib.a.p/moc_polynomialregression.cpp
cc1plus: fatal error: src/libZeGrapherLib.a.p/moc_polynomialregression.cpp: No such file or directory

it looks like there's a naming convention that isn't respected between meson-generated_moc_polynomialregression.cpp.o and moc_polynomialregression.cpp ? The relevant meson file is this one

Or maybe it's related to the fact that I currently pass all headers that need a moc pass on them to meson's qt.compile_moc() method. I wanted to ask how does that interact with the new qt.qml_module() method with its moc_headers kwarg, because it looked like ninja was already complaining that a target is generated twice if I passed a header, that I already moc'ed with qt.compile_moc() , to qt.qml_module()

@chubinou
Copy link
Contributor Author

Hi, thanks for your interest

I wanted to give a try to registering QML modules but I am afraid I've hit against a regression introduced in this MR before I could get to it.

your repository doesn't use the feature from this MR, so I don't really see how this is a regression.

I tried to compile you project but I ended up with a lot of compilation issues (template issues in your math classes, compiled on ubuntu 22.04 with GCC 11.4), So I can't really help you there

Or maybe it's related to the fact that I currently pass all headers that need a moc pass on them to meson's qt.compile_moc() method. I wanted to ask how does that interact with the new qt.qml_module() method with its moc_headers kwarg, because it looked like ninja was already complaining that a target is generated twice if I passed a header, that I already moc'ed with qt.compile_moc() , to qt.qml_module()

qt.qml_module will moc the file itself as it needs to pass specific options to moc to extract type information, so qt.compile_moc becomes redundant

@AdelKS
Copy link
Contributor

AdelKS commented Jul 18, 2024

Hey, thanks for trying to look into it

template issues in your math classes, compiled on ubuntu 22.04 with GCC 11.4

Yeah I stopped trying to make "old" GCC or clang versions happy x)

your repository doesn't use the feature from this MR, so I don't really see how this is a regression.

Sorry, I haven't been clear enough: the master branch of my repo builds fine with latest release of meson 1.5.0, but not with this branch, this is before I make changes to meson.build to use qt.qml_module(). I need to try latest meson git commit to check, maybe my build failure has nothing to do with this MR.

qt.qml_module will moc the file itself as it needs to pass specific options to moc to extract type information, so qt.compile_moc becomes redundant

I understand. I have a noob suggestion on this aspect: I have this (maybe wrong ?) approach where I use a bash script to make a meson files() array of all the headers that contain the Q_OBJECT or Q_GADGET macros and qt.compile_moc() them. Is it doable or a good idea to change qt.compile_moc() in the same way so it always produces the type information qt.qml_module() needs, and make qt.qml_module() accept the output of qt.compile_moc() ? The benefit I see to this is to streamline how to deal with Qt's shenanigans: moc all the "special" headers, then add qml modules on top if/when needed. This at least also assumes that header files that don't have the QML_ELEMENT macro wouldn't make things harder for qt.qml_module()

@AdelKS
Copy link
Contributor

AdelKS commented Jul 18, 2024

I need to try latest meson git commit to check, maybe my build failure has nothing to do with this MR.

Okay I just tried on meson commit dfd22db4b, which is the latest meson commit before your MRs commits, and my repo could build, so this MR did at least introduce breaking changes, to qt.compile_moc() I assume ?

Would you be willing to install gcc-13 on your Ubuntu to confirm ?

add-apt-repository -y ppa:ubuntu-toolchain-r/test
apt install -y gcc-13
git clone --depth=1 https://github.com/AdelKS/ZeGrapher.git
cd ZeGrapher
CXX=g++13 meson setup build
cd build
meson compile

mesonbuild/modules/_qt.py Outdated Show resolved Hide resolved
chubinou added a commit to chubinou/meson that referenced this pull request Aug 7, 2024
`outfiles` is the output list of the individual commands

Bug: mesonbuild/pull/13304#issuecomment-2226398671
chubinou added a commit to chubinou/meson that referenced this pull request Aug 7, 2024
`outfilelist` is the output list of the target, while `outfiles` is the output
list of the individual commands

Bug: mesonbuild/pull/13304#issuecomment-2226398671
@chubinou
Copy link
Contributor Author

chubinou commented Aug 7, 2024

@AdelKS the issue was due to some bad replacements in ninja backend, i opened #13526 to fix the issue

chubinou added a commit to chubinou/meson that referenced this pull request Aug 8, 2024
`outfilelist` is the output list of the target, while `outfiles` is the output
list of the individual commands

Bug: mesonbuild/pull/13304#issuecomment-2226398671
@chubinou
Copy link
Contributor Author

chubinou commented Aug 9, 2024

I updated the PR, it no longer requires the sources to be generated with a precise directory structure which should match meson philosophy.

I also added a 'devel' install target to allow installing the module definition (for qmllint or and qml tools)

@chubinou chubinou force-pushed the qml_modules branch 2 times, most recently from 3e31346 to e8e8465 Compare August 9, 2024 14:57
jpakkane pushed a commit that referenced this pull request Oct 12, 2024
`outfilelist` is the output list of the target, while `outfiles` is the output
list of the individual commands

Bug: /pull/13304#issuecomment-2226398671
@jpakkane jpakkane added this to the 1.7 milestone Oct 12, 2024
mesonbuild/modules/_qt.py Outdated Show resolved Hide resolved
mesonbuild/modules/_qt.py Outdated Show resolved Hide resolved
mesonbuild/modules/_qt.py Outdated Show resolved Hide resolved
module_prefix_full: str = os.path.join(*(kwargs['resources_prefix'].split('/') + module_prefix_list))

qrc_resouces: T.List[T.Union[FileOrString, build.GeneratedTypes]] = []
all_qml: T.Sequence[T.Union[FileOrString, build.GeneratedTypes]] = list(kwargs['qml_sources']) + list(kwargs['qml_singletons']) + list(kwargs['qml_internals'])
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Aren't these already lists? Why cast them again to list?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mypy fails otherwise

Unsupported left operand type for + ("Sequence[File | str | CustomTarget | CustomTargetIndex | GeneratedList]")

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe the original definition of kwargs should annotate these as T.List instead of the generic T.Sequence, if we need them to be a List type?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I changed it for a T.List, this seems to be enough

mesonbuild/modules/_qt.py Outdated Show resolved Hide resolved
mesonbuild/modules/_qt.py Outdated Show resolved Hide resolved
mesonbuild/modules/_qt.py Outdated Show resolved Hide resolved
mesonbuild/modules/_qt.py Outdated Show resolved Hide resolved
@jpakkane
Copy link
Member

The next release is creeping closer so it would be nice to get this in. FWICT there are only some minor fixes + a rebase and this should be good to merge.

@chubinou
Copy link
Contributor Author

I updated documentation to reflect @klokik & @AdelKS remarks

@AdelKS

Warning: highlighter.h:8: QSyntaxHighlighter is used as base type but cannot be found.

maybe some missing includes/dep ? moc tend to to be lenient about this. Q_MOC_INCLUDE may help about this

also don't you need public inheritance rather than default (private)

any plans with adding support for qmltc ? 🤩

not in short term, I'm more interested in providing shader compilation (qsb) support

@AdelKS
Copy link
Contributor

AdelKS commented Dec 20, 2024

maybe some missing includes/dep ? moc tend to to be lenient about this. Q_MOC_INCLUDE may help about this

Thanks! Tried this

highlighter.h

#pragma once

#include <QSyntaxHighlighter>
#include <QQuickTextDocument>
#include "Utils/state.h"

/// @brief backend that highlights parsing errors in math expressions in LineEdit
class Highlighter: public QSyntaxHighlighter
{
  Q_OBJECT
  QML_ELEMENT
  // ...
  Q_MOC_INCLUDE("QSyntaxHighlighter")

same warning message, I don't know if this is a meson thing or a Qt thing, probably the later, this is the dep object I give to qml_module()

qt6_dep = dependency('qt6', modules: ['Core', 'Gui', 'Widgets', 'Network', 'Svg', 'Quick', 'Qml', 'QuickWidgets'])

not in short term, I'm more interested in providing shader compilation (qsb) support

That will also be very cool ! I may try to get the qmltc support added, I'll open a Draft PR and tag you if so.

mesonbuild/modules/_qt.py Outdated Show resolved Hide resolved
@chubinou chubinou force-pushed the qml_modules branch 2 times, most recently from 9876b77 to bf2866c Compare January 2, 2025 09:03
@chubinou
Copy link
Contributor Author

chubinou commented Jan 2, 2025

@klokik I added the option

I also renamed the xxx_extra_args into xxx_extra_arguments in an attempt of uniformity with the other commands (preprocess and compile_translations)

@jpakkane
Copy link
Member

jpakkane commented Jan 5, 2025

Cygwin failure is unrelated. Dunno what is up with the image builder there, but the Arch failure at least is understandable. If that test needs to be skipped, then it needs to be whitelisted in the code (I don't remember exactly where, but grepping for the error message should find it).

@eli-schwartz
Copy link
Member

I tried to restart the cygwin test because it is supposed to be fixed now. Got an alternative fascinating error:

https://github.com/mesonbuild/meson/actions/runs/12619860632/job/35164883111 works

solving: 549 tasks, update: no, use test packages: no

299 install gcc-core 12.4.0-3

https://github.com/mesonbuild/meson/actions/runs/12579978087/job/35171502458 fails

solving: 547 tasks, update: no, use test packages: yes

305 install gcc-core 15.0.1+20241201-0.1

@jon-turney this seems odd somehow...

By the way the vala error triggered by gcc 15 (really, gcc 14 is sufficient to trigger this) was fixed in https://gitlab.gnome.org/GNOME/vala/-/commit/1383ab9f78f81b4ef56d63b38df702253ac8469b

But again, there is an out of date cygwin package. In this case, vala. Vala has some fixes for its terrible codegen, which has a general habit of breaking badly on the new GCC 14 defaults for "Modern C", but vala in cygwin is orphaned (again) and hasn't been updated since 2018...

@jon-turney
Copy link
Member

this seems odd somehow...

Indeed. I merged some PRs to the GitHub cygwin-install-action today, which I'm guessing is the cause of suddenly (and incorrectly) pulling in test packages...

I think I've fixed it now. Sorry for the inconvenience.

But again, there is an out of date cygwin package.

Yeah.

@jpakkane
Copy link
Member

jpakkane commented Jan 6, 2025

I cherry picked the CI commit to master. If you remove that and rebase, most of the errors should go away.

@chubinou
Copy link
Contributor Author

chubinou commented Jan 7, 2025

If you remove that and rebase, most of the errors should go away.

something doesn't looks right with the fedora/suse docker images

if i fetch the lastest docker image, the qt6 pacakges doesn't appeared as installed

docker run --rm -ti  --mount type=bind,source=$(pwd),target=/work -w /work mesonbuild/fedora:latest /bin/bash

[root@e2ead76ba693 meson]# rpm -qa | grep qt6 | wc -l
0

if I install manually the packages (list taken from the install.sh) from there then it works as expected

docker run --rm -ti  --mount type=bind,source=$(pwd),target=/work -w /work mesonbuild/fedora:latest /bin/bash

[root@e2ead76ba693 meson]# dnf install qt6-qtdeclarative-devel qt6-qtbase-devel qt6-qttools-devel qt6-linguist qt6-qtbase-private-devel
[root@e2ead76ba693 meson]# rpm -qa | grep qt6 | wc -l
26
[root@e2ead76ba693 meson]# python3 run_project_tests.py -v --only "frameworks/39 qt qml" 
[...]
Total passed tests:  3
Total failed tests:  0
Total skipped tests: 0

regarding the unity build failure, the generated code can't be used with unity build, this will generate duplicate symbols, I'll override the unity flag in the tests

@chubinou
Copy link
Contributor Author

chubinou commented Jan 7, 2025

something doesn't looks right with the fedora/suse docker images

well, master CI did fail, this explain why the image were not updated

https://github.com/mesonbuild/meson/actions/runs/12642215836/job/35226093290

@eli-schwartz
Copy link
Member

well, master CI did fail, this explain why the image were not updated

Yup, same problem that you would have seen happening in the image builder jobs from this PR. We try to rebuild images weekly, and only deploy them if tests still pass -- getting them to pass is then handled on a case by case basis when it fails, assuming the reason for failure is not transient, but actually requires updates for newer versions of that distro. So the general CI should always keep passing on git master and failures should always be because of issues introduced in a PR, not issues introduced by updating the environment.

You can either try to fix those issues, or have this PR assume that the new test will be skipped for lack of qtdeclarative. If/when the errors go away we will update the test to stop being skipped.

@jpakkane
Copy link
Member

jpakkane commented Jan 7, 2025

Master is green, so rebase should fix it?

in `func_install_data`, `rename` parameter is `ContainerTypeInfo(list, str)`
in `module/python.py`, rename is `None`

`rename` is stored in `build.Data` object under the type `T.List[str]`
This aims to bring the support of QML modules to meson, the goal is to
provide something similar to CMake `qt_add_qml_module` function provided by Qt
(see https://doc.qt.io/qt-6/qt-add-qml-module.html )

Fixes: mesonbuild#6988, mesonbuild#9683
@chubinou
Copy link
Contributor Author

chubinou commented Jan 8, 2025

Master is green, so rebase should fix it?

thanks for the fix, though the opensuse docker image doesn't seems updated yet

docker pull mesonbuild/opensuse:latest
docker run --rm -ti mesonbuild/opensuse:latest /bin/bash          
c31ae6ac0cee:/ # rpm -qa | grep -i qt6 | wc -l
0
c31ae6ac0cee:/ # 

We try to rebuild images weekly, and only deploy them if tests still pass

I guess I need to wait a couple of day, however the tests on fedora are passing now 🤔

version: '1.0',
qml_sources: files('Basic.qml', 'subdir/Thing.qml'),
qml_singletons: files('QmlSingleton.qml'),
qml_internals: files('Internal.qml'),
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All of these are done with files(). We should also support doing this:

qml_sources: ['Basic.qml', 'subdir/Thing.qml']

so some of the tests should be changed to this form.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I changed a test to use sources as string an one to use generated targets

@jpakkane jpakkane merged commit d7c2613 into mesonbuild:master Jan 9, 2025
31 of 32 checks passed
@eli-schwartz
Copy link
Member

You can either try to fix those issues, or have this PR assume that the new test will be skipped for lack of qtdeclarative. If/when the errors go away we will update the test to stop being skipped.

I guess I need to wait a couple of day, however the tests on fedora are passing now 🤔

As I said, "have this PR assume that the new test will be skipped". There is no point waiting a couple of days. When I said "We try to rebuild images weekly" that was totally unrelated (we do that in addition to rebuilding them every time the image configs change, which you did here, and image failures are NOT a CI failure, so you must verify that your changes build successfully in this PR or not depend on them).

Your test assumptions are incompatible with the OpenSUSE image until its unrelated failure is fixed, which means we need to mark it as skipped.

This PR was merged with failing CI @jpakkane

@chubinou
Copy link
Contributor Author

which means we need to mark it as skipped

I opened #14107 for this

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

qt5 Ahead-of-Time compilation for qml
8 participants