From cdf4b39e6f0a94ae14fc923bb54a04e846bcc2d7 Mon Sep 17 00:00:00 2001 From: Jussi Pakkanen Date: Mon, 14 Apr 2025 22:14:50 +0300 Subject: Condense directory names for 1.8 rc1. --- test cases/frameworks/38 gir both_libraries/bar.c | 7 -- test cases/frameworks/38 gir both_libraries/bar.h | 1 - test cases/frameworks/38 gir both_libraries/foo.c | 6 -- test cases/frameworks/38 gir both_libraries/foo.h | 1 - .../frameworks/38 gir both_libraries/meson.build | 42 -------- .../frameworks/38 gir both_libraries/test.json | 3 - test cases/frameworks/39 gir both_libraries/bar.c | 7 ++ test cases/frameworks/39 gir both_libraries/bar.h | 1 + test cases/frameworks/39 gir both_libraries/foo.c | 6 ++ test cases/frameworks/39 gir both_libraries/foo.h | 1 + .../frameworks/39 gir both_libraries/meson.build | 42 ++++++++ .../frameworks/39 gir both_libraries/test.json | 3 + test cases/frameworks/39 qt qml/Basic.qml | 5 - test cases/frameworks/39 qt qml/Internal.qml | 5 - test cases/frameworks/39 qt qml/Main.qml | 53 ---------- test cases/frameworks/39 qt qml/QmlCppExposed.hpp | 25 ----- .../frameworks/39 qt qml/QmlCppOtherExposed.hpp | 25 ----- test cases/frameworks/39 qt qml/QmlMain.cpp | 31 ------ test cases/frameworks/39 qt qml/QmlSingleton.qml | 10 -- test cases/frameworks/39 qt qml/custom_qmldir | 4 - test cases/frameworks/39 qt qml/custom_qmldir.qrc | 5 - test cases/frameworks/39 qt qml/meson.build | 115 --------------------- test cases/frameworks/39 qt qml/meson_options.txt | 1 - .../frameworks/39 qt qml/subdir/SubdirHeader.hpp | 27 ----- test cases/frameworks/39 qt qml/subdir/Thing.qml | 5 - test cases/frameworks/39 qt qml/test.json | 22 ---- test cases/frameworks/40 qt qml/Basic.qml | 5 + test cases/frameworks/40 qt qml/Internal.qml | 5 + test cases/frameworks/40 qt qml/Main.qml | 53 ++++++++++ test cases/frameworks/40 qt qml/QmlCppExposed.hpp | 25 +++++ .../frameworks/40 qt qml/QmlCppOtherExposed.hpp | 25 +++++ test cases/frameworks/40 qt qml/QmlMain.cpp | 31 ++++++ test cases/frameworks/40 qt qml/QmlSingleton.qml | 10 ++ test cases/frameworks/40 qt qml/custom_qmldir | 4 + test cases/frameworks/40 qt qml/custom_qmldir.qrc | 5 + test cases/frameworks/40 qt qml/meson.build | 115 +++++++++++++++++++++ test cases/frameworks/40 qt qml/meson_options.txt | 1 + .../frameworks/40 qt qml/subdir/SubdirHeader.hpp | 27 +++++ test cases/frameworks/40 qt qml/subdir/Thing.qml | 5 + test cases/frameworks/40 qt qml/test.json | 22 ++++ 40 files changed, 393 insertions(+), 393 deletions(-) delete mode 100644 test cases/frameworks/38 gir both_libraries/bar.c delete mode 100644 test cases/frameworks/38 gir both_libraries/bar.h delete mode 100644 test cases/frameworks/38 gir both_libraries/foo.c delete mode 100644 test cases/frameworks/38 gir both_libraries/foo.h delete mode 100644 test cases/frameworks/38 gir both_libraries/meson.build delete mode 100644 test cases/frameworks/38 gir both_libraries/test.json create mode 100644 test cases/frameworks/39 gir both_libraries/bar.c create mode 100644 test cases/frameworks/39 gir both_libraries/bar.h create mode 100644 test cases/frameworks/39 gir both_libraries/foo.c create mode 100644 test cases/frameworks/39 gir both_libraries/foo.h create mode 100644 test cases/frameworks/39 gir both_libraries/meson.build create mode 100644 test cases/frameworks/39 gir both_libraries/test.json delete mode 100644 test cases/frameworks/39 qt qml/Basic.qml delete mode 100644 test cases/frameworks/39 qt qml/Internal.qml delete mode 100644 test cases/frameworks/39 qt qml/Main.qml delete mode 100644 test cases/frameworks/39 qt qml/QmlCppExposed.hpp delete mode 100644 test cases/frameworks/39 qt qml/QmlCppOtherExposed.hpp delete mode 100644 test cases/frameworks/39 qt qml/QmlMain.cpp delete mode 100644 test cases/frameworks/39 qt qml/QmlSingleton.qml delete mode 100644 test cases/frameworks/39 qt qml/custom_qmldir delete mode 100644 test cases/frameworks/39 qt qml/custom_qmldir.qrc delete mode 100644 test cases/frameworks/39 qt qml/meson.build delete mode 100644 test cases/frameworks/39 qt qml/meson_options.txt delete mode 100644 test cases/frameworks/39 qt qml/subdir/SubdirHeader.hpp delete mode 100644 test cases/frameworks/39 qt qml/subdir/Thing.qml delete mode 100644 test cases/frameworks/39 qt qml/test.json create mode 100644 test cases/frameworks/40 qt qml/Basic.qml create mode 100644 test cases/frameworks/40 qt qml/Internal.qml create mode 100644 test cases/frameworks/40 qt qml/Main.qml create mode 100644 test cases/frameworks/40 qt qml/QmlCppExposed.hpp create mode 100644 test cases/frameworks/40 qt qml/QmlCppOtherExposed.hpp create mode 100644 test cases/frameworks/40 qt qml/QmlMain.cpp create mode 100644 test cases/frameworks/40 qt qml/QmlSingleton.qml create mode 100644 test cases/frameworks/40 qt qml/custom_qmldir create mode 100644 test cases/frameworks/40 qt qml/custom_qmldir.qrc create mode 100644 test cases/frameworks/40 qt qml/meson.build create mode 100644 test cases/frameworks/40 qt qml/meson_options.txt create mode 100644 test cases/frameworks/40 qt qml/subdir/SubdirHeader.hpp create mode 100644 test cases/frameworks/40 qt qml/subdir/Thing.qml create mode 100644 test cases/frameworks/40 qt qml/test.json (limited to 'test cases/frameworks') diff --git a/test cases/frameworks/38 gir both_libraries/bar.c b/test cases/frameworks/38 gir both_libraries/bar.c deleted file mode 100644 index 4cb41f798..000000000 --- a/test cases/frameworks/38 gir both_libraries/bar.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "bar.h" -#include "foo.h" - -int bar_func(void) -{ - return foo_func() + 42; -} diff --git a/test cases/frameworks/38 gir both_libraries/bar.h b/test cases/frameworks/38 gir both_libraries/bar.h deleted file mode 100644 index d22827b83..000000000 --- a/test cases/frameworks/38 gir both_libraries/bar.h +++ /dev/null @@ -1 +0,0 @@ -int bar_func(void); diff --git a/test cases/frameworks/38 gir both_libraries/foo.c b/test cases/frameworks/38 gir both_libraries/foo.c deleted file mode 100644 index b88aa91da..000000000 --- a/test cases/frameworks/38 gir both_libraries/foo.c +++ /dev/null @@ -1,6 +0,0 @@ -#include "foo.h" - -int foo_func(void) -{ - return 42; -} diff --git a/test cases/frameworks/38 gir both_libraries/foo.h b/test cases/frameworks/38 gir both_libraries/foo.h deleted file mode 100644 index 2a0867249..000000000 --- a/test cases/frameworks/38 gir both_libraries/foo.h +++ /dev/null @@ -1 +0,0 @@ -int foo_func(void); diff --git a/test cases/frameworks/38 gir both_libraries/meson.build b/test cases/frameworks/38 gir both_libraries/meson.build deleted file mode 100644 index cb9cdd31f..000000000 --- a/test cases/frameworks/38 gir both_libraries/meson.build +++ /dev/null @@ -1,42 +0,0 @@ -project('gir both libraries', 'c') - -gir = dependency('gobject-introspection-1.0', required: false) -if not gir.found() - error('MESON_SKIP_TEST gobject-introspection not found.') -endif - -if host_machine.system() == 'cygwin' - # FIXME: g-ir-scanner seems broken on cygwin: - # ERROR: can't resolve libraries to shared libraries: foo++ - error('MESON_SKIP_TEST g-ir-scanner is broken on cygwin.') -endif - -gnome = import('gnome') - -# Regression test simulating how GStreamer generate its GIRs. -# Generated gobject-introspection binaries for every GStreamer libraries must -# first call gst_init() defined in the main libgstreamer, which means they need -# to link on that lib. -# A regression caused by https://github.com/mesonbuild/meson/pull/12632 made -# Meson not link the binary generated for bar with libfoo in the case it uses -# both_libraries(). - -libfoo = both_libraries('foo', 'foo.c') -foo_gir = gnome.generate_gir(libfoo, - namespace: 'foo', - nsversion: '1.0', - sources: ['foo.c', 'foo.h'], -) -foo_dep = declare_dependency( - link_with: libfoo, - sources: foo_gir, -) - -libbar = both_libraries('bar', 'bar.c', dependencies: foo_dep) -gnome.generate_gir(libbar, - namespace: 'bar', - nsversion: '1.0', - sources: ['bar.c', 'bar.h'], - extra_args: '--add-init-section=extern void foo_func(void);foo_func();', - dependencies: foo_dep, -) diff --git a/test cases/frameworks/38 gir both_libraries/test.json b/test cases/frameworks/38 gir both_libraries/test.json deleted file mode 100644 index 82ac42a29..000000000 --- a/test cases/frameworks/38 gir both_libraries/test.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "expect_skip_on_jobname": ["azure", "macos", "msys2", "cygwin"] -} \ No newline at end of file diff --git a/test cases/frameworks/39 gir both_libraries/bar.c b/test cases/frameworks/39 gir both_libraries/bar.c new file mode 100644 index 000000000..4cb41f798 --- /dev/null +++ b/test cases/frameworks/39 gir both_libraries/bar.c @@ -0,0 +1,7 @@ +#include "bar.h" +#include "foo.h" + +int bar_func(void) +{ + return foo_func() + 42; +} diff --git a/test cases/frameworks/39 gir both_libraries/bar.h b/test cases/frameworks/39 gir both_libraries/bar.h new file mode 100644 index 000000000..d22827b83 --- /dev/null +++ b/test cases/frameworks/39 gir both_libraries/bar.h @@ -0,0 +1 @@ +int bar_func(void); diff --git a/test cases/frameworks/39 gir both_libraries/foo.c b/test cases/frameworks/39 gir both_libraries/foo.c new file mode 100644 index 000000000..b88aa91da --- /dev/null +++ b/test cases/frameworks/39 gir both_libraries/foo.c @@ -0,0 +1,6 @@ +#include "foo.h" + +int foo_func(void) +{ + return 42; +} diff --git a/test cases/frameworks/39 gir both_libraries/foo.h b/test cases/frameworks/39 gir both_libraries/foo.h new file mode 100644 index 000000000..2a0867249 --- /dev/null +++ b/test cases/frameworks/39 gir both_libraries/foo.h @@ -0,0 +1 @@ +int foo_func(void); diff --git a/test cases/frameworks/39 gir both_libraries/meson.build b/test cases/frameworks/39 gir both_libraries/meson.build new file mode 100644 index 000000000..cb9cdd31f --- /dev/null +++ b/test cases/frameworks/39 gir both_libraries/meson.build @@ -0,0 +1,42 @@ +project('gir both libraries', 'c') + +gir = dependency('gobject-introspection-1.0', required: false) +if not gir.found() + error('MESON_SKIP_TEST gobject-introspection not found.') +endif + +if host_machine.system() == 'cygwin' + # FIXME: g-ir-scanner seems broken on cygwin: + # ERROR: can't resolve libraries to shared libraries: foo++ + error('MESON_SKIP_TEST g-ir-scanner is broken on cygwin.') +endif + +gnome = import('gnome') + +# Regression test simulating how GStreamer generate its GIRs. +# Generated gobject-introspection binaries for every GStreamer libraries must +# first call gst_init() defined in the main libgstreamer, which means they need +# to link on that lib. +# A regression caused by https://github.com/mesonbuild/meson/pull/12632 made +# Meson not link the binary generated for bar with libfoo in the case it uses +# both_libraries(). + +libfoo = both_libraries('foo', 'foo.c') +foo_gir = gnome.generate_gir(libfoo, + namespace: 'foo', + nsversion: '1.0', + sources: ['foo.c', 'foo.h'], +) +foo_dep = declare_dependency( + link_with: libfoo, + sources: foo_gir, +) + +libbar = both_libraries('bar', 'bar.c', dependencies: foo_dep) +gnome.generate_gir(libbar, + namespace: 'bar', + nsversion: '1.0', + sources: ['bar.c', 'bar.h'], + extra_args: '--add-init-section=extern void foo_func(void);foo_func();', + dependencies: foo_dep, +) diff --git a/test cases/frameworks/39 gir both_libraries/test.json b/test cases/frameworks/39 gir both_libraries/test.json new file mode 100644 index 000000000..82ac42a29 --- /dev/null +++ b/test cases/frameworks/39 gir both_libraries/test.json @@ -0,0 +1,3 @@ +{ + "expect_skip_on_jobname": ["azure", "macos", "msys2", "cygwin"] +} \ No newline at end of file diff --git a/test cases/frameworks/39 qt qml/Basic.qml b/test cases/frameworks/39 qt qml/Basic.qml deleted file mode 100644 index 33c0a28c7..000000000 --- a/test cases/frameworks/39 qt qml/Basic.qml +++ /dev/null @@ -1,5 +0,0 @@ -import QtQuick 2.0 - -Item { - property int ok: 1 -} diff --git a/test cases/frameworks/39 qt qml/Internal.qml b/test cases/frameworks/39 qt qml/Internal.qml deleted file mode 100644 index e8eee4723..000000000 --- a/test cases/frameworks/39 qt qml/Internal.qml +++ /dev/null @@ -1,5 +0,0 @@ -import QtQuick - -Item { - property int ok: 5 -} diff --git a/test cases/frameworks/39 qt qml/Main.qml b/test cases/frameworks/39 qt qml/Main.qml deleted file mode 100644 index 94b67186d..000000000 --- a/test cases/frameworks/39 qt qml/Main.qml +++ /dev/null @@ -1,53 +0,0 @@ -import QtQuick -import My.Module1 as M1 - -Item { - id: root - - Component.onCompleted: { - function checkInstance(label, instance, value) { - if (!instance) { - console.log(label, "KO instance is null") - return false - } if (instance.ok !== value) { - console.log(label, "KO got", instance.ok, "expected", value) - return false - } else { - console.log(label, "OK") - return true - } - } - - function checkClass(namespace, classname, value) { - let newObject = null; - try { - newObject = Qt.createQmlObject( - "import %1; %2 {}".arg(namespace).arg(classname), - root, - "some path" - ) - } catch (e) { - console.log(namespace, classname, "KO failed to instanciate object") - return false - } - return checkInstance("%1 %2".arg(namespace).arg(classname), newObject, value) - } - - let ret = true - ret &= checkClass("My.Module1", "Basic", 1); - ret &= checkClass("My.Module1", "Thing", 2); - ret &= checkClass("My.Module1", "QmlCppExposed", 3); - ret &= checkInstance("My.Module1 QmlSingleton", M1.QmlSingleton, 5) - - ret &= checkClass("My.Module2", "Thing", 2); - ret &= checkClass("My.Module3", "Basic", 1); - ret &= checkClass("My.Module4", "BasicAliased", 1); - ret &= checkClass("My.Module5", "SubdirHeader", 6); - ret &= checkClass("My.Module6", "Basic", 1); - - if (!ret) - Qt.exit(1) - else - Qt.quit() - } -} diff --git a/test cases/frameworks/39 qt qml/QmlCppExposed.hpp b/test cases/frameworks/39 qt qml/QmlCppExposed.hpp deleted file mode 100644 index 10568c8b7..000000000 --- a/test cases/frameworks/39 qt qml/QmlCppExposed.hpp +++ /dev/null @@ -1,25 +0,0 @@ -#pragma once -#include -#include - -class QmlCppExposed : public QObject -{ - Q_OBJECT - QML_ELEMENT - Q_PROPERTY(int ok READ getOk WRITE setOk NOTIFY okChanged) - -public: - inline int getOk() const { return m_ok; } - inline void setOk(int value) { - if (value == m_ok) - return; - m_ok = value; - emit okChanged(); - } - -signals: - void okChanged(); - -private: - int m_ok = 3; -}; diff --git a/test cases/frameworks/39 qt qml/QmlCppOtherExposed.hpp b/test cases/frameworks/39 qt qml/QmlCppOtherExposed.hpp deleted file mode 100644 index 784261635..000000000 --- a/test cases/frameworks/39 qt qml/QmlCppOtherExposed.hpp +++ /dev/null @@ -1,25 +0,0 @@ -#pragma once -#include -#include - -class QmlCppOtherExposed : public QObject -{ - Q_OBJECT - QML_ELEMENT - Q_PROPERTY(int ok READ getOk WRITE setOk NOTIFY okChanged) - -public: - inline int getOk() const { return m_ok; } - inline void setOk(int value) { - if (value == m_ok) - return; - m_ok = value; - emit okChanged(); - } - -signals: - void okChanged(); - -private: - int m_ok = 42; -}; diff --git a/test cases/frameworks/39 qt qml/QmlMain.cpp b/test cases/frameworks/39 qt qml/QmlMain.cpp deleted file mode 100644 index 0cec6f3a3..000000000 --- a/test cases/frameworks/39 qt qml/QmlMain.cpp +++ /dev/null @@ -1,31 +0,0 @@ -#include -#include -#include - -//extern type registration -extern void qml_register_types_My_Module6(); - -int main(int argCount, char* argVector[]) -{ - //register resources from static libraries - Q_INIT_RESOURCE(My_Module6); - Q_INIT_RESOURCE(qmlcache_My_Module6); - qml_register_types_My_Module6(); - - //don't require a grapical environment to run the test - qputenv("QT_QPA_PLATFORM", "offscreen"); - - QGuiApplication app(argCount, argVector); - QQmlApplicationEngine engine; - - QObject::connect(&engine, &QQmlApplicationEngine::objectCreated, [](QObject *object, const QUrl &url){ - if (object == nullptr) { - qFatal("unable to load scene"); - } - }); - - engine.addImportPath("qrc:///qt/qml"); - engine.addImportPath("qrc:///test"); - engine.load("qrc:///qt/qml/My/Module0/Main.qml"); - return app.exec(); -} diff --git a/test cases/frameworks/39 qt qml/QmlSingleton.qml b/test cases/frameworks/39 qt qml/QmlSingleton.qml deleted file mode 100644 index 73ea95d11..000000000 --- a/test cases/frameworks/39 qt qml/QmlSingleton.qml +++ /dev/null @@ -1,10 +0,0 @@ -pragma Singleton -import QtQuick - -Item { - property alias ok: sub.ok - - Internal { - id: sub - } -} diff --git a/test cases/frameworks/39 qt qml/custom_qmldir b/test cases/frameworks/39 qt qml/custom_qmldir deleted file mode 100644 index 9d84db651..000000000 --- a/test cases/frameworks/39 qt qml/custom_qmldir +++ /dev/null @@ -1,4 +0,0 @@ -module My.Module4 -prefer :/qt/qml/My/Module4/ -BasicAliased 1.0 Basic.qml -Thing 1.0 Thing.qml diff --git a/test cases/frameworks/39 qt qml/custom_qmldir.qrc b/test cases/frameworks/39 qt qml/custom_qmldir.qrc deleted file mode 100644 index bee52092c..000000000 --- a/test cases/frameworks/39 qt qml/custom_qmldir.qrc +++ /dev/null @@ -1,5 +0,0 @@ - - - custom_qmldir - - diff --git a/test cases/frameworks/39 qt qml/meson.build b/test cases/frameworks/39 qt qml/meson.build deleted file mode 100644 index 060e044a5..000000000 --- a/test cases/frameworks/39 qt qml/meson.build +++ /dev/null @@ -1,115 +0,0 @@ -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', -) diff --git a/test cases/frameworks/39 qt qml/meson_options.txt b/test cases/frameworks/39 qt qml/meson_options.txt deleted file mode 100644 index bc1069ebc..000000000 --- a/test cases/frameworks/39 qt qml/meson_options.txt +++ /dev/null @@ -1 +0,0 @@ -option('method', type : 'string', value : 'auto', description : 'The method to use to find Qt') diff --git a/test cases/frameworks/39 qt qml/subdir/SubdirHeader.hpp b/test cases/frameworks/39 qt qml/subdir/SubdirHeader.hpp deleted file mode 100644 index 019a16923..000000000 --- a/test cases/frameworks/39 qt qml/subdir/SubdirHeader.hpp +++ /dev/null @@ -1,27 +0,0 @@ -#pragma once -#include -#include - -#include "QmlCppExposed.hpp" - -class SubdirHeader : public QObject -{ - Q_OBJECT - QML_ELEMENT - Q_PROPERTY(int ok READ getOk WRITE setOk NOTIFY okChanged) - -public: - inline int getOk() const { return m_ok; } - inline void setOk(int value) { - if (value == m_ok) - return; - m_ok = value; - emit okChanged(); - } - -signals: - void okChanged(); - -private: - int m_ok = 6; -}; diff --git a/test cases/frameworks/39 qt qml/subdir/Thing.qml b/test cases/frameworks/39 qt qml/subdir/Thing.qml deleted file mode 100644 index 5b015c35c..000000000 --- a/test cases/frameworks/39 qt qml/subdir/Thing.qml +++ /dev/null @@ -1,5 +0,0 @@ -import QtQuick 2.0 - -Item { - property int ok: 2 -} diff --git a/test cases/frameworks/39 qt qml/test.json b/test cases/frameworks/39 qt qml/test.json deleted file mode 100644 index d1f868400..000000000 --- a/test cases/frameworks/39 qt qml/test.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "matrix": { - "options": { - "method": [ - { "val": "config-tool" }, - { "val": "qmake" }, - { "val": "pkg-config" } - ] - } - }, - "installed": [ - {"type": "file", "file": "usr/qml/My/Module1/QmlSingleton.qml"}, - {"type": "file", "file": "usr/qml/My/Module1/qmldir"}, - {"type": "file", "file": "usr/qml/My/Module1/Basic.qml"}, - {"type": "file", "file": "usr/qml/My/Module1/Internal.qml"}, - {"type": "file", "file": "usr/qml/My/Module1/Thing.qml"}, - {"type": "file", "file": "usr/qml/My/Module1/My_Module1.qmltypes"}, - {"type": "file", "file": "usr/qml/My/Module5/qmldir"}, - {"type": "file", "file": "usr/qml/My/Module5/My_Module5.qmltypes"} - ], - "expect_skip_on_jobname": ["cygwin", "msys2", "azure", "bionic", "macos"] -} diff --git a/test cases/frameworks/40 qt qml/Basic.qml b/test cases/frameworks/40 qt qml/Basic.qml new file mode 100644 index 000000000..33c0a28c7 --- /dev/null +++ b/test cases/frameworks/40 qt qml/Basic.qml @@ -0,0 +1,5 @@ +import QtQuick 2.0 + +Item { + property int ok: 1 +} diff --git a/test cases/frameworks/40 qt qml/Internal.qml b/test cases/frameworks/40 qt qml/Internal.qml new file mode 100644 index 000000000..e8eee4723 --- /dev/null +++ b/test cases/frameworks/40 qt qml/Internal.qml @@ -0,0 +1,5 @@ +import QtQuick + +Item { + property int ok: 5 +} diff --git a/test cases/frameworks/40 qt qml/Main.qml b/test cases/frameworks/40 qt qml/Main.qml new file mode 100644 index 000000000..94b67186d --- /dev/null +++ b/test cases/frameworks/40 qt qml/Main.qml @@ -0,0 +1,53 @@ +import QtQuick +import My.Module1 as M1 + +Item { + id: root + + Component.onCompleted: { + function checkInstance(label, instance, value) { + if (!instance) { + console.log(label, "KO instance is null") + return false + } if (instance.ok !== value) { + console.log(label, "KO got", instance.ok, "expected", value) + return false + } else { + console.log(label, "OK") + return true + } + } + + function checkClass(namespace, classname, value) { + let newObject = null; + try { + newObject = Qt.createQmlObject( + "import %1; %2 {}".arg(namespace).arg(classname), + root, + "some path" + ) + } catch (e) { + console.log(namespace, classname, "KO failed to instanciate object") + return false + } + return checkInstance("%1 %2".arg(namespace).arg(classname), newObject, value) + } + + let ret = true + ret &= checkClass("My.Module1", "Basic", 1); + ret &= checkClass("My.Module1", "Thing", 2); + ret &= checkClass("My.Module1", "QmlCppExposed", 3); + ret &= checkInstance("My.Module1 QmlSingleton", M1.QmlSingleton, 5) + + ret &= checkClass("My.Module2", "Thing", 2); + ret &= checkClass("My.Module3", "Basic", 1); + ret &= checkClass("My.Module4", "BasicAliased", 1); + ret &= checkClass("My.Module5", "SubdirHeader", 6); + ret &= checkClass("My.Module6", "Basic", 1); + + if (!ret) + Qt.exit(1) + else + Qt.quit() + } +} diff --git a/test cases/frameworks/40 qt qml/QmlCppExposed.hpp b/test cases/frameworks/40 qt qml/QmlCppExposed.hpp new file mode 100644 index 000000000..10568c8b7 --- /dev/null +++ b/test cases/frameworks/40 qt qml/QmlCppExposed.hpp @@ -0,0 +1,25 @@ +#pragma once +#include +#include + +class QmlCppExposed : public QObject +{ + Q_OBJECT + QML_ELEMENT + Q_PROPERTY(int ok READ getOk WRITE setOk NOTIFY okChanged) + +public: + inline int getOk() const { return m_ok; } + inline void setOk(int value) { + if (value == m_ok) + return; + m_ok = value; + emit okChanged(); + } + +signals: + void okChanged(); + +private: + int m_ok = 3; +}; diff --git a/test cases/frameworks/40 qt qml/QmlCppOtherExposed.hpp b/test cases/frameworks/40 qt qml/QmlCppOtherExposed.hpp new file mode 100644 index 000000000..784261635 --- /dev/null +++ b/test cases/frameworks/40 qt qml/QmlCppOtherExposed.hpp @@ -0,0 +1,25 @@ +#pragma once +#include +#include + +class QmlCppOtherExposed : public QObject +{ + Q_OBJECT + QML_ELEMENT + Q_PROPERTY(int ok READ getOk WRITE setOk NOTIFY okChanged) + +public: + inline int getOk() const { return m_ok; } + inline void setOk(int value) { + if (value == m_ok) + return; + m_ok = value; + emit okChanged(); + } + +signals: + void okChanged(); + +private: + int m_ok = 42; +}; diff --git a/test cases/frameworks/40 qt qml/QmlMain.cpp b/test cases/frameworks/40 qt qml/QmlMain.cpp new file mode 100644 index 000000000..0cec6f3a3 --- /dev/null +++ b/test cases/frameworks/40 qt qml/QmlMain.cpp @@ -0,0 +1,31 @@ +#include +#include +#include + +//extern type registration +extern void qml_register_types_My_Module6(); + +int main(int argCount, char* argVector[]) +{ + //register resources from static libraries + Q_INIT_RESOURCE(My_Module6); + Q_INIT_RESOURCE(qmlcache_My_Module6); + qml_register_types_My_Module6(); + + //don't require a grapical environment to run the test + qputenv("QT_QPA_PLATFORM", "offscreen"); + + QGuiApplication app(argCount, argVector); + QQmlApplicationEngine engine; + + QObject::connect(&engine, &QQmlApplicationEngine::objectCreated, [](QObject *object, const QUrl &url){ + if (object == nullptr) { + qFatal("unable to load scene"); + } + }); + + engine.addImportPath("qrc:///qt/qml"); + engine.addImportPath("qrc:///test"); + engine.load("qrc:///qt/qml/My/Module0/Main.qml"); + return app.exec(); +} diff --git a/test cases/frameworks/40 qt qml/QmlSingleton.qml b/test cases/frameworks/40 qt qml/QmlSingleton.qml new file mode 100644 index 000000000..73ea95d11 --- /dev/null +++ b/test cases/frameworks/40 qt qml/QmlSingleton.qml @@ -0,0 +1,10 @@ +pragma Singleton +import QtQuick + +Item { + property alias ok: sub.ok + + Internal { + id: sub + } +} diff --git a/test cases/frameworks/40 qt qml/custom_qmldir b/test cases/frameworks/40 qt qml/custom_qmldir new file mode 100644 index 000000000..9d84db651 --- /dev/null +++ b/test cases/frameworks/40 qt qml/custom_qmldir @@ -0,0 +1,4 @@ +module My.Module4 +prefer :/qt/qml/My/Module4/ +BasicAliased 1.0 Basic.qml +Thing 1.0 Thing.qml diff --git a/test cases/frameworks/40 qt qml/custom_qmldir.qrc b/test cases/frameworks/40 qt qml/custom_qmldir.qrc new file mode 100644 index 000000000..bee52092c --- /dev/null +++ b/test cases/frameworks/40 qt qml/custom_qmldir.qrc @@ -0,0 +1,5 @@ + + + custom_qmldir + + diff --git a/test cases/frameworks/40 qt qml/meson.build b/test cases/frameworks/40 qt qml/meson.build new file mode 100644 index 000000000..060e044a5 --- /dev/null +++ b/test cases/frameworks/40 qt qml/meson.build @@ -0,0 +1,115 @@ +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', +) diff --git a/test cases/frameworks/40 qt qml/meson_options.txt b/test cases/frameworks/40 qt qml/meson_options.txt new file mode 100644 index 000000000..bc1069ebc --- /dev/null +++ b/test cases/frameworks/40 qt qml/meson_options.txt @@ -0,0 +1 @@ +option('method', type : 'string', value : 'auto', description : 'The method to use to find Qt') diff --git a/test cases/frameworks/40 qt qml/subdir/SubdirHeader.hpp b/test cases/frameworks/40 qt qml/subdir/SubdirHeader.hpp new file mode 100644 index 000000000..019a16923 --- /dev/null +++ b/test cases/frameworks/40 qt qml/subdir/SubdirHeader.hpp @@ -0,0 +1,27 @@ +#pragma once +#include +#include + +#include "QmlCppExposed.hpp" + +class SubdirHeader : public QObject +{ + Q_OBJECT + QML_ELEMENT + Q_PROPERTY(int ok READ getOk WRITE setOk NOTIFY okChanged) + +public: + inline int getOk() const { return m_ok; } + inline void setOk(int value) { + if (value == m_ok) + return; + m_ok = value; + emit okChanged(); + } + +signals: + void okChanged(); + +private: + int m_ok = 6; +}; diff --git a/test cases/frameworks/40 qt qml/subdir/Thing.qml b/test cases/frameworks/40 qt qml/subdir/Thing.qml new file mode 100644 index 000000000..5b015c35c --- /dev/null +++ b/test cases/frameworks/40 qt qml/subdir/Thing.qml @@ -0,0 +1,5 @@ +import QtQuick 2.0 + +Item { + property int ok: 2 +} diff --git a/test cases/frameworks/40 qt qml/test.json b/test cases/frameworks/40 qt qml/test.json new file mode 100644 index 000000000..d1f868400 --- /dev/null +++ b/test cases/frameworks/40 qt qml/test.json @@ -0,0 +1,22 @@ +{ + "matrix": { + "options": { + "method": [ + { "val": "config-tool" }, + { "val": "qmake" }, + { "val": "pkg-config" } + ] + } + }, + "installed": [ + {"type": "file", "file": "usr/qml/My/Module1/QmlSingleton.qml"}, + {"type": "file", "file": "usr/qml/My/Module1/qmldir"}, + {"type": "file", "file": "usr/qml/My/Module1/Basic.qml"}, + {"type": "file", "file": "usr/qml/My/Module1/Internal.qml"}, + {"type": "file", "file": "usr/qml/My/Module1/Thing.qml"}, + {"type": "file", "file": "usr/qml/My/Module1/My_Module1.qmltypes"}, + {"type": "file", "file": "usr/qml/My/Module5/qmldir"}, + {"type": "file", "file": "usr/qml/My/Module5/My_Module5.qmltypes"} + ], + "expect_skip_on_jobname": ["cygwin", "msys2", "azure", "bionic", "macos"] +} -- cgit v1.2.3