forked from qt-creator/qt-creator
Merge commit origin/2.0 '1a985148340ff3b29c752036857446452cf0907f'
Conflicts: src/plugins/qmldesigner/settingspage.ui src/plugins/qt4projectmanager/qt-maemo/maemopackagecontents.cpp src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp src/plugins/qt4projectmanager/qt-s60/s60createpackagestep.cpp
This commit is contained in:
@@ -109,6 +109,10 @@ QemuRuntimeManager::QemuRuntimeManager(QObject *parent)
|
||||
SLOT(qemuProcessError(QProcess::ProcessError)));
|
||||
connect(m_qemuProcess, SIGNAL(finished(int, QProcess::ExitStatus)), this,
|
||||
SLOT(qemuProcessFinished()));
|
||||
connect(m_qemuProcess, SIGNAL(readyReadStandardOutput()), this,
|
||||
SLOT(qemuOutput()));
|
||||
connect(m_qemuProcess, SIGNAL(readyReadStandardError()), this,
|
||||
SLOT(qemuOutput()));
|
||||
connect(this, SIGNAL(qemuProcessStatus(QemuStatus, QString)),
|
||||
this, SLOT(qemuStatusChanged(QemuStatus, QString)));
|
||||
}
|
||||
@@ -290,7 +294,7 @@ void QemuRuntimeManager::runConfigurationRemoved(ProjectExplorer::RunConfigurati
|
||||
void QemuRuntimeManager::runConfigurationChanged(ProjectExplorer::RunConfiguration *rc)
|
||||
{
|
||||
if (rc)
|
||||
m_qemuAction->setEnabled(targetUsesRuntimeConfig(rc->target()));
|
||||
m_qemuAction->setEnabled(targetUsesMatchingRuntimeConfig(rc->target()));
|
||||
}
|
||||
|
||||
void QemuRuntimeManager::buildConfigurationAdded(ProjectExplorer::BuildConfiguration *bc)
|
||||
@@ -326,7 +330,7 @@ void QemuRuntimeManager::environmentChanged()
|
||||
|
||||
void QemuRuntimeManager::deviceConfigurationChanged(ProjectExplorer::Target *target)
|
||||
{
|
||||
m_qemuAction->setEnabled(targetUsesRuntimeConfig(target));
|
||||
m_qemuAction->setEnabled(targetUsesMatchingRuntimeConfig(target));
|
||||
}
|
||||
|
||||
void QemuRuntimeManager::startRuntime()
|
||||
@@ -335,52 +339,52 @@ void QemuRuntimeManager::startRuntime()
|
||||
Project *p = ProjectExplorerPlugin::instance()->session()->startupProject();
|
||||
if (!p)
|
||||
return;
|
||||
|
||||
Qt4Target *qt4Target = qobject_cast<Qt4Target*> (p->activeTarget());
|
||||
if (!qt4Target)
|
||||
QtVersion *version;
|
||||
if (!targetUsesMatchingRuntimeConfig(p->activeTarget(), &version)) {
|
||||
qWarning("Strange: Qemu button was enabled, but target does not match.");
|
||||
return;
|
||||
}
|
||||
|
||||
Qt4BuildConfiguration *bc = qt4Target->activeBuildConfiguration();
|
||||
if (!bc)
|
||||
return;
|
||||
|
||||
QtVersion *version = bc->qtVersion();
|
||||
if (version && m_runtimes.contains(version->uniqueId())) {
|
||||
m_runningQtId = version->uniqueId();
|
||||
const QString root =
|
||||
QDir::toNativeSeparators(maddeRoot(version->qmakeCommand())
|
||||
m_runningQtId = version->uniqueId();
|
||||
const QString root
|
||||
= QDir::toNativeSeparators(maddeRoot(version->qmakeCommand())
|
||||
+ QLatin1Char('/'));
|
||||
const Runtime rt = m_runtimes.value(version->uniqueId());
|
||||
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
|
||||
const Runtime rt = m_runtimes.value(version->uniqueId());
|
||||
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
|
||||
#ifdef Q_OS_WIN
|
||||
const QLatin1Char colon(';');
|
||||
const QLatin1String key("PATH");
|
||||
env.insert(key, env.value(key) % colon % root % QLatin1String("bin"));
|
||||
env.insert(key, env.value(key) % colon % root % QLatin1String("madlib"));
|
||||
const QLatin1Char colon(';');
|
||||
const QLatin1String key("PATH");
|
||||
env.insert(key, env.value(key) % colon % root % QLatin1String("bin"));
|
||||
env.insert(key, env.value(key) % colon % root % QLatin1String("madlib"));
|
||||
#elif defined(Q_OS_UNIX)
|
||||
const QLatin1String key("LD_LIBRARY_PATH");
|
||||
env.insert(key, env.value(key) % QLatin1Char(':') % rt.m_libPath);
|
||||
const QLatin1String key("LD_LIBRARY_PATH");
|
||||
env.insert(key, env.value(key) % QLatin1Char(':') % rt.m_libPath);
|
||||
#endif
|
||||
m_qemuProcess->setProcessEnvironment(env);
|
||||
m_qemuProcess->setWorkingDirectory(rt.m_root);
|
||||
m_qemuProcess->setProcessEnvironment(env);
|
||||
m_qemuProcess->setWorkingDirectory(rt.m_root);
|
||||
|
||||
const QString app = root + (QFileInfo(rt.m_bin).isRelative()
|
||||
// This is complex because of extreme MADDE weirdness.
|
||||
const bool pathIsRelative = QFileInfo(rt.m_bin).isRelative();
|
||||
const QString app =
|
||||
#ifdef Q_OS_WIN
|
||||
root % (pathIsRelative
|
||||
? QLatin1String("madlib/") % rt.m_bin // Fremantle.
|
||||
: rt.m_bin) // Haramattan.
|
||||
#ifdef Q_OS_WIN
|
||||
% QLatin1String(".exe")
|
||||
% QLatin1String(".exe");
|
||||
#else
|
||||
pathIsRelative
|
||||
? root % QLatin1String("madlib/") % rt.m_bin // Fremantle.
|
||||
: rt.m_bin; // Haramattan.
|
||||
#endif
|
||||
; // keep
|
||||
|
||||
m_qemuProcess->start(app % QLatin1Char(' ') % rt.m_args,
|
||||
QIODevice::ReadWrite);
|
||||
if (!m_qemuProcess->waitForStarted())
|
||||
return;
|
||||
m_qemuProcess->start(app % QLatin1Char(' ') % rt.m_args,
|
||||
QIODevice::ReadWrite);
|
||||
if (!m_qemuProcess->waitForStarted())
|
||||
return;
|
||||
|
||||
emit qemuProcessStatus(QemuStarting);
|
||||
connect(m_qemuAction, SIGNAL(triggered()), this, SLOT(terminateRuntime()));
|
||||
disconnect(m_qemuAction, SIGNAL(triggered()), this, SLOT(startRuntime()));
|
||||
}
|
||||
emit qemuProcessStatus(QemuStarting);
|
||||
connect(m_qemuAction, SIGNAL(triggered()), this, SLOT(terminateRuntime()));
|
||||
disconnect(m_qemuAction, SIGNAL(triggered()), this, SLOT(startRuntime()));
|
||||
}
|
||||
|
||||
void QemuRuntimeManager::terminateRuntime()
|
||||
@@ -400,14 +404,20 @@ void QemuRuntimeManager::qemuProcessFinished()
|
||||
{
|
||||
m_runningQtId = -1;
|
||||
QemuStatus status = QemuFinished;
|
||||
QString error;
|
||||
|
||||
if (!m_userTerminated) {
|
||||
status = m_qemuProcess->exitStatus() == QProcess::CrashExit
|
||||
? QemuCrashed : QemuFinished;
|
||||
if (m_qemuProcess->exitStatus() == QProcess::CrashExit) {
|
||||
status = QemuCrashed;
|
||||
error = m_qemuProcess->errorString();
|
||||
} else if (m_qemuProcess->exitCode() != 0) {
|
||||
error = tr("Qemu finished with error: Exit code was %1.")
|
||||
.arg(m_qemuProcess->exitCode());
|
||||
}
|
||||
}
|
||||
|
||||
m_userTerminated = false;
|
||||
emit qemuProcessStatus(status);
|
||||
emit qemuProcessStatus(status, error);
|
||||
}
|
||||
|
||||
void QemuRuntimeManager::qemuProcessError(QProcess::ProcessError error)
|
||||
@@ -432,6 +442,7 @@ void QemuRuntimeManager::qemuStatusChanged(QemuStatus status, const QString &err
|
||||
message = tr("Qemu crashed");
|
||||
break;
|
||||
case QemuFinished:
|
||||
message = error;
|
||||
break;
|
||||
case QemuUserReason:
|
||||
message = error;
|
||||
@@ -445,6 +456,12 @@ void QemuRuntimeManager::qemuStatusChanged(QemuStatus status, const QString &err
|
||||
updateStarterIcon(running);
|
||||
}
|
||||
|
||||
void QemuRuntimeManager::qemuOutput()
|
||||
{
|
||||
qDebug("%s", m_qemuProcess->readAllStandardOutput().data());
|
||||
qDebug("%s", m_qemuProcess->readAllStandardError().data());
|
||||
}
|
||||
|
||||
// -- private
|
||||
|
||||
void QemuRuntimeManager::setupRuntimes()
|
||||
@@ -497,7 +514,7 @@ void QemuRuntimeManager::toggleStarterButton(Target *target)
|
||||
isRunning = false;
|
||||
|
||||
m_qemuAction->setEnabled(m_runtimes.contains(uniqueId)
|
||||
&& targetUsesRuntimeConfig(target) && !isRunning);
|
||||
&& targetUsesMatchingRuntimeConfig(target) && !isRunning);
|
||||
}
|
||||
|
||||
bool QemuRuntimeManager::sessionHasMaemoTarget() const
|
||||
@@ -510,19 +527,28 @@ bool QemuRuntimeManager::sessionHasMaemoTarget() const
|
||||
return result;
|
||||
}
|
||||
|
||||
bool QemuRuntimeManager::targetUsesRuntimeConfig(Target *target)
|
||||
bool QemuRuntimeManager::targetUsesMatchingRuntimeConfig(Target *target,
|
||||
QtVersion **qtVersion)
|
||||
{
|
||||
if (!target)
|
||||
return false;
|
||||
|
||||
MaemoRunConfiguration *mrc =
|
||||
qobject_cast<MaemoRunConfiguration *> (target->activeRunConfiguration());
|
||||
if (mrc) {
|
||||
const MaemoDeviceConfig &config = mrc->deviceConfig();
|
||||
if (config.isValid() && config.type == MaemoDeviceConfig::Simulator)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
if (!mrc)
|
||||
return false;
|
||||
Qt4BuildConfiguration *bc
|
||||
= qobject_cast<Qt4BuildConfiguration *>(target->activeBuildConfiguration());
|
||||
if (!bc)
|
||||
return false;
|
||||
QtVersion *version = bc->qtVersion();
|
||||
if (!version || !m_runtimes.contains(version->uniqueId()))
|
||||
return false;
|
||||
|
||||
if (qtVersion)
|
||||
*qtVersion = version;
|
||||
const MaemoDeviceConfig &config = mrc->deviceConfig();
|
||||
return config.isValid() && config.type == MaemoDeviceConfig::Simulator;
|
||||
}
|
||||
|
||||
QString QemuRuntimeManager::maddeRoot(const QString &qmake) const
|
||||
|
||||
Reference in New Issue
Block a user