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:
Jake Petroules
2016-11-10 02:44:08 -08:00
parent e3904d45fa
commit d121fefaa9
2 changed files with 16 additions and 16 deletions

View File

@@ -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);
}
}
}

View File

@@ -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";