SDKtool: Write toolchains compatible with Qt Creator 4.2 and 4.3

Make sure the toolchains xml file written by sdktool is compatible
with both Qt Creator 4.2 and 4.3 by mapping the --language field
accordingly.

Change-Id: Ie8c289c8fe7d49ce95e924e89b4e369a62469e64
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
Tobias Hunger
2017-03-14 12:54:14 +01:00
parent 3520ba2825
commit 9e71f3b08d

View File

@@ -47,6 +47,7 @@ const char ID[] = "ProjectExplorer.ToolChain.Id";
const char DISPLAYNAME[] = "ProjectExplorer.ToolChain.DisplayName";
const char AUTODETECTED[] = "ProjectExplorer.ToolChain.Autodetect";
const char LANGUAGE_KEY[] = "ProjectExplorer.ToolChain.Language";
const char LANGUAGE_KEY_V2[] = "ProjectExplorer.ToolChain.LanguageV2";
// GCC ToolChain:
const char PATH[] = "ProjectExplorer.GccToolChain.Path";
@@ -265,7 +266,30 @@ QVariantMap AddToolChainOperation::addToolChain(const QVariantMap &map, const QS
KeyValuePairList data;
data << KeyValuePair({tc, ID}, QVariant(id));
data << KeyValuePair({tc, LANGUAGE_KEY}, QVariant(lang));
// Language compatibility hack for 4.2:
QString newLang; // QtC 4.3 and later
QString oldLang; // QtC 4.2
int langInt = lang.toInt(&ok);
Q_UNUSED(langInt);
if (lang == "2" || lang == "Cxx") {
newLang = "Cxx";
oldLang = "2";
} else if (lang == "1" || lang == "C") {
newLang = "C";
oldLang = "1";
} else if (ok) {
std::cerr << "Error: Language ID must be 1 for C, 2 for Cxx "
<< "or a string like (\"C\", \"Cxx\", \"Nim\", etc.)" << std::endl;
return {};
} else if (!ok) {
newLang = lang;
oldLang = "";
}
if (!oldLang.isEmpty())
data << KeyValuePair({tc, LANGUAGE_KEY}, QVariant(oldLang));
if (!newLang.isEmpty())
data << KeyValuePair({tc, LANGUAGE_KEY_V2}, QVariant(newLang));
data << KeyValuePair({tc, DISPLAYNAME}, QVariant(uniqueName));
data << KeyValuePair({tc, AUTODETECTED}, QVariant(true));
data << KeyValuePair({tc, PATH}, QVariant(path));