From 51673f868a9ab576d9f5e02effb2681308ea82e4 Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Fri, 2 Feb 2018 15:22:44 +0100 Subject: Fix CONFIG+=qtquickcompiler with multiple resource files Fix command line option handling to allow for processing of multiple .qrc files as input files when generating the loader.cpp file. Task-number: QTBUG-66161 Change-Id: I1ecd40bf863c6570ccf42846106791b7f53fe432 Reviewed-by: Samuli Piippo Reviewed-by: Lars Knoll --- tools/qmlcachegen/qmlcachegen.cpp | 40 ++++++++++++++++++++++---------- tools/qmlcachegen/resourcefilemapper.cpp | 8 ------- tools/qmlcachegen/resourcefilemapper.h | 1 - 3 files changed, 28 insertions(+), 21 deletions(-) (limited to 'tools/qmlcachegen') diff --git a/tools/qmlcachegen/qmlcachegen.cpp b/tools/qmlcachegen/qmlcachegen.cpp index 31215daf08..7c04f69a2b 100644 --- a/tools/qmlcachegen/qmlcachegen.cpp +++ b/tools/qmlcachegen/qmlcachegen.cpp @@ -442,28 +442,42 @@ int main(int argc, char **argv) parser.process(app); + enum Output { + GenerateCpp, + GenerateCacheFile, + GenerateLoader + } target = GenerateCacheFile; + + QString outputFileName; + if (parser.isSet(outputFileOption)) + outputFileName = parser.value(outputFileOption); + + if (outputFileName.endsWith(QLatin1String(".cpp"))) { + target = GenerateCpp; + if (outputFileName.endsWith(QLatin1String("qmlcache_loader.cpp"))) + target = GenerateLoader; + } + const QStringList sources = parser.positionalArguments(); if (sources.isEmpty()){ parser.showHelp(); - } else if (sources.count() > 1) { + } else if (sources.count() > 1 && target != GenerateLoader) { fprintf(stderr, "%s\n", qPrintable(QStringLiteral("Too many input files specified: '") + sources.join(QStringLiteral("' '")) + QLatin1Char('\''))); return EXIT_FAILURE; } - const QString inputFile = sources.first(); - Error error; - - QString outputFileName = inputFile + QLatin1Char('c'); - if (parser.isSet(outputFileOption)) - outputFileName = parser.value(outputFileOption); + const QString inputFile = sources.first(); + if (outputFileName.isEmpty()) + outputFileName = inputFile + QLatin1Char('c'); if (parser.isSet(filterResourceFileOption)) { return filterResourceFile(inputFile, outputFileName); } - if (outputFileName.endsWith(QLatin1String("qmlcache_loader.cpp"))) { - ResourceFileMapper mapper(inputFile); + if (target == GenerateLoader) { + ResourceFileMapper mapper(sources); + Error error; if (!generateLoader(mapper.qmlCompilerFiles(), outputFileName, parser.values(resourceFileMappingOption), &error.message)) { error.augment(QLatin1String("Error generating loader stub: ")).print(); return EXIT_FAILURE; @@ -474,7 +488,7 @@ int main(int argc, char **argv) QString inputFileUrl = inputFile; SaveFunction saveFunction; - if (outputFileName.endsWith(QLatin1String(".cpp"))) { + if (target == GenerateCpp) { ResourceFileMapper fileMapper(parser.values(resourceOption)); QString inputResourcePath = parser.value(resourcePathOption); @@ -523,18 +537,20 @@ int main(int argc, char **argv) if (inputFile.endsWith(QLatin1String(".qml"))) { + Error error; if (!compileQmlFile(inputFile, saveFunction, &error)) { error.augment(QLatin1String("Error compiling qml file: ")).print(); return EXIT_FAILURE; } } else if (inputFile.endsWith(QLatin1String(".js"))) { + Error error; if (!compileJSFile(inputFile, inputFileUrl, saveFunction, &error)) { error.augment(QLatin1String("Error compiling qml file: ")).print(); return EXIT_FAILURE; } } else { - fprintf(stderr, "Ignoring %s input file as it is not QML source code - maybe remove from QML_FILES?\n", qPrintable(inputFile)); } - + fprintf(stderr, "Ignoring %s input file as it is not QML source code - maybe remove from QML_FILES?\n", qPrintable(inputFile)); + } return EXIT_SUCCESS; } diff --git a/tools/qmlcachegen/resourcefilemapper.cpp b/tools/qmlcachegen/resourcefilemapper.cpp index d7daf33de8..c2fd057541 100644 --- a/tools/qmlcachegen/resourcefilemapper.cpp +++ b/tools/qmlcachegen/resourcefilemapper.cpp @@ -42,14 +42,6 @@ ResourceFileMapper::ResourceFileMapper(const QStringList &resourceFiles) } } -ResourceFileMapper::ResourceFileMapper(const QString &resourceFile) -{ - QFile f(resourceFile); - if (!f.open(QIODevice::ReadOnly)) - return; - populateFromQrcFile(f); -} - bool ResourceFileMapper::isEmpty() const { return qrcPathToFileSystemPath.isEmpty(); diff --git a/tools/qmlcachegen/resourcefilemapper.h b/tools/qmlcachegen/resourcefilemapper.h index f6e82bacb0..2e0ab45171 100644 --- a/tools/qmlcachegen/resourcefilemapper.h +++ b/tools/qmlcachegen/resourcefilemapper.h @@ -35,7 +35,6 @@ struct ResourceFileMapper { ResourceFileMapper(const QStringList &resourceFiles); - ResourceFileMapper(const QString &resourceFile); bool isEmpty() const; -- cgit v1.2.3