forked from qt-creator/qt-creator
introduce QMakeHandler
this is QMakeEvaluatorHandler, but derived from QMakeParserHandler. the idea is that the parser can be used stand-alone, while the evaluator needs the parser as well. we will need it in QMakeGlobals as well, so put it there, as that is the most central place. Change-Id: I6ee46c0e4b2e044bf3bfc6e4235b53525ddfc875 Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
This commit is contained in:
@@ -48,8 +48,7 @@ namespace Internal {
|
||||
class QtSupportPlugin;
|
||||
}
|
||||
|
||||
class QTSUPPORT_EXPORT ProMessageHandler : public QObject,
|
||||
public QMakeParserHandler, public QMakeEvaluatorHandler
|
||||
class QTSUPPORT_EXPORT ProMessageHandler : public QObject, public QMakeHandler
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@ void ProFileEvaluator::initialize()
|
||||
}
|
||||
|
||||
ProFileEvaluator::ProFileEvaluator(QMakeGlobals *option, QMakeParser *parser,
|
||||
QMakeEvaluatorHandler *handler)
|
||||
QMakeHandler *handler)
|
||||
: d(new QMakeEvaluator(option, parser, handler))
|
||||
{
|
||||
}
|
||||
@@ -187,7 +187,7 @@ ProFileEvaluator::TemplateType ProFileEvaluator::templateType() const
|
||||
|
||||
bool ProFileEvaluator::accept(ProFile *pro, QMakeEvaluator::LoadFlags flags)
|
||||
{
|
||||
return d->visitProFile(pro, QMakeEvaluatorHandler::EvalProjectFile, flags) == QMakeEvaluator::ReturnTrue;
|
||||
return d->visitProFile(pro, QMakeHandler::EvalProjectFile, flags) == QMakeEvaluator::ReturnTrue;
|
||||
}
|
||||
|
||||
QString ProFileEvaluator::propertyValue(const QString &name) const
|
||||
|
||||
@@ -45,7 +45,7 @@ QT_BEGIN_NAMESPACE
|
||||
class QMakeGlobals;
|
||||
class QMakeParser;
|
||||
class QMakeEvaluator;
|
||||
class QMakeEvaluatorHandler;
|
||||
class QMakeHandler;
|
||||
|
||||
class QMAKE_EXPORT ProFileEvaluator
|
||||
{
|
||||
@@ -62,7 +62,7 @@ public:
|
||||
// Call this from a concurrency-free context
|
||||
static void initialize();
|
||||
|
||||
ProFileEvaluator(QMakeGlobals *option, QMakeParser *parser, QMakeEvaluatorHandler *handler);
|
||||
ProFileEvaluator(QMakeGlobals *option, QMakeParser *parser, QMakeHandler *handler);
|
||||
~ProFileEvaluator();
|
||||
|
||||
ProFileEvaluator::TemplateType templateType() const;
|
||||
|
||||
@@ -416,7 +416,7 @@ ProStringList QMakeEvaluator::evaluateExpandFunction(
|
||||
QHash<ProString, ProStringList> vars;
|
||||
QString fn = resolvePath(m_option->expandEnvVars(args.at(0).toQString(m_tmp1)));
|
||||
fn.detach();
|
||||
if (evaluateFileInto(fn, QMakeEvaluatorHandler::EvalAuxFile,
|
||||
if (evaluateFileInto(fn, QMakeHandler::EvalAuxFile,
|
||||
&vars, &m_functionDefs, EvalWithDefaults))
|
||||
ret = vars.value(map(args.at(1)));
|
||||
}
|
||||
@@ -704,7 +704,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateConditionalFunction(
|
||||
QHash<ProString, ProStringList> vars;
|
||||
QString fn = resolvePath(m_option->expandEnvVars(args.at(0).toQString(m_tmp1)));
|
||||
fn.detach();
|
||||
if (!evaluateFileInto(fn, QMakeEvaluatorHandler::EvalAuxFile,
|
||||
if (!evaluateFileInto(fn, QMakeHandler::EvalAuxFile,
|
||||
&vars, &m_functionDefs, EvalWithDefaults))
|
||||
return ReturnFalse;
|
||||
if (args.count() == 2)
|
||||
@@ -991,10 +991,10 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateConditionalFunction(
|
||||
fn.detach();
|
||||
bool ok;
|
||||
if (parseInto.isEmpty()) {
|
||||
ok = evaluateFile(fn, QMakeEvaluatorHandler::EvalIncludeFile, LoadProOnly);
|
||||
ok = evaluateFile(fn, QMakeHandler::EvalIncludeFile, LoadProOnly);
|
||||
} else {
|
||||
QHash<ProString, ProStringList> symbols;
|
||||
if ((ok = evaluateFileInto(fn, QMakeEvaluatorHandler::EvalAuxFile,
|
||||
if ((ok = evaluateFileInto(fn, QMakeHandler::EvalAuxFile,
|
||||
&symbols, 0, EvalWithSetup))) {
|
||||
QHash<ProString, ProStringList> newMap;
|
||||
for (QHash<ProString, ProStringList>::ConstIterator
|
||||
|
||||
@@ -150,7 +150,7 @@ const ProString &QMakeEvaluator::map(const ProString &var)
|
||||
|
||||
|
||||
QMakeEvaluator::QMakeEvaluator(QMakeGlobals *option,
|
||||
QMakeParser *parser, QMakeEvaluatorHandler *handler)
|
||||
QMakeParser *parser, QMakeHandler *handler)
|
||||
: m_option(option), m_parser(parser), m_handler(handler)
|
||||
{
|
||||
// So that single-threaded apps don't have to call initialize() for now.
|
||||
@@ -834,7 +834,7 @@ void QMakeEvaluator::visitCmdLine(const QString &cmds)
|
||||
}
|
||||
|
||||
QMakeEvaluator::VisitReturn QMakeEvaluator::visitProFile(
|
||||
ProFile *pro, QMakeEvaluatorHandler::EvalFileType type, LoadFlags flags)
|
||||
ProFile *pro, QMakeHandler::EvalFileType type, LoadFlags flags)
|
||||
{
|
||||
if (!m_cumulative && !pro->isOk())
|
||||
return ReturnFalse;
|
||||
@@ -882,7 +882,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::visitProFile(
|
||||
if (!qmake_cache.isEmpty()) {
|
||||
qmake_cache = resolvePath(qmake_cache);
|
||||
QHash<ProString, ProStringList> cache_valuemap;
|
||||
if (evaluateFileInto(qmake_cache, QMakeEvaluatorHandler::EvalConfigFile,
|
||||
if (evaluateFileInto(qmake_cache, QMakeHandler::EvalConfigFile,
|
||||
&cache_valuemap, 0, EvalProOnly)) {
|
||||
if (m_option->qmakespec.isEmpty()) {
|
||||
const ProStringList &vals = cache_valuemap.value(ProString("QMAKESPEC"));
|
||||
@@ -939,13 +939,12 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::visitProFile(
|
||||
m_option->qmakespec = QDir::cleanPath(qmakespec);
|
||||
|
||||
QString spec = m_option->qmakespec + QLatin1String("/qmake.conf");
|
||||
if (!evaluateFileDirect(spec,
|
||||
QMakeEvaluatorHandler::EvalConfigFile, LoadProOnly)) {
|
||||
if (!evaluateFileDirect(spec, QMakeHandler::EvalConfigFile, LoadProOnly)) {
|
||||
m_handler->configError(
|
||||
fL1S("Could not read qmake configuration file %1").arg(spec));
|
||||
} else if (!m_option->cachefile.isEmpty()) {
|
||||
evaluateFileDirect(m_option->cachefile,
|
||||
QMakeEvaluatorHandler::EvalConfigFile, LoadProOnly);
|
||||
QMakeHandler::EvalConfigFile, LoadProOnly);
|
||||
}
|
||||
m_option->qmakespec_name = IoUtils::fileName(m_option->qmakespec).toString();
|
||||
if (m_option->qmakespec_name == QLatin1String("default")) {
|
||||
@@ -1884,7 +1883,7 @@ ProString QMakeEvaluator::first(const ProString &variableName) const
|
||||
}
|
||||
|
||||
bool QMakeEvaluator::evaluateFileDirect(
|
||||
const QString &fileName, QMakeEvaluatorHandler::EvalFileType type, LoadFlags flags)
|
||||
const QString &fileName, QMakeHandler::EvalFileType type, LoadFlags flags)
|
||||
{
|
||||
if (ProFile *pro = m_parser->parsedProFile(fileName, true)) {
|
||||
m_locationStack.push(m_current);
|
||||
@@ -1898,7 +1897,7 @@ bool QMakeEvaluator::evaluateFileDirect(
|
||||
}
|
||||
|
||||
bool QMakeEvaluator::evaluateFile(
|
||||
const QString &fileName, QMakeEvaluatorHandler::EvalFileType type, LoadFlags flags)
|
||||
const QString &fileName, QMakeHandler::EvalFileType type, LoadFlags flags)
|
||||
{
|
||||
if (fileName.isEmpty())
|
||||
return false;
|
||||
@@ -1955,7 +1954,7 @@ bool QMakeEvaluator::evaluateFeatureFile(const QString &fileName)
|
||||
#endif
|
||||
|
||||
// The path is fully normalized already.
|
||||
bool ok = evaluateFileDirect(fn, QMakeEvaluatorHandler::EvalFeatureFile, LoadProOnly);
|
||||
bool ok = evaluateFileDirect(fn, QMakeHandler::EvalFeatureFile, LoadProOnly);
|
||||
|
||||
#ifdef PROEVALUATOR_CUMULATIVE
|
||||
m_cumulative = cumulative;
|
||||
@@ -1964,7 +1963,7 @@ bool QMakeEvaluator::evaluateFeatureFile(const QString &fileName)
|
||||
}
|
||||
|
||||
bool QMakeEvaluator::evaluateFileInto(
|
||||
const QString &fileName, QMakeEvaluatorHandler::EvalFileType type,
|
||||
const QString &fileName, QMakeHandler::EvalFileType type,
|
||||
QHash<ProString, ProStringList> *values, ProFunctionDefs *funcs, EvalIntoMode mode)
|
||||
{
|
||||
ProFileEvaluator visitor(m_option, m_parser, m_handler);
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
#ifndef QMAKEEVALUATOR_H
|
||||
#define QMAKEEVALUATOR_H
|
||||
|
||||
#include "qmakeparser.h"
|
||||
#include "qmakeglobals.h"
|
||||
#include "ioutils.h"
|
||||
|
||||
@@ -44,9 +45,7 @@
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class QMakeParser;
|
||||
|
||||
class QMAKE_EXPORT QMakeEvaluatorHandler
|
||||
class QMAKE_EXPORT QMakeHandler : public QMakeParserHandler
|
||||
{
|
||||
public:
|
||||
// qmake/project configuration error
|
||||
@@ -75,7 +74,7 @@ public:
|
||||
static void initStatics();
|
||||
static void initFunctionStatics();
|
||||
QMakeEvaluator(QMakeGlobals *option, QMakeParser *parser,
|
||||
QMakeEvaluatorHandler *handler);
|
||||
QMakeHandler *handler);
|
||||
~QMakeEvaluator();
|
||||
|
||||
ProStringList values(const ProString &variableName) const;
|
||||
@@ -103,7 +102,7 @@ public:
|
||||
void skipExpression(const ushort *&tokPtr);
|
||||
|
||||
void visitCmdLine(const QString &cmds);
|
||||
VisitReturn visitProFile(ProFile *pro, QMakeEvaluatorHandler::EvalFileType type,
|
||||
VisitReturn visitProFile(ProFile *pro, QMakeHandler::EvalFileType type,
|
||||
LoadFlags flags);
|
||||
VisitReturn visitProBlock(ProFile *pro, const ushort *tokPtr);
|
||||
VisitReturn visitProBlock(const ushort *tokPtr);
|
||||
@@ -127,13 +126,13 @@ public:
|
||||
QString resolvePath(const QString &fileName) const
|
||||
{ return ProFileEvaluatorInternal::IoUtils::resolvePath(currentDirectory(), fileName); }
|
||||
|
||||
bool evaluateFileDirect(const QString &fileName, QMakeEvaluatorHandler::EvalFileType type,
|
||||
bool evaluateFileDirect(const QString &fileName, QMakeHandler::EvalFileType type,
|
||||
LoadFlags flags);
|
||||
bool evaluateFile(const QString &fileName, QMakeEvaluatorHandler::EvalFileType type,
|
||||
bool evaluateFile(const QString &fileName, QMakeHandler::EvalFileType type,
|
||||
LoadFlags flags);
|
||||
bool evaluateFeatureFile(const QString &fileName);
|
||||
enum EvalIntoMode { EvalProOnly, EvalWithDefaults, EvalWithSetup };
|
||||
bool evaluateFileInto(const QString &fileName, QMakeEvaluatorHandler::EvalFileType type,
|
||||
bool evaluateFileInto(const QString &fileName, QMakeHandler::EvalFileType type,
|
||||
QHash<ProString, ProStringList> *values, ProFunctionDefs *defs,
|
||||
EvalIntoMode mode); // values are output-only, defs are input-only
|
||||
void evalError(const QString &msg) const;
|
||||
@@ -201,7 +200,7 @@ public:
|
||||
|
||||
QMakeGlobals *m_option;
|
||||
QMakeParser *m_parser;
|
||||
QMakeEvaluatorHandler *m_handler;
|
||||
QMakeHandler *m_handler;
|
||||
|
||||
enum VarName {
|
||||
V_LITERAL_DOLLAR, V_LITERAL_HASH, V_LITERAL_WHITESPACE,
|
||||
|
||||
@@ -53,14 +53,11 @@ static void print(const QString &fileName, int lineNo, const QString &msg)
|
||||
qWarning("%s", qPrintable(msg));
|
||||
}
|
||||
|
||||
class ParseHandler : public QMakeParserHandler {
|
||||
class EvalHandler : public QMakeHandler {
|
||||
public:
|
||||
virtual void parseError(const QString &fileName, int lineNo, const QString &msg)
|
||||
{ print(fileName, lineNo, msg); }
|
||||
};
|
||||
|
||||
class EvalHandler : public QMakeEvaluatorHandler {
|
||||
public:
|
||||
virtual void configError(const QString &msg)
|
||||
{ qWarning("%s", qPrintable(msg)); }
|
||||
virtual void evalError(const QString &fileName, int lineNo, const QString &msg)
|
||||
@@ -72,7 +69,6 @@ public:
|
||||
virtual void doneWithEval(ProFile *) {}
|
||||
};
|
||||
|
||||
static ParseHandler parseHandler;
|
||||
static EvalHandler evalHandler;
|
||||
|
||||
static QString value(ProFileEvaluator &reader, const QString &variable)
|
||||
@@ -165,7 +161,7 @@ int main(int argc, char **argv)
|
||||
option.initProperties(QLibraryInfo::location(QLibraryInfo::BinariesPath) + QLatin1String("/qmake"));
|
||||
if (args.count() >= 4)
|
||||
option.setCommandLineArguments(args.mid(3));
|
||||
QMakeParser parser(0, &parseHandler);
|
||||
QMakeParser parser(0, &evalHandler);
|
||||
|
||||
bool cumulative = args[0] == QLatin1String("true");
|
||||
QFileInfo infi(args[1]);
|
||||
|
||||
Reference in New Issue
Block a user