summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAlexey Edelev <alexey.edelev@qt.io>2021-05-28 11:14:39 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-05-31 10:19:45 +0000
commit2f82546d4bb79cf501cbbad39866d902aa2a337d (patch)
tree067eff7b07ef5e5667a4eaf95caaf50b67ad3f7b /src
parentbd73184395aa25b5736449b8e99c8111661bef24 (diff)
Avoid blocking read from stdin when collecting json files
Change the behavior of moc when collecting json files. If argument files are specified, suppose moc received empty input and skip input from standard input. Fixes: QTBUG-93504 Change-Id: I45ec790ed458f1fae543d069555bc8abc6560816 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io> (cherry picked from commit c4b5e84e9e112fab25301f80806e8c66f418594f) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'src')
-rw-r--r--src/tools/moc/collectjson.cpp4
-rw-r--r--src/tools/moc/collectjson.h2
-rw-r--r--src/tools/moc/main.cpp9
3 files changed, 9 insertions, 6 deletions
diff --git a/src/tools/moc/collectjson.cpp b/src/tools/moc/collectjson.cpp
index fe499151cb..57f5a07e3c 100644
--- a/src/tools/moc/collectjson.cpp
+++ b/src/tools/moc/collectjson.cpp
@@ -51,7 +51,7 @@ static bool readFromDevice(QIODevice *device, QJsonArray *allMetaObjects)
return true;
}
-int collectJson(const QStringList &jsonFiles, const QString &outputFile)
+int collectJson(const QStringList &jsonFiles, const QString &outputFile, bool skipStdIn)
{
qSetGlobalQHashSeed(0);
@@ -70,7 +70,7 @@ int collectJson(const QStringList &jsonFiles, const QString &outputFile)
}
QJsonArray allMetaObjects;
- if (jsonFiles.isEmpty()) {
+ if (jsonFiles.isEmpty() && !skipStdIn) {
QFile f;
if (!f.open(stdin, QIODevice::ReadOnly)) {
fprintf(stderr, "Error opening stdin for reading\n");
diff --git a/src/tools/moc/collectjson.h b/src/tools/moc/collectjson.h
index 9d329c96ca..3a33952a54 100644
--- a/src/tools/moc/collectjson.h
+++ b/src/tools/moc/collectjson.h
@@ -35,7 +35,7 @@
QT_BEGIN_NAMESPACE
-int collectJson(const QStringList &jsonFiles, const QString &outputFile);
+int collectJson(const QStringList &jsonFiles, const QString &outputFile, bool skipStdIn);
QT_END_NAMESPACE
diff --git a/src/tools/moc/main.cpp b/src/tools/moc/main.cpp
index 1cb383c92f..a2790fa1f7 100644
--- a/src/tools/moc/main.cpp
+++ b/src/tools/moc/main.cpp
@@ -145,9 +145,10 @@ QByteArray composePreprocessorOutput(const Symbols &symbols) {
return output;
}
-static QStringList argumentsFromCommandLineAndFile(const QStringList &arguments)
+static QStringList argumentsFromCommandLineAndFile(const QStringList &arguments, bool &hasOptionFiles)
{
QStringList allArguments;
+ hasOptionFiles = false;
allArguments.reserve(arguments.size());
for (const QString &argument : arguments) {
// "@file" doesn't start with a '-' so we can't use QCommandLineParser for it
@@ -163,6 +164,7 @@ static QStringList argumentsFromCommandLineAndFile(const QStringList &arguments)
error("Cannot open options file specified with @");
return QStringList();
}
+ hasOptionFiles = true;
while (!f.atEnd()) {
QString line = QString::fromLocal8Bit(f.readLine().trimmed());
if (!line.isEmpty())
@@ -378,7 +380,8 @@ int runMoc(int argc, char **argv)
parser.addPositionalArgument(QStringLiteral("[MOC generated json file]"),
QStringLiteral("MOC generated json output"));
- const QStringList arguments = argumentsFromCommandLineAndFile(app.arguments());
+ bool hasOptionFiles = false;
+ const QStringList arguments = argumentsFromCommandLineAndFile(app.arguments(), hasOptionFiles);
if (arguments.isEmpty())
return 1;
@@ -387,7 +390,7 @@ int runMoc(int argc, char **argv)
const QStringList files = parser.positionalArguments();
output = parser.value(outputOption);
if (parser.isSet(collectOption))
- return collectJson(files, output);
+ return collectJson(files, output, hasOptionFiles);
if (files.count() > 1) {
error(qPrintable(QLatin1String("Too many input files specified: '") + files.join(QLatin1String("' '")) + QLatin1Char('\'')));