summaryrefslogtreecommitdiff
path: root/src/plugins/qnx/qnxutils.cpp
diff options
context:
space:
mode:
authorMehdi Fekari <mfekari@rim.com>2013-01-09 09:23:37 -0500
committerTobias Hunger <tobias.hunger@digia.com>2013-01-16 14:58:21 +0100
commit37527b559c983f108ea2f6a28f4328ceafcee4c8 (patch)
treecbb34a80f92a48199dd923b3c96ebd4403d603b2 /src/plugins/qnx/qnxutils.cpp
parentf3b353545a994e2ce7daf1c8b6d32bdb3cb70a83 (diff)
downloadqt-creator-37527b559c983f108ea2f6a28f4328ceafcee4c8.tar.gz
Qnx: Add a BlackBerry setup page to setup the plugin
Change-Id: I7a15f29d1b0d25f41c8bec7c907da7c60d59dcc1 Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
Diffstat (limited to 'src/plugins/qnx/qnxutils.cpp')
-rw-r--r--src/plugins/qnx/qnxutils.cpp142
1 files changed, 141 insertions, 1 deletions
diff --git a/src/plugins/qnx/qnxutils.cpp b/src/plugins/qnx/qnxutils.cpp
index 722e951960..1e118b6e3f 100644
--- a/src/plugins/qnx/qnxutils.cpp
+++ b/src/plugins/qnx/qnxutils.cpp
@@ -30,9 +30,10 @@
****************************************************************************/
#include "qnxutils.h"
-
#include "qnxabstractqtversion.h"
+#include <utils/hostosinfo.h>
+
#include <QDir>
using namespace Qnx;
@@ -73,3 +74,142 @@ QStringList QnxUtils::searchPaths(QnxAbstractQtVersion *qtVersion)
return searchPaths;
}
+
+QMultiMap<QString, QString> QnxUtils::parseEnvironmentFile(const QString &fileName)
+{
+ QMultiMap<QString, QString> result;
+
+ QFile file(fileName);
+ if (!file.open(QIODevice::ReadOnly))
+ return result;
+
+ QTextStream str(&file);
+ QMap<QString, QString> fileContent;
+ while (!str.atEnd()) {
+ QString line = str.readLine();
+ if (!line.contains(QLatin1Char('=')))
+ continue;
+
+ int equalIndex = line.indexOf(QLatin1Char('='));
+ QString var = line.left(equalIndex);
+ //Remove set in front
+ if (var.startsWith(QLatin1String("set ")))
+ var = var.right(var.size() - 4);
+
+ QString value = line.mid(equalIndex + 1);
+
+ if (Utils::HostOsInfo::isWindowsHost()) {
+ QRegExp systemVarRegExp(QLatin1String("IF NOT DEFINED ([\\w\\d]+)\\s+set ([\\w\\d]+)=([\\w\\d]+)"));
+ if (line.contains(systemVarRegExp)) {
+ var = systemVarRegExp.cap(2);
+ Utils::Environment sysEnv = Utils::Environment::systemEnvironment();
+ QString sysVar = systemVarRegExp.cap(1);
+ if (sysEnv.hasKey(sysVar))
+ value = sysEnv.value(sysVar);
+ else
+ value = systemVarRegExp.cap(3);
+ }
+ }
+ else if (Utils::HostOsInfo::isAnyUnixHost()) {
+ QRegExp systemVarRegExp(QLatin1String("\\$\\{([\\w\\d]+):=([\\w\\d]+)\\}")); // to match e.g. "${QNX_HOST_VERSION:=10_0_9_52}"
+ if (value.contains(systemVarRegExp)) {
+ Utils::Environment sysEnv = Utils::Environment::systemEnvironment();
+ QString sysVar = systemVarRegExp.cap(1);
+ if (sysEnv.hasKey(sysVar))
+ value = sysEnv.value(sysVar);
+ else
+ value = systemVarRegExp.cap(2);
+ }
+ }
+
+ if (value.startsWith(QLatin1Char('"')))
+ value = value.mid(1);
+ if (value.endsWith(QLatin1Char('"')))
+ value = value.left(value.size() - 1);
+
+ fileContent[var] = value;
+ }
+ file.close();
+
+ QMapIterator<QString, QString> it(fileContent);
+ while (it.hasNext()) {
+ it.next();
+ QStringList values;
+ if (Utils::HostOsInfo::isWindowsHost())
+ values = it.value().split(QLatin1Char(';'));
+ else if (Utils::HostOsInfo::isAnyUnixHost())
+ values = it.value().split(QLatin1Char(':'));
+
+ QString key = it.key();
+ foreach (const QString &value, values) {
+ const QString ownKeyAsWindowsVar = QLatin1Char('%') + key + QLatin1Char('%');
+ const QString ownKeyAsUnixVar = QLatin1Char('$') + key;
+ if (value != ownKeyAsUnixVar && value != ownKeyAsWindowsVar) { // to ignore e.g. PATH=$PATH
+ QString val = value;
+ if (val.contains(QLatin1Char('%')) || val.contains(QLatin1Char('$'))) {
+ QMapIterator<QString, QString> replaceIt(fileContent);
+ while (replaceIt.hasNext()) {
+ replaceIt.next();
+ const QString replaceKey = replaceIt.key();
+ if (replaceKey == key)
+ continue;
+
+ const QString keyAsWindowsVar = QLatin1Char('%') + replaceKey + QLatin1Char('%');
+ const QString keyAsUnixVar = QLatin1Char('$') + replaceKey;
+ if (val.contains(keyAsWindowsVar))
+ val.replace(keyAsWindowsVar, replaceIt.value());
+ if (val.contains(keyAsUnixVar))
+ val.replace(keyAsUnixVar, replaceIt.value());
+ }
+ }
+ result.insert(key, val);
+ }
+ }
+ }
+
+ if (!result.contains(QLatin1String("CPUVARDIR")))
+ result.insert(QLatin1String("CPUVARDIR"), QLatin1String("armle-v7"));
+
+ return result;
+}
+
+bool QnxUtils::isValidNdkPath(const QString &ndkPath)
+{
+ return (QFileInfo(envFilePath(ndkPath)).exists());
+}
+
+QString QnxUtils::envFilePath(const QString &ndkPath)
+{
+ QString envFile;
+ if (Utils::HostOsInfo::isWindowsHost())
+ envFile = ndkPath + QLatin1String("/bbndk-env.bat");
+ else if (Utils::HostOsInfo::isAnyUnixHost())
+ envFile = ndkPath + QLatin1String("/bbndk-env.sh");
+
+ return envFile;
+}
+
+void QnxUtils::prependQnxMapToEnvironment(const QMultiMap<QString, QString> &qnxMap, Utils::Environment &env)
+{
+ QMultiMap<QString, QString>::const_iterator it;
+ QMultiMap<QString, QString>::const_iterator end(qnxMap.constEnd());
+ for (it = qnxMap.constBegin(); it != end; ++it) {
+ const QString key = it.key();
+ const QString value = it.value();
+
+ if (key == QLatin1String("PATH"))
+ env.prependOrSetPath(value);
+ else if (key == QLatin1String("LD_LIBRARY_PATH"))
+ env.prependOrSetLibrarySearchPath(value);
+ else
+ env.set(key, value);
+ }
+}
+
+Utils::FileName QnxUtils::executableWithExtension(const Utils::FileName &fileName)
+{
+ Utils::FileName result = fileName;
+ if (Utils::HostOsInfo::isWindowsHost())
+ result.append(QLatin1String(".exe"));
+ return result;
+}