forked from qt-creator/qt-creator
Qbs: fix Xcode SDK detection
The Xcode related properties in the cpp module no longer exist. Use the correct ones, and be a little stricter about extracting the constituent components from the sysroot. Change-Id: I6ceaebf529764e69e1e04af6650a2920b139fac2 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io> Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
@@ -219,20 +219,20 @@ QVariantMap DefaultPropertyProvider::autoGeneratedProperties(const ProjectExplor
|
||||
data.insert(QLatin1String(QBS_TOOLCHAIN), toolchain);
|
||||
|
||||
if (targetAbi.os() == ProjectExplorer::Abi::MacOS) {
|
||||
// Set Xcode SDK name and version - required by Qbs if a sysroot is present
|
||||
// Ideally this would be done in a better way...
|
||||
const QRegExp sdkNameRe(QLatin1String("(macosx|iphoneos|iphonesimulator)([0-9]+\\.[0-9]+)"));
|
||||
const QRegExp sdkVersionRe(QLatin1String("([0-9]+\\.[0-9]+)"));
|
||||
QDir sysrootdir(sysroot);
|
||||
// Reverse engineer Xcode developer path and canonical SDK name from sysroot
|
||||
QDir sysrootdir(QDir::cleanPath(sysroot));
|
||||
const QSettings sdkSettings(sysrootdir.absoluteFilePath(QLatin1String("SDKSettings.plist")), QSettings::NativeFormat);
|
||||
const QString sdkName(sdkSettings.value(QLatin1String("CanonicalName")).toString());
|
||||
const QString sdkVersion(sdkSettings.value(QLatin1String("Version")).toString());
|
||||
if (sdkNameRe.exactMatch(sdkName) && sdkVersionRe.exactMatch(sdkVersion)) {
|
||||
for (int i = 3; i > 0; --i)
|
||||
sysrootdir.cdUp();
|
||||
data.insert(QLatin1String(CPP_PLATFORMPATH), sysrootdir.absolutePath());
|
||||
data.insert(QLatin1String(CPP_XCODESDKNAME), sdkName);
|
||||
data.insert(QLatin1String(CPP_XCODESDKVERSION), sdkVersion);
|
||||
const QString sdkCanonicalName(sdkSettings.value(QLatin1String("CanonicalName")).toString());
|
||||
if (!sdkCanonicalName.isEmpty()) {
|
||||
const QRegularExpression re(QStringLiteral("^(?<developerpath>.*)/Platforms/(?<platform>MacOSX|(?:(?:iPhone|AppleTV|Watch)(?:OS|Simulator)))\\.platform/Developer/SDKs/(?<sdkplatform>MacOSX|(?:(?:iPhone|AppleTV|Watch)(?:OS|Simulator)))(?:[0-9]+\\.[0-9]+)\\.sdk/?$"));
|
||||
const QRegularExpressionMatch match = re.match(sysrootdir.absolutePath());
|
||||
if (match.hasMatch() &&
|
||||
match.captured(QStringLiteral("platform")) ==
|
||||
match.captured(QStringLiteral("sdkplatform"))) {
|
||||
data.insert(QLatin1String(XCODE_DEVELOPERPATH),
|
||||
match.captured(QStringLiteral("developerpath")));
|
||||
data.insert(QLatin1String(XCODE_SDK), sdkCanonicalName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -43,9 +43,9 @@ const char CPP_COMPILERVERSIONPATCH[] = "cpp.compilerVersionPatch";
|
||||
const char CPP_LINKERNAME[] = "cpp.linkerName";
|
||||
const char CPP_PLATFORMCOMMONCOMPILERFLAGS[] = "cpp.platformCommonCompilerFlags";
|
||||
const char CPP_PLATFORMLINKERFLAGS[] = "cpp.platformLinkerFlags";
|
||||
const char CPP_PLATFORMPATH[] = "cpp.platformPath";
|
||||
const char CPP_XCODESDKNAME[] = "cpp.xcodeSdkName";
|
||||
const char CPP_XCODESDKVERSION[] = "cpp.xcodeSdkVersion";
|
||||
|
||||
const char XCODE_DEVELOPERPATH[] = "xcode.developerPath";
|
||||
const char XCODE_SDK[] = "xcode.sdk";
|
||||
|
||||
// Settings page
|
||||
const char QBS_SETTINGS_CATEGORY[] = "YM.qbs";
|
||||
|
Reference in New Issue
Block a user