summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJake Petroules <jake.petroules@qt.io>2016-11-10 02:44:08 -0800
committerJake Petroules <jake.petroules@qt.io>2016-11-10 11:04:57 +0000
commitd121fefaa9631fa482bca534cf3d8d0f15b5ffc3 (patch)
tree4703e7c30630dd38aa11c0d0512474a76f4ec614
parente3904d45fa9c4c64139cf944cda031703c274ff5 (diff)
downloadqt-creator-d121fefaa9631fa482bca534cf3d8d0f15b5ffc3.tar.gz
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>
-rw-r--r--src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp26
-rw-r--r--src/plugins/qbsprojectmanager/qbsconstants.h6
2 files changed, 16 insertions, 16 deletions
diff --git a/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp b/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp
index 88273086bf..32c19f2ff3 100644
--- a/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp
+++ b/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp
@@ -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);
+ }
}
}
diff --git a/src/plugins/qbsprojectmanager/qbsconstants.h b/src/plugins/qbsprojectmanager/qbsconstants.h
index dbcf3e76f7..3bdde156a0 100644
--- a/src/plugins/qbsprojectmanager/qbsconstants.h
+++ b/src/plugins/qbsprojectmanager/qbsconstants.h
@@ -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";