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);
|
data.insert(QLatin1String(QBS_TOOLCHAIN), toolchain);
|
||||||
|
|
||||||
if (targetAbi.os() == ProjectExplorer::Abi::MacOS) {
|
if (targetAbi.os() == ProjectExplorer::Abi::MacOS) {
|
||||||
// Set Xcode SDK name and version - required by Qbs if a sysroot is present
|
// Reverse engineer Xcode developer path and canonical SDK name from sysroot
|
||||||
// Ideally this would be done in a better way...
|
QDir sysrootdir(QDir::cleanPath(sysroot));
|
||||||
const QRegExp sdkNameRe(QLatin1String("(macosx|iphoneos|iphonesimulator)([0-9]+\\.[0-9]+)"));
|
|
||||||
const QRegExp sdkVersionRe(QLatin1String("([0-9]+\\.[0-9]+)"));
|
|
||||||
QDir sysrootdir(sysroot);
|
|
||||||
const QSettings sdkSettings(sysrootdir.absoluteFilePath(QLatin1String("SDKSettings.plist")), QSettings::NativeFormat);
|
const QSettings sdkSettings(sysrootdir.absoluteFilePath(QLatin1String("SDKSettings.plist")), QSettings::NativeFormat);
|
||||||
const QString sdkName(sdkSettings.value(QLatin1String("CanonicalName")).toString());
|
const QString sdkCanonicalName(sdkSettings.value(QLatin1String("CanonicalName")).toString());
|
||||||
const QString sdkVersion(sdkSettings.value(QLatin1String("Version")).toString());
|
if (!sdkCanonicalName.isEmpty()) {
|
||||||
if (sdkNameRe.exactMatch(sdkName) && sdkVersionRe.exactMatch(sdkVersion)) {
|
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/?$"));
|
||||||
for (int i = 3; i > 0; --i)
|
const QRegularExpressionMatch match = re.match(sysrootdir.absolutePath());
|
||||||
sysrootdir.cdUp();
|
if (match.hasMatch() &&
|
||||||
data.insert(QLatin1String(CPP_PLATFORMPATH), sysrootdir.absolutePath());
|
match.captured(QStringLiteral("platform")) ==
|
||||||
data.insert(QLatin1String(CPP_XCODESDKNAME), sdkName);
|
match.captured(QStringLiteral("sdkplatform"))) {
|
||||||
data.insert(QLatin1String(CPP_XCODESDKVERSION), sdkVersion);
|
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_LINKERNAME[] = "cpp.linkerName";
|
||||||
const char CPP_PLATFORMCOMMONCOMPILERFLAGS[] = "cpp.platformCommonCompilerFlags";
|
const char CPP_PLATFORMCOMMONCOMPILERFLAGS[] = "cpp.platformCommonCompilerFlags";
|
||||||
const char CPP_PLATFORMLINKERFLAGS[] = "cpp.platformLinkerFlags";
|
const char CPP_PLATFORMLINKERFLAGS[] = "cpp.platformLinkerFlags";
|
||||||
const char CPP_PLATFORMPATH[] = "cpp.platformPath";
|
|
||||||
const char CPP_XCODESDKNAME[] = "cpp.xcodeSdkName";
|
const char XCODE_DEVELOPERPATH[] = "xcode.developerPath";
|
||||||
const char CPP_XCODESDKVERSION[] = "cpp.xcodeSdkVersion";
|
const char XCODE_SDK[] = "xcode.sdk";
|
||||||
|
|
||||||
// Settings page
|
// Settings page
|
||||||
const char QBS_SETTINGS_CATEGORY[] = "YM.qbs";
|
const char QBS_SETTINGS_CATEGORY[] = "YM.qbs";
|
||||||
|
Reference in New Issue
Block a user