QList<ProjectExplorer::ToolChain *> RvctToolChainFactory::autoDetect() { Utils::Environment env = Utils::Environment::systemEnvironment(); QMap<QString, QList<Utils::EnvironmentItem> > rvcts; QList<Utils::EnvironmentItem> globalItems; // Find all RVCT..x variables for (Utils::Environment::const_iterator i = env.constBegin(); i != env.constEnd(); ++i) { if (i.key() == QLatin1String(RVCT_LICENSE_KEY)) globalItems.append(Utils::EnvironmentItem(i.key(), i.value())); if (!i.key().startsWith(QLatin1String("RVCT"))) continue; const QString key = i.key().left(6); QList<Utils::EnvironmentItem> values = rvcts.value(key); values.append(Utils::EnvironmentItem(i.key(), i.value())); rvcts.insert(key, values); } // Set up tool chains for each RVCT.. set QList<ProjectExplorer::ToolChain *> result; for (QMap<QString, QList<Utils::EnvironmentItem> >::const_iterator i = rvcts.constBegin(); i != rvcts.constEnd(); ++i) { QList<Utils::EnvironmentItem> changes = i.value(); changes.append(globalItems); Utils::FileName binary = Utils::FileName::fromUserInput(valueOf(changes, QLatin1String("BIN"))); if (binary.isEmpty()) continue; binary.appendPath(QLatin1String(RVCT_BINARY)); QFileInfo fi(binary.toFileInfo()); if (!fi.exists() || !fi.isExecutable()) continue; RvctToolChain::RvctVersion v = RvctToolChain::version(binary); if (v.majorVersion == 0 && v.minorVersion == 0 && v.build == 0) continue; // Failed to start. //: %1 arm version, %2 major version, %3 minor version, %4 build number const QString name = tr("RVCT (%1 %2.%3 Build %4)"); RvctToolChain *tc = new RvctToolChain(true); tc->setCompilerCommand(binary); tc->setEnvironmentChanges(changes); tc->setDisplayName(name.arg(armVersionString(tc->armVersion())) .arg(v.majorVersion).arg(v.minorVersion).arg(v.build)); tc->setVersion(v); tc->setDebuggerCommand(ProjectExplorer::ToolChainManager::instance()->defaultDebugger(tc->targetAbi())); result.append(tc); tc = new RvctToolChain(true); tc->setCompilerCommand(binary); tc->setEnvironmentChanges(changes); tc->setArmVersion(RvctToolChain::ARMv6); tc->setDisplayName(name.arg(armVersionString(tc->armVersion())) .arg(v.majorVersion).arg(v.minorVersion).arg(v.build)); tc->setVersion(v); tc->setDebuggerCommand(ProjectExplorer::ToolChainManager::instance()->defaultDebugger(tc->targetAbi())); result.append(tc); } return result; }