qmake compat: delete empty elements when assigning values

some replace functions can return empty elements which should be
zapped here (according to qmake, anyway).
This commit is contained in:
Oswald Buddenhagen
2010-05-27 20:21:01 +02:00
parent c982d275ed
commit 932d77b6dd

View File

@@ -1238,10 +1238,17 @@ ProStringList ProFileEvaluator::Private::split_value_list(const QString &vals)
return ret; return ret;
} }
static void zipEmpty(ProStringList *value)
{
for (int i = value->size(); --i >= 0;)
if (value->at(i).isEmpty())
value->remove(i);
}
static void insertUnique(ProStringList *varlist, const ProStringList &value) static void insertUnique(ProStringList *varlist, const ProStringList &value)
{ {
foreach (const ProString &str, value) foreach (const ProString &str, value)
if (!varlist->contains(str)) if (!str.isEmpty() && !varlist->contains(str))
varlist->append(str); varlist->append(str);
} }
@@ -1255,6 +1262,7 @@ static void removeAll(ProStringList *varlist, const ProString &value)
static void removeEach(ProStringList *varlist, const ProStringList &value) static void removeEach(ProStringList *varlist, const ProStringList &value)
{ {
foreach (const ProString &str, value) foreach (const ProString &str, value)
if (!str.isEmpty())
removeAll(varlist, str); removeAll(varlist, str);
} }
@@ -1571,17 +1579,19 @@ void ProFileEvaluator::Private::visitProVariable(
replaceInList(&m_filevaluemap[currentProFile()][varName], regexp, replace, global, m_tmp2); replaceInList(&m_filevaluemap[currentProFile()][varName], regexp, replace, global, m_tmp2);
} }
} else { } else {
const ProStringList &varVal = expandVariableReferences(value); ProStringList varVal = expandVariableReferences(value);
switch (tok) { switch (tok) {
default: // whatever - cannot happen default: // whatever - cannot happen
case TokAssign: // = case TokAssign: // =
if (!m_cumulative) { if (!m_cumulative) {
if (!m_skipLevel) { if (!m_skipLevel) {
zipEmpty(&varVal);
m_valuemapStack.top()[varName] = varVal; m_valuemapStack.top()[varName] = varVal;
m_filevaluemap[currentProFile()][varName] = varVal; m_filevaluemap[currentProFile()][varName] = varVal;
} }
} else { } else {
// We are greedy for values. // We are greedy for values.
zipEmpty(&varVal);
valuesRef(varName) += varVal; valuesRef(varName) += varVal;
m_filevaluemap[currentProFile()][varName] += varVal; m_filevaluemap[currentProFile()][varName] += varVal;
} }
@@ -1594,6 +1604,7 @@ void ProFileEvaluator::Private::visitProVariable(
break; break;
case TokAppend: // += case TokAppend: // +=
if (!m_skipLevel || m_cumulative) { if (!m_skipLevel || m_cumulative) {
zipEmpty(&varVal);
valuesRef(varName) += varVal; valuesRef(varName) += varVal;
m_filevaluemap[currentProFile()][varName] += varVal; m_filevaluemap[currentProFile()][varName] += varVal;
} }