Docker: Improve Kit setup

- Use toolchain bundles, ensuring compatible C/C++ toolchains
- Try harder to match Qt and toolchains

Change-Id: I8739a5e1e75d08df4346d51cb0ee7704ca072489
Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
This commit is contained in:
Christian Kandeler
2024-07-31 13:03:57 +02:00
parent 84cd248eb1
commit 676a462d5d
4 changed files with 40 additions and 16 deletions

View File

@@ -620,6 +620,13 @@ void ToolchainKitAspect::setToolchain(Kit *k, Toolchain *tc)
k->setValue(id(), variantFromStore(result));
}
void ToolchainKitAspect::setBundle(Kit *k, const ToolchainBundle &bundle)
{
bundle.forEach<Toolchain>([k](Toolchain &tc) {
setToolchain(k, &tc);
});
}
/**
* @brief ToolchainKitAspect::setAllToolchainsToMatch
*

View File

@@ -11,8 +11,8 @@
#include <utils/environment.h>
namespace ProjectExplorer {
class Toolchain;
class ToolchainBundle;
// SysRootKitAspect
@@ -36,6 +36,7 @@ public:
static Toolchain *cxxToolchain(const Kit *k);
static QList<Toolchain *> toolChains(const Kit *k);
static void setToolchain(Kit *k, Toolchain *tc);
static void setBundle(Kit *k, const ToolchainBundle &bundle);
static void setAllToolchainsToMatch(Kit *k, Toolchain *tc);
static void clearToolchain(Kit *k, Utils::Id language);
static Abi targetAbi(const Kit *k);

View File

@@ -246,7 +246,7 @@ public:
std::invoke(setter, static_cast<T &>(*tc), args...);
}
template<typename T> void forEach(const std::function<void(T &toolchain)> &modifier)
template<typename T> void forEach(const std::function<void(T &toolchain)> &modifier) const
{
for (Toolchain * const tc : std::as_const(m_toolchains))
modifier(static_cast<T &>(*tc));