qt: register existing .qrc to fix build dependencies

This commit is contained in:
GeorgiaPreda authored and Dylan Baker committed 2026-11-02 11:32:42 -08:00
1 parent 27f69b22e5
commit 9a685a84fa
6 files changed
+43 -1

No files matched your search

+3 -1
View File
@@ -2186,12 +2186,14 @@ class Generator(HoldableObject):
depfile: T.Optional[str] = None,
capture: bool = False,
depends: T.Optional[T.Sequence[TargetDepends]] = None,
depend_files: T.Optional[T.Sequence[File]] = None,
name: str = 'Generator'):
self.environment = env
self.exe = exe
self.depfile = depfile
self.capture = capture
self.depends: T.List[TargetDepends] = list(depends or [])
self.depend_files: T.List[File] = list(depend_files or [])
self.arglist = arguments
self.outputs = output
self.name = name
@@ -2279,7 +2281,7 @@ class GeneratedList(HoldableObject):
self.infilelist: T.List[FileMaybeInTargetPrivateDir] = []
self.outfilelist: T.List[str] = []
self.outmap: T.Dict[FileMaybeInTargetPrivateDir, T.List[str]] = {}
self.depend_files: T.List[File] = []
self.depend_files: T.List[File] = self.generator.depend_files.copy()
if self.extra_args is None:
self.extra_args: T.List[str] = []
+1
View File
@@ -914,6 +914,7 @@ class QtBaseModule(ExtensionModule):
self.tools['qmlcachegen'],
command_args,
[f'{target_name}_@BASENAME@.cpp'],
depend_files=[kwargs['qml_qrc']],
name=f'Qml cache generation for {target_name}')
output: T.List[T.Union[build.CustomTarget, build.GeneratedList]] = []
@@ -0,0 +1,5 @@
import QtQml
QtObject {
property int answer: 42
}
@@ -0,0 +1,17 @@
project('qml cache resource dependency', 'cpp', meson_version: '>= 1.7.0')
qt = import('qt6')
qtdep = dependency('qt6', modules: ['Core', 'Qml'], version: '>= 6.2', required: false)
if not qtdep.found() or not qt.has_tools(tools: ['qmlcachegen', 'rcc'], required: false)
error('MESON_SKIP_TEST Qt6 QML tools not found')
endif
sources = qt.qml_module(
'MyModule',
qml_sources: files('Main.qml'),
generate_qmltype: false,
resources_prefix: get_option('resource_prefix'),
)
# Only build the generated sources: compiling them would require Qt's private headers.
static_library('cache', sources, name_prefix: '', name_suffix: 'a', dependencies: qtdep)
@@ -0,0 +1 @@
option('resource_prefix', type: 'string', value: '/old')
+16
View File
@@ -1521,6 +1521,22 @@ class AllPlatformTests(BasePlatformTests):
self.utime(os.path.join(testdir, 'srcgen.py'))
self.assertRebuiltTarget('basic')
def test_qml_cache_resource_dependency(self):
if self.backend is not Backend.ninja:
raise SkipTest('This test requires the Ninja backend')
testdir = os.path.join(self.unit_test_dir, '146 qml cache resource dependency')
self.init(testdir)
cache_source = 'cache.a.p/MyModule_Main.cpp'
loader = 'MyModule_qmlcache_loader.cpp'
self.build(cache_source, extra_args=[loader])
for source in (cache_source, loader):
self.assertIn('_old_MyModule_Main_qml', Path(self.builddir, source).read_text(encoding='utf-8'))
self.setconf('-Dresource_prefix=/new', will_build=False)
self.build(cache_source, extra_args=[loader])
for source in (cache_source, loader):
self.assertIn('_new_MyModule_Main_qml', Path(self.builddir, source).read_text(encoding='utf-8'))
def test_long_opt_vs_D(self):
'''
Test that conflicts between -D for builtin options and the corresponding