annotate tools/drcc/main.cpp @ 61:a2871e6b8b15

drcc: automatic initialization of resources with program start (disabled with option -no-static-initialize) demos: resources fixes. examples: resources fixes.
author SokoL_SD
date Tue, 19 May 2009 10:48:30 +0000
parents 7be693ea7070
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
57
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
1 /****************************************************************************
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
2 **
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
4 ** Contact: Qt Software Information (qt-info@nokia.com)
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
5 **
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
6 ** This file is part of the tools applications of the Qt Toolkit.
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
7 **
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
8 ** $QT_BEGIN_LICENSE:LGPL$
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
9 ** Commercial Usage
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
10 ** Licensees holding valid Qt Commercial licenses may use this file in
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
11 ** accordance with the Qt Commercial License Agreement provided with the
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
12 ** Software or, alternatively, in accordance with the terms contained in
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
13 ** a written agreement between you and Nokia.
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
14 **
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
15 ** GNU Lesser General Public License Usage
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
16 ** Alternatively, this file may be used under the terms of the GNU Lesser
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
17 ** General Public License version 2.1 as published by the Free Software
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
18 ** Foundation and appearing in the file LICENSE.LGPL included in the
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
19 ** packaging of this file. Please review the following information to
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
20 ** ensure the GNU Lesser General Public License version 2.1 requirements
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
21 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
22 **
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
23 ** In addition, as a special exception, Nokia gives you certain
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
24 ** additional rights. These rights are described in the Nokia Qt LGPL
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
25 ** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
26 ** package.
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
27 **
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
28 ** GNU General Public License Usage
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
29 ** Alternatively, this file may be used under the terms of the GNU
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
30 ** General Public License version 3.0 as published by the Free Software
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
31 ** Foundation and appearing in the file LICENSE.GPL included in the
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
32 ** packaging of this file. Please review the following information to
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
33 ** ensure the GNU General Public License version 3.0 requirements will be
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
34 ** met: http://www.gnu.org/copyleft/gpl.html.
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
35 **
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
36 ** If you are unsure which license is appropriate for your use, please
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
37 ** contact the sales department at qt-sales@nokia.com.
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
38 ** $QT_END_LICENSE$
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
39 **
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
40 ****************************************************************************/
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
41
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
42 #include "rcc.h"
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
43 #include "qcorecmdlineargs_p.h"
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
44
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
45 #include <QDebug>
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
46 #include <QDir>
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
47 #include <QFile>
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
48 #include <QFileInfo>
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
49 #include <QTextStream>
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
50
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
51 QT_BEGIN_NAMESPACE
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
52
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
53 void showHelp(const QString &argv0, const QString &error)
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
54 {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
55 fprintf(stderr, "Qt resource compiler\n");
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
56 if (!error.isEmpty())
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
57 fprintf(stderr, "%s: %s\n", qPrintable(argv0), qPrintable(error));
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
58 fprintf(stderr, "Usage: %s [options] <inputs>\n\n"
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
59 "Options:\n"
61
a2871e6b8b15 drcc: automatic initialization of resources with program start (disabled with option -no-static-initialize)
SokoL_SD
parents: 57
diff changeset
60 " -o file write output to file rather than stdout\n"
a2871e6b8b15 drcc: automatic initialization of resources with program start (disabled with option -no-static-initialize)
SokoL_SD
parents: 57
diff changeset
61 " -name name create an external initialization function with name\n"
a2871e6b8b15 drcc: automatic initialization of resources with program start (disabled with option -no-static-initialize)
SokoL_SD
parents: 57
diff changeset
62 " -threshold level threshold to consider compressing files\n"
a2871e6b8b15 drcc: automatic initialization of resources with program start (disabled with option -no-static-initialize)
SokoL_SD
parents: 57
diff changeset
63 " -compress level compress input files by level\n"
a2871e6b8b15 drcc: automatic initialization of resources with program start (disabled with option -no-static-initialize)
SokoL_SD
parents: 57
diff changeset
64 " -root path prefix resource access path with root path\n"
a2871e6b8b15 drcc: automatic initialization of resources with program start (disabled with option -no-static-initialize)
SokoL_SD
parents: 57
diff changeset
65 " -no-compress disable all compression\n"
a2871e6b8b15 drcc: automatic initialization of resources with program start (disabled with option -no-static-initialize)
SokoL_SD
parents: 57
diff changeset
66 " -no-static-initialize disable automatic initialization of resources with program start\n"
a2871e6b8b15 drcc: automatic initialization of resources with program start (disabled with option -no-static-initialize)
SokoL_SD
parents: 57
diff changeset
67 " -binary output a binary file for use as a dynamic resource\n"
a2871e6b8b15 drcc: automatic initialization of resources with program start (disabled with option -no-static-initialize)
SokoL_SD
parents: 57
diff changeset
68 " -namespace turn off namespace macros\n"
a2871e6b8b15 drcc: automatic initialization of resources with program start (disabled with option -no-static-initialize)
SokoL_SD
parents: 57
diff changeset
69 " -project Output a resource file containing all\n"
a2871e6b8b15 drcc: automatic initialization of resources with program start (disabled with option -no-static-initialize)
SokoL_SD
parents: 57
diff changeset
70 " files from the current directory\n"
a2871e6b8b15 drcc: automatic initialization of resources with program start (disabled with option -no-static-initialize)
SokoL_SD
parents: 57
diff changeset
71 " -version display version\n"
a2871e6b8b15 drcc: automatic initialization of resources with program start (disabled with option -no-static-initialize)
SokoL_SD
parents: 57
diff changeset
72 " -help display this information\n",
57
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
73 qPrintable(argv0));
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
74 }
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
75
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
76 void dumpRecursive(const QDir &dir, QTextStream &out)
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
77 {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
78 QFileInfoList entries = dir.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
79 | QDir::NoSymLinks);
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
80 foreach (QFileInfo entry, entries) {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
81 if (entry.isDir()) {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
82 dumpRecursive(entry.filePath(), out);
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
83 } else {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
84 out << QLatin1String("<file>")
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
85 << entry.filePath()
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
86 << QLatin1String("</file>\n");
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
87 }
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
88 }
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
89 }
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
90
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
91 int createProject(const QString &outFileName)
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
92 {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
93 QDir currentDir = QDir::current();
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
94 QString currentDirName = currentDir.dirName();
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
95 if (currentDirName.isEmpty())
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
96 currentDirName = QLatin1String("root");
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
97
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
98 QFile file;
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
99 bool isOk = false;
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
100 if (outFileName.isEmpty()) {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
101 isOk = file.open(stdout, QFile::WriteOnly | QFile::Text);
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
102 } else {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
103 file.setFileName(outFileName);
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
104 isOk = file.open(QFile::WriteOnly | QFile::Text);
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
105 }
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
106 if (!isOk) {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
107 fprintf(stderr, "Unable to open %s: %s\n",
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
108 outFileName.isEmpty() ? qPrintable(outFileName) : "standard output",
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
109 qPrintable(file.errorString()));
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
110 return 1;
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
111 }
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
112
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
113 QTextStream out(&file);
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
114 out << QLatin1String("<!DOCTYPE RCC><RCC version=\"1.0\">\n"
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
115 "<qresource>\n");
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
116
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
117 // use "." as dir to get relative file pathes
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
118 dumpRecursive(QDir(QLatin1String(".")), out);
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
119
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
120 out << QLatin1String("</qresource>\n"
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
121 "</RCC>\n");
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
122
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
123 return 0;
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
124 }
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
125
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
126 int runRcc(int argc, char *argv[])
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
127 {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
128 QString outFilename;
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
129 bool helpRequested = false;
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
130 bool list = false;
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
131 bool projectRequested = false;
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
132 QStringList filenamesIn;
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
133
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
134 QStringList args = qCmdLineArgs(argc, argv);
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
135
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
136 RCCResourceLibrary library;
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
137
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
138 //parse options
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
139 QString errorMsg;
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
140 for (int i = 1; i < args.count() && errorMsg.isEmpty(); i++) {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
141 if (args[i].isEmpty())
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
142 continue;
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
143 if (args[i][0] == QLatin1Char('-')) { // option
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
144 QString opt = args[i];
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
145 if (opt == QLatin1String("-o")) {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
146 if (!(i < argc-1)) {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
147 errorMsg = QLatin1String("Missing output name");
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
148 break;
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
149 }
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
150 outFilename = args[++i];
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
151 } else if (opt == QLatin1String("-name")) {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
152 if (!(i < argc-1)) {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
153 errorMsg = QLatin1String("Missing target name");
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
154 break;
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
155 }
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
156 library.setInitName(args[++i]);
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
157 } else if (opt == QLatin1String("-root")) {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
158 if (!(i < argc-1)) {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
159 errorMsg = QLatin1String("Missing root path");
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
160 break;
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
161 }
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
162 library.setResourceRoot(QDir::cleanPath(args[++i]));
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
163 if (library.resourceRoot().isEmpty()
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
164 || library.resourceRoot().at(0) != QLatin1Char('/'))
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
165 errorMsg = QLatin1String("Root must start with a /");
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
166 } else if (opt == QLatin1String("-compress")) {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
167 if (!(i < argc-1)) {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
168 errorMsg = QLatin1String("Missing compression level");
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
169 break;
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
170 }
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
171 library.setCompressLevel(args[++i].toInt());
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
172 } else if (opt == QLatin1String("-threshold")) {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
173 if (!(i < argc-1)) {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
174 errorMsg = QLatin1String("Missing compression threshold");
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
175 break;
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
176 }
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
177 library.setCompressThreshold(args[++i].toInt());
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
178 } else if (opt == QLatin1String("-binary")) {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
179 library.setFormat(RCCResourceLibrary::Binary);
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
180 } else if (opt == QLatin1String("-namespace")) {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
181 // library.setUseNameSpace(!library.useNameSpace());
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
182 library.setUseNameSpace(false);
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
183 } else if (opt == QLatin1String("-verbose")) {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
184 library.setVerbose(true);
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
185 } else if (opt == QLatin1String("-list")) {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
186 list = true;
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
187 } else if (opt == QLatin1String("-version") || opt == QLatin1String("-v")) {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
188 fprintf(stderr, "Qt Resource Compiler version %s\n", QT_VERSION_STR);
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
189 return 1;
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
190 } else if (opt == QLatin1String("-help") || opt == QLatin1String("-h")) {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
191 helpRequested = true;
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
192 } else if (opt == QLatin1String("-no-compress")) {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
193 library.setCompressLevel(-2);
61
a2871e6b8b15 drcc: automatic initialization of resources with program start (disabled with option -no-static-initialize)
SokoL_SD
parents: 57
diff changeset
194 } else if (opt == QLatin1String("-no-static-initialize")) {
a2871e6b8b15 drcc: automatic initialization of resources with program start (disabled with option -no-static-initialize)
SokoL_SD
parents: 57
diff changeset
195 library.setStaticInitialize(false);
57
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
196 } else if (opt == QLatin1String("-project")) {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
197 projectRequested = true;
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
198 } else {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
199 errorMsg = QString::fromLatin1("Unknown option: '%1'").arg(args[i]);
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
200 }
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
201 } else {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
202 if (!QFile::exists(args[i])) {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
203 qWarning("%s: File does not exist '%s'",
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
204 qPrintable(args[0]), qPrintable(args[i]));
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
205 return 1;
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
206 }
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
207 filenamesIn.append(args[i]);
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
208 }
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
209 }
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
210
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
211 if (projectRequested && !helpRequested) {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
212 return createProject(outFilename);
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
213 }
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
214
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
215 if (!filenamesIn.size() || !errorMsg.isEmpty() || helpRequested) {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
216 showHelp(args[0], errorMsg);
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
217 return 1;
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
218 }
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
219 QFile errorDevice;
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
220 errorDevice.open(stderr, QIODevice::WriteOnly|QIODevice::Text);
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
221
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
222 if (library.verbose())
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
223 errorDevice.write("Qt resource compiler\n");
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
224
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
225 library.setInputFiles(filenamesIn);
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
226
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
227 if (!library.readFiles(list, errorDevice))
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
228 return 1;
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
229
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
230 // open output
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
231 QFile out;
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
232 QIODevice::OpenMode mode = QIODevice::WriteOnly;
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
233 if (library.format() == RCCResourceLibrary::C_Code)
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
234 mode |= QIODevice::Text;
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
235
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
236 if (outFilename.isEmpty() || outFilename == QLatin1String("-")) {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
237 // using this overload close() only flushes.
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
238 out.open(stdout, mode);
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
239 } else {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
240 out.setFileName(outFilename);
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
241 if (!out.open(mode)) {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
242 const QString msg = QString::fromUtf8("Unable to open %1 for writing: %2\n").arg(outFilename).arg(out.errorString());
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
243 errorDevice.write(msg.toUtf8());
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
244 return 1;
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
245 }
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
246 }
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
247
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
248 // do the task
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
249 if (list) {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
250 const QStringList data = library.dataFiles();
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
251 for (int i = 0; i < data.size(); ++i) {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
252 out.write(qPrintable(QDir::cleanPath(data.at(i))));
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
253 out.write("\n");
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
254 }
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
255 return 0;
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
256 }
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
257
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
258 return library.output(out, errorDevice) ? 0 : 1;
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
259 }
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
260
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
261 QT_END_NAMESPACE
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
262
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
263 int main(int argc, char *argv[])
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
264 {
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
265 return QT_PREPEND_NAMESPACE(runRcc)(argc, argv);
7be693ea7070 drcc, resource compiler, see interview demo
eldar
parents:
diff changeset
266 }