Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
collectjson.cpp
Go to the documentation of this file.
1// Copyright (C) 2018 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
3
4#include <qfile.h>
5#include <qjsonarray.h>
6#include <qjsondocument.h>
7#include <qjsonobject.h>
8#include <qhashfunctions.h>
9#include <qstringlist.h>
10#include <cstdlib>
11
12static bool readFromFile(QFile *device, QJsonArray *allMetaObjects)
13{
14 const QByteArray contents = device->readAll();
15 if (contents.isEmpty()) {
16 fprintf(stderr, "%s:0: metatypes input file is empty\n", qPrintable(device->fileName()));
17 return false;
18 }
19
20 QJsonParseError error {};
21 QJsonDocument metaObjects = QJsonDocument::fromJson(contents, &error);
22 if (error.error != QJsonParseError::NoError) {
23 fprintf(stderr, "%s:%d: %s\n", qPrintable(device->fileName()), error.offset,
24 qPrintable(error.errorString()));
25 return false;
26 }
27
28 allMetaObjects->append(metaObjects.object());
29 return true;
30}
31
32int collectJson(const QStringList &jsonFiles, const QString &outputFile, bool skipStdIn)
33{
34 QHashSeed::setDeterministicGlobalSeed();
35
36 QFile output;
37 if (outputFile.isEmpty()) {
38 if (!output.open(stdout, QIODevice::WriteOnly)) {
39 fprintf(stderr, "Error opening stdout for writing: %s\n",
40 qPrintable(output.errorString()));
41 return EXIT_FAILURE;
42 }
43 } else {
44 output.setFileName(outputFile);
45 if (!output.open(QIODevice::WriteOnly)) {
46 fprintf(stderr, "%s: Cannot open file for writing: %s\n", qPrintable(outputFile),
47 qPrintable(output.errorString()));
48 return EXIT_FAILURE;
49 }
50 }
51
52 QJsonArray allMetaObjects;
53 if (jsonFiles.isEmpty() && !skipStdIn) {
54 QFile f;
55 if (!f.open(stdin, QIODevice::ReadOnly)) {
56 fprintf(stderr, "Error opening stdin for reading: %s\n", qPrintable(f.errorString()));
57 return EXIT_FAILURE;
58 }
59
60 if (!readFromFile(&f, &allMetaObjects))
61 return EXIT_FAILURE;
62 }
63
64 QStringList jsonFilesSorted = jsonFiles;
65 jsonFilesSorted.sort();
66 for (const QString &jsonFile : std::as_const(jsonFilesSorted)) {
67 QFile f(jsonFile);
68 if (!f.open(QIODevice::ReadOnly)) {
69 fprintf(stderr, "%s: Cannot open file for reading: %s\n", qPrintable(jsonFile),
70 qPrintable(f.errorString()));
71 return EXIT_FAILURE;
72 }
73
74 if (!readFromFile(&f, &allMetaObjects))
75 return EXIT_FAILURE;
76 }
77
78 QJsonDocument doc(allMetaObjects);
79 output.write(doc.toJson());
80
81 return EXIT_SUCCESS;
82}
\inmodule QtCore
Definition qfile.h:96
\inmodule QtCore\reentrant
static bool readFromFile(QFile *device, QJsonArray *allMetaObjects)
int collectJson(const QStringList &jsonFiles, const QString &outputFile, bool skipStdIn)