diff options
author | Craig Scott <craig.scott@qt.io> | 2021-08-16 15:10:38 +1000 |
---|---|---|
committer | Alexandru Croitor <alexandru.croitor@qt.io> | 2021-08-20 18:06:28 +0200 |
commit | 96fdbf597e581fe5e09e02758a4a2b0fe12add53 (patch) | |
tree | 6cadc070ed6473b16cf9a99bb73f5849ddc59d1f /tests | |
parent | 86a477e72be6a71f50213e5ac2841eba0b4e78b4 (diff) |
Allow QML plugin's CMake target name to be specified for qmldir file
The current code assumes that the basename of the QML plugin is the
same as the CMake target it corresponds to. This won't be the case for
installed Qt packages due to the installed name including a namespace.
It also won't match when a Qt library infix is used. The current code
works around the former by trying to heuristically work out whether
a namespaced Qt target exists for the plugin. The Qt library infix is
more problematic because the plugin target name won't include the
infix whereas the plugin library basename will.
Address both of those issues by adding an internal option
INSTALLED_PLUGIN_TARGET to qt6_add_qml_module() which allows the
installed target name to be provided. When included in a qmldir file,
qt6_import_qml_plugin() will use that name, otherwise it will fall
back to using the plugin library's basename, as per the current
behavior. The option may become public in the future, but for now it
is only for Qt's internal use for the 6.2 release.
Conflicts:
src/qml/qmldirparser/qqmldirparser_p.h
Fixes: QTBUG-95140
Change-Id: I5a057c80b70ee802c0f0840e9eea2e579193d126
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
(cherry picked from commit a25f650c317e4886007a8beb0e9f2f7e973e6e7c)
Reviewed-by: Craig Scott <craig.scott@qt.io>
Diffstat (limited to 'tests')
18 files changed, 92 insertions, 31 deletions
diff --git a/tests/auto/qml/qmlimportscanner/CMakeLists.txt b/tests/auto/qml/qmlimportscanner/CMakeLists.txt index ec69f00516..28a48e2f21 100644 --- a/tests/auto/qml/qmlimportscanner/CMakeLists.txt +++ b/tests/auto/qml/qmlimportscanner/CMakeLists.txt @@ -35,8 +35,9 @@ qt_internal_extend_target(tst_qmlimportscanner CONDITION NOT ANDROID AND NOT IOS ) # special case begin +string(TOLOWER "${QT_LIBINFIX}" infix_lowercase) qt_internal_extend_target(tst_qmlimportscanner CONDITION DEFINED QT_LIBINFIX DEFINES - LIBINFIX=${QT_LIBINFIX} + LIBINFIX=${infix_lowercase} ) # special case end diff --git a/tests/auto/qml/qmlimportscanner/data/CompositeSingleton.json b/tests/auto/qml/qmlimportscanner/data/CompositeSingleton.json index f8ac3438f9..4978bb1d77 100644 --- a/tests/auto/qml/qmlimportscanner/data/CompositeSingleton.json +++ b/tests/auto/qml/qmlimportscanner/data/CompositeSingleton.json @@ -6,22 +6,25 @@ }, { "classname": "QtQuick2Plugin", + "linkTarget": "Qt6::qtquick2plugin", "name": "QtQuick", - "plugin": "qtquick2plugin", + "plugin": "qtquickplugin", "pluginIsOptional": true, "relativePath": "QtQuick", "type": "module" }, { "classname": "QtQmlPlugin", + "linkTarget": "Qt6::qmlplugin", "name": "QtQml", - "plugin": "qmlplugin", + "plugin": "qtqmlplugin", "pluginIsOptional": true, "relativePath": "QtQml", "type": "module" }, { "classname": "QtQmlModelsPlugin", + "linkTarget": "Qt6::modelsplugin", "name": "QtQml.Models", "plugin": "modelsplugin", "pluginIsOptional": true, @@ -30,6 +33,7 @@ }, { "classname": "QtQmlWorkerScriptPlugin", + "linkTarget": "Qt6::workerscriptplugin", "name": "QtQml.WorkerScript", "plugin": "workerscriptplugin", "pluginIsOptional": true, diff --git a/tests/auto/qml/qmlimportscanner/data/CompositeWithEnum.json b/tests/auto/qml/qmlimportscanner/data/CompositeWithEnum.json index 92d6797bec..9afc620f17 100644 --- a/tests/auto/qml/qmlimportscanner/data/CompositeWithEnum.json +++ b/tests/auto/qml/qmlimportscanner/data/CompositeWithEnum.json @@ -6,14 +6,16 @@ }, { "classname": "QtQmlPlugin", + "linkTarget": "Qt6::qmlplugin", "name": "QtQml", - "plugin": "qmlplugin", + "plugin": "qtqmlplugin", "pluginIsOptional": true, "relativePath": "QtQml", "type": "module" }, { "classname": "QtQmlModelsPlugin", + "linkTarget": "Qt6::modelsplugin", "name": "QtQml.Models", "plugin": "modelsplugin", "pluginIsOptional": true, @@ -22,6 +24,7 @@ }, { "classname": "QtQmlWorkerScriptPlugin", + "linkTarget": "Qt6::workerscriptplugin", "name": "QtQml.WorkerScript", "plugin": "workerscriptplugin", "pluginIsOptional": true, diff --git a/tests/auto/qml/qmlimportscanner/data/CompositeWithinSingleton.json b/tests/auto/qml/qmlimportscanner/data/CompositeWithinSingleton.json index ceed744ea4..274ee20a97 100644 --- a/tests/auto/qml/qmlimportscanner/data/CompositeWithinSingleton.json +++ b/tests/auto/qml/qmlimportscanner/data/CompositeWithinSingleton.json @@ -6,22 +6,25 @@ }, { "classname": "QtQuick2Plugin", + "linkTarget": "Qt6::qtquick2plugin", "name": "QtQuick", - "plugin": "qtquick2plugin", + "plugin": "qtquickplugin", "pluginIsOptional": true, "relativePath": "QtQuick", "type": "module" }, { "classname": "QtQmlPlugin", + "linkTarget": "Qt6::qmlplugin", "name": "QtQml", - "plugin": "qmlplugin", + "plugin": "qtqmlplugin", "pluginIsOptional": true, "relativePath": "QtQml", "type": "module" }, { "classname": "QtQmlModelsPlugin", + "linkTarget": "Qt6::modelsplugin", "name": "QtQml.Models", "plugin": "modelsplugin", "pluginIsOptional": true, @@ -30,6 +33,7 @@ }, { "classname": "QtQmlWorkerScriptPlugin", + "linkTarget": "Qt6::workerscriptplugin", "name": "QtQml.WorkerScript", "plugin": "workerscriptplugin", "pluginIsOptional": true, diff --git a/tests/auto/qml/qmlimportscanner/data/Drawer.qml.json b/tests/auto/qml/qmlimportscanner/data/Drawer.qml.json index 4eac05306a..efc104cb69 100644 --- a/tests/auto/qml/qmlimportscanner/data/Drawer.qml.json +++ b/tests/auto/qml/qmlimportscanner/data/Drawer.qml.json @@ -1,14 +1,16 @@ [ { "classname": "QtQmlPlugin", + "linkTarget": "Qt6::qmlplugin", "name": "QtQml", - "plugin": "qmlplugin", + "plugin": "qtqmlplugin", "pluginIsOptional": true, "relativePath": "QtQml", "type": "module" }, { "classname": "QtQmlModelsPlugin", + "linkTarget": "Qt6::modelsplugin", "name": "QtQml.Models", "plugin": "modelsplugin", "pluginIsOptional": true, @@ -17,6 +19,7 @@ }, { "classname": "QtQmlWorkerScriptPlugin", + "linkTarget": "Qt6::workerscriptplugin", "name": "QtQml.WorkerScript", "plugin": "workerscriptplugin", "pluginIsOptional": true, diff --git a/tests/auto/qml/qmlimportscanner/data/Imports.json b/tests/auto/qml/qmlimportscanner/data/Imports.json index 1a1850163d..d1410cb626 100644 --- a/tests/auto/qml/qmlimportscanner/data/Imports.json +++ b/tests/auto/qml/qmlimportscanner/data/Imports.json @@ -6,22 +6,25 @@ }, { "classname": "QtQuick2Plugin", + "linkTarget": "Qt6::qtquick2plugin", "name": "QtQuick", - "plugin": "qtquick2plugin", + "plugin": "qtquickplugin", "pluginIsOptional": true, "relativePath": "QtQuick", "type": "module" }, { "classname": "QtQmlPlugin", + "linkTarget": "Qt6::qmlplugin", "name": "QtQml", - "plugin": "qmlplugin", + "plugin": "qtqmlplugin", "pluginIsOptional": true, "relativePath": "QtQml", "type": "module" }, { "classname": "QtQmlModelsPlugin", + "linkTarget": "Qt6::modelsplugin", "name": "QtQml.Models", "plugin": "modelsplugin", "pluginIsOptional": true, @@ -30,6 +33,7 @@ }, { "classname": "QtQmlWorkerScriptPlugin", + "linkTarget": "Qt6::workerscriptplugin", "name": "QtQml.WorkerScript", "plugin": "workerscriptplugin", "pluginIsOptional": true, diff --git a/tests/auto/qml/qmlimportscanner/data/ListProperty.qml.json b/tests/auto/qml/qmlimportscanner/data/ListProperty.qml.json index d647f7f9ae..c49f02e710 100644 --- a/tests/auto/qml/qmlimportscanner/data/ListProperty.qml.json +++ b/tests/auto/qml/qmlimportscanner/data/ListProperty.qml.json @@ -2,7 +2,8 @@ { "classname": "QtQuick2Plugin", "name": "QtQuick", - "plugin": "qtquick2plugin", + "linkTarget": "Qt6::qtquick2plugin", + "plugin": "qtquickplugin", "pluginIsOptional": true, "relativePath": "QtQuick", "type": "module" @@ -15,14 +16,16 @@ }, { "classname": "QtQmlPlugin", + "linkTarget": "Qt6::qmlplugin", "name": "QtQml", - "plugin": "qmlplugin", + "plugin": "qtqmlplugin", "pluginIsOptional": true, "relativePath": "QtQml", "type": "module" }, { "classname": "QtQmlModelsPlugin", + "linkTarget": "Qt6::modelsplugin", "name": "QtQml.Models", "plugin": "modelsplugin", "pluginIsOptional": true, @@ -31,6 +34,7 @@ }, { "classname": "QtQmlWorkerScriptPlugin", + "linkTarget": "Qt6::workerscriptplugin", "name": "QtQml.WorkerScript", "plugin": "workerscriptplugin", "pluginIsOptional": true, diff --git a/tests/auto/qml/qmlimportscanner/data/QTBUG-45916.js.json b/tests/auto/qml/qmlimportscanner/data/QTBUG-45916.js.json index f7bddd6a91..948a629903 100644 --- a/tests/auto/qml/qmlimportscanner/data/QTBUG-45916.js.json +++ b/tests/auto/qml/qmlimportscanner/data/QTBUG-45916.js.json @@ -1,22 +1,25 @@ [ { "classname": "QtQuick2Plugin", + "linkTarget": "Qt6::qtquick2plugin", "name": "QtQuick", - "plugin": "qtquick2plugin", + "plugin": "qtquickplugin", "pluginIsOptional": true, "relativePath": "QtQuick", "type": "module" }, { "classname": "QtQmlPlugin", + "linkTarget": "Qt6::qmlplugin", "name": "QtQml", - "plugin": "qmlplugin", + "plugin": "qtqmlplugin", "pluginIsOptional": true, "relativePath": "QtQml", "type": "module" }, { "classname": "QtQmlModelsPlugin", + "linkTarget": "Qt6::modelsplugin", "name": "QtQml.Models", "plugin": "modelsplugin", "pluginIsOptional": true, @@ -25,6 +28,7 @@ }, { "classname": "QtQmlWorkerScriptPlugin", + "linkTarget": "Qt6::workerscriptplugin", "name": "QtQml.WorkerScript", "plugin": "workerscriptplugin", "pluginIsOptional": true, diff --git a/tests/auto/qml/qmlimportscanner/data/Simple.qml.json b/tests/auto/qml/qmlimportscanner/data/Simple.qml.json index f7bddd6a91..948a629903 100644 --- a/tests/auto/qml/qmlimportscanner/data/Simple.qml.json +++ b/tests/auto/qml/qmlimportscanner/data/Simple.qml.json @@ -1,22 +1,25 @@ [ { "classname": "QtQuick2Plugin", + "linkTarget": "Qt6::qtquick2plugin", "name": "QtQuick", - "plugin": "qtquick2plugin", + "plugin": "qtquickplugin", "pluginIsOptional": true, "relativePath": "QtQuick", "type": "module" }, { "classname": "QtQmlPlugin", + "linkTarget": "Qt6::qmlplugin", "name": "QtQml", - "plugin": "qmlplugin", + "plugin": "qtqmlplugin", "pluginIsOptional": true, "relativePath": "QtQml", "type": "module" }, { "classname": "QtQmlModelsPlugin", + "linkTarget": "Qt6::modelsplugin", "name": "QtQml.Models", "plugin": "modelsplugin", "pluginIsOptional": true, @@ -25,6 +28,7 @@ }, { "classname": "QtQmlWorkerScriptPlugin", + "linkTarget": "Qt6::workerscriptplugin", "name": "QtQml.WorkerScript", "plugin": "workerscriptplugin", "pluginIsOptional": true, diff --git a/tests/auto/qml/qmlimportscanner/data/Singleton.json b/tests/auto/qml/qmlimportscanner/data/Singleton.json index ca1d0b2d4d..ad8e6dc0ec 100644 --- a/tests/auto/qml/qmlimportscanner/data/Singleton.json +++ b/tests/auto/qml/qmlimportscanner/data/Singleton.json @@ -6,22 +6,25 @@ }, { "classname": "QtQuick2Plugin", + "linkTarget": "Qt6::qtquick2plugin", "name": "QtQuick", - "plugin": "qtquick2plugin", + "plugin": "qtquickplugin", "pluginIsOptional": true, "relativePath": "QtQuick", "type": "module" }, { "classname": "QtQmlPlugin", + "linkTarget": "Qt6::qmlplugin", "name": "QtQml", - "plugin": "qmlplugin", + "plugin": "qtqmlplugin", "pluginIsOptional": true, "relativePath": "QtQml", "type": "module" }, { "classname": "QtQmlModelsPlugin", + "linkTarget": "Qt6::modelsplugin", "name": "QtQml.Models", "plugin": "modelsplugin", "pluginIsOptional": true, @@ -30,6 +33,7 @@ }, { "classname": "QtQmlWorkerScriptPlugin", + "linkTarget": "Qt6::workerscriptplugin", "name": "QtQml.WorkerScript", "plugin": "workerscriptplugin", "pluginIsOptional": true, diff --git a/tests/auto/qml/qmlimportscanner/data/Things.json b/tests/auto/qml/qmlimportscanner/data/Things.json index e50902152e..27814e1246 100644 --- a/tests/auto/qml/qmlimportscanner/data/Things.json +++ b/tests/auto/qml/qmlimportscanner/data/Things.json @@ -7,22 +7,25 @@ }, { "classname": "QtQuick2Plugin", + "linkTarget": "Qt6::qtquick2plugin", "name": "QtQuick", - "plugin": "qtquick2plugin", + "plugin": "qtquickplugin", "pluginIsOptional": true, "relativePath": "QtQuick", "type": "module" }, { "classname": "QtQmlPlugin", + "linkTarget": "Qt6::qmlplugin", "name": "QtQml", - "plugin": "qmlplugin", + "plugin": "qtqmlplugin", "pluginIsOptional": true, "relativePath": "QtQml", "type": "module" }, { "classname": "QtQmlModelsPlugin", + "linkTarget": "Qt6::modelsplugin", "name": "QtQml.Models", "plugin": "modelsplugin", "pluginIsOptional": true, @@ -31,6 +34,7 @@ }, { "classname": "QtQmlWorkerScriptPlugin", + "linkTarget": "Qt6::workerscriptplugin", "name": "QtQml.WorkerScript", "plugin": "workerscriptplugin", "pluginIsOptional": true, diff --git a/tests/auto/qml/qmlimportscanner/data/javascriptMethods.qml.json b/tests/auto/qml/qmlimportscanner/data/javascriptMethods.qml.json index cbd409266d..5cd9f6dea0 100644 --- a/tests/auto/qml/qmlimportscanner/data/javascriptMethods.qml.json +++ b/tests/auto/qml/qmlimportscanner/data/javascriptMethods.qml.json @@ -1,8 +1,9 @@ [ { "classname": "QtQmlPlugin", + "linkTarget": "Qt6::qmlplugin", "name": "QtQml", - "plugin": "qmlplugin", + "plugin": "qtqmlplugin", "pluginIsOptional": true, "relativePath": "QtQml", "type": "module" @@ -13,6 +14,7 @@ }, { "classname": "QtQmlModelsPlugin", + "linkTarget": "Qt6::modelsplugin", "name": "QtQml.Models", "plugin": "modelsplugin", "pluginIsOptional": true, @@ -21,6 +23,7 @@ }, { "classname": "QtQmlWorkerScriptPlugin", + "linkTarget": "Qt6::workerscriptplugin", "name": "QtQml.WorkerScript", "plugin": "workerscriptplugin", "pluginIsOptional": true, diff --git a/tests/auto/qml/qmlimportscanner/data/localImport.qml.json b/tests/auto/qml/qmlimportscanner/data/localImport.qml.json index e50902152e..27814e1246 100644 --- a/tests/auto/qml/qmlimportscanner/data/localImport.qml.json +++ b/tests/auto/qml/qmlimportscanner/data/localImport.qml.json @@ -7,22 +7,25 @@ }, { "classname": "QtQuick2Plugin", + "linkTarget": "Qt6::qtquick2plugin", "name": "QtQuick", - "plugin": "qtquick2plugin", + "plugin": "qtquickplugin", "pluginIsOptional": true, "relativePath": "QtQuick", "type": "module" }, { "classname": "QtQmlPlugin", + "linkTarget": "Qt6::qmlplugin", "name": "QtQml", - "plugin": "qmlplugin", + "plugin": "qtqmlplugin", "pluginIsOptional": true, "relativePath": "QtQml", "type": "module" }, { "classname": "QtQmlModelsPlugin", + "linkTarget": "Qt6::modelsplugin", "name": "QtQml.Models", "plugin": "modelsplugin", "pluginIsOptional": true, @@ -31,6 +34,7 @@ }, { "classname": "QtQmlWorkerScriptPlugin", + "linkTarget": "Qt6::workerscriptplugin", "name": "QtQml.WorkerScript", "plugin": "workerscriptplugin", "pluginIsOptional": true, diff --git a/tests/auto/qml/qmlimportscanner/data/parentEnum.qml.json b/tests/auto/qml/qmlimportscanner/data/parentEnum.qml.json index f7bddd6a91..948a629903 100644 --- a/tests/auto/qml/qmlimportscanner/data/parentEnum.qml.json +++ b/tests/auto/qml/qmlimportscanner/data/parentEnum.qml.json @@ -1,22 +1,25 @@ [ { "classname": "QtQuick2Plugin", + "linkTarget": "Qt6::qtquick2plugin", "name": "QtQuick", - "plugin": "qtquick2plugin", + "plugin": "qtquickplugin", "pluginIsOptional": true, "relativePath": "QtQuick", "type": "module" }, { "classname": "QtQmlPlugin", + "linkTarget": "Qt6::qmlplugin", "name": "QtQml", - "plugin": "qmlplugin", + "plugin": "qtqmlplugin", "pluginIsOptional": true, "relativePath": "QtQml", "type": "module" }, { "classname": "QtQmlModelsPlugin", + "linkTarget": "Qt6::modelsplugin", "name": "QtQml.Models", "plugin": "modelsplugin", "pluginIsOptional": true, @@ -25,6 +28,7 @@ }, { "classname": "QtQmlWorkerScriptPlugin", + "linkTarget": "Qt6::workerscriptplugin", "name": "QtQml.WorkerScript", "plugin": "workerscriptplugin", "pluginIsOptional": true, diff --git a/tests/auto/qml/qmlimportscanner/data/qmldirImportAndDepend.qml.json b/tests/auto/qml/qmlimportscanner/data/qmldirImportAndDepend.qml.json index e50902152e..27814e1246 100644 --- a/tests/auto/qml/qmlimportscanner/data/qmldirImportAndDepend.qml.json +++ b/tests/auto/qml/qmlimportscanner/data/qmldirImportAndDepend.qml.json @@ -7,22 +7,25 @@ }, { "classname": "QtQuick2Plugin", + "linkTarget": "Qt6::qtquick2plugin", "name": "QtQuick", - "plugin": "qtquick2plugin", + "plugin": "qtquickplugin", "pluginIsOptional": true, "relativePath": "QtQuick", "type": "module" }, { "classname": "QtQmlPlugin", + "linkTarget": "Qt6::qmlplugin", "name": "QtQml", - "plugin": "qmlplugin", + "plugin": "qtqmlplugin", "pluginIsOptional": true, "relativePath": "QtQml", "type": "module" }, { "classname": "QtQmlModelsPlugin", + "linkTarget": "Qt6::modelsplugin", "name": "QtQml.Models", "plugin": "modelsplugin", "pluginIsOptional": true, @@ -31,6 +34,7 @@ }, { "classname": "QtQmlWorkerScriptPlugin", + "linkTarget": "Qt6::workerscriptplugin", "name": "QtQml.WorkerScript", "plugin": "workerscriptplugin", "pluginIsOptional": true, diff --git a/tests/auto/qml/qmlimportscanner/data/qtQmlOnly.qml.json b/tests/auto/qml/qmlimportscanner/data/qtQmlOnly.qml.json index 4eac05306a..efc104cb69 100644 --- a/tests/auto/qml/qmlimportscanner/data/qtQmlOnly.qml.json +++ b/tests/auto/qml/qmlimportscanner/data/qtQmlOnly.qml.json @@ -1,14 +1,16 @@ [ { "classname": "QtQmlPlugin", + "linkTarget": "Qt6::qmlplugin", "name": "QtQml", - "plugin": "qmlplugin", + "plugin": "qtqmlplugin", "pluginIsOptional": true, "relativePath": "QtQml", "type": "module" }, { "classname": "QtQmlModelsPlugin", + "linkTarget": "Qt6::modelsplugin", "name": "QtQml.Models", "plugin": "modelsplugin", "pluginIsOptional": true, @@ -17,6 +19,7 @@ }, { "classname": "QtQmlWorkerScriptPlugin", + "linkTarget": "Qt6::workerscriptplugin", "name": "QtQml.WorkerScript", "plugin": "workerscriptplugin", "pluginIsOptional": true, diff --git a/tests/auto/qml/qmlimportscanner/data/rootPath.json b/tests/auto/qml/qmlimportscanner/data/rootPath.json index 21dbb12629..7abce5675b 100644 --- a/tests/auto/qml/qmlimportscanner/data/rootPath.json +++ b/tests/auto/qml/qmlimportscanner/data/rootPath.json @@ -1,22 +1,25 @@ [ { "classname": "QtQuick2Plugin", + "linkTarget": "Qt6::qtquick2plugin", "name": "QtQuick", - "plugin": "qtquick2plugin", + "plugin": "qtquickplugin", "pluginIsOptional": true, "relativePath": "QtQuick", "type": "module" }, { "classname": "QtQmlPlugin", + "linkTarget": "Qt6::qmlplugin", "name": "QtQml", - "plugin": "qmlplugin", + "plugin": "qtqmlplugin", "pluginIsOptional": true, "relativePath": "QtQml", "type": "module" }, { "classname": "QtQmlModelsPlugin", + "linkTarget": "Qt6::modelsplugin", "name": "QtQml.Models", "plugin": "modelsplugin", "pluginIsOptional": true, @@ -25,6 +28,7 @@ }, { "classname": "QtQmlWorkerScriptPlugin", + "linkTarget": "Qt6::workerscriptplugin", "name": "QtQml.WorkerScript", "plugin": "workerscriptplugin", "pluginIsOptional": true, diff --git a/tests/auto/qml/qmlimportscanner/tst_qmlimportscanner.cpp b/tests/auto/qml/qmlimportscanner/tst_qmlimportscanner.cpp index 5b8b92748a..267a213eca 100644 --- a/tests/auto/qml/qmlimportscanner/tst_qmlimportscanner.cpp +++ b/tests/auto/qml/qmlimportscanner/tst_qmlimportscanner.cpp @@ -157,9 +157,9 @@ void TestQmlimportscanner::runQmlimportscanner(const QString &mode, const QStrin #define STR(A) #A if (object.contains("plugin")) { auto plugin = object["plugin"].toString(); - const auto pos = plugin.lastIndexOf(XSTR(LIBINFIX)); + const auto pos = plugin.lastIndexOf(XSTR(LIBINFIX) "plugin"); if (pos != -1) - object["plugin"] = plugin.left(pos); + object["plugin"] = plugin.left(pos) + "plugin"; } #endif |