diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationstep.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationstep.cpp index a4456c3e2b8bd77660b138c8f7e346755b250e4e..aab42f7c2fa45cc91c90eee5aca54b7e703b0429 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationstep.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationstep.cpp @@ -195,10 +195,6 @@ bool MaemoPackageCreationStep::createPackage() QByteArray rulesContents = rulesFile.readAll(); rulesContents.replace("DESTDIR", "INSTALL_ROOT"); - // 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=."); - rulesFile.resize(0); rulesFile.write(rulesContents); if (rulesFile.error() != QFile::NoError) { @@ -220,30 +216,43 @@ bool MaemoPackageCreationStep::createPackage() } } - if (!runCommand(QLatin1String("dpkg-buildpackage -nc -uc -us"))) + if (!runCommand(QLatin1String("dh_installdirs"))) return false; - // Workaround for non-working dh_builddeb --destdir=. - if (!QDir(buildDir).isRoot()) { - const QString packageFileName = QFileInfo(packageFilePath()).fileName(); - const QString changesFileName = QFileInfo(packageFileName) - .completeBaseName() + QLatin1String(".changes"); - const QString packageSourceDir = buildDir + QLatin1String("/../"); - const QString packageSourceFilePath - = packageSourceDir + packageFileName; - const QString changesSourceFilePath - = packageSourceDir + changesFileName; - const QString changesTargetFilePath - = buildDir + QLatin1Char('/') + changesFileName; - QFile::remove(packageFilePath()); - QFile::remove(changesTargetFilePath); - if (!QFile::rename(packageSourceFilePath, packageFilePath()) - || !QFile::rename(changesSourceFilePath, changesTargetFilePath)) { - raiseError(tr("Packaging failed."), - tr("Could not move package files from %1 to %2.") - .arg(packageSourceDir, buildDir)); + const QDir debianRoot = QDir(buildDir % QLatin1String("/debian/") + % executableFileName().toLower()); + for (int i = 0; i < m_packageContents->rowCount(); ++i) { + const MaemoDeployable &d = m_packageContents->deployableAt(i); + const QString targetFile = debianRoot.path() + '/' + d.remoteFilePath; + const QString absTargetDir = QFileInfo(targetFile).dir().path(); + const QString relTargetDir = debianRoot.relativeFilePath(absTargetDir); + if (!debianRoot.exists(relTargetDir) + && !debianRoot.mkpath(relTargetDir)) { + raiseError(tr("Packaging Error: Could not create directory '%1'.") + .arg(QDir::toNativeSeparators(absTargetDir))); + return false; + } + if (QFile::exists(targetFile) && !QFile::remove(targetFile)) { + raiseError(tr("Packaging Error: Could not replace file '%1'.") + .arg(QDir::toNativeSeparators(targetFile))); return false; } + + if (!QFile::copy(d.localFilePath, targetFile)) { + raiseError(tr("Packaging Error: Could not copy '%1' to '%2'.") + .arg(QDir::toNativeSeparators(d.localFilePath)) + .arg(QDir::toNativeSeparators(targetFile))); + return false; + } + } + + const QStringList commands = QStringList() << QLatin1String("dh_link") + << QLatin1String("dh_fixperms") << QLatin1String("dh_installdeb") + << QLatin1String("dh_gencontrol") << QLatin1String("dh_md5sums") + << QLatin1String("dh_builddeb --destdir=."); + foreach (const QString &command, commands) { + if (!runCommand(command)) + return false; } emit addOutput(tr("Package created."), textCharFormat);