diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp index aa96e574c8e6c0ac8fab6e48eb481bc9833f6fa3..536917c7d19efa675a79de5397d77f07b6af729c 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp @@ -371,12 +371,6 @@ QString S60DeviceRunConfiguration::localExecutableFileName() const return QDir::toNativeSeparators(localExecutable); } -QString S60DeviceRunConfiguration::unsignedPackage() const -{ - const_cast<S60DeviceRunConfiguration *>(this)->updateTarget(); - return QDir::toNativeSeparators(m_baseFileName + QLatin1String("_unsigned.sis")); -} - QString S60DeviceRunConfiguration::signedPackage() const { const_cast<S60DeviceRunConfiguration *>(this)->updateTarget(); @@ -541,7 +535,6 @@ S60DeviceRunControlBase::S60DeviceRunControlBase(RunConfiguration *runConfigurat RunControl(runConfiguration), m_toolChain(ProjectExplorer::ToolChain::INVALID), m_makesisProcess(new QProcess(this)), - m_signsisProcess(0), m_releaseDeviceAfterLauncherFinish(false), m_handleDeviceRemoval(true), m_launcher(0) @@ -559,8 +552,7 @@ S60DeviceRunControlBase::S60DeviceRunControlBase(RunConfiguration *runConfigurat this, SLOT(makesisProcessFinished())); S60DeviceRunConfiguration *s60runConfig = qobject_cast<S60DeviceRunConfiguration *>(runConfiguration); - - Qt4BuildConfiguration *activeBuildConf = s60runConfig->qt4Target()->activeBuildConfiguration(); + const Qt4BuildConfiguration *activeBuildConf = s60runConfig->qt4Target()->activeBuildConfiguration(); QTC_ASSERT(s60runConfig, return); m_toolChain = s60runConfig->toolChainType(); @@ -568,12 +560,8 @@ S60DeviceRunControlBase::S60DeviceRunControlBase(RunConfiguration *runConfigurat m_serialPortFriendlyName = SymbianUtils::SymbianDeviceManager::instance()->friendlyNameForPort(m_serialPortName); m_targetName = s60runConfig->targetName(); m_baseFileName = s60runConfig->basePackageFilePath(); - m_unsignedPackage = s60runConfig->unsignedPackage(); m_signedPackage = s60runConfig->signedPackage(); m_commandLineArguments = s60runConfig->commandLineArguments(); - m_symbianPlatform = s60runConfig->symbianPlatform(); - m_symbianTarget = s60runConfig->symbianTarget(); - m_packageTemplateFile = s60runConfig->packageTemplateFileName(); m_workingDirectory = QFileInfo(m_baseFileName).absolutePath(); m_qtDir = activeBuildConf->qtVersion()->versionInfo().value("QT_INSTALL_DATA"); m_useCustomSignature = (s60runConfig->signingMode() == S60DeviceRunConfiguration::SignCustom); @@ -583,35 +571,14 @@ S60DeviceRunControlBase::S60DeviceRunControlBase(RunConfiguration *runConfigurat m_qtBinPath = qtv->versionInfo().value(QLatin1String("QT_INSTALL_BINS")); QTC_ASSERT(!m_qtBinPath.isEmpty(), return); const S60Devices::Device device = S60Manager::instance()->deviceForQtVersion(activeBuildConf->qtVersion()); - switch (m_toolChain) { - case ProjectExplorer::ToolChain::GCCE_GNUPOC: - case ProjectExplorer::ToolChain::RVCT_ARMV5_GNUPOC: { - // 'sis' is a make target here. Set up with correct environment - // Also add $QTDIR/bin, since it needs to find 'createpackage'. - ProjectExplorer::ToolChain *toolchain = activeBuildConf->toolChain(); - m_makesisTool = toolchain->makeCommand(); - m_toolsDirectory = device.epocRoot + QLatin1String("/epoc32/tools"); - ProjectExplorer::Environment env = ProjectExplorer::Environment::systemEnvironment(); - toolchain->addToEnvironment(env); - env.prependOrSetPath(m_qtBinPath); - m_makesisProcess->setEnvironment(env.toStringList()); - } - break; - default: - m_toolsDirectory = device.toolsRoot + QLatin1String("/epoc32/tools"); - m_makesisTool = m_toolsDirectory + "/makesis.exe"; - // Set up signing packages - m_signsisProcess = new QProcess(this); - connect(m_signsisProcess, SIGNAL(readyReadStandardError()), - this, SLOT(readStandardError())); - connect(m_signsisProcess, SIGNAL(readyReadStandardOutput()), - this, SLOT(readStandardOutput())); - connect(m_signsisProcess, SIGNAL(error(QProcess::ProcessError)), - this, SLOT(signsisProcessFailed())); - connect(m_signsisProcess, SIGNAL(finished(int,QProcess::ExitStatus)), - this, SLOT(signsisProcessFinished())); - break; - } + // 'sis' is a make target. Set up with correct environment + // Also add $QTDIR/bin, since it needs to find 'createpackage'. + ProjectExplorer::ToolChain *toolchain = activeBuildConf->toolChain(); + m_makeTool = toolchain->makeCommand(); + ProjectExplorer::Environment env = ProjectExplorer::Environment::systemEnvironment(); + toolchain->addToEnvironment(env); + env.prependOrSetPath(m_qtBinPath); + m_makesisProcess->setEnvironment(env.toStringList()); m_executableFileName = s60runConfig->localExecutableFileName(); m_packageFilePath = s60runConfig->packageFileName(); m_packageFile = QFileInfo(m_packageFilePath).fileName(); @@ -633,6 +600,20 @@ void S60DeviceRunControlBase::setReleaseDeviceAfterLauncherFinish(bool v) m_releaseDeviceAfterLauncherFinish = v; } +QString S60DeviceRunControlBase::signSisKey() const +{ + const QString key = m_useCustomSignature ? m_customKeyPath: + m_qtDir + QLatin1String("/src/s60installs/selfsigned.key"); + return QDir::toNativeSeparators(key); +} + +QString S60DeviceRunControlBase::signSisCertificate() const +{ + const QString cert = m_useCustomSignature ? m_customSignaturePath : + m_qtDir + QLatin1String("/src/s60installs/selfsigned.cer"); + return QDir::toNativeSeparators(cert); +} + // Format a message with command line static inline QString msgRun(const QString &cmd, const QStringList &args) { @@ -672,29 +653,15 @@ void S60DeviceRunControlBase::start() } QStringList makeSisArgs; - switch (m_toolChain) { - case ProjectExplorer::ToolChain::GCCE_GNUPOC: - case ProjectExplorer::ToolChain::RVCT_ARMV5_GNUPOC: - makeSisArgs << QLatin1String("sis") - << QLatin1String("QT_SIS_OPTIONS=-i") - << (QLatin1String("QT_SIS_CERTIFICATE=") + signSisCertificate()) - << (QLatin1String("QT_SIS_KEY=") + signSisKey()); - break; - default: - // ABLD: Create from template, replacing paths - if (!createPackageFileFromTemplate(&errorMessage)) { - error(this, errorMessage); - emit finished(); - return; - } - makeSisArgs.push_back(m_packageFile); - break; - } + makeSisArgs << QLatin1String("sis") + << (QLatin1String("QT_SIS_CERTIFICATE=") + signSisCertificate()) + << (QLatin1String("QT_SIS_KEY=") + signSisKey()); m_makesisProcess->setWorkingDirectory(m_workingDirectory); - emit addToOutputWindow(this, msgRun(m_makesisTool, makeSisArgs)); + emit addToOutputWindow(this, msgRun(m_makeTool, makeSisArgs)); if (debug) - qDebug() << m_makesisTool << makeSisArgs << m_workingDirectory; - m_makesisProcess->start(m_makesisTool, makeSisArgs, QIODevice::ReadOnly); + qDebug() << m_makeTool << makeSisArgs << m_workingDirectory; + m_makesisProcess->start(m_makeTool, makeSisArgs, QIODevice::ReadOnly); + m_makesisProcess->closeWriteChannel(); } static inline void stopProcess(QProcess *p) @@ -712,8 +679,6 @@ void S60DeviceRunControlBase::stop() { if (m_makesisProcess) stopProcess(m_makesisProcess); - if (m_signsisProcess) - stopProcess(m_signsisProcess); if (m_launcher) m_launcher->terminate(); } @@ -737,35 +702,9 @@ void S60DeviceRunControlBase::readStandardOutput() emit addToOutputWindowInline(this, QString::fromLocal8Bit(data.constData(), data.length())); } -// ABLD: Create "foo_<platform>_<target>.pkg" and replace variables for the target -// path pointing into the EPOC directories. -bool S60DeviceRunControlBase::createPackageFileFromTemplate(QString *errorMessage) -{ - if (debug) - qDebug() << "Creating package file" << m_packageFilePath << " from " << m_packageTemplateFile - << m_symbianPlatform << m_symbianTarget; - QFile packageTemplate(m_packageTemplateFile); - if (!packageTemplate.open(QIODevice::ReadOnly|QIODevice::Text)) { - *errorMessage = tr("Could not read template package file '%1'").arg(QDir::toNativeSeparators(m_packageTemplateFile)); - return false; - } - QString contents = QString::fromLocal8Bit(packageTemplate.readAll()); - packageTemplate.close(); - contents.replace(QLatin1String("$(PLATFORM)"), m_symbianPlatform); - contents.replace(QLatin1String("$(TARGET)"), m_symbianTarget); - QFile packageFile(m_packageFilePath); - if (!packageFile.open(QIODevice::WriteOnly|QIODevice::Text)) { - *errorMessage = tr("Could not write package file '%1'").arg(QDir::toNativeSeparators(m_packageFilePath)); - return false; - } - packageFile.write(contents.toLocal8Bit()); - packageFile.close(); - return true; -} - void S60DeviceRunControlBase::makesisProcessFailed() { - processFailed(m_makesisTool, m_makesisProcess->error()); + processFailed(m_makeTool, m_makesisProcess->error()); } static inline bool renameFile(const QString &sourceName, const QString &targetName, @@ -805,72 +744,24 @@ void S60DeviceRunControlBase::makesisProcessFinished() // 'targetname_armX_udeb.sis'. const QString oldName = m_workingDirectory + QLatin1Char('/') + m_targetName + QLatin1String(".sis"); ok = renameFile(oldName, m_signedPackage, &errorMessage); - if (ok) - startDeployment(); } break; default: - // makesis.exe derives the sis file name from the '.pkg'-file, - // it thus needs to renamed to '_unsigned.sis'. - ok = renameFile(m_signedPackage, m_unsignedPackage, &errorMessage); - if (ok) - startSigning(); + // ABLD: Check on file 'targetname_armX_udeb.sis'. + ok = QFileInfo(m_signedPackage).isFile(); + if (!ok) + errorMessage = tr("Failed to create '%1'").arg(m_signedPackage); break; } - if (!ok) { + if (ok) { + startDeployment(); + } else { error(this, errorMessage); stop(); emit finished(); } } -QString S60DeviceRunControlBase::signSisKey() const -{ - const QString key = m_useCustomSignature ? m_customKeyPath: - m_qtDir + QLatin1String("/src/s60installs/selfsigned.key"); - return QDir::toNativeSeparators(key); -} - -QString S60DeviceRunControlBase::signSisCertificate() const -{ - const QString cert = m_useCustomSignature ? m_customSignaturePath : - m_qtDir + QLatin1String("/src/s60installs/selfsigned.cer"); - return QDir::toNativeSeparators(cert); -} - -void S60DeviceRunControlBase::startSigning() -{ - // Signis creates a signed package ('.sis') from an 'unsigned.sis' - // using certificate and key. - QString signsisTool = m_toolsDirectory + QLatin1String("/signsis"); -#ifdef Q_OS_WIN - signsisTool += QLatin1String(".exe"); -#endif - QStringList arguments; - arguments << m_unsignedPackage << m_signedPackage << signSisCertificate() << signSisKey(); - m_signsisProcess->setWorkingDirectory(m_workingDirectory); - emit addToOutputWindow(this, msgRun(signsisTool, arguments)); - m_signsisProcess->start(signsisTool, arguments, QIODevice::ReadOnly); -} - -void S60DeviceRunControlBase::signsisProcessFailed() -{ - processFailed("signsis.exe", m_signsisProcess->error()); -} - -void S60DeviceRunControlBase::signsisProcessFinished() -{ - if (m_signsisProcess->exitCode() != 0) { - error(this, tr("An error occurred while creating the package.")); - stop(); - emit finished(); - } else { - m_deployProgress->setProgressValue(PROGRESS_PACKAGESIGNED); - startDeployment(); - } -} - - void S60DeviceRunControlBase::startDeployment() { QString errorMessage; diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h index 3d9aa7cdf723c5c0425c773323b2dee1dc766ebe..d9429f87861bf219b20ee3d2b4f60f497af8bf69 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h +++ b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h @@ -95,7 +95,6 @@ public: QString packageFileName() const; QString localExecutableFileName() const; - QString unsignedPackage() const; QString signedPackage() const; const QtVersion *qtVersion() const; @@ -195,8 +194,6 @@ private slots: void readStandardOutput(); void makesisProcessFailed(); void makesisProcessFinished(); - void signsisProcessFailed(); - void signsisProcessFinished(); void printConnectFailed(const QString &errorMessage); void printCopyingNotice(); void printCreateFileFailed(const QString &filename, const QString &errorMessage); @@ -212,8 +209,6 @@ private slots: void reportDeployFinished(); private: - bool createPackageFileFromTemplate(QString *errorMessage); - void startSigning(); void startDeployment(); QString signSisKey() const; QString signSisCertificate() const; @@ -224,22 +219,16 @@ private: QString m_targetName; QString m_baseFileName; QStringList m_commandLineArguments; - QString m_symbianPlatform; - QString m_symbianTarget; - QString m_packageTemplateFile; QString m_packageFilePath; QString m_workingDirectory; - QString m_toolsDirectory; QString m_executableFileName; QString m_qtDir; - QString m_unsignedPackage; QString m_signedPackage; bool m_useCustomSignature; QString m_customSignaturePath; QString m_customKeyPath; QProcess *m_makesisProcess; - QProcess *m_signsisProcess; - QString m_makesisTool; + QString m_makeTool; QString m_packageFile; QString m_qtBinPath; bool m_releaseDeviceAfterLauncherFinish; diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devices.cpp b/src/plugins/qt4projectmanager/qt-s60/s60devices.cpp index 1f9cb0df25e4e48f3dac596fd32d17e1613a91f4..7b6441ca29ac967f351df7f8ce360ee4aa96b7db 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60devices.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/s60devices.cpp @@ -411,8 +411,7 @@ void S60ToolChainMixin::addEpocToEnvironment(ProjectExplorer::Environment *env) QString sbsHome(env->value(QLatin1String("SBS_HOME"))); // Do we use Raptor/SBSv2? if (!sbsHome.isEmpty()) env->prependOrSetPath(sbsHome + QDir::separator() + QLatin1String("bin")); - - env->set(QLatin1String("EPOCDEVICE"), m_device.id + QLatin1Char(':') + m_device.name); + // No longer set EPOCDEVICE as it conflicts with packaging env->set(QLatin1String("EPOCROOT"), QDir::toNativeSeparators(epocRootPath)); }