Core::GeneratedFiles dryRunCustomWizardGeneratorScript(const QString &targetPath, const QStringList &script, const QList<GeneratorScriptArgument> &arguments, const QMap<QString, QString> &fieldMap, QString *errorMessage) { // Run in temporary directory as the target path may not exist yet. QString stdOut; if (!runGenerationScriptHelper(QDir::tempPath(), script, arguments, true, fieldMap, &stdOut, errorMessage)) return Core::GeneratedFiles(); Core::GeneratedFiles files; // Parse the output consisting of lines with ',' separated tokens. // (file name + attributes matching those of the <file> element) foreach (const QString &line, stdOut.split(QLatin1Char('\n'))) { const QString trimmed = line.trimmed(); if (!trimmed.isEmpty()) { Core::GeneratedFile file; Core::GeneratedFile::Attributes attributes = Core::GeneratedFile::CustomGeneratorAttribute; const QStringList tokens = line.split(QLatin1Char(',')); const int count = tokens.count(); for (int i = 0; i < count; i++) { const QString &token = tokens.at(i); if (i) { if (token == QLatin1String(customWizardFileOpenEditorAttributeC)) attributes |= Core::GeneratedFile::OpenEditorAttribute; else if (token == QLatin1String(customWizardFileOpenProjectAttributeC)) attributes |= Core::GeneratedFile::OpenProjectAttribute; } else { // Token 0 is file name. Wizard wants native names. // Expand to full path if relative const QFileInfo fileInfo(token); const QString fullPath = fileInfo.isAbsolute() ? token : (targetPath + QLatin1Char('/') + token); file.setPath(fullPath); } } file.setAttributes(attributes); files.push_back(file); } } if (CustomWizard::verbose()) { QDebug nospace = qDebug().nospace(); nospace << script << " generated:\n"; foreach (const Core::GeneratedFile &f, files) nospace << ' ' << f.path() << f.attributes() << '\n'; } return files; }
bool ImportLogConverter::convertFile(Core::GeneratedFile &file, QString &errorMessage) { Q_UNUSED(errorMessage); QString content; content += QLatin1String("========================================================\n"); content += tr("Generated by cascades importer ver: %1, %2") .arg(QLatin1String(Qnx::Constants::QNX_BLACKBERRY_CASCADESIMPORTER_VERSION)) .arg(QDateTime::currentDateTime().toString(Qt::ISODate)); content += QLatin1String("\n========================================================\n\n"); content += convertedProjectContext().importLog().toString(); file.setContents(content); file.setAttributes(file.attributes() | Core::GeneratedFile::OpenEditorAttribute); return true; }
bool ProjectFileConverter::convertFile(Core::GeneratedFile &file, QString &errorMessage) { if (!FileConverter::convertFile(file, errorMessage)) return false; ImportLog &log = convertedProjectContext().importLog(); QMap<QString, QString> origProjectVariables = scanForDefinedVariables(file); QString fileContent; QLatin1String path( ":/qnx/cascadesimport/resources/templates/project.pro"); QByteArray ba = loadFileContent(path, errorMessage); if (!errorMessage.isEmpty()) return false; fileContent = QString::fromUtf8(ba); QStringList headers; QStringList sources; QStringList resources; QStringList otherFiles; QSet<QString> entries; foreach (const QString &filePath, convertedProjectContext().collectedFiles()) { QString ext = filePath.section(QLatin1Char('.'), -1); if (ext.compare(QLatin1String("c"), Qt::CaseInsensitive) == 0) sources << filePath; else if (ext.compare(QLatin1String("cc"), Qt::CaseInsensitive) == 0) sources << filePath; else if (ext.compare(QLatin1String("cpp"), Qt::CaseInsensitive) == 0) sources << filePath; else if (ext.compare(QLatin1String("h"), Qt::CaseInsensitive) == 0) headers << filePath; else if (ext.compare(QLatin1String("hh"), Qt::CaseInsensitive) == 0) headers << filePath; else if (ext.compare(QLatin1String("hpp"), Qt::CaseInsensitive) == 0) headers << filePath; else if (ext.compare(QLatin1String("qrc"), Qt::CaseInsensitive) == 0) resources << filePath; else if (ext.compare(QLatin1String("qml"), Qt::CaseInsensitive) == 0) otherFiles << filePath; else if (ext.compare(QLatin1String("js"), Qt::CaseInsensitive) == 0) otherFiles << filePath; else if (ext.compare(QLatin1String("ts"), Qt::CaseInsensitive) == 0) otherFiles << filePath; else if (ext.compare(QLatin1String("pro"), Qt::CaseInsensitive) == 0) otherFiles << filePath; else if (filePath.compare(QLatin1String("bar-descriptor.xml"), Qt::CaseInsensitive) == 0) otherFiles << filePath; else if (filePath.startsWith(QLatin1String("assets/"), Qt::CaseInsensitive)) // include all the content of the assets directory otherFiles << filePath; else if (filePath.startsWith(QLatin1String("src/"), Qt::CaseInsensitive)) // include all the content of the src directory otherFiles << filePath; else if (ext.compare(QLatin1String("log"), Qt::CaseInsensitive) != 0) log.logWarning(tr("File '%1' not listed in '%2' file, should it be?") .arg(filePath).arg(file.path())); } fileContent.replace(QLatin1String("%HEADERS%"), headers.join(QLatin1String(" \\\n "))); fileContent.replace(QLatin1String("%SOURCES%"), sources.join(QLatin1String(" \\\n "))); fileContent.replace(QLatin1String("%RESOURCES%"), resources.join(QLatin1String(" \\\n "))); fileContent.replace(QLatin1String("%OTHER_FILES%"), otherFiles.join(QLatin1String(" \\\n "))); fileContent.replace(QLatin1String("%PROJECT_NAME%"), convertedProjectContext().projectName()); fileContent.replace(QLatin1String("%TARGET%"), origProjectVariables.value(QLatin1String("TARGET"), convertedProjectContext().projectName())); fileContent.replace(QLatin1String("%EXTRA_LIBS%"), origProjectVariables.value(QLatin1String("LIBS"))); fileContent.replace(QLatin1String("%IMPORTER_VERSION%"), QLatin1String(Qnx::Constants::QNX_BLACKBERRY_CASCADESIMPORTER_VERSION)); fileContent.replace(QLatin1String("%DATE_TIME%"), QDateTime::currentDateTime().toString(Qt::ISODate)); fileContent.replace(QLatin1String("%QT%"), updateVariable(origProjectVariables.value(QLatin1String("QT")), QLatin1String("declarative script svg sql network xml xmlpatterns"), QString() )); fileContent.replace(QLatin1String("%CONFIG%"), updateVariable(origProjectVariables.value(QLatin1String("CONFIG")), QLatin1String("qt warn_on"), QLatin1String("debug release debug_and_release cascades cascades10") )); fileContent.replace(QLatin1String("%MOBILITY%"), origProjectVariables.value(QLatin1String("MOBILITY"))); file.setContents(fileContent); file.setAttributes(file.attributes() | Core::GeneratedFile::OpenProjectAttribute); return errorMessage.isEmpty(); }