diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp index 95853429644f8662f6eb2b0dbeaeca3f311b02e3..8955c546f57cfacd626178f822b84ca52e0f088a 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp @@ -147,7 +147,7 @@ MaemoRunConfiguration::MaemoRunConfiguration(Qt4Project *project, , m_cachedSimulatorInformationValid(false) , qemu(0) { - ctor(); + init(); } MaemoRunConfiguration::MaemoRunConfiguration(Qt4Project *project, @@ -160,6 +160,9 @@ MaemoRunConfiguration::MaemoRunConfiguration(Qt4Project *project, , m_simulatorArgs(source->m_simulatorArgs) , m_simulatorPath(source->m_simulatorPath) , m_visibleSimulatorParameter(source->m_visibleSimulatorParameter) + , m_simulatorLibPath(source->m_simulatorLibPath) + , m_simulatorSshPort(source->m_simulatorSshPort) + , m_simulatorGdbServerPort(source->m_simulatorGdbServerPort) , m_cachedSimulatorInformationValid(false) , m_isUserSetSimulator(source->m_isUserSetSimulator) , m_userSimulatorPath(source->m_userSimulatorPath) @@ -174,10 +177,10 @@ MaemoRunConfiguration::MaemoRunConfiguration(Qt4Project *project, , m_remoteHostRequiresPassword(source->m_remoteHostRequiresPassword) #endif { - ctor(); + init(); } -void MaemoRunConfiguration::ctor() +void MaemoRunConfiguration::init() { if (!m_proFilePath.isEmpty()) { setDisplayName(tr("%1 on Maemo device").arg(QFileInfo(m_proFilePath) @@ -537,8 +540,15 @@ void MaemoRunConfiguration::updateSimulatorInformation() line.mid(index + 1).remove(QLatin1Char('\''))); } - m_simulator = map.value(QLatin1String("runcommand")); - m_simulatorArgs = map.value(QLatin1String("runcommand_args")); + m_simulator = map.value(QLatin1String("qemu")); + m_simulatorArgs = map.value(QLatin1String("qemu_args")); + const QString &libPathSpec + = map.value(QLatin1String("libpath")); + m_simulatorLibPath + = libPathSpec.mid(libPathSpec.indexOf(QLatin1Char('=')) + 1); + m_simulatorSshPort = map.value(QLatin1String("sshport")); + m_simulatorGdbServerPort + = map.value(QLatin1String("redirport2")); m_visibleSimulatorParameter = m_simulator #ifdef Q_OS_WIN @@ -571,23 +581,27 @@ void MaemoRunConfiguration::startStopQemu() if (root.isEmpty() || simulator().isEmpty()) return; + QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); +#ifdef Q_OS_WIN const QLatin1Char colon(';'); const QString path = QDir::toNativeSeparators(root + QLatin1Char('/')); - - QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); - env.insert("PATH", env.value("Path") + colon + path + QLatin1String("bin")); - env.insert("PATH", env.value("Path") + colon + path + QLatin1String("madlib")); - + const QLatin1String key("PATH"); + env.insert(key, env.value(key) % colon % path % QLatin1String("bin")); + env.insert(key, env.value(key) % colon % path % QLatin1String("madlib")); +#elif defined(Q_OS_UNIX) + const QLatin1String key("LD_LIBRARY_PATH"); + env.insert(key, env.value(key) % QLatin1Char(':') % m_simulatorLibPath); +#endif qemu->setProcessEnvironment(env); qemu->setWorkingDirectory(simulatorPath()); - QString app = root + QLatin1String("/madlib/") + simulator() + const QString app = root % QLatin1String("/madlib/") % simulator() #ifdef Q_OS_WIN - + QLatin1String(".exe") + % QLatin1String(".exe") #endif ; // keep - qemu->start(app + QLatin1Char(' ') + simulatorArgs(), QIODevice::ReadWrite); + qemu->start(app % QLatin1Char(' ') % simulatorArgs(), QIODevice::ReadWrite); emit qemuProcessStatus(qemu->waitForStarted()); } diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h index 1da3fb24d4ae37ae773c0cfab5984f7d78e63064..102b2c7b6de1961950c0b683a141d5d8f5a7086f 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h +++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h @@ -96,6 +96,8 @@ public: QString simulator() const; QString simulatorArgs() const; QString simulatorPath() const; + QString simulatorSshPort() const { return m_simulatorSshPort; } + QString simulatorGdbServerPort() const { return m_simulatorGdbServerPort; } QString visibleSimulatorParameter() const; const QString sshCmd() const; @@ -142,7 +144,7 @@ private slots: void enabledStateChanged(); private: - void ctor(); + void init(); void updateTarget(); void updateSimulatorInformation(); const QString cmd(const QString &cmdName) const; @@ -157,6 +159,9 @@ private: QString m_simulatorArgs; QString m_simulatorPath; QString m_visibleSimulatorParameter; + QString m_simulatorLibPath; + QString m_simulatorSshPort; + QString m_simulatorGdbServerPort; bool m_cachedSimulatorInformationValid; bool m_isUserSetSimulator; diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp index 92c9f7e82d1e5b21ff6826a904c45ee5dcf43d17..bdd1b60da65ba7c0caa7a23d3362db08e9937beb 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp @@ -69,6 +69,7 @@ MaemoRunConfigurationWidget::MaemoRunConfigurationWidget( QHBoxLayout *devConfLayout = new QHBoxLayout(devConfWidget); m_devConfBox = new QComboBox; m_devConfBox->setSizeAdjustPolicy(QComboBox::AdjustToContents); + devConfLayout->setMargin(0); devConfLayout->addWidget(m_devConfBox); QLabel *addDevConfLabel = new QLabel(tr("<a href=\"#\">Manage device configurations</a>")); diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.cpp index 4f943788cb45bbacab48286094e96f9a11384638..2351d6611d5aae1b6936f3a6ba4b0dbd6185306e 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.cpp @@ -244,7 +244,9 @@ const QString AbstractMaemoRunControl::executableOnHost() const const QString AbstractMaemoRunControl::sshPort() const { - return QString::number(devConfig.sshPort); + return devConfig.type == MaemoDeviceConfig::Physical + ? QString::number(devConfig.sshPort) + : runConfig->simulatorSshPort(); } const QString AbstractMaemoRunControl::executableFileName() const @@ -476,8 +478,7 @@ MaemoDebugRunControl::MaemoDebugRunControl(RunConfiguration *runConfiguration) startParams->startMode = Debugger::StartRemote; startParams->executable = executableOnHost(); startParams->remoteChannel - = devConfig.host % QLatin1Char(':') - % QString::number(devConfig.gdbServerPort); + = devConfig.host % QLatin1Char(':') % gdbServerPort(); startParams->remoteArchitecture = QLatin1String("arm"); startParams->sysRoot = runConfig->sysRoot(); startParams->toolChainType = ToolChain::GCC_MAEMO; @@ -518,7 +519,7 @@ void MaemoDebugRunControl::handleDeploymentFinished(bool success) void MaemoDebugRunControl::startGdbServer() { const QString remoteCall(QString::fromLocal8Bit("%1 gdbserver :%2 %3 %4"). - arg(targetCmdLinePrefix()).arg(devConfig.gdbServerPort) + arg(targetCmdLinePrefix()).arg(gdbServerPort()) .arg(executableOnTarget()).arg(runConfig->arguments().join(" "))); inferiorPid = -1; #ifdef USE_SSH_LIB @@ -671,5 +672,12 @@ void MaemoDebugRunControl::debuggerOutput(const QString &output) emit addToOutputWindowInline(this, output); } +QString MaemoDebugRunControl::gdbServerPort() const +{ + return devConfig.type == MaemoDeviceConfig::Physical + ? QString::number(devConfig.gdbServerPort) + : runConfig->simulatorGdbServerPort(); +} + } // namespace Internal } // namespace Qt4ProjectManager diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.h b/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.h index f8e967da418a30e3fa8ed5a59eb31757a8d79049..5cef957ea39fa1f0d80480ec9d0a653e45c4d067 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.h +++ b/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.h @@ -172,6 +172,7 @@ private slots: private: virtual void handleDeploymentFinished(bool success); + QString gdbServerPort() const; void startGdbServer(); void gdbServerStartFailed(const QString &reason); void startDebugging(); diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemosettingspage.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemosettingspage.cpp index 8baaf23e1c84ca19b1aff8567959f4dfdad12b19..47f703299ce89daed43d05945eb012a9ec910e82 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemosettingspage.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemosettingspage.cpp @@ -355,6 +355,19 @@ void MaemoSettingsWidget::deviceTypeChanged() m_ui->deviceButton->isChecked() ? MaemoDeviceConfig::Physical : MaemoDeviceConfig::Simulator; + + // Port values for the simulator are specified by Qemu's + // "information" file, to which we have no access here, + // so we hard-code the last known values. + if (currentConfig().type == MaemoDeviceConfig::Simulator) { + currentConfig().sshPort = 6666; + currentConfig().gdbServerPort = 13219; + m_ui->sshPortLineEdit->setReadOnly(true); + m_ui->gdbServerPortLineEdit->setReadOnly(true); + } else { + m_ui->sshPortLineEdit->setReadOnly(false); + m_ui->gdbServerPortLineEdit->setReadOnly(false); + } } void MaemoSettingsWidget::authenticationTypeChanged() @@ -452,7 +465,6 @@ void MaemoSettingsWidget::processSshOutput(const QString &data) void MaemoSettingsWidget::handleTestThreadFinished() { #ifdef USE_SSH_LIB - qDebug("================> %s", Q_FUNC_INFO); if (!m_deviceTester) return; @@ -460,6 +472,8 @@ void MaemoSettingsWidget::handleTestThreadFinished() if (m_deviceTester->hasError()) { output = tr("Device configuration test failed:\n"); output.append(m_deviceTester->error()); + if (currentConfig().type == MaemoDeviceConfig::Simulator) + output.append(tr("\nDid you start Qemu?")); } else { output = parseTestOutput(); }