Qbs: set cpp.platformPath for OS X and iOS profiles.

This is an (effectively) required property which is necessary to locate
a number of SDK tools.

Change-Id: Ia4912e383a053c7abcbd47715cf4b130c4fbafd6
Reviewed-by: Fawzi Mohamed <fawzi.mohamed@theqtcompany.com>
This commit is contained in:
Jake Petroules
2014-09-28 16:44:43 -04:00
parent b5f4899220
commit 368b2acaf0
2 changed files with 14 additions and 4 deletions

View File

@@ -46,6 +46,7 @@
#include <QDir>
#include <QFileInfo>
#include <QSettings>
namespace QbsProjectManager {
using namespace Constants;
@@ -188,10 +189,18 @@ QVariantMap DefaultPropertyProvider::properties(const ProjectExplorer::Kit *k, c
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...
QRegExp re(QLatin1String("(MacOSX|iPhoneOS|iPhoneSimulator)([0-9]+\\.[0-9]+)\\.sdk"));
if (re.exactMatch(QDir(sysroot).dirName())) {
data.insert(QLatin1String(CPP_XCODESDKNAME), QString(re.cap(1).toLower() + re.cap(2)));
data.insert(QLatin1String(CPP_XCODESDKVERSION), re.cap(2));
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 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);
}
}

View File

@@ -46,6 +46,7 @@ const char CPP_COMPILERNAME[] = "cpp.compilerName";
const char CPP_LINKERNAME[] = "cpp.linkerName";
const char CPP_PLATFORMCFLAGS[] = "cpp.platformCFlags";
const char CPP_PLATFORMCXXFLAGS[] = "cpp.platformCxxFlags";
const char CPP_PLATFORMPATH[] = "cpp.platformPath";
const char CPP_XCODESDKNAME[] = "cpp.xcodeSdkName";
const char CPP_XCODESDKVERSION[] = "cpp.xcodeSdkVersion";