| project('qt6 qml build test', 'cpp', |
| meson_version: '>= 1.7.0', |
| # Qt6 requires C++ 17 support |
| default_options : ['cpp_std=c++17'] |
| ) |
| |
| qt_modules = ['Core', 'Gui', 'Qml'] |
| |
| qtdep = dependency('qt6', modules : qt_modules, main : true, private_headers: true, required : false, method : get_option('method')) |
| if not qtdep.found() |
| error('MESON_SKIP_TEST qt6 not found.') |
| endif |
| |
| qtmodule = import('qt6') |
| fs = import('fs') |
| |
| qmlmodule1 = qtmodule.qml_module( |
| 'My.Module1', |
| version: '1.0', |
| qml_sources: files('Basic.qml', 'subdir/Thing.qml'), |
| qml_singletons: files('QmlSingleton.qml'), |
| qml_internals: files('Internal.qml'), |
| moc_headers: files('QmlCppExposed.hpp', 'QmlCppOtherExposed.hpp'), |
| designer_supported: true, |
| dependencies: [qtdep], |
| install: true |
| ) |
| |
| #with a different resource prefix |
| qmlmodule2 = qtmodule.qml_module( |
| 'My.Module2', |
| version: '1.0', |
| qml_sources: ['Basic.qml', 'subdir/Thing.qml'], |
| resources_prefix: '/test', |
| dependencies: [qtdep], |
| ) |
| |
| #test with generated targets |
| basic_copy = fs.copyfile('Basic.qml') |
| thing_copy = fs.copyfile('subdir/Thing.qml') |
| |
| #build without cachegen |
| qmlmodule3 = qtmodule.qml_module( |
| 'My.Module3', |
| version: '1.10.42', |
| qml_sources: [basic_copy, thing_copy], |
| cachegen: false, |
| dependencies: [qtdep], |
| ) |
| |
| #build without cachegen |
| qmlmodule4 = qtmodule.qml_module( |
| 'My.Module4', |
| qml_sources: files('Basic.qml', 'subdir/Thing.qml'), |
| generate_qmldir: false, |
| dependencies: [qtdep], |
| ) |
| |
| qmlmodule4_res = qtmodule.compile_resources( |
| name : 'qmlmodule4_resource', |
| sources : files(['custom_qmldir.qrc']), |
| method : get_option('method') |
| ) |
| |
| #a module with only C++ classes |
| cpponly_module = qtmodule.qml_module( |
| 'My.Module5', |
| version: '1.0', |
| moc_headers: files('subdir/SubdirHeader.hpp'), |
| dependencies: [qtdep], |
| install: true |
| ) |
| |
| #module as static library |
| qmlmodule6 = qtmodule.qml_module( |
| 'My.Module6', |
| version: '1.0', |
| qml_sources: files('Basic.qml'), |
| moc_headers: files('subdir/SubdirHeader.hpp'), |
| cachegen: true, |
| dependencies: [qtdep], |
| ) |
| |
| qmlmodule6_static = static_library( |
| 'Qmlmodule6Lib', |
| sources: qmlmodule6, |
| include_directories: include_directories('subdir'), |
| dependencies: [qtdep], |
| override_options: 'unity=off', |
| ) |
| |
| #qml entry point and qmldir dependecies |
| qmlmodule0 = qtmodule.qml_module( |
| 'My.Module0', |
| version: '1.0', |
| qml_sources: files('Main.qml'), |
| imports: ['QtQuick/2.0', 'My.Module1'], |
| optional_imports: ['My.Module2/auto'], |
| dependencies: [qtdep], |
| ) |
| |
| qmltest = executable( |
| 'qmlmodule', |
| sources : [ |
| 'QmlMain.cpp', qmlmodule0, qmlmodule1, qmlmodule2, |
| qmlmodule3, qmlmodule4, qmlmodule4_res, cpponly_module |
| ], |
| link_with : qmlmodule6_static, |
| dependencies : qtdep, |
| # headers in subdirectory needs to have their include path explicitly |
| # added for the code generated by by qmltyperegistrar. see QTBUG-87221 |
| include_directories: include_directories('subdir'), |
| #generated code doesn't support unity build |
| override_options: 'unity=off', |
| ) |