diff options
author | Oswald Buddenhagen <oswald.buddenhagen@digia.com> | 2014-07-25 19:37:57 +0200 |
---|---|---|
committer | Oswald Buddenhagen <oswald.buddenhagen@digia.com> | 2014-07-30 10:31:53 +0200 |
commit | 26bbc40db925d7823d9cf9db80a4093eba613ad8 (patch) | |
tree | 371ba421d0f403970fa430656f029a318c29c026 /qmake/library | |
parent | 1c23e51dbd11b50fe32c10b2415cd1f2401a591e (diff) | |
download | qtbase-26bbc40db925d7823d9cf9db80a4093eba613ad8.tar.gz |
add priority sorting to $$resolve_depends()
all else being equal, items with a higher numerical priority will appear
first in the result.
Change-Id: I4ee37ff404a53c4152a1e4fc2fc3c23ef525234d
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
Diffstat (limited to 'qmake/library')
-rw-r--r-- | qmake/library/qmakebuiltins.cpp | 29 | ||||
-rw-r--r-- | qmake/library/qmakeevaluator.h | 6 |
2 files changed, 21 insertions, 14 deletions
diff --git a/qmake/library/qmakebuiltins.cpp b/qmake/library/qmakebuiltins.cpp index 46934c83e9..9824b306b9 100644 --- a/qmake/library/qmakebuiltins.cpp +++ b/qmake/library/qmakebuiltins.cpp @@ -437,8 +437,9 @@ QByteArray QMakeEvaluator::getCommandOutput(const QString &args) const void QMakeEvaluator::populateDeps( const ProStringList &deps, const ProString &prefix, const ProStringList &suffixes, + const ProString &priosfx, QHash<ProKey, QSet<ProKey> > &dependencies, ProValueMap &dependees, - ProStringList &rootSet) const + QMultiMap<int, ProString> &rootSet) const { foreach (const ProString &item, deps) if (!dependencies.contains(item.toKey())) { @@ -447,13 +448,13 @@ void QMakeEvaluator::populateDeps( foreach (const ProString &suffix, suffixes) depends += values(ProKey(prefix + item + suffix)); if (depends.isEmpty()) { - rootSet << item; + rootSet.insert(first(ProKey(prefix + item + priosfx)).toInt(), item); } else { foreach (const ProString &dep, depends) { dset.insert(dep.toKey()); dependees[dep.toKey()] << item; } - populateDeps(depends, prefix, suffixes, dependencies, dependees, rootSet); + populateDeps(depends, prefix, suffixes, priosfx, dependencies, dependees, rootSet); } } } @@ -974,27 +975,31 @@ ProStringList QMakeEvaluator::evaluateBuiltinExpand( break; case E_SORT_DEPENDS: case E_RESOLVE_DEPENDS: - if (args.count() < 1 || args.count() > 3) { - evalError(fL1S("%1(var, [prefix, [suffixes]]) requires one to three arguments.") + if (args.count() < 1 || args.count() > 4) { + evalError(fL1S("%1(var, [prefix, [suffixes, [prio-suffix]]]) requires one to four arguments.") .arg(func.toQString(m_tmp1))); } else { QHash<ProKey, QSet<ProKey> > dependencies; ProValueMap dependees; - ProStringList rootSet; + QMultiMap<int, ProString> rootSet; ProStringList orgList = values(args.at(0).toKey()); - populateDeps(orgList, (args.count() < 2 ? ProString() : args.at(1)), + ProString prefix = args.count() < 2 ? ProString() : args.at(1); + ProString priosfx = args.count() < 4 ? ProString(".priority") : args.at(3); + populateDeps(orgList, prefix, args.count() < 3 ? ProStringList(ProString(".depends")) : split_value_list(args.at(2).toQString(m_tmp2)), - dependencies, dependees, rootSet); - for (int i = 0; i < rootSet.size(); ++i) { - const ProString &item = rootSet.at(i); + priosfx, dependencies, dependees, rootSet); + while (!rootSet.isEmpty()) { + QMultiMap<int, ProString>::iterator it = rootSet.begin(); + const ProString item = *it; + rootSet.erase(it); if ((func_t == E_RESOLVE_DEPENDS) || orgList.contains(item)) ret.prepend(item); foreach (const ProString &dep, dependees[item.toKey()]) { QSet<ProKey> &dset = dependencies[dep.toKey()]; - dset.remove(rootSet.at(i).toKey()); // *Don't* use 'item' - rootSet may have changed! + dset.remove(item.toKey()); if (dset.isEmpty()) - rootSet << dep; + rootSet.insert(first(ProKey(prefix + dep + priosfx)).toInt(), dep); } } } diff --git a/qmake/library/qmakeevaluator.h b/qmake/library/qmakeevaluator.h index f322a48011..8b2fc3ef06 100644 --- a/qmake/library/qmakeevaluator.h +++ b/qmake/library/qmakeevaluator.h @@ -51,6 +51,7 @@ #include <qlist.h> #include <qlinkedlist.h> +#include <qmap.h> #include <qset.h> #include <qstack.h> #include <qstring.h> @@ -238,8 +239,9 @@ public: void populateDeps( const ProStringList &deps, const ProString &prefix, const ProStringList &suffixes, - QHash<ProKey, QSet<ProKey> > &dependencies, - ProValueMap &dependees, ProStringList &rootSet) const; + const ProString &priosfx, + QHash<ProKey, QSet<ProKey> > &dependencies, ProValueMap &dependees, + QMultiMap<int, ProString> &rootSet) const; VisitReturn writeFile(const QString &ctx, const QString &fn, QIODevice::OpenMode mode, const QString &contents); |