Qmake: Fix wildcard expansion for absolute paths

Wildcard expansion for e.g. deployment purposes was implemented, but
accidentally only for relative file paths.
Amends 9e32603c3d.

Fixes: QTCREATORBUG-24695
Change-Id: Iab5c761ad68c2d4facecef5b44e6e50e66ed4941
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
This commit is contained in:
Christian Kandeler
2020-10-22 17:00:19 +02:00
parent c2913f65e4
commit c9c0e80339

View File

@@ -86,32 +86,32 @@ QVector<ProFileEvaluator::SourceFile> ProFileEvaluator::fixifiedValues(
QVector<SourceFile> result;
foreach (const ProString &str, d->values(ProKey(variable))) {
const QString &el = d->m_option->expandEnvVars(str.toQString());
if (IoUtils::isAbsolutePath(el)) {
result << SourceFile{QDir::cleanPath(el), str.sourceFile()};
const QString fn = IoUtils::isAbsolutePath(el)
? QDir::cleanPath(el) : QDir::cleanPath(baseDirectory + QLatin1Char('/') + el);
if (IoUtils::exists(fn)) {
result << SourceFile{fn, str.sourceFile()};
continue;
}
QStringView fileNamePattern;
if (expandWildcards) {
fileNamePattern = IoUtils::fileName(fn);
expandWildcards = fileNamePattern.contains('*') || fileNamePattern.contains('?');
}
if (expandWildcards) {
const QString patternBaseDir = IoUtils::pathName(fn).toString();
const QDir::Filters filters = QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot;
for (const QString &fileName : QDir(patternBaseDir).entryList(
QStringList(fileNamePattern.toString()), filters)) {
const QString fullFilePath
= QDir::cleanPath(patternBaseDir + '/' + fileName);
result << SourceFile({fullFilePath, str.sourceFile()});
}
} else {
QString fn = QDir::cleanPath(baseDirectory + QLatin1Char('/') + el);
if (IoUtils::exists(fn)) {
if (IoUtils::isAbsolutePath(el)) {
result << SourceFile{fn, str.sourceFile()};
} else {
QStringView fileNamePattern;
if (expandWildcards) {
fileNamePattern = IoUtils::fileName(fn);
expandWildcards = fileNamePattern.contains('*')
|| fileNamePattern.contains('?');
}
if (expandWildcards) {
const QString patternBaseDir = IoUtils::pathName(fn).toString();
const QDir::Filters filters = QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot;
for (const QString &fileName : QDir(patternBaseDir).entryList(
QStringList(fileNamePattern.toString()), filters)) {
const QString fullFilePath
= QDir::cleanPath(patternBaseDir + '/' + fileName);
result << SourceFile({fullFilePath, str.sourceFile()});
}
} else {
result << SourceFile{QDir::cleanPath(buildDirectory + QLatin1Char('/') + el),
str.sourceFile()};
}
result << SourceFile{QDir::cleanPath(buildDirectory + QLatin1Char('/') + el),
str.sourceFile()};
}
}
}