diff options
author | Jake Petroules <jake.petroules@qt.io> | 2016-11-10 02:44:08 -0800 |
---|---|---|
committer | Jake Petroules <jake.petroules@qt.io> | 2016-11-10 11:04:57 +0000 |
commit | d121fefaa9631fa482bca534cf3d8d0f15b5ffc3 (patch) | |
tree | 4703e7c30630dd38aa11c0d0512474a76f4ec614 | |
parent | e3904d45fa9c4c64139cf944cda031703c274ff5 (diff) | |
download | qt-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.cpp | 26 | ||||
-rw-r--r-- | src/plugins/qbsprojectmanager/qbsconstants.h | 6 |
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"; |