move expandEnvVars() to QMakeGlobals

fits better there

Change-Id: Id369d8e22db97affd03ed991433b898b110f1946
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
This commit is contained in:
Oswald Buddenhagen
2012-06-11 21:06:00 +02:00
parent 4a9b1a7a58
commit 9c46bd5dec
7 changed files with 43 additions and 27 deletions

View File

@@ -76,7 +76,7 @@ QStringList ProFileEvaluator::values(const QString &variableName) const
QStringList ret;
ret.reserve(values.size());
foreach (const ProString &str, values)
ret << d->expandEnvVars(str.toQString());
ret << d->m_option->expandEnvVars(str.toQString());
return ret;
}
@@ -88,7 +88,7 @@ QStringList ProFileEvaluator::values(const QString &variableName, const ProFile
ret.reserve(values.size());
foreach (const ProString &str, values)
if (str.sourceFile() == pro)
ret << d->expandEnvVars(str.toQString());
ret << d->m_option->expandEnvVars(str.toQString());
return ret;
}

View File

@@ -397,7 +397,7 @@ ProStringList QMakeEvaluator::evaluateExpandFunction(
if (args.count() > 1)
singleLine = isTrue(args.at(1), m_tmp2);
QFile qfile(resolvePath(expandEnvVars(file)));
QFile qfile(resolvePath(m_option->expandEnvVars(file)));
if (qfile.open(QIODevice::ReadOnly)) {
QTextStream stream(&qfile);
while (!stream.atEnd()) {
@@ -414,7 +414,7 @@ ProStringList QMakeEvaluator::evaluateExpandFunction(
evalError(fL1S("fromfile(file, variable) requires two arguments."));
} else {
QHash<ProString, ProStringList> vars;
QString fn = resolvePath(expandEnvVars(args.at(0).toQString(m_tmp1)));
QString fn = resolvePath(m_option->expandEnvVars(args.at(0).toQString(m_tmp1)));
fn.detach();
if (evaluateFileInto(fn, QMakeEvaluatorHandler::EvalAuxFile,
&vars, &m_functionDefs, EvalWithDefaults))
@@ -702,7 +702,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateConditionalFunction(
evalError(fL1S("infile(file, var, [values]) requires two or three arguments."));
} else {
QHash<ProString, ProStringList> vars;
QString fn = resolvePath(expandEnvVars(args.at(0).toQString(m_tmp1)));
QString fn = resolvePath(m_option->expandEnvVars(args.at(0).toQString(m_tmp1)));
fn.detach();
if (!evaluateFileInto(fn, QMakeEvaluatorHandler::EvalAuxFile,
&vars, &m_functionDefs, EvalWithDefaults))
@@ -987,7 +987,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateConditionalFunction(
evalError(fL1S("include(file, into, silent) requires one, two or three arguments."));
return ReturnFalse;
}
QString fn = resolvePath(expandEnvVars(args.at(0).toQString(m_tmp1)));
QString fn = resolvePath(m_option->expandEnvVars(args.at(0).toQString(m_tmp1)));
fn.detach();
bool ok;
if (parseInto.isEmpty()) {
@@ -1029,7 +1029,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateConditionalFunction(
return ReturnFalse;
}
// XXX ignore_error unused
return returnBool(evaluateFeatureFile(expandEnvVars(args.at(0).toQString())));
return returnBool(evaluateFeatureFile(m_option->expandEnvVars(args.at(0).toQString())));
}
case T_DEBUG:
// Yup - do nothing. Nothing is going to enable debug output anyway.
@@ -1040,7 +1040,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateConditionalFunction(
.arg(function.toQString(m_tmp1)));
return ReturnFalse;
}
const QString &msg = expandEnvVars(args.at(0).toQString(m_tmp2));
const QString &msg = m_option->expandEnvVars(args.at(0).toQString(m_tmp2));
if (!m_skipLevel)
m_handler->fileMessage(fL1S("Project %1: %2")
.arg(function.toQString(m_tmp1).toUpper(), msg));
@@ -1085,7 +1085,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateConditionalFunction(
evalError(fL1S("exists(file) requires one argument."));
return ReturnFalse;
}
const QString &file = resolvePath(expandEnvVars(args.at(0).toQString(m_tmp1)));
const QString &file = resolvePath(m_option->expandEnvVars(args.at(0).toQString(m_tmp1)));
if (IoUtils::exists(file)) {
return ReturnTrue;

View File

@@ -98,9 +98,6 @@ void QMakeEvaluator::initStatics()
statics.strTEMPLATE = ProString("TEMPLATE");
statics.strQMAKE_DIR_SEP = ProString("QMAKE_DIR_SEP");
statics.reg_variableName.setPattern(QLatin1String("\\$\\(.*\\)"));
statics.reg_variableName.setMinimal(true);
statics.fakeValue = ProStringList(ProString("_FAKE_")); // It has to have a unique begin() value
initFunctionStatics();
@@ -313,21 +310,10 @@ static void replaceInList(ProStringList *varlist,
}
}
QString QMakeEvaluator::expandEnvVars(const QString &str) const
{
QString string = str;
int rep;
QRegExp reg_variableName = statics.reg_variableName; // Copy for thread safety
while ((rep = reg_variableName.indexIn(string)) != -1)
string.replace(rep, reg_variableName.matchedLength(),
m_option->getEnv(string.mid(rep + 2, reg_variableName.matchedLength() - 3)));
return string;
}
// This is braindead, but we want qmake compat
QString QMakeEvaluator::fixPathToLocalOS(const QString &str) const
{
QString string = expandEnvVars(str);
QString string = m_option->expandEnvVars(str);
if (string.length() > 2 && string.at(0).isLetter() && string.at(1) == QLatin1Char(':'))
string[0] = string[0].toLower();
@@ -911,7 +897,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::visitProFile(
QStringList mkspec_roots = qmakeMkspecPaths();
QString qmakespec = expandEnvVars(m_option->qmakespec);
QString qmakespec = m_option->expandEnvVars(m_option->qmakespec);
if (qmakespec.isEmpty()) {
foreach (const QString &root, mkspec_roots) {
QString mkspec = root + QLatin1String("/default");

View File

@@ -166,7 +166,6 @@ public:
QHash<ProString, ProStringList> &dependees,
ProStringList &rootSet) const;
QString expandEnvVars(const QString &str) const;
QString fixPathToLocalOS(const QString &str) const;
#ifndef QT_BOOTSTRAPPED

View File

@@ -62,7 +62,6 @@ struct QMakeStatics {
QHash<ProString, int> functions;
QHash<ProString, int> varList;
QHash<ProString, ProString> varMap;
QRegExp reg_variableName;
ProStringList fakeValue;
};

View File

@@ -72,8 +72,27 @@ QT_BEGIN_NAMESPACE
#define fL1S(s) QString::fromLatin1(s)
namespace { // MSVC doesn't seem to know the semantics of "static" ...
static struct {
QRegExp reg_variableName;
} statics;
}
static void initStatics()
{
if (!statics.reg_variableName.isEmpty())
return;
statics.reg_variableName.setPattern(QLatin1String("\\$\\(.*\\)"));
statics.reg_variableName.setMinimal(true);
}
QMakeGlobals::QMakeGlobals()
{
initStatics();
#ifdef Q_OS_WIN
dirlist_sep = QLatin1Char(';');
dir_sep = QLatin1Char('\\');
@@ -160,6 +179,17 @@ QStringList QMakeGlobals::getPathListEnv(const QString &var) const
return ret;
}
QString QMakeGlobals::expandEnvVars(const QString &str) const
{
QString string = str;
int rep;
QRegExp reg_variableName = statics.reg_variableName; // Copy for thread safety
while ((rep = reg_variableName.indexIn(string)) != -1)
string.replace(rep, reg_variableName.matchedLength(),
getEnv(string.mid(rep + 2, reg_variableName.matchedLength() - 3)));
return string;
}
#ifdef PROEVALUATOR_INIT_PROPS
bool QMakeGlobals::initProperties(const QString &qmake)
{

View File

@@ -73,6 +73,8 @@ public:
bool initProperties(const QString &qmake);
#endif
QString expandEnvVars(const QString &str) const;
private:
QString getEnv(const QString &) const;
QStringList getPathListEnv(const QString &var) const;