int runRcc(int argc, char *argv[]) { QString outFilename; bool helpRequested = false; bool list = false; bool projectRequested = false; QStringList filenamesIn; QStringList args = qCmdLineArgs(argc, argv); RCCResourceLibrary library; //parse options QString errorMsg; for (int i = 1; i < args.count() && errorMsg.isEmpty(); i++) { if (args[i].isEmpty()) continue; if (args[i][0] == QLatin1Char('-')) { // option QString opt = args[i]; if (opt == QLatin1String("-o")) { if (!(i < argc-1)) { errorMsg = QLatin1String("Missing output name"); break; } outFilename = args[++i]; } else if (opt == QLatin1String("-name")) { if (!(i < argc-1)) { errorMsg = QLatin1String("Missing target name"); break; } library.setInitName(args[++i]); } else if (opt == QLatin1String("-root")) { if (!(i < argc-1)) { errorMsg = QLatin1String("Missing root path"); break; } library.setResourceRoot(QDir::cleanPath(args[++i])); if (library.resourceRoot().isEmpty() || library.resourceRoot().at(0) != QLatin1Char('/')) errorMsg = QLatin1String("Root must start with a /"); } else if (opt == QLatin1String("-compress")) { if (!(i < argc-1)) { errorMsg = QLatin1String("Missing compression level"); break; } library.setCompressLevel(args[++i].toInt()); } else if (opt == QLatin1String("-threshold")) { if (!(i < argc-1)) { errorMsg = QLatin1String("Missing compression threshold"); break; } library.setCompressThreshold(args[++i].toInt()); } else if (opt == QLatin1String("-binary")) { library.setFormat(RCCResourceLibrary::Binary); } else if (opt == QLatin1String("-namespace")) { library.setUseNameSpace(!library.useNameSpace()); } else if (opt == QLatin1String("-verbose")) { library.setVerbose(true); } else if (opt == QLatin1String("-list")) { list = true; } else if (opt == QLatin1String("-version") || opt == QLatin1String("-v")) { fprintf(stderr, "Qt Resource Compiler version %s\n", QT_VERSION_STR); return 1; } else if (opt == QLatin1String("-help") || opt == QLatin1String("-h")) { helpRequested = true; } else if (opt == QLatin1String("-no-compress")) { library.setCompressLevel(-2); } else if (opt == QLatin1String("-project")) { projectRequested = true; } else { errorMsg = QString::fromLatin1("Unknown option: '%1'").arg(args[i]); } } else { if (!QFile::exists(args[i])) { qWarning("%s: File does not exist '%s'", qPrintable(args[0]), qPrintable(args[i])); return 1; } filenamesIn.append(args[i]); } } if (projectRequested && !helpRequested) { return createProject(outFilename); } if (!filenamesIn.size() || !errorMsg.isEmpty() || helpRequested) { showHelp(args[0], errorMsg); return 1; } QFile errorDevice; errorDevice.open(stderr, QIODevice::WriteOnly|QIODevice::Text); if (library.verbose()) errorDevice.write("Qt resource compiler\n"); library.setInputFiles(filenamesIn); if (!library.readFiles(list, errorDevice)) return 1; // open output QFile out; QIODevice::OpenMode mode = QIODevice::WriteOnly; if (library.format() == RCCResourceLibrary::C_Code) mode |= QIODevice::Text; if (outFilename.isEmpty() || outFilename == QLatin1String("-")) { // using this overload close() only flushes. out.open(stdout, mode); } else { out.setFileName(outFilename); if (!out.open(mode)) { const QString msg = QString::fromUtf8("Unable to open %1 for writing: %2\n").arg(outFilename).arg(out.errorString()); errorDevice.write(msg.toUtf8()); return 1; } } // do the task if (list) { const QStringList data = library.dataFiles(); for (int i = 0; i < data.size(); ++i) { out.write(qPrintable(QDir::cleanPath(data.at(i)))); out.write("\n"); } return 0; } return library.output(out, errorDevice) ? 0 : 1; }
int main(int argc, char *argv[]) { QString outFilename; bool helpRequested = false, list = false; QStringList files; QStringList args = qCmdLineArgs(argc, argv); //parse options QString errorMsg; for (int i = 1; i < args.count() && errorMsg.isEmpty(); i++) { if (args[i].isEmpty()) continue; if (args[i][0] == '-') { // option QString opt = args[i]; if (opt == QLatin1String("-o")) { if (!(i < argc-1)) { errorMsg = QLatin1String("Missing output name"); break; } outFilename = args[++i]; } else if (opt == QLatin1String("-name")) { if (!(i < argc-1)) { errorMsg = QLatin1String("Missing target name"); break; } initName = args[++i]; } else if (opt == QLatin1String("-root")) { if (!(i < argc-1)) { errorMsg = QLatin1String("Missing root path"); break; } resourceRoot = QDir::cleanPath(args[++i]); if(resourceRoot.isEmpty() || resourceRoot.at(0) != QLatin1Char('/')) errorMsg = QLatin1String("Root must start with a /"); } else if (opt == QLatin1String("-compress")) { if (!(i < argc-1)) { errorMsg = QLatin1String("Missing compression level"); break; } compressLevel = args[++i].toInt(); } else if (opt == QLatin1String("-threshold")) { if (!(i < argc-1)) { errorMsg = QLatin1String("Missing compression threshold"); break; } compressThreshold = args[++i].toInt(); } else if (opt == QLatin1String("-binary")) { writeBinary = true; } else if (opt == QLatin1String("-verbose")) { verbose = true; } else if (opt == QLatin1String("-list")) { list = true; } else if (opt == QLatin1String("-version") || opt == QLatin1String("-v")) { fprintf(stderr, "Qt Resource Compiler version %s\n", QT_VERSION_STR); return 1; } else if (opt == QLatin1String("-help") || opt == QLatin1String("-h")) { helpRequested = true; } else if (opt == QLatin1String("-no-compress")) { compressLevel = -2; } else { errorMsg = QString::fromLatin1("Unknown option: '%1'").arg(args[i]); } } else { if (!QFile::exists(args[i])) { qWarning("%s: File does not exist '%s'", qPrintable(args[0]), qPrintable(args[i])); return 1; } files.append(args[i]); } } if (!files.size() || !errorMsg.isEmpty() || helpRequested) return showHelp(args[0], errorMsg); return int(!processResourceFile(files, outFilename, list)); }