Merge remote-tracking branch 'origin/3.0'

Conflicts:
	qtcreator.pri
	src/plugins/qnx/qnxutils.cpp

Change-Id: I019ad21fb4c128eb736c8ab2d09310757e3be037
This commit is contained in:
Eike Ziller
2013-10-24 08:56:29 +02:00
192 changed files with 2423 additions and 1016 deletions

View File

@@ -457,7 +457,12 @@ QVector<AndroidDeviceInfo> AndroidConfigurations::connectedDevices(QString *erro
return devices;
}
QList<QByteArray> adbDevs = adbProc.readAll().trimmed().split('\n');
adbDevs.removeFirst();
if (adbDevs.empty())
return devices;
while (adbDevs.first().startsWith("* daemon"))
adbDevs.removeFirst(); // remove the daemon logs
adbDevs.removeFirst(); // remove "List of devices attached" header line
// workaround for '????????????' serial numbers:
// can use "adb -d" when only one usb device attached
@@ -578,7 +583,13 @@ QVector<AndroidDeviceInfo> AndroidConfigurations::androidVirtualDevices() const
return devices;
}
QList<QByteArray> avds = proc.readAll().trimmed().split('\n');
avds.removeFirst();
if (avds.empty())
return devices;
while (avds.first().startsWith("* daemon"))
avds.removeFirst(); // remove the daemon logs
avds.removeFirst(); // remove "List of devices attached" header line
AndroidDeviceInfo dev;
for (int i = 0; i < avds.size(); i++) {
QString line = QLatin1String(avds[i]);
@@ -610,7 +621,7 @@ QVector<AndroidDeviceInfo> AndroidConfigurations::androidVirtualDevices() const
QString AndroidConfigurations::startAVD(const QString &name, int apiLevel, QString cpuAbi) const
{
if (startAVDAsync(name))
if (findAvd(apiLevel, cpuAbi) || startAVDAsync(name))
return waitForAvd(apiLevel, cpuAbi);
return QString();
}
@@ -632,6 +643,21 @@ bool AndroidConfigurations::startAVDAsync(const QString &avdName) const
return true;
}
bool AndroidConfigurations::findAvd(int apiLevel, const QString &cpuAbi) const
{
QVector<AndroidDeviceInfo> devices = connectedDevices();
foreach (AndroidDeviceInfo device, devices) {
if (!device.serialNumber.startsWith(QLatin1String("emulator")))
continue;
if (!device.cpuAbi.contains(cpuAbi))
continue;
if (device.sdk != apiLevel)
continue;
return true;
}
return false;
}
QString AndroidConfigurations::waitForAvd(int apiLevel, const QString &cpuAbi) const
{
// we cannot use adb -e wait-for-device, since that doesn't work if a emulator is already running
@@ -804,6 +830,18 @@ void AndroidConfigurations::updateAutomaticKitList()
if (k->isSdkProvided())
continue;
// Update code for 3.0 beta, which shipped with a bug for the debugger settings
ProjectExplorer::ToolChain *tc =ToolChainKitInformation::toolChain(k);
if (tc && Debugger::DebuggerKitInformation::debuggerCommand(k) != tc->suggestedDebugger()) {
Debugger::DebuggerItem debugger;
debugger.setCommand(tc->suggestedDebugger());
debugger.setEngineType(Debugger::GdbEngineType);
debugger.setDisplayName(tr("Android Debugger for %1").arg(tc->displayName()));
debugger.setAutoDetected(true);
debugger.setAbi(tc->targetAbi());
QVariant id = Debugger::DebuggerItemManager::registerDebugger(debugger);
Debugger::DebuggerKitInformation::setDebugger(k, id);
}
existingKits << k;
}
@@ -841,7 +879,8 @@ void AndroidConfigurations::updateAutomaticKitList()
debugger.setDisplayName(tr("Android Debugger for %1").arg(tc->displayName()));
debugger.setAutoDetected(true);
debugger.setAbi(tc->targetAbi());
Debugger::DebuggerKitInformation::setDebugger(newKit, debugger);
QVariant id = Debugger::DebuggerItemManager::registerDebugger(debugger);
Debugger::DebuggerKitInformation::setDebugger(newKit, id);
AndroidGdbServerKitInformation::setGdbSever(newKit, tc->suggestedGdbServer());
newKit->makeSticky();

View File

@@ -106,6 +106,7 @@ public:
QVector<AndroidDeviceInfo> androidVirtualDevices() const;
QString startAVD(const QString &name, int apiLevel, QString cpuAbi) const;
bool startAVDAsync(const QString &avdName) const;
bool findAvd(int apiLevel, const QString &cpuAbi) const;
QString waitForAvd(int apiLevel, const QString &cpuAbi) const;
QString bestNdkPlatformMatch(const QString &targetAPI) const;

View File

@@ -287,7 +287,8 @@ bool AndroidDeployQtStep::init()
if (!result)
return false;
AndroidConfigurations::instance().startAVDAsync(m_avdName);
if (!AndroidConfigurations::instance().findAvd(m_deviceAPILevel, m_targetArch))
AndroidConfigurations::instance().startAVDAsync(m_avdName);
return true;
}

View File

@@ -389,7 +389,8 @@ void AndroidDeployStep::deployFiles(QProcess *process, const QList<DeployItem> &
bool AndroidDeployStep::deployPackage()
{
if (!m_avdName.isEmpty()) {
if (!AndroidConfigurations::instance().startAVDAsync(m_avdName))
if (!AndroidConfigurations::instance().findAvd(m_deviceAPILevel, m_targetArch)
&& !AndroidConfigurations::instance().startAVDAsync(m_avdName))
return false;
m_deviceSerialNumber = AndroidConfigurations::instance().waitForAvd(m_deviceAPILevel, m_targetArch);
}