diff options
-rw-r--r-- | doc/configuration.qdoc | 4 | ||||
-rw-r--r-- | src/main-lib/configuration.cpp | 19 | ||||
-rw-r--r-- | src/main-lib/configuration.h | 1 | ||||
-rw-r--r-- | src/main-lib/configuration_p.h | 1 | ||||
-rw-r--r-- | src/main-lib/main.cpp | 13 | ||||
-rw-r--r-- | src/main-lib/main.h | 3 | ||||
-rw-r--r-- | tests/auto/configuration/data/config1.yaml | 1 | ||||
-rw-r--r-- | tests/auto/configuration/data/config2.yaml | 1 | ||||
-rw-r--r-- | tests/auto/configuration/tst_configuration.cpp | 4 |
9 files changed, 39 insertions, 8 deletions
diff --git a/doc/configuration.qdoc b/doc/configuration.qdoc index 18473bb1..495794c6 100644 --- a/doc/configuration.qdoc +++ b/doc/configuration.qdoc @@ -408,6 +408,10 @@ ui: \li This option can be used to specify options for runtimes, as a map of key-value pairs. The key is the runtime's name; the value is interpreted by the respective runtime implementation. For more information, see \l {Runtime Configuration}. + There is one special key named \c{additionalLaunchers}: the value is an array of \c id + strings, and all these ids are registered as custom runtimes. A corresponding + \c{appman-launcher-<id>} executable is expected to be available when launching apps + based on the respective runtime. \row \li [\c containers] \li map<object> diff --git a/src/main-lib/configuration.cpp b/src/main-lib/configuration.cpp index f070c399..a94e2389 100644 --- a/src/main-lib/configuration.cpp +++ b/src/main-lib/configuration.cpp @@ -375,7 +375,7 @@ void Configuration::parseWithArguments(const QStringList &arguments) } -const quint32 ConfigurationData::DataStreamVersion = 9; +const quint32 ConfigurationData::DataStreamVersion = 10; ConfigurationData *ConfigurationData::loadFromCache(QDataStream &ds) @@ -438,7 +438,8 @@ ConfigurationData *ConfigurationData::loadFromCache(QDataStream &ds) >> cd->wayland.extraSockets >> cd->flags.allowUnsignedPackages >> cd->flags.allowUnknownUiClients - >> cd->instanceId; + >> cd->instanceId + >> cd->runtimes.additionalLaunchers; return cd; } @@ -502,7 +503,8 @@ void ConfigurationData::saveToCache(QDataStream &ds) const << wayland.extraSockets << flags.allowUnsignedPackages << flags.allowUnknownUiClients - << instanceId; + << instanceId + << runtimes.additionalLaunchers; } template <typename T> void mergeField(T &into, const T &from, const T &def) @@ -604,6 +606,7 @@ void ConfigurationData::mergeFrom(const ConfigurationData *from) MERGE_FIELD(flags.allowUnsignedPackages); MERGE_FIELD(flags.allowUnknownUiClients); MERGE_FIELD(instanceId); + MERGE_FIELD(runtimes.additionalLaunchers); } QByteArray ConfigurationData::substituteVars(const QByteArray &sourceContent, const QString &fileName) @@ -672,7 +675,10 @@ ConfigurationData *ConfigurationData::loadFromSource(QIODevice *source, const QS } } }, { "runtimes", false, YamlParser::Map, [&cd](YamlParser *p) { - cd->runtimes.configurations = p->parseMap(); } }, + cd->runtimes.configurations = p->parseMap(); + QVariant additionalLaunchers = cd->runtimes.configurations.take(qSL("additionalLaunchers")); + cd->runtimes.additionalLaunchers = variantToStringList(additionalLaunchers); + } }, { "containers", false, YamlParser::Map, [&cd](YamlParser *p) { cd->containers.configurations = p->parseMap(); @@ -1165,6 +1171,11 @@ QVariantMap Configuration::containerConfigurations() const return m_data->containers.configurations; } +QStringList Configuration::runtimeAdditionalLaunchers() const +{ + return m_data->runtimes.additionalLaunchers; +} + QVariantMap Configuration::runtimeConfigurations() const { return m_data->runtimes.configurations; diff --git a/src/main-lib/configuration.h b/src/main-lib/configuration.h index dffce6c7..98e6e154 100644 --- a/src/main-lib/configuration.h +++ b/src/main-lib/configuration.h @@ -86,6 +86,7 @@ public: QList<QPair<QString, QString>> containerSelectionConfiguration() const; QVariantMap containerConfigurations() const; + QStringList runtimeAdditionalLaunchers() const; QVariantMap runtimeConfigurations() const; QVariantMap dbusPolicy(const char *interfaceName) const; diff --git a/src/main-lib/configuration_p.h b/src/main-lib/configuration_p.h index 6e2de47f..78b4643e 100644 --- a/src/main-lib/configuration_p.h +++ b/src/main-lib/configuration_p.h @@ -32,6 +32,7 @@ struct ConfigurationData QString instanceId; struct Runtimes { + QStringList additionalLaunchers; QVariantMap configurations; } runtimes; diff --git a/src/main-lib/main.cpp b/src/main-lib/main.cpp index 6c2e7e67..25966a01 100644 --- a/src/main-lib/main.cpp +++ b/src/main-lib/main.cpp @@ -192,8 +192,9 @@ void Main::setup(const Configuration *cfg) Q_DECL_NOEXCEPT_EXPR(false) setMainQmlFile(cfg->mainQmlFile()); setupSingleOrMultiProcess(cfg->forceSingleProcess(), cfg->forceMultiProcess()); - setupRuntimesAndContainers(cfg->runtimeConfigurations(), cfg->openGLConfiguration(), + setupRuntimesAndContainers(cfg->runtimeConfigurations(), cfg->runtimeAdditionalLaunchers(), cfg->containerConfigurations(), cfg->pluginFilePaths("container"), + cfg->openGLConfiguration(), cfg->iconThemeSearchPaths(), cfg->iconThemeName()); loadPackageDatabase(cfg->clearCache() || cfg->noCache(), cfg->singleApp()); @@ -360,8 +361,9 @@ void Main::setupSingleOrMultiProcess(bool forceSingleProcess, bool forceMultiPro #endif } -void Main::setupRuntimesAndContainers(const QVariantMap &runtimeConfigurations, const QVariantMap &openGLConfiguration, +void Main::setupRuntimesAndContainers(const QVariantMap &runtimeConfigurations, const QStringList &runtimeAdditionalLaunchers, const QVariantMap &containerConfigurations, const QStringList &containerPluginPaths, + const QVariantMap &openGLConfiguration, const QStringList &iconThemeSearchPaths, const QString &iconThemeName) { if (m_isSingleProcessMode) { @@ -372,9 +374,14 @@ void Main::setupRuntimesAndContainers(const QVariantMap &runtimeConfigurations, #if defined(AM_MULTI_PROCESS) RuntimeFactory::instance()->registerRuntime(new NativeRuntimeManager()); RuntimeFactory::instance()->registerRuntime(new NativeRuntimeManager(qSL("qml"))); - //RuntimeFactory::instance()->registerRuntime(new NativeRuntimeManager(qSL("html"))); + + for (const QString &runtimeId : runtimeAdditionalLaunchers) + RuntimeFactory::instance()->registerRuntime(new NativeRuntimeManager(runtimeId)); ContainerFactory::instance()->registerContainer(new ProcessContainerManager()); +#else + if (!runtimeAdditionalLaunchers.isEmpty()) + qCWarning(LogSystem) << "Addtional runtime launchers are ignored in single-process mode"; #endif auto containerPlugins = loadPlugins<ContainerManagerInterface>("container", containerPluginPaths); for (auto iface : std::as_const(containerPlugins)) diff --git a/src/main-lib/main.h b/src/main-lib/main.h index 6dc0e907..a6652383 100644 --- a/src/main-lib/main.h +++ b/src/main-lib/main.h @@ -75,8 +75,9 @@ protected: const std::function<QVariantMap(const char *)> &policyForInterface, const QString &instanceId); void setMainQmlFile(const QString &mainQml) Q_DECL_NOEXCEPT_EXPR(false); void setupSingleOrMultiProcess(bool forceSingleProcess, bool forceMultiProcess) Q_DECL_NOEXCEPT_EXPR(false); - void setupRuntimesAndContainers(const QVariantMap &runtimeConfigurations, const QVariantMap &openGLConfiguration, + void setupRuntimesAndContainers(const QVariantMap &runtimeConfigurations, const QStringList &runtimeAdditionalLaunchers, const QVariantMap &containerConfigurations, const QStringList &containerPluginPaths, + const QVariantMap &openGLConfiguration, const QStringList &iconThemeSearchPaths, const QString &iconThemeName); void loadPackageDatabase(bool recreateDatabase, const QString &singlePackage) Q_DECL_NOEXCEPT_EXPR(false); void setupIntents(int disambiguationTimeout, int startApplicationTimeout, diff --git a/tests/auto/configuration/data/config1.yaml b/tests/auto/configuration/data/config1.yaml index 0db3414e..8f9263fa 100644 --- a/tests/auto/configuration/data/config1.yaml +++ b/tests/auto/configuration/data/config1.yaml @@ -2,6 +2,7 @@ formatVersion: 1 formatType: am-configuration --- runtimes: + additionalLaunchers: a r-test: r-parameter: r-value diff --git a/tests/auto/configuration/data/config2.yaml b/tests/auto/configuration/data/config2.yaml index 763f40d5..1913d4e5 100644 --- a/tests/auto/configuration/data/config2.yaml +++ b/tests/auto/configuration/data/config2.yaml @@ -2,6 +2,7 @@ formatVersion: 1 formatType: am-configuration --- runtimes: + additionalLaunchers: [ b, c ] r-test: r-parameter: xr-value r-test2: diff --git a/tests/auto/configuration/tst_configuration.cpp b/tests/auto/configuration/tst_configuration.cpp index 56eed174..603fca67 100644 --- a/tests/auto/configuration/tst_configuration.cpp +++ b/tests/auto/configuration/tst_configuration.cpp @@ -88,6 +88,7 @@ void tst_Configuration::defaultConfig() QCOMPARE(c.containerSelectionConfiguration(), {}); QCOMPARE(c.containerConfigurations(), QVariantMap {}); + QCOMPARE(c.runtimeAdditionalLaunchers(), QStringList {}); QCOMPARE(c.runtimeConfigurations(), QVariantMap {}); QCOMPARE(c.dbusRegistration("iface1"), qSL("auto")); @@ -192,6 +193,7 @@ void tst_Configuration::simpleConfig() { qSL("r-parameter"), qSL("r-value") } } } })); + QCOMPARE(c.runtimeAdditionalLaunchers(), QStringList(qSL("a"))); QCOMPARE(c.dbusRegistration("iface1"), qSL("foobus")); @@ -333,6 +335,7 @@ void tst_Configuration::mergedConfig() } } })); + QCOMPARE(c.runtimeAdditionalLaunchers(), QStringList({ qSL("a"), qSL("b"), qSL("c") })); QCOMPARE(c.dbusRegistration("iface1"), qSL("foobus1")); QCOMPARE(c.dbusRegistration("iface2"), qSL("foobus2")); @@ -480,6 +483,7 @@ void tst_Configuration::commandLineConfig() QCOMPARE(c.containerSelectionConfiguration(), {}); QCOMPARE(c.containerConfigurations(), QVariantMap{}); QCOMPARE(c.runtimeConfigurations(), QVariantMap{}); + QCOMPARE(c.runtimeAdditionalLaunchers(), QStringList{}); QCOMPARE(c.dbusRegistration("iface1"), qSL("system")); |