From 1185f651e3ddfacdc828a3ddd3a40cf963f6407b Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Thu, 13 Mar 2025 13:10:18 +0100 Subject: [PATCH] QMake: Add ability to link against xcframeworks with Xcode This adds rudimentary support for linking against xcframeworks. We can now do LIBS += /absolute/path/to/some.xcframework and this will end up in the frameworks section of the Xcode project. This is required for linking against the FFmpeg xcframeworks we're providing for iOS. Pick-to: 6.8 6.9 Task-number: QTBUG-86387 Task-number: QTBUG-129651 Change-Id: Id212700d3554689160d23eafb26d99ac43b91062 Reviewed-by: Alexandru Croitor --- qmake/generators/mac/pbuilder_pbx.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/qmake/generators/mac/pbuilder_pbx.cpp b/qmake/generators/mac/pbuilder_pbx.cpp index 0445c4cfdd9..6a8a7027f03 100644 --- a/qmake/generators/mac/pbuilder_pbx.cpp +++ b/qmake/generators/mac/pbuilder_pbx.cpp @@ -450,6 +450,8 @@ static QString xcodeFiletypeForFilename(const QString &filename) return QStringLiteral("sourcecode.c.objc"); if (filename.endsWith(QLatin1String(".framework"))) return QStringLiteral("wrapper.framework"); + if (filename.endsWith(QLatin1String(".xcframework"))) + return QStringLiteral("wrapper.xcframework"); if (filename.endsWith(QLatin1String(".a"))) return QStringLiteral("archive.ar"); if (filename.endsWith(QLatin1String(".pro")) || filename.endsWith(QLatin1String(".qrc"))) @@ -964,15 +966,18 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) library = fileFixify(library, FileFixifyFromOutdir | FileFixifyAbsolute); QString key = keyFor(library); if (!project->values("QMAKE_PBX_LIBRARIES").contains(key)) { - bool is_frmwrk = (library.endsWith(".framework")); + const QString fileType = xcodeFiletypeForFilename(library); + bool is_frmwrk = fileType.endsWith("framework"); t << "\t\t" << key << " = {\n" << "\t\t\t" << writeSettings("isa", "PBXFileReference", SettingsNoQuote) << ";\n" << "\t\t\t" << writeSettings("name", name) << ";\n" << "\t\t\t" << writeSettings("path", library) << ";\n" << "\t\t\t" << writeSettings("refType", QString::number(reftypeForFile(library)), SettingsNoQuote) << ";\n" << "\t\t\t" << writeSettings("sourceTree", "") << ";\n"; - if (is_frmwrk) - t << "\t\t\t" << writeSettings("lastKnownFileType", "wrapper.framework") << ";\n"; + if (is_frmwrk) { + t << "\t\t\t" << writeSettings("lastKnownFileType", fileType) + << ";\n"; + } t << "\t\t};\n"; project->values("QMAKE_PBX_LIBRARIES").append(key); QString build_key = keyFor(library + ".BUILDABLE");