main.cpp
164 lines
| 5.2 KiB
| text/x-c
|
CppLexer
/ generator / main.cpp
florianlink
|
r10 | /**************************************************************************** | ||
** | ||||
** 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 = ":/trolltech/generator/qtscript_masterinclude.h"; | ||||
QString default_system = ":/trolltech/generator/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); | ||||
printf("Please wait while source files are being generated...\n"); | ||||
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); | ||||
} | ||||