summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--qmake/generators/makefile.cpp18
-rw-r--r--qmake/generators/makefile.h1
2 files changed, 19 insertions, 0 deletions
diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp
index 45684b5225..f824f12bce 100644
--- a/qmake/generators/makefile.cpp
+++ b/qmake/generators/makefile.cpp
@@ -424,6 +424,9 @@ MakefileGenerator::init()
}
incs.append(project->specDir());
+ const auto platform = v["QMAKE_PLATFORM"];
+ resolveDependenciesInFrameworks = platform.contains("darwin");
+
const char * const cacheKeys[] = { "_QMAKE_STASH_", "_QMAKE_SUPER_CACHE_", nullptr };
for (int i = 0; cacheKeys[i]; ++i) {
if (v[cacheKeys[i]].isEmpty())
@@ -1847,6 +1850,21 @@ QString MakefileGenerator::resolveDependency(const QDir &outDir, const QString &
QString lf = outDir.absoluteFilePath(local + '/' + file);
if (exists(lf))
return lf;
+
+ if (resolveDependenciesInFrameworks) {
+ // Given a file like "QtWidgets/QWidget", try to resolve it
+ // as framework header "QtWidgets.framework/Headers/QWidget".
+ int cut = file.indexOf('/');
+ if (cut < 0 || cut + 1 >= file.size())
+ continue;
+ QStringRef framework = file.leftRef(cut);
+ QStringRef include = file.midRef(cut + 1);
+ if (local.endsWith('/' + framework + ".framework/Headers")) {
+ lf = outDir.absoluteFilePath(local + '/' + include);
+ if (exists(lf))
+ return lf;
+ }
+ }
}
return {};
}
diff --git a/qmake/generators/makefile.h b/qmake/generators/makefile.h
index 3a75f6f473..0535017ff6 100644
--- a/qmake/generators/makefile.h
+++ b/qmake/generators/makefile.h
@@ -55,6 +55,7 @@ class MakefileGenerator : protected QMakeSourceFileInfo
{
QString spec;
bool no_io;
+ bool resolveDependenciesInFrameworks = false;
QHash<QString, bool> init_compiler_already;
QString makedir, chkexists;
QString build_args();