summaryrefslogtreecommitdiffstats
path: root/generator/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'generator/main.cpp')
-rw-r--r--generator/main.cpp162
1 files changed, 162 insertions, 0 deletions
diff --git a/generator/main.cpp b/generator/main.cpp
new file mode 100644
index 0000000..dcf1d27
--- /dev/null
+++ b/generator/main.cpp
@@ -0,0 +1,162 @@
+/****************************************************************************
+**
+** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved.
+**
+** This file is part of the Qt Script Generator project on Trolltech Labs.
+**
+** This file may be used under the terms of the GNU General Public
+** License version 2.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of
+** this file. Please review the following information to ensure GNU
+** General Public Licensing requirements will be met:
+** http://www.trolltech.com/products/qt/opensource.html
+**
+** If you are unsure which license is appropriate for your use, please
+** review the following information:
+** http://www.trolltech.com/products/qt/licensing.html or contact the
+** sales department at sales@trolltech.com.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+****************************************************************************/
+
+#include "main.h"
+#include "asttoxml.h"
+#include "reporthandler.h"
+#include "typesystem.h"
+#include "generatorset.h"
+#include "fileout.h"
+
+#include <QDir>
+
+void displayHelp(GeneratorSet *generatorSet);
+
+#include <QDebug>
+int main(int argc, char *argv[])
+{
+ GeneratorSet *gs = GeneratorSet::getInstance();
+
+ QString default_file = "qtscript_masterinclude.h";
+ QString default_system = "build_all.txt";
+
+ QString fileName;
+ QString typesystemFileName;
+ QString pp_file = ".preprocessed.tmp";
+ QStringList rebuild_classes;
+
+ QMap<QString, QString> args;
+
+ int argNum = 0;
+ for (int i=1; i<argc; ++i) {
+ QString arg(argv[i]);
+ arg = arg.trimmed();
+ if( arg.startsWith("--") ) {
+ int split = arg.indexOf("=");
+ if( split > 0 )
+ args[arg.mid(2).left(split-2)] = arg.mid(split + 1).trimmed();
+ else
+ args[arg.mid(2)] = QString();
+ } else if( arg.startsWith("-")) {
+ args[arg.mid(1)] = QString();
+ } else {
+ argNum++;
+ args[QString("arg-%1").arg(argNum)] = arg;
+ }
+ }
+
+ if (args.contains("no-suppress-warnings")) {
+ TypeDatabase *db = TypeDatabase::instance();
+ db->setSuppressWarnings(false);
+ }
+
+ if (args.contains("debug-level")) {
+ QString level = args.value("debug-level");
+ if (level == "sparse")
+ ReportHandler::setDebugLevel(ReportHandler::SparseDebug);
+ else if (level == "medium")
+ ReportHandler::setDebugLevel(ReportHandler::MediumDebug);
+ else if (level == "full")
+ ReportHandler::setDebugLevel(ReportHandler::FullDebug);
+ }
+
+ if (args.contains("dummy")) {
+ FileOut::dummy = true;
+ }
+
+ if (args.contains("diff")) {
+ FileOut::diff = true;
+ }
+
+ if (args.contains("license"))
+ FileOut::license = true;
+
+ if (args.contains("rebuild-only")) {
+ QStringList classes = args.value("rebuild-only").split(",", QString::SkipEmptyParts);
+ TypeDatabase::instance()->setRebuildClasses(classes);
+ }
+
+ fileName = args.value("arg-1");
+
+ typesystemFileName = args.value("arg-2");
+ if (args.contains("arg-3"))
+ displayHelp(gs);
+
+ if (fileName.isEmpty())
+ fileName = default_file;
+
+ if (typesystemFileName.isEmpty())
+ typesystemFileName = default_system;
+
+ if (fileName.isEmpty() || typesystemFileName.isEmpty() )
+ displayHelp(gs);
+
+ if (!gs->readParameters(args))
+ displayHelp(gs);
+
+ if (!TypeDatabase::instance()->parseFile(typesystemFileName))
+ qFatal("Cannot parse file: '%s'", qPrintable(typesystemFileName));
+
+ if (!Preprocess::preprocess(fileName, pp_file, args.value("include-paths"))) {
+ fprintf(stderr, "Preprocessor failed on file: '%s'\n", qPrintable(fileName));
+ return 1;
+ }
+
+ if (args.contains("ast-to-xml")) {
+ astToXML(pp_file);
+ return 0;
+ }
+
+ gs->buildModel(pp_file);
+ if (args.contains("dump-object-tree")) {
+ gs->dumpObjectTree();
+ return 0;
+ }
+ printf("%s\n", qPrintable(gs->generate()));
+
+ printf("Done, %d warnings (%d known issues)\n", ReportHandler::warningCount(),
+ ReportHandler::suppressedCount());
+}
+
+
+void displayHelp(GeneratorSet* generatorSet) {
+#if defined(Q_OS_WIN32)
+ char path_splitter = ';';
+#else
+ char path_splitter = ':';
+#endif
+ printf("Usage:\n generator [options] header-file typesystem-file\n\n");
+ printf("Available options:\n\n");
+ printf("General:\n");
+ printf(" --debug-level=[sparse|medium|full] \n"
+ " --dump-object-tree \n"
+ " --help, -h or -? \n"
+ " --no-suppress-warnings \n"
+ " --output-directory=[dir] \n"
+ " --include-paths=<path>[%c<path>%c...] \n"
+ " --print-stdout \n",
+ path_splitter, path_splitter);
+
+ printf("%s", qPrintable( generatorSet->usage()));
+ exit(0);
+}