E_SPRINTF, E_JOIN, E_SPLIT, E_BASENAME, E_DIRNAME, E_SECTION,
E_FIND, E_SYSTEM, E_UNIQUE, E_QUOTE, E_ESCAPE_EXPAND,
E_UPPER, E_LOWER, E_FILES, E_PROMPT, E_RE_ESCAPE, E_REPLACE,
- E_SIZE, E_GENERATE_UID };
+ E_SIZE, E_GENERATE_UID, E_RESOLVE_DEPENDS };
QMap<QString, ExpandFunc> qmake_expandFunctions()
{
static QMap<QString, ExpandFunc> *qmake_expand_functions = 0;
qmake_expand_functions->insert("replace", E_REPLACE);
qmake_expand_functions->insert("size", E_SIZE);
qmake_expand_functions->insert("generate_uid", E_GENERATE_UID);
+ qmake_expand_functions->insert("resolve_depends", E_RESOLVE_DEPENDS);
}
return *qmake_expand_functions;
}
// defined in symbian generator
extern QString generate_test_uid(const QString& target);
+
+void calculateDeps(QStringList &sortedList, const QString &item, const QString &prefix,
+ QStringList &org, QMap<QString, QStringList> &place)
+{
+ if (sortedList.contains(item))
+ return;
+
+ foreach(QString dep, place.value(prefix + item + ".depends")) {
+ calculateDeps(sortedList, dep, prefix, org, place);
+ if (org.isEmpty())
+ break;
+ }
+
+ if (org.contains(item)) {
+ sortedList += item;
+ org.removeAll(item);
+ }
+}
+
+QStringList
+QMakeProject::resolveDepends(const QStringList &deps, const QString &prefix,
+ QMap<QString, QStringList> &place)
+{
+ QStringList sortedList;
+ QStringList org = deps;
+ foreach(QString item, deps) {
+ calculateDeps(sortedList, item, prefix, org, place);
+ if (org.isEmpty())
+ break;
+ }
+ return sortedList;
+}
+
QStringList
QMakeProject::doProjectExpand(QString func, QList<QStringList> args_list,
QMap<QString, QStringList> &place)
ret += generate_test_uid(args.first());
}
break;
+ case E_RESOLVE_DEPENDS: {
+ if(args.count() < 1 || args.count() > 2) {
+ fprintf(stderr, "%s:%d: resolve_depends(var, prefix) requires one or two arguments.\n",
+ parser.file.toLatin1().constData(), parser.line_no);
+ } else {
+ ret += resolveDepends(args[0].split(QString(Option::field_sep)),
+ (args.count() != 2 ? QString() : args[1]),
+ place);
+ }
+ break; }
default: {
fprintf(stderr, "%s:%d: Unknown replace function: %s\n",
parser.file.toLatin1().constData(), parser.line_no,