void doVariableReplace(QString *str);
QStringList evaluateExpandFunction(const QString &function, const QString &arguments);
QString format(const char *format) const;
+ void logMessage(const QString &msg) const;
+ void errorMessage(const QString &msg) const;
+ void fileMessage(const QString &msg) const;
QString currentFileName() const;
QString currentDirectory() const;
{
QFile file(pro->fileName());
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
- q->errorMessage(format("%1 not readable.").arg(pro->fileName()));
+ errorMessage(format("%1 not readable.").arg(pro->fileName()));
return false;
}
void ProFileEvaluator::Private::leaveScope()
{
if (m_blockstack.count() == 1)
- q->errorMessage(format("Excess closing brace."));
+ errorMessage(format("Excess closing brace."));
else
m_blockstack.pop();
finalizeBlock();
if (!loop.variable.isEmpty())
m_valuemap[loop.variable] = QStringList(QString::number(loop.index++));
if (loop.index > 1000) {
- q->errorMessage(format("ran into infinite loop (> 1000 iterations)."));
+ errorMessage(format("ran into infinite loop (> 1000 iterations)."));
return ProItem::ReturnFalse;
}
} else {
QString val = m_sts.varVal.first();
doVariableReplace(&val);
if (val.length() < 4 || val.at(0) != QLatin1Char('s')) {
- q->logMessage(format("the ~= operator can handle only the s/// function."));
+ logMessage(format("the ~= operator can handle only the s/// function."));
break;
}
QChar sep = val.at(1);
QStringList func = val.split(sep);
if (func.count() < 3 || func.count() > 4) {
- q->logMessage(format("the s/// function expects 3 or 4 arguments."));
+ logMessage(format("the s/// function expects 3 or 4 arguments."));
break;
}
}
}
if (qmakespec.isEmpty()) {
- q->errorMessage(format("Could not find qmake configuration directory"));
+ errorMessage(format("Could not find qmake configuration directory"));
// Unlike in qmake, not finding the spec is not critical ...
}
}
goto cool;
}
}
- q->errorMessage(format("Could not find qmake configuration file"));
+ errorMessage(format("Could not find qmake configuration file"));
// Unlike in qmake, a missing config is not critical ...
qmakespec.clear();
cool: ;
QString spec = m_option->qmakespec + QLatin1String("/qmake.conf");
if (!evaluateFileInto(spec,
&m_option->base_valuemap, &m_option->base_functions)) {
- q->errorMessage(format("Could not read qmake configuration file %1").arg(spec));
+ errorMessage(format("Could not read qmake configuration file %1").arg(spec));
} else {
updateHash(&m_option->base_valuemap, m_option->cache_valuemap);
}
if (name == QLatin1String("QMAKE_VERSION"))
return QLatin1String("1.0"); //### FIXME
if (complain)
- q->logMessage(format("Querying unknown property %1").arg(name));
+ logMessage(format("Querying unknown property %1").arg(name));
return QString();
}
}
if (term) {
if (unicode != term) {
- q->logMessage(format("Missing %1 terminator [found %2]")
+ logMessage(format("Missing %1 terminator [found %2]")
.arg(QChar(term))
.arg(unicode ? QString(unicode) : QString::fromLatin1(("end-of-line"))));
// if (ok)
QStringList ret;
if (m_valuemapStack.count() >= 100) {
- q->errorMessage(format("ran into infinite recursion (depth > 100)."));
+ errorMessage(format("ran into infinite recursion (depth > 100)."));
oki = false;
} else {
State sts = m_sts;
int end = -1;
if (func_t == E_SECTION) {
if (args.count() != 3 && args.count() != 4) {
- q->logMessage(format("%1(var) section(var, sep, begin, end) "
+ logMessage(format("%1(var) section(var, sep, begin, end) "
"requires three or four arguments.").arg(func));
} else {
var = args[0];
}
} else {
if (args.count() != 1) {
- q->logMessage(format("%1(var) requires one argument.").arg(func));
+ logMessage(format("%1(var) requires one argument.").arg(func));
} else {
var = args[0];
regexp = true;
}
case E_SPRINTF:
if(args.count() < 1) {
- q->logMessage(format("sprintf(format, ...) requires at least one argument"));
+ logMessage(format("sprintf(format, ...) requires at least one argument"));
} else {
QString tmp = args.at(0);
for (int i = 1; i < args.count(); ++i)
break;
case E_JOIN: {
if (args.count() < 1 || args.count() > 4) {
- q->logMessage(format("join(var, glue, before, after) requires one to four arguments."));
+ logMessage(format("join(var, glue, before, after) requires one to four arguments."));
} else {
QString glue, before, after;
if (args.count() >= 2)
}
case E_SPLIT: {
if (args.count() != 2) {
- q->logMessage(format("split(var, sep) requires one or two arguments"));
+ logMessage(format("split(var, sep) requires one or two arguments"));
} else {
const QString &sep = (args.count() == 2) ? args[1] : Option::field_sep;
foreach (const QString &var, values(args.first()))
}
case E_MEMBER: {
if (args.count() < 1 || args.count() > 3) {
- q->logMessage(format("member(var, start, end) requires one to three arguments."));
+ logMessage(format("member(var, start, end) requires one to three arguments."));
} else {
bool ok = true;
const QStringList var = values(args.first());
}
}
if (!ok)
- q->logMessage(format("member() argument 2 (start) '%2' invalid.")
+ logMessage(format("member() argument 2 (start) '%2' invalid.")
.arg(start_str));
} else {
end = start;
if (args.count() == 3)
end = args[2].toInt(&ok);
if (!ok)
- q->logMessage(format("member() argument 3 (end) '%2' invalid.\n")
+ logMessage(format("member() argument 3 (end) '%2' invalid.\n")
.arg(args[2]));
}
}
case E_FIRST:
case E_LAST: {
if (args.count() != 1) {
- q->logMessage(format("%1(var) requires one argument.").arg(func));
+ logMessage(format("%1(var) requires one argument.").arg(func));
} else {
const QStringList var = values(args.first());
if (!var.isEmpty()) {
}
case E_CAT:
if (args.count() < 1 || args.count() > 2) {
- q->logMessage(format("cat(file, singleline=true) requires one or two arguments."));
+ logMessage(format("cat(file, singleline=true) requires one or two arguments."));
} else {
QString file = args[0];
#if 0 // Used only by Qt's configure for caching
case E_FROMFILE:
if (args.count() != 2) {
- q->logMessage(format("fromfile(file, variable) requires two arguments."));
+ logMessage(format("fromfile(file, variable) requires two arguments."));
} else {
QString file = args[0], seek_variableName = args[1];
#endif
case E_EVAL: {
if (args.count() != 1) {
- q->logMessage(format("eval(variable) requires one argument"));
+ logMessage(format("eval(variable) requires one argument"));
} else {
ret += values(args.at(0));
break; }
case E_FIND:
if (args.count() != 2) {
- q->logMessage(format("find(var, str) requires two arguments."));
+ logMessage(format("find(var, str) requires two arguments."));
} else {
QRegExp regx(args[1]);
foreach (const QString &val, values(args.first()))
case E_SYSTEM:
if (!m_skipLevel) {
if (args.count() < 1 || args.count() > 2) {
- q->logMessage(format("system(execute) requires one or two arguments."));
+ logMessage(format("system(execute) requires one or two arguments."));
} else {
char buff[256];
FILE *proc = QT_POPEN(args[0].toLatin1(), "r");
break;
case E_UNIQUE:
if(args.count() != 1) {
- q->logMessage(format("unique(var) requires one argument."));
+ logMessage(format("unique(var) requires one argument."));
} else {
foreach (const QString &var, values(args.first()))
if (!ret.contains(var))
break;
case E_FILES:
if (args.count() != 1 && args.count() != 2) {
- q->logMessage(format("files(pattern, recursive=false) requires one or two arguments"));
+ logMessage(format("files(pattern, recursive=false) requires one or two arguments"));
} else {
bool recursive = false;
if (args.count() == 2)
break;
case E_REPLACE:
if(args.count() != 3 ) {
- q->logMessage(format("replace(var, before, after) requires three arguments"));
+ logMessage(format("replace(var, before, after) requires three arguments"));
} else {
const QRegExp before(args[1]);
const QString after(args[2]);
}
break;
case 0:
- q->logMessage(format("'%1' is not a recognized replace function").arg(func));
+ logMessage(format("'%1' is not a recognized replace function").arg(func));
break;
default:
- q->logMessage(format("Function '%1' is not implemented").arg(func));
+ logMessage(format("Function '%1' is not implemented").arg(func));
break;
}
if (val)
return ProItem::ReturnTrue;
} else {
- q->logMessage(format("Unexpected return value from test '%1': %2")
+ logMessage(format("Unexpected return value from test '%1': %2")
.arg(function).arg(ret.join(QLatin1String(" :: "))));
}
}
m_definingTest = false;
defineFunc:
if (args.count() != 1) {
- q->logMessage(format("%s(function) requires one argument.").arg(function));
+ logMessage(format("%s(function) requires one argument.").arg(function));
return ProItem::ReturnFalse;
}
m_definingFunc = args.first();
return ProItem::ReturnTrue;
case T_DEFINED:
if (args.count() < 1 || args.count() > 2) {
- q->logMessage(format("defined(function, [\"test\"|\"replace\"])"
+ logMessage(format("defined(function, [\"test\"|\"replace\"])"
" requires one or two arguments."));
return ProItem::ReturnFalse;
}
return returnBool(m_functionDefs.testFunctions.contains(args[0]));
else if (args[1] == QLatin1String("replace"))
return returnBool(m_functionDefs.replaceFunctions.contains(args[0]));
- q->logMessage(format("defined(function, type):"
+ logMessage(format("defined(function, type):"
" unexpected type [%1].\n").arg(args[1]));
return ProItem::ReturnFalse;
}
if (m_skipLevel || m_cumulative)
return ProItem::ReturnTrue;
if (m_valuemapStack.isEmpty()) {
- q->logMessage(format("unexpected return()."));
+ logMessage(format("unexpected return()."));
return ProItem::ReturnFalse;
}
return ProItem::ReturnReturn;
if (m_skipLevel && !m_cumulative)
return ProItem::ReturnTrue;
if (args.count() != 1) {
- q->logMessage(format("export(variable) requires one argument."));
+ logMessage(format("export(variable) requires one argument."));
return ProItem::ReturnFalse;
}
for (int i = 0; i < m_valuemapStack.size(); ++i) {
if (m_skipLevel)
return ProItem::ReturnFalse;
if (args.count() > 2 || args.count() < 1) {
- q->logMessage(format("for({var, list|var, forever|ever})"
+ logMessage(format("for({var, list|var, forever|ever})"
" requires one or two arguments."));
return ProItem::ReturnFalse;
}
doVariableReplace(&args[0]);
it_list = args[0];
if (args[0] != QLatin1String("ever")) {
- q->logMessage(format("for({var, list|var, forever|ever})"
+ logMessage(format("for({var, list|var, forever|ever})"
" requires one or two arguments."));
return ProItem::ReturnFalse;
}
if (!m_loopStack.isEmpty())
return ProItem::ReturnBreak;
// ### missing: breaking out of multiline blocks
- q->logMessage(format("unexpected break()."));
+ logMessage(format("unexpected break()."));
return ProItem::ReturnFalse;
case T_NEXT:
if (m_skipLevel)
return ProItem::ReturnFalse;
if (!m_loopStack.isEmpty())
return ProItem::ReturnNext;
- q->logMessage(format("unexpected next()."));
+ logMessage(format("unexpected next()."));
return ProItem::ReturnFalse;
case T_IF: {
if (args.count() != 1) {
- q->logMessage(format("if(condition) requires one argument."));
+ logMessage(format("if(condition) requires one argument."));
return ProItem::ReturnFalse;
}
QString cond = args.first();
}
case T_CONFIG: {
if (args.count() < 1 || args.count() > 2) {
- q->logMessage(format("CONFIG(config) requires one or two arguments."));
+ logMessage(format("CONFIG(config) requires one or two arguments."));
return ProItem::ReturnFalse;
}
if (args.count() == 1) {
}
case T_CONTAINS: {
if (args.count() < 2 || args.count() > 3) {
- q->logMessage(format("contains(var, val) requires two or three arguments."));
+ logMessage(format("contains(var, val) requires two or three arguments."));
return ProItem::ReturnFalse;
}
}
case T_COUNT: {
if (args.count() != 2 && args.count() != 3) {
- q->logMessage(format("count(var, count, op=\"equals\") requires two or three arguments."));
+ logMessage(format("count(var, count, op=\"equals\") requires two or three arguments."));
return ProItem::ReturnFalse;
}
if (args.count() == 3) {
|| comp == QLatin1String("=") || comp == QLatin1String("==")) {
return returnBool(values(args.first()).count() == args[1].toInt());
} else {
- q->logMessage(format("unexpected modifier to count(%2)").arg(comp));
+ logMessage(format("unexpected modifier to count(%2)").arg(comp));
return ProItem::ReturnFalse;
}
}
case T_GREATERTHAN:
case T_LESSTHAN: {
if (args.count() != 2) {
- q->logMessage(format("%1(variable, value) requires two arguments.").arg(function));
+ logMessage(format("%1(variable, value) requires two arguments.").arg(function));
return ProItem::ReturnFalse;
}
QString rhs(args[1]), lhs(values(args[0]).join(Option::field_sep));
}
case T_EQUALS:
if (args.count() != 2) {
- q->logMessage(format("%1(variable, value) requires two arguments.").arg(function));
+ logMessage(format("%1(variable, value) requires two arguments.").arg(function));
return ProItem::ReturnFalse;
}
return returnBool(values(args[0]).join(Option::field_sep) == args[1]);
if (m_skipLevel && !m_cumulative)
return ProItem::ReturnFalse;
if (args.count() != 1) {
- q->logMessage(format("%1(variable) requires one argument.").arg(function));
+ logMessage(format("%1(variable) requires one argument.").arg(function));
return ProItem::ReturnFalse;
}
QHash<QString, QStringList>::Iterator it = m_valuemap.find(args[0]);
if (m_skipLevel && !m_cumulative)
return ProItem::ReturnFalse;
if (args.count() != 1) {
- q->logMessage(format("%1(variable) requires one argument.").arg(function));
+ logMessage(format("%1(variable) requires one argument.").arg(function));
return ProItem::ReturnFalse;
}
QHash<QString, QStringList>::Iterator it = m_valuemap.find(args[0]);
if ((args.count() == 2) || (args.count() == 3) ) {
parseInto = args[1];
} else if (args.count() != 1) {
- q->logMessage(format("include(file) requires one,two or three arguments."));
+ logMessage(format("include(file) requires one, two or three arguments."));
return ProItem::ReturnFalse;
}
QString fileName = args.first();
QString sarg = args[1];
ignore_error = (!sarg.compare(QLatin1String("true"), Qt::CaseInsensitive) || sarg.toInt());
} else if (args.count() != 1) {
- q->logMessage(format("load(feature) requires one or two arguments."));
+ logMessage(format("load(feature) requires one or two arguments."));
return ProItem::ReturnFalse;
}
// XXX ignore_error unused
return ProItem::ReturnFalse;
case T_MESSAGE: {
if (args.count() != 1) {
- q->logMessage(format("%1(message) requires one argument.").arg(function));
+ logMessage(format("%1(message) requires one argument.").arg(function));
return ProItem::ReturnFalse;
}
QString msg = expandEnvVars(args.first());
- q->fileMessage(QString::fromLatin1("Project %1: %2").arg(function.toUpper(), msg));
+ fileMessage(QString::fromLatin1("Project %1: %2").arg(function.toUpper(), msg));
// ### Consider real termination in non-cumulative mode
return returnBool(function != QLatin1String("error"));
}
#if 0 // Way too dangerous to enable.
case T_SYSTEM: {
if (args.count() != 1) {
- q->logMessage(format("system(exec) requires one argument."));
+ logMessage(format("system(exec) requires one argument."));
ProItem::ReturnFalse;
}
return returnBool(system(args.first().toLatin1().constData()) == 0);
#endif
case T_ISEMPTY: {
if (args.count() != 1) {
- q->logMessage(format("isEmpty(var) requires one argument."));
+ logMessage(format("isEmpty(var) requires one argument."));
return ProItem::ReturnFalse;
}
QStringList sl = values(args.first());
}
case T_EXISTS: {
if (args.count() != 1) {
- q->logMessage(format("exists(file) requires one argument."));
+ logMessage(format("exists(file) requires one argument."));
return ProItem::ReturnFalse;
}
QString file = args.first();
return ProItem::ReturnFalse;
}
case 0:
- q->logMessage(format("'%1' is not a recognized test function").arg(function));
+ logMessage(format("'%1' is not a recognized test function").arg(function));
return ProItem::ReturnFalse;
default:
- q->logMessage(format("Function '%1' is not implemented").arg(function));
+ logMessage(format("Function '%1' is not implemented").arg(function));
return ProItem::ReturnFalse;
}
}
QString fn = QDir::cleanPath(fi.absoluteFilePath());
foreach (const ProFile *pf, m_profileStack)
if (pf->fileName() == fn) {
- q->errorMessage(format("circular inclusion of %1").arg(fn));
+ errorMessage(format("circular inclusion of %1").arg(fn));
return false;
}
ProFile *pro = q->parsedProFile(fn);
return QString::fromLatin1("%1(%2):").arg(fileName).arg(lineNumber) + QString::fromAscii(fmt);
}
+void ProFileEvaluator::Private::logMessage(const QString &message) const
+{
+ if (m_verbose && !m_skipLevel)
+ q->logMessage(message);
+}
+
+void ProFileEvaluator::Private::fileMessage(const QString &message) const
+{
+ if (!m_skipLevel)
+ q->fileMessage(message);
+}
+
+void ProFileEvaluator::Private::errorMessage(const QString &message) const
+{
+ if (!m_skipLevel)
+ q->errorMessage(message);
+}
+
///////////////////////////////////////////////////////////////////////
//
void ProFileEvaluator::logMessage(const QString &message)
{
- if (d->m_verbose && !d->m_skipLevel)
- qWarning("%s", qPrintable(message));
+ qWarning("%s", qPrintable(message));
}
void ProFileEvaluator::fileMessage(const QString &message)
{
- if (!d->m_skipLevel)
- qWarning("%s", qPrintable(message));
+ qWarning("%s", qPrintable(message));
}
void ProFileEvaluator::errorMessage(const QString &message)
{
- if (!d->m_skipLevel)
- qWarning("%s", qPrintable(message));
+ qWarning("%s", qPrintable(message));
}
void ProFileEvaluator::setVerbose(bool on)