summaryrefslogtreecommitdiff
path: root/src/plugins/madde/debianmanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/madde/debianmanager.cpp')
-rw-r--r--src/plugins/madde/debianmanager.cpp729
1 files changed, 0 insertions, 729 deletions
diff --git a/src/plugins/madde/debianmanager.cpp b/src/plugins/madde/debianmanager.cpp
deleted file mode 100644
index c0573c925d..0000000000
--- a/src/plugins/madde/debianmanager.cpp
+++ /dev/null
@@ -1,729 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia. For licensing terms and
-** conditions see http://qt.digia.com/licensing. For further information
-** use the contact form at http://qt.digia.com/contact-us.
-**
-** 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.
-**
-** In addition, as a special exception, Digia gives you certain additional
-** rights. These rights are described in the Digia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-****************************************************************************/
-
-#include "debianmanager.h"
-
-#include "maddedevice.h"
-#include "maemoconstants.h"
-#include "maemoglobal.h"
-#include "maemopackagecreationstep.h"
-
-#include <coreplugin/documentmanager.h>
-#include <projectexplorer/project.h>
-#include <projectexplorer/target.h>
-#include <qt4projectmanager/qt4buildconfiguration.h>
-#include <qtsupport/qtkitinformation.h>
-#include <utils/filesystemwatcher.h>
-#include <utils/qtcassert.h>
-
-#include <QBuffer>
-#include <QByteArray>
-#include <QDateTime>
-#include <QDir>
-#include <QProcess>
-
-#include <QMessageBox>
-
-#include <ctype.h>
-
-// -----------------------------------------------------------------------
-// Helpers:
-// -----------------------------------------------------------------------
-
-namespace {
-
-const char IconFieldName[] = "XB-Maemo-Icon-26";
-const char NameFieldName[] = "Package";
-const char ShortDescriptionFieldName[] = "Description";
-
-const char PackagingDirName[] = "qtc_packaging";
-
-// The QDateTime API can only deliver these in localized form...
-QString shortMonthName(const QDateTime &dt)
-{
- switch (dt.date().month()) {
- case 1: return QLatin1String("Jan");
- case 2: return QLatin1String("Feb");
- case 3: return QLatin1String("Mar");
- case 4: return QLatin1String("Apr");
- case 5: return QLatin1String("May");
- case 6: return QLatin1String("Jun");
- case 7: return QLatin1String("Jul");
- case 8: return QLatin1String("Aug");
- case 9: return QLatin1String("Sep");
- case 10: return QLatin1String("Oct");
- case 11: return QLatin1String("Nov");
- case 12: return QLatin1String("Dec");
- default: QTC_ASSERT(false, return QString());
- }
-}
-
-QString shortDayOfWeekName(const QDateTime &dt)
-{
- switch (dt.date().dayOfWeek()) {
- case Qt::Monday: return QLatin1String("Mon");
- case Qt::Tuesday: return QLatin1String("Tue");
- case Qt::Wednesday: return QLatin1String("Wed");
- case Qt::Thursday: return QLatin1String("Thu");
- case Qt::Friday: return QLatin1String("Fri");
- case Qt::Saturday: return QLatin1String("Sat");
- case Qt::Sunday: return QLatin1String("Sun");
- default: QTC_ASSERT(false, return QString());
- }
-}
-
-QByteArray packageManagerNameFieldName(Core::Id deviceType)
-{
- if (deviceType == Madde::Internal::Maemo5OsType)
- return QByteArray("XB-Maemo-Display-Name");
- return QByteArray("XSBC-Maemo-Display-Name");
-}
-
-QList<QPair<QByteArray, QByteArray> > additionalFields(Core::Id deviceType, const QString &projectName)
-{
- QList<QPair<QByteArray, QByteArray> > fields;
- if (deviceType == Madde::Internal::HarmattanOsType)
- fields << qMakePair(QByteArray("XB-Maemo-Flags"), QByteArray("visible"))
- << qMakePair(QByteArray("XB-MeeGo-Desktop-Entry-Filename"),
- QString::fromLatin1("%1_harmattan").arg(projectName).toUtf8())
- << qMakePair(QByteArray("XB-MeeGo-Desktop-Entry"),
- QString::fromLatin1("\n [Desktop Entry]\n Type=Application\n Name=%1\n Icon=/usr/share/icons/hicolor/80x80/apps/%1%2.png")
- .arg(projectName).arg(80).toUtf8());
- return fields;
-}
-
-QByteArray section(Core::Id deviceType)
-{
- if (deviceType == Madde::Internal::Maemo5OsType)
- return "user/hidden";
- if (deviceType == Madde::Internal::HarmattanOsType)
- return "user/other";
- return QByteArray();
-}
-
-void raiseError(const QString &reason)
-{
- QMessageBox::critical(0, Madde::Internal::DebianManager::tr("Error Creating Debian Project Templates"), reason);
-}
-
-QString defaultPackageFileName(ProjectExplorer::Project *project)
-{
- QString packageName = project->displayName().toLower();
-
- // We also replace dots later, because OVI store chokes on them (for the N900).
- QRegExp illegalLetter(QLatin1String("[^a-z0-9+-]"), Qt::CaseSensitive, QRegExp::WildcardUnix);
-
- return packageName.replace(illegalLetter, QLatin1String("-"));
-}
-
-bool adaptTagValue(QByteArray &document, const QByteArray &fieldName,
- const QByteArray &newFieldValue, bool caseSensitive)
-{
- QByteArray adaptedLine = fieldName + ": " + newFieldValue;
- const QByteArray completeTag = fieldName + ':';
- const int lineOffset = caseSensitive ? document.indexOf(completeTag)
- : document.toLower().indexOf(completeTag.toLower());
- if (lineOffset == -1) {
- document.append(adaptedLine).append('\n');
- return true;
- }
-
- int newlineOffset = document.indexOf('\n', lineOffset);
- bool updated = false;
- if (newlineOffset == -1) {
- newlineOffset = document.length();
- adaptedLine += '\n';
- updated = true;
- }
- const int replaceCount = newlineOffset - lineOffset;
- if (!updated && document.mid(lineOffset, replaceCount) != adaptedLine)
- updated = true;
- if (updated)
- document.replace(lineOffset, replaceCount, adaptedLine);
- return updated;
-}
-
-QByteArray controlFileFieldValue(const Utils::FileName &control, const QString &key, bool multiLine)
-{
- QByteArray value;
- Utils::FileReader reader;
- if (!reader.fetch(control.toString()))
- return value;
- const QByteArray &contents = reader.data();
- const int keyPos = contents.indexOf(key.toUtf8() + ':');
- if (keyPos == -1)
- return value;
- int valueStartPos = keyPos + key.length() + 1;
- int valueEndPos = contents.indexOf('\n', keyPos);
- if (valueEndPos == -1)
- valueEndPos = contents.count();
- value = contents.mid(valueStartPos, valueEndPos - valueStartPos).trimmed();
- if (multiLine) {
- Q_FOREVER {
- valueStartPos = valueEndPos + 1;
- if (valueStartPos >= contents.count())
- break;
- const char firstChar = contents.at(valueStartPos);
- if (firstChar == '#' || isspace(firstChar)) {
- valueEndPos = contents.indexOf('\n', valueStartPos);
- if (valueEndPos == -1)
- valueEndPos = contents.count();
- if (firstChar != '#') {
- value += contents.mid(valueStartPos,
- valueEndPos - valueStartPos).trimmed();
- }
- } else {
- break;
- }
- }
- }
- return value;
-}
-
-bool setControlFieldValue(const Utils::FileName &control, const QByteArray &fieldName,
- const QByteArray &fieldValue)
-{
- Utils::FileReader reader;
- if (!reader.fetch(control.toString()))
- return false;
- QByteArray contents = reader.data();
- if (!adaptTagValue(contents, fieldName, fieldValue, true))
- return false;
- Core::FileChangeBlocker update(control.toString());
- Utils::FileSaver saver(control.toString());
- saver.write(contents);
- return saver.finalize();
-}
-
-bool adaptRulesFile(const Utils::FileName &rulesPath)
-{
- Utils::FileReader reader;
- if (!reader.fetch(rulesPath.toString())) {
- raiseError(reader.errorString());
- return false;
- }
- QByteArray rulesContents = reader.data();
- const QByteArray comment("# Uncomment this line for use without Qt Creator");
- rulesContents.replace("DESTDIR", "INSTALL_ROOT");
- rulesContents.replace("dh_shlibdeps", "# dh_shlibdeps " + comment);
- rulesContents.replace("# Add here commands to configure the package.",
- "# qmake PREFIX=/usr" + comment);
- rulesContents.replace("$(MAKE)\n", "# $(MAKE) " + comment + '\n');
-
- // Would be the right solution, but does not work (on Windows),
- // because dpkg-genchanges doesn't know about it (and can't be told).
- // rulesContents.replace("dh_builddeb", "dh_builddeb --destdir=.");
-
- Utils::FileSaver saver(rulesPath.toString());
- saver.write(rulesContents);
- if (!saver.finalize()) {
- raiseError(saver.errorString());
- return false;
- }
- return true;
-}
-
-bool adaptControlFile(const Utils::FileName &controlPath, Qt4ProjectManager::Qt4BuildConfiguration *bc,
- const QByteArray &section, const QByteArray &packageManagerNameField,
- QList<QPair<QByteArray, QByteArray> > additionalFields)
-{
- Utils::FileReader reader;
- if (!reader.fetch(controlPath.toString())) {
- raiseError(reader.errorString());
- return false;
- }
- QByteArray controlContents = reader.data();
-
- adaptTagValue(controlContents, "Section", section, true);
- adaptTagValue(controlContents, "Priority", "optional", true);
- adaptTagValue(controlContents, packageManagerNameField,
- bc->target()->project()->displayName().toUtf8(), true);
- const int buildDependsOffset = controlContents.indexOf("Build-Depends:");
- if (buildDependsOffset == -1) {
- qDebug("Unexpected: no Build-Depends field in debian control file.");
- } else {
- int buildDependsNewlineOffset
- = controlContents.indexOf('\n', buildDependsOffset);
- if (buildDependsNewlineOffset == -1) {
- controlContents += '\n';
- buildDependsNewlineOffset = controlContents.length() - 1;
- }
- controlContents.insert(buildDependsNewlineOffset,
- ", libqt4-dev");
- }
-
- for (int i = 0; i < additionalFields.count(); ++i)
- adaptTagValue(controlContents, additionalFields.at(i).first, additionalFields.at(i).second, true);
-
- Utils::FileSaver saver(controlPath.toString());
- saver.write(controlContents);
- if (!saver.finalize()) {
- raiseError(saver.errorString());
- return false;
- }
- return true;
-}
-
-} // namespace
-
-namespace Madde {
-namespace Internal {
-
-// -----------------------------------------------------------------------
-// DebianManager:
-// -----------------------------------------------------------------------
-
-DebianManager *DebianManager::m_instance = 0;
-
-DebianManager::DebianManager(QObject *parent) :
- QObject(parent),
- m_watcher(new Utils::FileSystemWatcher(this))
-{
- m_instance = this;
-
- m_watcher->setObjectName(QLatin1String("Madde::DebianManager"));
- connect(m_watcher, SIGNAL(directoryChanged(QString)),
- this, SLOT(directoryWasChanged(QString)));
-}
-
-DebianManager::~DebianManager()
-{ }
-
-DebianManager *DebianManager::instance()
-{
- return m_instance;
-}
-
-void DebianManager::monitor(const Utils::FileName &debianDir)
-{
- QFileInfo fi = debianDir.toFileInfo();
- if (!fi.isDir())
- return;
-
- if (!m_watches.contains(debianDir)) {
- m_watches.insert(debianDir, 1);
- m_watcher->addDirectory(debianDir.toString(), Utils::FileSystemWatcher::WatchAllChanges);
-
- WatchableFile *controlFile = new WatchableFile(controlFilePath(debianDir).toString(), this);
- connect(controlFile, SIGNAL(modified()), this, SLOT(controlWasChanged()));
- WatchableFile *changelogFile = new WatchableFile(changelogFilePath(debianDir).toString(), this);
- connect(changelogFile, SIGNAL(modified()), SLOT(changelogWasChanged()));
- Core::DocumentManager::addDocuments(QList<Core::IDocument *>() << controlFile << changelogFile);
- }
-}
-
-bool DebianManager::isMonitoring(const Utils::FileName &debianDir)
-{
- return m_watches.contains(debianDir);
-}
-
-void DebianManager::ignore(const Utils::FileName &debianDir)
-{
- int count = m_watches.value(debianDir, 0) - 1;
- if (count < 0)
- return;
- if (count > 0) {
- m_watches[debianDir] = 0;
- } else {
- m_watches.remove(debianDir);
- m_watcher->removeDirectory(debianDir.toString());
- }
-}
-
-QString DebianManager::projectVersion(const Utils::FileName &debianDir, QString *error)
-{
- Utils::FileName path = changelogFilePath(debianDir);
- QFile changelog(path.toString());
- if (!changelog.open(QIODevice::ReadOnly)) {
- if (error)
- *error = tr("Failed to open debian changelog \"%1\" file for reading.").arg(path.toUserOutput());
- return QString();
- }
-
- const QByteArray &firstLine = changelog.readLine();
- const int openParenPos = firstLine.indexOf('(');
- if (openParenPos == -1) {
- if (error)
- *error = tr("Debian changelog file '%1' has unexpected format.").arg(path.toUserOutput());
- return QString();
- }
- const int closeParenPos = firstLine.indexOf(')', openParenPos);
- if (closeParenPos == -1) {
- if (error)
- *error = tr("Debian changelog file '%1' has unexpected format.").arg(path.toUserOutput());
- return QString();
- }
- return QString::fromUtf8(firstLine.mid(openParenPos + 1, closeParenPos - openParenPos - 1).data());
-}
-
-bool DebianManager::setProjectVersion(const Utils::FileName &debianDir, const QString &version, QString *error)
-{
- const Utils::FileName filePath = changelogFilePath(debianDir);
- Utils::FileReader reader;
- if (!reader.fetch(filePath.toString(), error))
- return false;
- QString content = QString::fromUtf8(reader.data());
- if (content.contains(QLatin1Char('(') + version + QLatin1Char(')'))) {
- if (error)
- *error = tr("Refusing to update changelog file: Already contains version '%1'.").arg(version);
- return false;
- }
-
- int maintainerOffset = content.indexOf(QLatin1String("\n -- "));
- const int eolOffset = content.indexOf(QLatin1Char('\n'), maintainerOffset + 1);
- if (maintainerOffset == -1 || eolOffset == -1) {
- if (error)
- *error = tr("Cannot update changelog: Invalid format (no maintainer entry found).");
- return false;
- }
-
- ++maintainerOffset;
- const QDateTime currentDateTime = QDateTime::currentDateTime();
- QDateTime utcDateTime = QDateTime(currentDateTime);
- utcDateTime.setTimeSpec(Qt::UTC);
- int utcOffsetSeconds = currentDateTime.secsTo(utcDateTime);
- QChar sign;
- if (utcOffsetSeconds < 0) {
- utcOffsetSeconds = -utcOffsetSeconds;
- sign = QLatin1Char('-');
- } else {
- sign = QLatin1Char('+');
- }
- const int utcOffsetMinutes = (utcOffsetSeconds / 60) % 60;
- const int utcOffsetHours = utcOffsetSeconds / 3600;
- const QString dateString = QString::fromLatin1("%1, %2 %3 %4 %5%6%7")
- .arg(shortDayOfWeekName(currentDateTime))
- .arg(currentDateTime.toString(QLatin1String("dd")))
- .arg(shortMonthName(currentDateTime))
- .arg(currentDateTime.toString(QLatin1String("yyyy hh:mm:ss"))).arg(sign)
- .arg(utcOffsetHours, 2, 10, QLatin1Char('0'))
- .arg(utcOffsetMinutes, 2, 10, QLatin1Char('0'));
- const QString maintainerLine = content.mid(maintainerOffset, eolOffset - maintainerOffset + 1)
- .replace(QRegExp(QLatin1String("> [^\\n]*\n")),
- QString::fromLatin1("> %1").arg(dateString));
- QString versionLine = content.left(content.indexOf(QLatin1Char('\n')))
- .replace(QRegExp(QLatin1String("\\([a-zA-Z0-9_\\.]+\\)")),
- QLatin1Char('(') + version + QLatin1Char(')'));
- const QString newEntry = versionLine + QLatin1String("\n * <Add change description here>\n\n")
- + maintainerLine + QLatin1String("\n\n");
- content.prepend(newEntry);
- Core::FileChangeBlocker update(filePath.toString());
- Utils::FileSaver saver(filePath.toString());
- saver.write(content.toUtf8());
- return saver.finalize(error);
-}
-
-QString DebianManager::packageName(const Utils::FileName &debianDir)
-{
- return QString::fromUtf8(controlFileFieldValue(controlFilePath(debianDir), QLatin1String(NameFieldName), false));
-}
-
-bool DebianManager::setPackageName(const Utils::FileName &debianDir, const QString &newName)
-{
- const QString oldPackageName = packageName(debianDir);
-
- Utils::FileName controlPath = controlFilePath(debianDir);
- if (!setControlFieldValue(controlPath, NameFieldName, newName.toUtf8()))
- return false;
- if (!setControlFieldValue(controlPath, "Source", newName.toUtf8()))
- return false;
-
- Utils::FileName changelogPath = changelogFilePath(debianDir);
- Utils::FileReader reader;
- if (!reader.fetch(changelogPath.toString()))
- return false;
- QString changelogContents = QString::fromUtf8(reader.data());
- QRegExp pattern(QLatin1String("[^\\s]+( \\(\\d\\.\\d\\.\\d\\))"));
- changelogContents.replace(pattern, newName + QLatin1String("\\1"));
- Core::FileChangeBlocker updateChangelog(changelogPath.toString());
- Utils::FileSaver saver(changelogPath.toString());
- saver.write(changelogContents.toUtf8());
- if (!saver.finalize())
- return false;
-
- Utils::FileName rulesPath = rulesFilePath(debianDir);
- if (!reader.fetch(rulesPath.toString()))
- return false;
-
- QByteArray rulesContents = reader.data();
- const QString oldString = QLatin1String("debian/") + oldPackageName;
- const QString newString = QLatin1String("debian/") + newName;
- rulesContents.replace(oldString.toUtf8(), newString.toUtf8());
-
- Core::FileChangeBlocker updateRules(rulesPath.toString());
- Utils::FileSaver rulesSaver(rulesPath.toString());
- rulesSaver.write(rulesContents);
- return rulesSaver.finalize();
-}
-
-QString DebianManager::shortDescription(const Utils::FileName &debianDir)
-{
- return QString::fromUtf8(controlFileFieldValue(controlFilePath(debianDir),
- QLatin1String(ShortDescriptionFieldName), false));
-}
-
-bool DebianManager::setShortDescription(const Utils::FileName &debianDir, const QString &description)
-{
- return setControlFieldValue(controlFilePath(debianDir), ShortDescriptionFieldName, description.toUtf8());
-}
-
-QString DebianManager::packageManagerName(const Utils::FileName &debianDir, Core::Id deviceType)
-{
- return QString::fromUtf8(controlFileFieldValue(controlFilePath(debianDir),
- QLatin1String(packageManagerNameFieldName(deviceType)), false));
-}
-
-bool DebianManager::setPackageManagerName(const Utils::FileName &debianDir, Core::Id deviceType, const QString &name)
-{
- return setControlFieldValue(controlFilePath(debianDir), packageManagerNameFieldName(deviceType),
- name.toUtf8());
-}
-
-QIcon DebianManager::packageManagerIcon(const Utils::FileName &debianDir, QString *error)
-{
- const QByteArray &base64Icon
- = controlFileFieldValue(controlFilePath(debianDir), QLatin1String(IconFieldName), true);
- if (base64Icon.isEmpty())
- return QIcon();
- QPixmap pixmap;
- if (!pixmap.loadFromData(QByteArray::fromBase64(base64Icon))) {
- if (error)
- *error = tr("Invalid icon data in Debian control file.");
- return QIcon();
- }
- return QIcon(pixmap);
-}
-
-bool DebianManager::setPackageManagerIcon(const Utils::FileName &debianDir, Core::Id deviceType,
- const Utils::FileName &iconPath, QString *error)
-{
- const Utils::FileName filePath = controlFilePath(debianDir);
- Utils::FileReader reader;
- if (!reader.fetch(filePath.toString(), error))
- return false;
- const QPixmap pixmap(iconPath.toString());
- if (pixmap.isNull()) {
- if (error)
- *error = tr("Could not read image file '%1'.").arg(iconPath.toUserOutput());
- return false;
- }
-
- QByteArray iconAsBase64;
- QBuffer buffer(&iconAsBase64);
- buffer.open(QIODevice::WriteOnly);
- if (!pixmap.scaled(MaddeDevice::packageManagerIconSize(deviceType))
- .save(&buffer, iconPath.toFileInfo().suffix().toLatin1())) {
- if (error)
- *error = tr("Could not export image file '%1'.").arg(iconPath.toUserOutput());
- return false;
- }
- buffer.close();
- iconAsBase64 = iconAsBase64.toBase64();
- QByteArray contents = reader.data();
- const QByteArray iconFieldNameWithColon = QByteArray(IconFieldName) + ':';
- const int iconFieldPos = contents.startsWith(iconFieldNameWithColon)
- ? 0 : contents.indexOf('\n' + iconFieldNameWithColon);
- if (iconFieldPos == -1) {
- if (!contents.endsWith('\n'))
- contents += '\n';
- contents.append(iconFieldNameWithColon).append(' ').append(iconAsBase64)
- .append('\n');
- } else {
- const int oldIconStartPos = (iconFieldPos != 0) + iconFieldPos
- + iconFieldNameWithColon.length();
- int nextEolPos = contents.indexOf('\n', oldIconStartPos);
- while (nextEolPos != -1 && nextEolPos != contents.length() - 1
- && contents.at(nextEolPos + 1) != '\n'
- && (contents.at(nextEolPos + 1) == '#'
- || isspace(contents.at(nextEolPos + 1))))
- nextEolPos = contents.indexOf('\n', nextEolPos + 1);
- if (nextEolPos == -1)
- nextEolPos = contents.length();
- contents.replace(oldIconStartPos, nextEolPos - oldIconStartPos,
- ' ' + iconAsBase64);
- }
- Core::FileChangeBlocker update(filePath.toString());
- Utils::FileSaver saver(filePath.toString());
- saver.write(contents);
- return saver.finalize(error);
-}
-
-bool DebianManager::hasPackageManagerIcon(const Utils::FileName &debianDir)
-{
- return !packageManagerIcon(debianDir).isNull();
-}
-
-Utils::FileName DebianManager::packageFileName(const Utils::FileName &debianDir)
-{
- return Utils::FileName::fromString(packageName(debianDir)
- + QLatin1Char('_') + projectVersion(debianDir)
- + QLatin1String("_armel.deb"));
-}
-
-DebianManager::ActionStatus DebianManager::createTemplate(Qt4ProjectManager::Qt4BuildConfiguration *bc,
- const Utils::FileName &debianDir)
-{
- if (debianDir.toFileInfo().exists())
- return NoActionRequired;
-
- Utils::FileName location = debianDir.parentDir();
- if (!location.toFileInfo().isDir()) {
- if (!QDir::home().mkpath(location.toString())) {
- raiseError(tr("Failed to create directory \"%1\".")
- .arg(location.toUserOutput()));
- return ActionFailed;
- }
- }
-
- QProcess dh_makeProc;
- QString error;
- AbstractMaemoPackageCreationStep::preparePackagingProcess(&dh_makeProc, bc, location.toString());
- const QString packageName = defaultPackageFileName(bc->target()->project());
-
- const QStringList dh_makeArgs =
- QStringList() << QLatin1String("dh_make")
- << QLatin1String("-s") << QLatin1String("-n") << QLatin1String("-p")
- << (packageName + QLatin1Char('_')
- + AbstractMaemoPackageCreationStep::DefaultVersionNumber);
-
- QtSupport::BaseQtVersion *lqt = QtSupport::QtKitInformation::qtVersion(bc->target()->kit());
- if (!lqt) {
- raiseError(tr("Unable to create Debian templates: No Qt version set."));
- return ActionFailed;
- }
-
- if (!MaemoGlobal::callMad(dh_makeProc, dh_makeArgs, lqt->qmakeCommand().toString(), true)
- || !dh_makeProc.waitForStarted()) {
- raiseError(tr("Unable to create Debian templates: dh_make failed (%1).")
- .arg(dh_makeProc.errorString()));
- return ActionFailed;
- }
-
- dh_makeProc.write("\n"); // Needs user input.
- dh_makeProc.waitForFinished(-1);
- if (dh_makeProc.error() != QProcess::UnknownError
- || dh_makeProc.exitCode() != 0) {
- raiseError(tr("Unable to create debian templates: dh_make failed (%1).")
- .arg(dh_makeProc.errorString()));
- return ActionFailed;
- }
-
- if (!QFile::rename(location.appendPath(QLatin1String("debian")).toString(), debianDir.toString())) {
- raiseError(tr("Unable to move new debian directory to '%1'.").arg(debianDir.toUserOutput()));
- Utils::FileUtils::removeRecursively(location, &error);
- return ActionFailed;
- }
-
- QDir debian(debianDir.toString());
- const QStringList &files = debian.entryList(QDir::Files);
- foreach (const QString &fileName, files) {
- if (fileName.endsWith(QLatin1String(".ex"), Qt::CaseInsensitive)
- || fileName.compare(QLatin1String("README.debian"), Qt::CaseInsensitive) == 0
- || fileName.compare(QLatin1String("dirs"), Qt::CaseInsensitive) == 0
- || fileName.compare(QLatin1String("docs"), Qt::CaseInsensitive) == 0) {
- debian.remove(fileName);
- }
- }
-
- setPackageName(debianDir, packageName);
-
- Core::Id deviceType = ProjectExplorer::DeviceTypeKitInformation::deviceTypeId(bc->target()->kit());
-
- const QByteArray sec = section(deviceType);
- const QByteArray nameField = packageManagerNameFieldName(deviceType);
- QList<QPair<QByteArray, QByteArray> > fields
- = additionalFields(deviceType, bc->target()->project()->displayName());
-
- return adaptRulesFile(rulesFilePath(debianDir))
- && adaptControlFile(controlFilePath(debianDir), bc, sec, nameField, fields)
- ? ActionSuccessful : ActionFailed;
-}
-
-QStringList DebianManager::debianFiles(const Utils::FileName &debianDir)
-{
- return QDir(debianDir.toString()).entryList(QDir::Files, QDir::Name | QDir::IgnoreCase);
-}
-
-Utils::FileName DebianManager::debianDirectory(ProjectExplorer::Target *target)
-{
- Utils::FileName path = Utils::FileName::fromString(target->project()->projectDirectory());
- path.appendPath(QLatin1String(PackagingDirName));
- Core::Id deviceType = ProjectExplorer::DeviceTypeKitInformation::deviceTypeId(target->kit());
- if (deviceType == HarmattanOsType)
- path.appendPath(QLatin1String("debian_harmattan"));
- else if (deviceType == Maemo5OsType)
- path.appendPath(QLatin1String("debian_fremantle"));
- else
- path.clear();
- return path;
-}
-
-void DebianManager::directoryWasChanged(const QString &path)
-{
- Utils::FileName fn = Utils::FileName::fromString(path);
- QTC_ASSERT(m_watches.contains(fn), return);
- emit debianDirectoryChanged(fn);
-}
-
-void DebianManager::controlWasChanged()
-{
- WatchableFile *file = qobject_cast<WatchableFile *>(sender());
- if (!file)
- return;
- emit controlChanged(Utils::FileName::fromString(file->filePath()).parentDir());
-}
-
-void DebianManager::changelogWasChanged()
-{
- WatchableFile *file = qobject_cast<WatchableFile *>(sender());
- if (!file)
- return;
- emit changelogChanged(Utils::FileName::fromString(file->filePath()).parentDir());
-}
-
-Utils::FileName DebianManager::changelogFilePath(const Utils::FileName &debianDir)
-{
- Utils::FileName result = debianDir;
- return result.appendPath(QLatin1String("changelog"));
-}
-
-Utils::FileName DebianManager::controlFilePath(const Utils::FileName &debianDir)
-{
- Utils::FileName result = debianDir;
- return result.appendPath(QLatin1String("control"));
-}
-
-Utils::FileName DebianManager::rulesFilePath(const Utils::FileName &debianDir)
-{
- Utils::FileName result = debianDir;
- return result.appendPath(QLatin1String("rules"));
-}
-
-} // namespace Internal
-} // namespace Madde