From ed96d199f197b2f82fa3ad19484a809ec1c0a4a4 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Sun, 24 Jun 2012 17:22:23 +0200 Subject: fix somewhat common edge case in $$shadowed() if source and build dir are direct children of the common root and we are shadowing the top-level source dir, there is of course no trailing slash to match. Change-Id: I8a34a6a72d16cb21d77d056e037235af9b32a008 Reviewed-by: Davide Pesavento Reviewed-by: Andreas Hartmetz Reviewed-by: Joerg Bornemann Reviewed-by: Oswald Buddenhagen --- qmake/option.cpp | 4 ++-- qmake/project.cpp | 7 +++++-- tests/auto/tools/qmake/testdata/functions/functions.pro | 1 + 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/qmake/option.cpp b/qmake/option.cpp index 6eeddfd154..714aebe6ef 100644 --- a/qmake/option.cpp +++ b/qmake/option.cpp @@ -604,10 +604,10 @@ void Option::prepareProject(const QString &pfile) dstpath += QLatin1Char('/'); int srcLen = srcpath.length(); int dstLen = dstpath.length(); - int lastSl = 0; + int lastSl = -1; while (++lastSl, srcpath.at(--srcLen) == dstpath.at(--dstLen)) if (srcpath.at(srcLen) == QLatin1Char('/')) - lastSl = 1; + lastSl = 0; mkfile::source_root = srcpath.left(srcLen + lastSl); mkfile::build_root = dstpath.left(dstLen + lastSl); } else { diff --git a/qmake/project.cpp b/qmake/project.cpp index 6e79f7a37d..360c0958f1 100644 --- a/qmake/project.cpp +++ b/qmake/project.cpp @@ -2685,10 +2685,13 @@ QMakeProject::doProjectExpand(QString func, QList args_list, break; case E_SHADOWED: { QString val = QDir::cleanPath(QFileInfo(args.at(0)).absoluteFilePath()); - if (Option::mkfile::source_root.isEmpty()) + if (Option::mkfile::source_root.isEmpty()) { ret += val; - else if (val.startsWith(Option::mkfile::source_root)) + } else if (val.startsWith(Option::mkfile::source_root) + && (val.length() == Option::mkfile::source_root.length() + || val.at(Option::mkfile::source_root.length()) == QLatin1Char('/'))) { ret += Option::mkfile::build_root + val.mid(Option::mkfile::source_root.length()); + } break; } case E_ABSOLUTE_PATH: if (args.count() > 2) diff --git a/tests/auto/tools/qmake/testdata/functions/functions.pro b/tests/auto/tools/qmake/testdata/functions/functions.pro index 9ec2ffe93f..daab1fd954 100644 --- a/tests/auto/tools/qmake/testdata/functions/functions.pro +++ b/tests/auto/tools/qmake/testdata/functions/functions.pro @@ -113,6 +113,7 @@ out = "easy \"less easy\" sca\$\${LITERAL_HASH}ry crazy\$\$escape_expand(\\\\t\\ testReplace($$val_escape(in), $$out, "val_escape") testReplace($$shadowed($$PWD/something), $$OUT_PWD/something, "shadowed") +testReplace($$shadowed($$PWD), $$OUT_PWD, "shadowed (take 2)") #format_number spc = " " -- cgit v1.2.3