Files
qt-creator/src/plugins/qt4projectmanager/qt-s60/s60createpackageparser.cpp
Pawel Polanski 6357afcbb3 User is now informed in a proper way if the smartinstaller package is not found (SymbianOS)
Task-number: QTCREATORBUG-3176
Reviewed-by: Tobias Hunger
2010-11-25 11:52:29 +01:00

131 lines
5.0 KiB
C++

/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
**
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** Commercial Usage
**
** Licensees holding valid Qt Commercial licenses may use this file in
** accordance with the Qt Commercial License Agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Nokia.
**
** GNU Lesser General Public License Usage
**
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** If you are unsure which license is appropriate for your use, please
** contact the sales department at http://qt.nokia.com/contact.
**
**************************************************************************/
#include "s60createpackageparser.h"
#include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/taskwindow.h>
#include <QDebug>
using namespace Qt4ProjectManager::Internal;
S60CreatePackageParser::S60CreatePackageParser(const QString &packageName) :
m_packageName(packageName),
m_needPassphrase(false)
{
setObjectName(QLatin1String("S60CreatePackageParser"));
m_signSis.setPattern("^\\s*(error\\s?:\\s?)+(.+)$");
m_signSis.setMinimal(true);
m_signSis.setCaseSensitivity(Qt::CaseInsensitive);
}
bool S60CreatePackageParser::parseLine(const QString &line)
{
if (line.startsWith("Patching: ")) {
m_patchingLines.append(line.mid(10).trimmed());
return true;
}
if (!m_patchingLines.isEmpty()) {
emit packageWasPatched(m_packageName, m_patchingLines);
QString lines = m_patchingLines.join("\n");
m_patchingLines.clear();
//: %1 package name, %2 will be replaced by a list of patching lines.
QString message = tr("The binary package '%1' was patched to be installable after being self-signed!\n%2\n"
"Use a developer certificate or any other signing option to prevent "
"this patching from happening.").
arg(m_packageName, lines);
ProjectExplorer::Task task(ProjectExplorer::Task::Warning, message, QString(), -1,
ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM);
QTextLayout::FormatRange fr;
fr.start = message.indexOf(lines);
fr.length = lines.length();
fr.format.setFontItalic(true);
task.formats.append(fr);
emit addTask(task);
}
if (m_signSis.indexIn(line) > -1) {
QString errorMessage(m_signSis.cap(2));
if (errorMessage.contains(QLatin1String("bad password"))
|| errorMessage.contains(QLatin1String("bad decrypt")))
m_needPassphrase = true;
else if (errorMessage.contains(QLatin1String("Cannot open file"))
&& errorMessage.contains(QLatin1String("smartinstaller")))
emit addTask(ProjectExplorer::Task(ProjectExplorer::Task::Error,
tr("Cannot create Smart Installer package "
"as the Smart Installer's base file is missing. "
"Please ensure that it is located in the SDK."),
QString(), -1,
ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM));
else
emit addTask(ProjectExplorer::Task(ProjectExplorer::Task::Error, errorMessage, QString(), -1,
ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM));
return true;
}
return false;
}
void S60CreatePackageParser::stdOutput(const QString &line)
{
if (!parseLine(line))
IOutputParser::stdOutput(line);
}
void S60CreatePackageParser::stdError(const QString &line)
{
if (!parseLine(line))
IOutputParser::stdError(line);
}
bool S60CreatePackageParser::needPassphrase() const
{
return m_needPassphrase;
}
/* STDOUT:
make[1]: Entering directory `C:/temp/test/untitled131'
createpackage.bat -g untitled131_template.pkg RELEASE-armv5
Auto-patching capabilities for self signed package.
Patching package file and relevant binaries...
Patching: Removed dependency to qt.sis (0x2001E61C) to avoid installation issues in case qt.sis is also patched.
NOTE: A patched package may not work as expected due to reduced capabilities and other modifications,
so it should not be used for any kind of Symbian signing or distribution!
Use a proper certificate to avoid the need to patch the package.
Processing untitled131_release-armv5.pkg...
*/