SDKtool: Add toolchain language support

Change-Id: I882cc129a603c758369446f947a961ccd2fd4490
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Tobias Hunger
2016-07-15 11:52:13 +02:00
committed by Tim Jenssen
parent 6fe82385d6
commit 396ee16635
6 changed files with 109 additions and 52 deletions

View File

@@ -63,7 +63,7 @@ const char DEBUGGER_BINARY[] = "Binary";
const char DEVICE_TYPE[] = "PE.Profile.DeviceType"; const char DEVICE_TYPE[] = "PE.Profile.DeviceType";
const char DEVICE_ID[] = "PE.Profile.Device"; const char DEVICE_ID[] = "PE.Profile.Device";
const char SYSROOT[] = "PE.Profile.SysRoot"; const char SYSROOT[] = "PE.Profile.SysRoot";
const char TOOLCHAIN[] = "PE.Profile.ToolChain"; const char TOOLCHAIN[] = "PE.Profile.ToolChains";
const char MKSPEC[] = "QtPM4.mkSpecInformation"; const char MKSPEC[] = "QtPM4.mkSpecInformation";
const char QT[] = "QtSupport.QtInformation"; const char QT[] = "QtSupport.QtInformation";
@@ -95,7 +95,7 @@ QString AddKitOperation::argumentsHelpText() const
" --devicetype <TYPE> device type of the new kit (required).\n" " --devicetype <TYPE> device type of the new kit (required).\n"
" --device <ID> device id to use (optional).\n" " --device <ID> device id to use (optional).\n"
" --sysroot <PATH> sysroot of the new kit.\n" " --sysroot <PATH> sysroot of the new kit.\n"
" --toolchain <ID> tool chain of the new kit.\n" " --toolchain <LANGID> <ID> tool chain of the new kit (may repeat!).\n"
" --qt <ID> Qt of the new kit.\n" " --qt <ID> Qt of the new kit.\n"
" --mkspec <PATH> mkspec of the new kit.\n" " --mkspec <PATH> mkspec of the new kit.\n"
" --env <VALUE> add a custom environment setting. [may be repeated]\n" " --env <VALUE> add a custom environment setting. [may be repeated]\n"
@@ -109,6 +109,7 @@ bool AddKitOperation::setArguments(const QStringList &args)
for (int i = 0; i < args.count(); ++i) { for (int i = 0; i < args.count(); ++i) {
const QString current = args.at(i); const QString current = args.at(i);
const QString next = ((i + 1) < args.count()) ? args.at(i + 1) : QString(); const QString next = ((i + 1) < args.count()) ? args.at(i + 1) : QString();
const QString nextnext = ((i + 2) < args.count()) ? args.at(i + 2) : QString();
if (current == "--id") { if (current == "--id") {
if (next.isNull()) if (next.isNull())
@@ -191,7 +192,20 @@ bool AddKitOperation::setArguments(const QStringList &args)
if (next.isNull()) if (next.isNull())
return false; return false;
++i; // skip next; ++i; // skip next;
m_tc = next;
if (next.isEmpty()) {
std::cerr << "Empty langid for toolchain given." << std::endl << std::endl;
return false;
}
if (nextnext.isEmpty()) {
std::cerr << "Empty id for toolchain given." << std::endl << std::endl;
return false;
}
if (m_tcs.contains(next)) {
std::cerr << "No langid for toolchain given twice." << std::endl << std::endl;
return false;
}
m_tcs.insert(next, nextnext);
continue; continue;
} }
@@ -252,7 +266,7 @@ int AddKitOperation::execute() const
map = initializeKits(); map = initializeKits();
QVariantMap result = addKit(map, m_id, m_displayName, m_icon, m_debuggerId, m_debuggerEngine, QVariantMap result = addKit(map, m_id, m_displayName, m_icon, m_debuggerId, m_debuggerEngine,
m_debugger, m_deviceType, m_device, m_sysRoot, m_tc, m_qt, m_debugger, m_deviceType, m_device, m_sysRoot, m_tcs, m_qt,
m_mkspec, m_env, m_extra); m_mkspec, m_env, m_extra);
if (result.isEmpty() || map == result) if (result.isEmpty() || map == result)
@@ -267,7 +281,7 @@ bool AddKitOperation::test() const
QVariantMap map = initializeKits(); QVariantMap map = initializeKits();
QVariantMap tcMap = AddToolChainOperation::initializeToolChains(); QVariantMap tcMap = AddToolChainOperation::initializeToolChains();
tcMap = AddToolChainOperation::addToolChain(tcMap, "{tc-id}", "TC", "/usr/bin/gcc", tcMap = AddToolChainOperation::addToolChain(tcMap, "{tc-id}", "langId", "TC", "/usr/bin/gcc",
"x86-linux-generic-elf-32bit", "x86-linux-generic-elf-32bit",
"x86-linux-generic-elf-32bit", "x86-linux-generic-elf-32bit",
KeyValuePairList()); KeyValuePairList());
@@ -293,39 +307,48 @@ bool AddKitOperation::test() const
|| !map.contains(DEFAULT) || !map.value(DEFAULT).toString().isEmpty()) || !map.contains(DEFAULT) || !map.value(DEFAULT).toString().isEmpty())
return false; return false;
QHash<QString, QString> tcs;
tcs.insert("Cxx", "{tcXX-id}");
// Fail if TC is not there: // Fail if TC is not there:
QVariantMap empty = addKit(map, tcMap, qtMap, devMap, QVariantMap empty = addKit(map, tcMap, qtMap, devMap,
"testId", "Test Kit", "/tmp/icon.png", QString(), 1, "testId", "Test Kit", "/tmp/icon.png", QString(), 1,
"/usr/bin/gdb-test", "Desktop", "{dev-id}", QString(), "/usr/bin/gdb-test", "Desktop", "{dev-id}", QString(),
"{tcXX-id}", "{qt-id}", "unsupported/mkspec", QStringList(), tcs, "{qt-id}", "unsupported/mkspec", QStringList(),
KeyValuePairList({ KeyValuePair("PE.Profile.Data/extraData", QVariant("extraValue")) })); KeyValuePairList({ KeyValuePair("PE.Profile.Data/extraData", QVariant("extraValue")) }));
if (!empty.isEmpty()) if (!empty.isEmpty())
return false; return false;
// Do not fail if TC is an ABI: // Do not fail if TC is an ABI:
tcs.clear();
tcs.insert("C", "x86-linux-generic-elf-64bit");
empty = addKit(map, tcMap, qtMap, devMap, "testId", "Test Kit", "/tmp/icon.png", QString(), 1, empty = addKit(map, tcMap, qtMap, devMap, "testId", "Test Kit", "/tmp/icon.png", QString(), 1,
"/usr/bin/gdb-test", "Desktop", "{dev-id}", QString(), "/usr/bin/gdb-test", "Desktop", "{dev-id}", QString(),
"x86-linux-generic-elf-64bit", "{qt-id}", "unsupported/mkspec", env, tcs, "{qt-id}", "unsupported/mkspec", env,
KeyValuePairList({ KeyValuePair("PE.Profile.Data/extraData", QVariant("extraValue")) })); KeyValuePairList({ KeyValuePair("PE.Profile.Data/extraData", QVariant("extraValue")) }));
if (empty.isEmpty()) if (empty.isEmpty())
return false; return false;
// QTCREATORBUG-11983, mach_o was not covered by the first attempt to fix this. // QTCREATORBUG-11983, mach_o was not covered by the first attempt to fix this.
tcs.insert("D", "x86-macos-generic-mach_o-64bit");
empty = addKit(map, tcMap, qtMap, devMap, "testId", "Test Kit", "/tmp/icon.png", QString(), 1, empty = addKit(map, tcMap, qtMap, devMap, "testId", "Test Kit", "/tmp/icon.png", QString(), 1,
"/usr/bin/gdb-test", "Desktop", "{dev-id}", QString(), "/usr/bin/gdb-test", "Desktop", "{dev-id}", QString(),
"x86-macos-generic-mach_o-64bit", "{qt-id}", "unsupported/mkspec", env, tcs, "{qt-id}", "unsupported/mkspec", env,
KeyValuePairList({ KeyValuePair("PE.Profile.Data/extraData", QVariant("extraValue")) })); KeyValuePairList({ KeyValuePair("PE.Profile.Data/extraData", QVariant("extraValue")) }));
if (empty.isEmpty()) if (empty.isEmpty())
return false; return false;
tcs.clear();
tcs.insert("Cxx", "{tc-id}");
// Fail if Qt is not there: // Fail if Qt is not there:
empty = addKit(map, tcMap, qtMap, devMap, "testId", "Test Kit", "/tmp/icon.png", QString(), 1, empty = addKit(map, tcMap, qtMap, devMap, "testId", "Test Kit", "/tmp/icon.png", QString(), 1,
"/usr/bin/gdb-test", "Desktop", "{dev-id}", QString(), "{tc-id}", "{qtXX-id}", "/usr/bin/gdb-test", "Desktop", "{dev-id}", QString(), tcs, "{qtXX-id}",
"unsupported/mkspec", env, "unsupported/mkspec", env,
KeyValuePairList({ KeyValuePair("PE.Profile.Data/extraData", QVariant("extraValue")) })); KeyValuePairList({ KeyValuePair("PE.Profile.Data/extraData", QVariant("extraValue")) }));
if (!empty.isEmpty()) if (!empty.isEmpty())
return false; return false;
// Fail if dev is not there: // Fail if dev is not there:
empty = addKit(map, tcMap, qtMap, devMap, "testId", "Test Kit", "/tmp/icon.png", QString(), 1, empty = addKit(map, tcMap, qtMap, devMap, "testId", "Test Kit", "/tmp/icon.png", QString(), 1,
"/usr/bin/gdb-test", "Desktop", "{devXX-id}", QString(), "{tc-id}", "{qt-id}", "/usr/bin/gdb-test", "Desktop", "{devXX-id}", QString(), tcs, "{qt-id}",
"unsupported/mkspec", env, "unsupported/mkspec", env,
KeyValuePairList({ KeyValuePair("PE.Profile.Data/extraData", QVariant("extraValue")) })); KeyValuePairList({ KeyValuePair("PE.Profile.Data/extraData", QVariant("extraValue")) }));
if (!empty.isEmpty()) if (!empty.isEmpty())
@@ -333,7 +356,7 @@ bool AddKitOperation::test() const
// Profile 0: // Profile 0:
map = addKit(map, tcMap, qtMap, devMap, "testId", "Test Kit", "/tmp/icon.png", QString(), 1, map = addKit(map, tcMap, qtMap, devMap, "testId", "Test Kit", "/tmp/icon.png", QString(), 1,
"/usr/bin/gdb-test", "Desktop", QString(), QString(), "{tc-id}", "{qt-id}", "/usr/bin/gdb-test", "Desktop", QString(), QString(), tcs, "{qt-id}",
"unsupported/mkspec", env, "unsupported/mkspec", env,
KeyValuePairList({ KeyValuePair("PE.Profile.Data/extraData", QVariant("extraValue")) })); KeyValuePairList({ KeyValuePair("PE.Profile.Data/extraData", QVariant("extraValue")) }));
@@ -358,23 +381,27 @@ bool AddKitOperation::test() const
if (data.count() != 7 if (data.count() != 7
|| !data.contains(DEBUGGER) || data.value(DEBUGGER).type() != QVariant::Map || !data.contains(DEBUGGER) || data.value(DEBUGGER).type() != QVariant::Map
|| !data.contains(DEVICE_TYPE) || data.value(DEVICE_TYPE).toString() != "Desktop" || !data.contains(DEVICE_TYPE) || data.value(DEVICE_TYPE).toString() != "Desktop"
|| !data.contains(TOOLCHAIN) || data.value(TOOLCHAIN).toString() != "{tc-id}" || !data.contains(TOOLCHAIN)
|| !data.contains(QT) || data.value(QT).toString() != "SDK.{qt-id}" || !data.contains(QT) || data.value(QT).toString() != "SDK.{qt-id}"
|| !data.contains(MKSPEC) || data.value(MKSPEC).toString() != "unsupported/mkspec" || !data.contains(MKSPEC) || data.value(MKSPEC).toString() != "unsupported/mkspec"
|| !data.contains("extraData") || data.value("extraData").toString() != "extraValue") || !data.contains("extraData") || data.value("extraData").toString() != "extraValue")
return false; return false;
QVariantMap tcOutput = data.value(TOOLCHAIN).toMap();
if (tcOutput.count() != 1
|| !tcOutput.contains("Cxx") || tcOutput.value("Cxx") != "{tc-id}")
return false;
// Ignore existing ids: // Ignore existing ids:
QVariantMap result = addKit(map, tcMap, qtMap, devMap, "testId", "Test Qt Version X", QVariantMap result = addKit(map, tcMap, qtMap, devMap, "testId", "Test Qt Version X",
"/tmp/icon3.png", QString(), 1, "/usr/bin/gdb-test3", "Desktop", "/tmp/icon3.png", QString(), 1, "/usr/bin/gdb-test3", "Desktop",
QString(), QString(), "{tc-id}", "{qt-id}", "unsupported/mkspec", env, QString(), QString(), tcs, "{qt-id}", "unsupported/mkspec", env,
KeyValuePairList({ KeyValuePair("PE.Profile.Data/extraData", QVariant("extraValue")) })); KeyValuePairList({ KeyValuePair("PE.Profile.Data/extraData", QVariant("extraValue")) }));
if (!result.isEmpty()) if (!result.isEmpty())
return false; return false;
// Profile 1: Make sure name is unique: // Profile 1: Make sure name is unique:
map = addKit(map, tcMap, qtMap, devMap, "testId2", "Test Kit2", "/tmp/icon2.png", QString(), 1, map = addKit(map, tcMap, qtMap, devMap, "testId2", "Test Kit2", "/tmp/icon2.png", QString(), 1,
"/usr/bin/gdb-test2", "Desktop", "{dev-id}", "/sys/root\\\\", "{tc-id}", "/usr/bin/gdb-test2", "Desktop", "{dev-id}", "/sys/root\\\\", tcs,
"{qt-id}", "unsupported/mkspec", env, "{qt-id}", "unsupported/mkspec", env,
KeyValuePairList({ KeyValuePair("PE.Profile.Data/extraData", QVariant("extraValue")) })); KeyValuePairList({ KeyValuePair("PE.Profile.Data/extraData", QVariant("extraValue")) }));
if (map.count() != 5 if (map.count() != 5
@@ -403,17 +430,21 @@ bool AddKitOperation::test() const
|| !data.contains(DEVICE_TYPE) || data.value(DEVICE_TYPE).toString() != "Desktop" || !data.contains(DEVICE_TYPE) || data.value(DEVICE_TYPE).toString() != "Desktop"
|| !data.contains(DEVICE_ID) || data.value(DEVICE_ID).toString() != "{dev-id}" || !data.contains(DEVICE_ID) || data.value(DEVICE_ID).toString() != "{dev-id}"
|| !data.contains(SYSROOT) || data.value(SYSROOT).toString() != "/sys/root\\\\" || !data.contains(SYSROOT) || data.value(SYSROOT).toString() != "/sys/root\\\\"
|| !data.contains(TOOLCHAIN) || data.value(TOOLCHAIN).toString() != "{tc-id}" || !data.contains(TOOLCHAIN)
|| !data.contains(QT) || data.value(QT).toString() != "SDK.{qt-id}" || !data.contains(QT) || data.value(QT).toString() != "SDK.{qt-id}"
|| !data.contains(MKSPEC) || data.value(MKSPEC).toString() != "unsupported/mkspec" || !data.contains(MKSPEC) || data.value(MKSPEC).toString() != "unsupported/mkspec"
|| !data.contains(ENV) || data.value(ENV).toStringList() != env || !data.contains(ENV) || data.value(ENV).toStringList() != env
|| !data.contains("extraData") || data.value("extraData").toString() != "extraValue") || !data.contains("extraData") || data.value("extraData").toString() != "extraValue")
return false; return false;
tcOutput = data.value(TOOLCHAIN).toMap();
if (tcOutput.count() != 1
|| !tcOutput.contains("Cxx") || tcOutput.value("Cxx") != "{tc-id}")
return false;
// Profile 2: Test debugger id: // Profile 2: Test debugger id:
map = addKit(map, tcMap, qtMap, devMap, "test with debugger Id", "Test debugger Id", map = addKit(map, tcMap, qtMap, devMap, "test with debugger Id", "Test debugger Id",
"/tmp/icon2.png", "debugger Id", 0, QString(), "Desktop", QString(), QString(), "/tmp/icon2.png", "debugger Id", 0, QString(), "Desktop", QString(), QString(),
"{tc-id}", "{qt-id}", "unsupported/mkspec", env, tcs, "{qt-id}", "unsupported/mkspec", env,
KeyValuePairList({ KeyValuePair("PE.Profile.Data/extraData", QVariant("extraValue")) })); KeyValuePairList({ KeyValuePair("PE.Profile.Data/extraData", QVariant("extraValue")) }));
if (map.count() != 6 if (map.count() != 6
|| !map.contains(VERSION) || map.value(VERSION).toInt() != 1 || !map.contains(VERSION) || map.value(VERSION).toInt() != 1
@@ -452,7 +483,7 @@ QVariantMap AddKitOperation::addKit(const QVariantMap &map,
const QString &icon, const QString &debuggerId, const QString &icon, const QString &debuggerId,
const quint32 &debuggerType, const QString &debugger, const quint32 &debuggerType, const QString &debugger,
const QString &deviceType, const QString &device, const QString &deviceType, const QString &device,
const QString &sysRoot, const QString &tc, const QString &qt, const QString &sysRoot, const QHash<QString, QString> &tcs, const QString &qt,
const QString &mkspec, const QStringList &env, const QString &mkspec, const QStringList &env,
const KeyValuePairList &extra) const KeyValuePairList &extra)
{ {
@@ -461,7 +492,7 @@ QVariantMap AddKitOperation::addKit(const QVariantMap &map,
QVariantMap devMap = load("Devices"); QVariantMap devMap = load("Devices");
return addKit(map, tcMap, qtMap, devMap, id, displayName, icon, debuggerId, debuggerType, return addKit(map, tcMap, qtMap, devMap, id, displayName, icon, debuggerId, debuggerType,
debugger, deviceType, device, sysRoot, tc, qt, mkspec, env, extra); debugger, deviceType, device, sysRoot, tcs, qt, mkspec, env, extra);
} }
QVariantMap AddKitOperation::addKit(const QVariantMap &map, const QVariantMap &tcMap, QVariantMap AddKitOperation::addKit(const QVariantMap &map, const QVariantMap &tcMap,
@@ -470,7 +501,7 @@ QVariantMap AddKitOperation::addKit(const QVariantMap &map, const QVariantMap &t
const QString &icon, const QString &debuggerId, const QString &icon, const QString &debuggerId,
const quint32 &debuggerType, const QString &debugger, const quint32 &debuggerType, const QString &debugger,
const QString &deviceType, const QString &device, const QString &deviceType, const QString &device,
const QString &sysRoot, const QString &tc, const QString &qt, const QString &sysRoot, const QHash<QString, QString> &tcs, const QString &qt,
const QString &mkspec, const QStringList &env, const QString &mkspec, const QStringList &env,
const KeyValuePairList &extra) const KeyValuePairList &extra)
{ {
@@ -488,13 +519,16 @@ QVariantMap AddKitOperation::addKit(const QVariantMap &map, const QVariantMap &t
return QVariantMap(); return QVariantMap();
} }
if (!tc.isEmpty() && !AddToolChainOperation::exists(tcMap, tc)) { for (auto i = tcs.constBegin(); i != tcs.constEnd(); ++i) {
if (!i.value().isEmpty() && !AddToolChainOperation::exists(tcMap, i.value())) {
QRegExp abiRegExp = QRegExp("[a-z0-9_]+-[a-z0-9_]+-[a-z0-9_]+-[a-z0-9_]+-(8|16|32|64|128)bit"); QRegExp abiRegExp = QRegExp("[a-z0-9_]+-[a-z0-9_]+-[a-z0-9_]+-[a-z0-9_]+-(8|16|32|64|128)bit");
if (!abiRegExp.exactMatch(tc)) { if (!abiRegExp.exactMatch(i.value())) {
std::cerr << "Error: Toolchain " << qPrintable(tc) << " does not exist." << std::endl; std::cerr << "Error: Toolchain " << qPrintable(i.value())
<< " for language " << qPrintable(i.key()) << " does not exist." << std::endl;
return QVariantMap(); return QVariantMap();
} }
} }
}
QString qtId = qt; QString qtId = qt;
if (!qtId.isEmpty() && !qtId.startsWith("SDK.")) if (!qtId.isEmpty() && !qtId.startsWith("SDK."))
@@ -552,8 +586,8 @@ QVariantMap AddKitOperation::addKit(const QVariantMap &map, const QVariantMap &t
data << KeyValuePair({ kit, DATA, DEVICE_ID }, QVariant(device)); data << KeyValuePair({ kit, DATA, DEVICE_ID }, QVariant(device));
if (!sysRoot.isNull()) if (!sysRoot.isNull())
data << KeyValuePair({ kit, DATA, SYSROOT }, QVariant(sysRoot)); data << KeyValuePair({ kit, DATA, SYSROOT }, QVariant(sysRoot));
if (!tc.isNull()) for (auto i = tcs.constBegin(); i != tcs.constEnd(); ++i)
data << KeyValuePair({ kit, DATA, TOOLCHAIN }, QVariant(tc)); data << KeyValuePair({ kit, DATA, TOOLCHAIN, i.key() }, QVariant(i.value()));
if (!qtId.isNull()) if (!qtId.isNull())
data << KeyValuePair({ kit, DATA, QT }, QVariant(qtId)); data << KeyValuePair({ kit, DATA, QT }, QVariant(qtId));
if (!mkspec.isNull()) if (!mkspec.isNull())

View File

@@ -27,6 +27,7 @@
#include "operation.h" #include "operation.h"
#include <QHash>
#include <QString> #include <QString>
class AddKitOperation : public Operation class AddKitOperation : public Operation
@@ -50,8 +51,9 @@ public:
const QString &icon, const QString &debuggerId, const QString &icon, const QString &debuggerId,
const quint32 &debuggerType, const QString &debugger, const quint32 &debuggerType, const QString &debugger,
const QString &deviceType, const QString &device, const QString &deviceType, const QString &device,
const QString &sysRoot, const QString &tc, const QString &qt, const QString &sysRoot, const QHash<QString, QString> &tcs,
const QString &mkspec, const QStringList &env, const KeyValuePairList &extra); const QString &qt, const QString &mkspec, const QStringList &env,
const KeyValuePairList &extra);
static QVariantMap initializeKits(); static QVariantMap initializeKits();
@@ -62,8 +64,9 @@ public:
const QString &icon, const QString &debuggerId, const QString &icon, const QString &debuggerId,
const quint32 &debuggerType, const QString &debugger, const quint32 &debuggerType, const QString &debugger,
const QString &deviceType, const QString &device, const QString &deviceType, const QString &device,
const QString &sysRoot, const QString &tc, const QString &qt, const QString &sysRoot, const QHash<QString, QString> &tcs,
const QString &mkspec, const QStringList &env, const KeyValuePairList &extra); const QString &qt, const QString &mkspec, const QStringList &env,
const KeyValuePairList &extra);
private: private:
QString m_id; QString m_id;
@@ -75,7 +78,7 @@ private:
QString m_deviceType; QString m_deviceType;
QString m_device; QString m_device;
QString m_sysRoot; QString m_sysRoot;
QString m_tc; QHash<QString, QString> m_tcs;
QString m_qt; QString m_qt;
QString m_mkspec; QString m_mkspec;
QStringList m_env; QStringList m_env;

View File

@@ -46,6 +46,7 @@ const char VERSION[] = "Version";
const char ID[] = "ProjectExplorer.ToolChain.Id"; const char ID[] = "ProjectExplorer.ToolChain.Id";
const char DISPLAYNAME[] = "ProjectExplorer.ToolChain.DisplayName"; const char DISPLAYNAME[] = "ProjectExplorer.ToolChain.DisplayName";
const char AUTODETECTED[] = "ProjectExplorer.ToolChain.Autodetect"; const char AUTODETECTED[] = "ProjectExplorer.ToolChain.Autodetect";
const char LANGUAGE_KEY[] = "ProjectExplorer.ToolChain.Language";
// GCC ToolChain: // GCC ToolChain:
const char PATH[] = "ProjectExplorer.GccToolChain.Path"; const char PATH[] = "ProjectExplorer.GccToolChain.Path";
@@ -66,6 +67,7 @@ QString AddToolChainOperation::argumentsHelpText() const
{ {
return QString( return QString(
" --id <ID> id of the new tool chain (required).\n" " --id <ID> id of the new tool chain (required).\n"
" --language <ID> input language id of the new tool chain (required).\n"
" --name <NAME> display name of the new tool chain (required).\n" " --name <NAME> display name of the new tool chain (required).\n"
" --path <PATH> path to the compiler (required).\n" " --path <PATH> path to the compiler (required).\n"
" --abi <ABI STRING> ABI of the compiler (required).\n" " --abi <ABI STRING> ABI of the compiler (required).\n"
@@ -90,6 +92,12 @@ bool AddToolChainOperation::setArguments(const QStringList &args)
continue; continue;
} }
if (current == "--language") {
++i; // skip next;
m_languageId = next;
continue;
}
if (current == "--name") { if (current == "--name") {
++i; // skip next; ++i; // skip next;
m_displayName = next; m_displayName = next;
@@ -132,6 +140,8 @@ bool AddToolChainOperation::setArguments(const QStringList &args)
if (m_id.isEmpty()) if (m_id.isEmpty())
std::cerr << "No id given for tool chain." << std::endl; std::cerr << "No id given for tool chain." << std::endl;
if (m_languageId.isEmpty())
std::cerr << "No language id given for tool chain." << std::endl;
if (m_displayName.isEmpty()) if (m_displayName.isEmpty())
std::cerr << "No name given for tool chain." << std::endl; std::cerr << "No name given for tool chain." << std::endl;
if (m_path.isEmpty()) if (m_path.isEmpty())
@@ -148,7 +158,8 @@ int AddToolChainOperation::execute() const
if (map.isEmpty()) if (map.isEmpty())
map = initializeToolChains(); map = initializeToolChains();
QVariantMap result = addToolChain(map, m_id, m_displayName, m_path, m_targetAbi, m_supportedAbis, m_extra); QVariantMap result = addToolChain(map, m_id, m_languageId, m_displayName, m_path,
m_targetAbi, m_supportedAbis, m_extra);
if (result.isEmpty() || map == result) if (result.isEmpty() || map == result)
return 2; return 2;
@@ -161,14 +172,15 @@ bool AddToolChainOperation::test() const
QVariantMap map = initializeToolChains(); QVariantMap map = initializeToolChains();
// Add toolchain: // Add toolchain:
map = addToolChain(map, "testId", "name", "/tmp/test", "test-abi", "test-abi,test-abi2", map = addToolChain(map, "testId", "langId", "name", "/tmp/test", "test-abi", "test-abi,test-abi2",
KeyValuePairList() << KeyValuePair("ExtraKey", QVariant("ExtraValue"))); KeyValuePairList() << KeyValuePair("ExtraKey", QVariant("ExtraValue")));
if (map.value(COUNT).toInt() != 1 if (map.value(COUNT).toInt() != 1
|| !map.contains(QString::fromLatin1(PREFIX) + '0')) || !map.contains(QString::fromLatin1(PREFIX) + '0'))
return false; return false;
QVariantMap tcData = map.value(QString::fromLatin1(PREFIX) + '0').toMap(); QVariantMap tcData = map.value(QString::fromLatin1(PREFIX) + '0').toMap();
if (tcData.count() != 7 if (tcData.count() != 8
|| tcData.value(ID).toString() != "testId" || tcData.value(ID).toString() != "testId"
|| tcData.value(LANGUAGE_KEY).toString() != "langId"
|| tcData.value(DISPLAYNAME).toString() != "name" || tcData.value(DISPLAYNAME).toString() != "name"
|| tcData.value(AUTODETECTED).toBool() != true || tcData.value(AUTODETECTED).toBool() != true
|| tcData.value(PATH).toString() != "/tmp/test" || tcData.value(PATH).toString() != "/tmp/test"
@@ -178,21 +190,23 @@ bool AddToolChainOperation::test() const
return false; return false;
// Ignore same Id: // Ignore same Id:
QVariantMap unchanged = addToolChain(map, "testId", "name2", "/tmp/test2", "test-abi2", "test-abi2,test-abi3", QVariantMap unchanged = addToolChain(map, "testId", "langId", "name2", "/tmp/test2", "test-abi2",
"test-abi2,test-abi3",
KeyValuePairList() << KeyValuePair("ExtraKey", QVariant("ExtraValue2"))); KeyValuePairList() << KeyValuePair("ExtraKey", QVariant("ExtraValue2")));
if (!unchanged.isEmpty()) if (!unchanged.isEmpty())
return false; return false;
// Make sure name stays unique: // Make sure name stays unique:
map = addToolChain(map, "{some-tc-id}", "name", "/tmp/test", "test-abi", "test-abi,test-abi2", map = addToolChain(map, "{some-tc-id}", "langId2", "name", "/tmp/test", "test-abi", "test-abi,test-abi2",
KeyValuePairList() << KeyValuePair("ExtraKey", QVariant("ExtraValue"))); KeyValuePairList() << KeyValuePair("ExtraKey", QVariant("ExtraValue")));
if (map.value(COUNT).toInt() != 2 if (map.value(COUNT).toInt() != 2
|| !map.contains(QString::fromLatin1(PREFIX) + '0') || !map.contains(QString::fromLatin1(PREFIX) + '0')
|| !map.contains(QString::fromLatin1(PREFIX) + '1')) || !map.contains(QString::fromLatin1(PREFIX) + '1'))
return false; return false;
tcData = map.value(QString::fromLatin1(PREFIX) + '0').toMap(); tcData = map.value(QString::fromLatin1(PREFIX) + '0').toMap();
if (tcData.count() != 7 if (tcData.count() != 8
|| tcData.value(ID).toString() != "testId" || tcData.value(ID).toString() != "testId"
|| tcData.value(LANGUAGE_KEY).toString() != "langId"
|| tcData.value(DISPLAYNAME).toString() != "name" || tcData.value(DISPLAYNAME).toString() != "name"
|| tcData.value(AUTODETECTED).toBool() != true || tcData.value(AUTODETECTED).toBool() != true
|| tcData.value(PATH).toString() != "/tmp/test" || tcData.value(PATH).toString() != "/tmp/test"
@@ -201,8 +215,9 @@ bool AddToolChainOperation::test() const
|| tcData.value("ExtraKey").toString() != "ExtraValue") || tcData.value("ExtraKey").toString() != "ExtraValue")
return false; return false;
tcData = map.value(QString::fromLatin1(PREFIX) + '1').toMap(); tcData = map.value(QString::fromLatin1(PREFIX) + '1').toMap();
if (tcData.count() != 7 if (tcData.count() != 8
|| tcData.value(ID).toString() != "{some-tc-id}" || tcData.value(ID).toString() != "{some-tc-id}"
|| tcData.value(LANGUAGE_KEY).toString() != "langId2"
|| tcData.value(DISPLAYNAME).toString() != "name2" || tcData.value(DISPLAYNAME).toString() != "name2"
|| tcData.value(AUTODETECTED).toBool() != true || tcData.value(AUTODETECTED).toBool() != true
|| tcData.value(PATH).toString() != "/tmp/test" || tcData.value(PATH).toString() != "/tmp/test"
@@ -215,10 +230,11 @@ bool AddToolChainOperation::test() const
} }
#endif #endif
QVariantMap AddToolChainOperation::addToolChain(const QVariantMap &map, QVariantMap AddToolChainOperation::addToolChain(const QVariantMap &map, const QString &id,
const QString &id, const QString &displayName, const QString &lang, const QString &displayName,
const QString &path, const QString &abi, const QString &path, const QString &abi,
const QString &supportedAbis, const KeyValuePairList &extra) const QString &supportedAbis,
const KeyValuePairList &extra)
{ {
// Sanity check: Does the Id already exist? // Sanity check: Does the Id already exist?
if (exists(map, id)) { if (exists(map, id)) {
@@ -247,6 +263,7 @@ QVariantMap AddToolChainOperation::addToolChain(const QVariantMap &map,
KeyValuePairList data; KeyValuePairList data;
data << KeyValuePair({ tc, ID }, QVariant(id)); data << KeyValuePair({ tc, ID }, QVariant(id));
data << KeyValuePair({ tc, LANGUAGE_KEY }, QVariant(lang));
data << KeyValuePair({ tc, DISPLAYNAME }, QVariant(uniqueName)); data << KeyValuePair({ tc, DISPLAYNAME }, QVariant(uniqueName));
data << KeyValuePair({ tc, AUTODETECTED }, QVariant(true)); data << KeyValuePair({ tc, AUTODETECTED }, QVariant(true));
data << KeyValuePair({ tc, PATH }, QVariant(path)); data << KeyValuePair({ tc, PATH }, QVariant(path));

View File

@@ -45,9 +45,9 @@ public:
#endif #endif
static QVariantMap addToolChain(const QVariantMap &map, static QVariantMap addToolChain(const QVariantMap &map,
const QString &id, const QString &displayName, const QString &id, const QString &lang,
const QString &path, const QString &abi, const QString &displayName, const QString &path,
const QString &supportedAbis, const QString &abi, const QString &supportedAbis,
const KeyValuePairList &extra); const KeyValuePairList &extra);
static QVariantMap initializeToolChains(); static QVariantMap initializeToolChains();
@@ -56,6 +56,7 @@ public:
private: private:
QString m_id; QString m_id;
QString m_languageId;
QString m_displayName; QString m_displayName;
QString m_path; QString m_path;
QString m_targetAbi; QString m_targetAbi;

View File

@@ -98,7 +98,7 @@ int RmKitOperation::execute() const
bool RmKitOperation::test() const bool RmKitOperation::test() const
{ {
QVariantMap tcMap = AddToolChainOperation::initializeToolChains(); QVariantMap tcMap = AddToolChainOperation::initializeToolChains();
tcMap = AddToolChainOperation::addToolChain(tcMap, "{tc-id}", "TC", "/usr/bin/gcc", tcMap = AddToolChainOperation::addToolChain(tcMap, "{tc-id}", "langId", "TC", "/usr/bin/gcc",
"x86-linux-generic-elf-32bit", "x86-linux-generic-elf-32bit",
"x86-linux-generic-elf-32bit", "x86-linux-generic-elf-32bit",
KeyValuePairList()); KeyValuePairList());
@@ -114,17 +114,19 @@ bool RmKitOperation::test() const
"desktop", "", 22, 10000, "uname", 1, "desktop", "", 22, 10000, "uname", 1,
KeyValuePairList()); KeyValuePairList());
QHash<QString, QString> tcs;
tcs.insert("Cxx", "{tc-id}");
QVariantMap map = QVariantMap map =
AddKitOperation::addKit(AddKitOperation::initializeKits(), tcMap, qtMap, devMap, AddKitOperation::addKit(AddKitOperation::initializeKits(), tcMap, qtMap, devMap,
"testId", "Test Qt Version", "/tmp/icon.png", "testId", "Test Qt Version", "/tmp/icon.png", QString(), 1,
QString(), 1, "/usr/bin/gdb-test", "Desktop", "/usr/bin/gdb-test", "Desktop", QString(), QString(), tcs,
QString(), QString(), "{tc-id}", "{qt-id}", "{qt-id}", "unsupported/mkspec", QStringList(),
"unsupported/mkspec", QStringList(),
KeyValuePairList() << KeyValuePair("PE.Profile.Data/extraData", QVariant("extraValue"))); KeyValuePairList() << KeyValuePair("PE.Profile.Data/extraData", QVariant("extraValue")));
map = map =
AddKitOperation::addKit(map, tcMap, qtMap, devMap, "testId2", "Test Qt Version", AddKitOperation::addKit(map, tcMap, qtMap, devMap, "testId2", "Test Qt Version",
"/tmp/icon2.png", QString(), 1, "/usr/bin/gdb-test2", "/tmp/icon2.png", QString(), 1, "/usr/bin/gdb-test2",
"Desktop", QString(), QString(), "{tc-id}", "{qt-id}", "Desktop", QString(), QString(), tcs, "{qt-id}",
"unsupported/mkspec2", QStringList(), "unsupported/mkspec2", QStringList(),
KeyValuePairList() << KeyValuePair("PE.Profile.Data/extraData", QVariant("extraValue2"))); KeyValuePairList() << KeyValuePair("PE.Profile.Data/extraData", QVariant("extraValue2")));

View File

@@ -97,10 +97,10 @@ bool RmToolChainOperation::test() const
{ {
// Add toolchain: // Add toolchain:
QVariantMap map = AddToolChainOperation::initializeToolChains(); QVariantMap map = AddToolChainOperation::initializeToolChains();
map = AddToolChainOperation::addToolChain(map, "testId", "name", "/tmp/test", "test-abi", map = AddToolChainOperation::addToolChain(map, "testId", "langId", "name", "/tmp/test", "test-abi",
"test-abi,test-abi2", "test-abi,test-abi2",
KeyValuePairList({ KeyValuePair("ExtraKey", QVariant("ExtraValue")) })); KeyValuePairList({ KeyValuePair("ExtraKey", QVariant("ExtraValue")) }));
map = AddToolChainOperation::addToolChain(map, "testId2", "other name", "/tmp/test2", "test-abi", map = AddToolChainOperation::addToolChain(map, "testId2", "langId", "other name", "/tmp/test2", "test-abi",
"test-abi,test-abi2", KeyValuePairList()); "test-abi,test-abi2", KeyValuePairList());
QVariantMap result = rmToolChain(QVariantMap(), "nonexistent"); QVariantMap result = rmToolChain(QVariantMap(), "nonexistent");