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
tracepointgen.cpp
Go to the documentation of this file.
1// Copyright (C) 2022 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 <qstring.h>
5#include <qstringlist.h>
6#include <qfile.h>
7#include <qfileinfo.h>
8
10#include "parser.h"
11
12static void usage(int status)
13{
14 printf("Generates a tracepoint file for tracegen tool from input files.\n\n");
15 printf("Usage: tracepointgen <output file> <input files> \n");
16 exit(status);
17}
18
19static void parseArgs(int argc, char *argv[], QString &provider, QString &outFile, QList<QString> &inputFiles)
20{
21 if (argc == 1)
22 usage(0);
23 if (argc < 4)
24 usage(-1);
25
26 provider = QLatin1StringView(argv[1]);
27 outFile = QLatin1StringView(argv[2]);
28 for (int i = 3; i < argc; i++)
29 inputFiles.append(QLatin1StringView(argv[i]));
30}
31
32int main(int argc, char *argv[])
33{
34 QString provider;
35 QList<QString> inputFiles;
36 QString outFile;
37
38 parseArgs(argc, argv, provider, outFile, inputFiles);
39
40 Parser parser(provider);
41
42 for (const QString &inputFile : inputFiles) {
43 if (inputFile.startsWith(QLatin1Char('I'))) {
44 QStringList includeDirs = inputFile.right(inputFile.length() - 1).split(QLatin1Char(';'));
45 parser.addIncludeDirs(includeDirs);
46 continue;
47 }
48 QFile in(inputFile);
49 if (!in.open(QIODevice::ReadOnly | QIODevice::Text)) {
50 panic("Cannot open '%s' for reading: %s\n",
51 qPrintable(inputFile), qPrintable(in.errorString()));
52 }
53 DEBUGPRINTF(printf("tracepointgen: parse %s\n", qPrintable(inputFile)));
54 QFileInfo info(inputFile);
55 parser.addIncludeDirs({info.absolutePath()});
56 parser.parse(in, inputFile);
57 }
58 if (parser.isEmpty())
59 panic("empty provider %s\n", qPrintable(provider));
60
61 QFile out(outFile);
62
63 if (!out.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
64 panic("Cannot open '%s' for writing: %s\n",
65 qPrintable(outFile), qPrintable(out.errorString()));
66 }
67
68 parser.write(out);
69 out.close();
70
71 return 0;
72}
bool isEmpty() const
Definition parser.h:62
\inmodule QtCore
Definition qfile.h:96
Definition qlist.h:80
#define qPrintable(string)
Definition qstring.h:1685
int main(int argc, char *argv[])
[ctor_close]
static void usage(int status)
static void parseArgs(int argc, char *argv[], QString &provider, QString &outFile, QList< QString > &inputFiles)
#define DEBUGPRINTF(x)