summaryrefslogtreecommitdiff
path: root/src/plugins/qtsupport
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/qtsupport')
-rw-r--r--src/plugins/qtsupport/baseqtversion.cpp273
-rw-r--r--src/plugins/qtsupport/baseqtversion.h10
-rw-r--r--src/plugins/qtsupport/customexecutablerunconfiguration.cpp16
-rw-r--r--src/plugins/qtsupport/gettingstartedwelcomepage.cpp23
-rw-r--r--src/plugins/qtsupport/profilereader.cpp6
-rw-r--r--src/plugins/qtsupport/profilereader.h2
-rw-r--r--src/plugins/qtsupport/qmldumptool.cpp6
-rw-r--r--src/plugins/qtsupport/qtkitconfigwidget.cpp37
-rw-r--r--src/plugins/qtsupport/qtkitconfigwidget.h15
-rw-r--r--src/plugins/qtsupport/qtkitinformation.cpp8
-rw-r--r--src/plugins/qtsupport/qtkitinformation.h1
-rw-r--r--src/plugins/qtsupport/qtoptionspage.cpp17
-rw-r--r--src/plugins/qtsupport/qtoutputformatter.cpp3
-rw-r--r--src/plugins/qtsupport/qtoutputformatter.h4
-rw-r--r--src/plugins/qtsupport/qtparser.cpp13
-rw-r--r--src/plugins/qtsupport/qtsupport.pri1
-rw-r--r--src/plugins/qtsupport/qtsupport.pro2
-rw-r--r--src/plugins/qtsupport/qtsupport.qbs121
-rw-r--r--src/plugins/qtsupport/qtsupportplugin.cpp37
-rw-r--r--src/plugins/qtsupport/qtsupportplugin.h2
-rw-r--r--src/plugins/qtsupport/qtversionfactory.cpp7
-rw-r--r--src/plugins/qtsupport/qtversionmanager.cpp14
-rw-r--r--src/plugins/qtsupport/qtversionmanager.h9
23 files changed, 338 insertions, 289 deletions
diff --git a/src/plugins/qtsupport/baseqtversion.cpp b/src/plugins/qtsupport/baseqtversion.cpp
index ec781d717a..97499cfcda 100644
--- a/src/plugins/qtsupport/baseqtversion.cpp
+++ b/src/plugins/qtsupport/baseqtversion.cpp
@@ -47,6 +47,7 @@
#include <utils/persistentsettings.h>
#include <utils/environment.h>
+#include <utils/hostosinfo.h>
#include <utils/synchronousprocess.h>
#include <QDir>
@@ -57,6 +58,7 @@
using namespace QtSupport;
using namespace QtSupport::Internal;
+using namespace Utils;
static const char QTVERSIONID[] = "Id";
static const char QTVERSIONNAME[] = "Name";
@@ -163,7 +165,7 @@ int BaseQtVersion::getUniqueId()
return QtVersionManager::instance()->getUniqueId();
}
-BaseQtVersion::BaseQtVersion(const Utils::FileName &qmakeCommand, bool isAutodetected, const QString &autodetectionSource)
+BaseQtVersion::BaseQtVersion(const FileName &qmakeCommand, bool isAutodetected, const QString &autodetectionSource)
: m_id(getUniqueId()),
m_isAutodetected(isAutodetected),
m_autodetectionSource(autodetectionSource),
@@ -203,10 +205,10 @@ BaseQtVersion::BaseQtVersion()
m_hasDocumentation(false),
m_qmakeIsExecutable(true)
{
- ctor(Utils::FileName());
+ ctor(FileName());
}
-void BaseQtVersion::ctor(const Utils::FileName &qmakePath)
+void BaseQtVersion::ctor(const FileName &qmakePath)
{
m_qmakeCommand = qmakePath;
m_designerCommand.clear();
@@ -224,7 +226,7 @@ BaseQtVersion::~BaseQtVersion()
{
}
-QString BaseQtVersion::defaultDisplayName(const QString &versionString, const Utils::FileName &qmakePath,
+QString BaseQtVersion::defaultDisplayName(const QString &versionString, const FileName &qmakePath,
bool fromPath)
{
QString location;
@@ -317,7 +319,7 @@ QList<ProjectExplorer::Task> BaseQtVersion::validateKit(const ProjectExplorer::K
version->displayName(),
qtAbiString);
result << ProjectExplorer::Task(ProjectExplorer::Task::Error,
- message, Utils::FileName(), -1,
+ message, FileName(), -1,
Core::Id(ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM));
} // Abi mismatch
return result;
@@ -340,7 +342,7 @@ void BaseQtVersion::fromMap(const QVariantMap &map)
QString string = map.value(QLatin1String(QTVERSIONQMAKEPATH)).toString();
if (string.startsWith(QLatin1Char('~')))
string.remove(0, 1).prepend(QDir::homePath());
- ctor(Utils::FileName::fromString(string));
+ ctor(FileName::fromString(string));
}
QVariantMap BaseQtVersion::toMap() const
@@ -399,9 +401,9 @@ QStringList BaseQtVersion::warningReason() const
return ret;
}
-ProjectExplorer::ToolChain *BaseQtVersion::preferredToolChain(const Utils::FileName &ms) const
+ProjectExplorer::ToolChain *BaseQtVersion::preferredToolChain(const FileName &ms) const
{
- const Utils::FileName spec = ms.isEmpty() ? mkspec() : ms;
+ const FileName spec = ms.isEmpty() ? mkspec() : ms;
QList<ProjectExplorer::ToolChain *> tcList = ProjectExplorer::ToolChainManager::instance()->toolChains();
ProjectExplorer::ToolChain *possibleTc = 0;
foreach (ProjectExplorer::ToolChain *tc, tcList) {
@@ -415,7 +417,7 @@ ProjectExplorer::ToolChain *BaseQtVersion::preferredToolChain(const Utils::FileN
return possibleTc;
}
-Utils::FileName BaseQtVersion::qmakeCommand() const
+FileName BaseQtVersion::qmakeCommand() const
{
return m_qmakeCommand;
}
@@ -570,10 +572,10 @@ void BaseQtVersion::updateSourcePath() const
}
}
}
- m_sourcePath = Utils::FileName::fromUserInput(sourcePath);
+ m_sourcePath = FileName::fromUserInput(sourcePath);
}
-Utils::FileName BaseQtVersion::sourcePath() const
+FileName BaseQtVersion::sourcePath() const
{
updateSourcePath();
return m_sourcePath;
@@ -652,46 +654,43 @@ QString BaseQtVersion::findQtBinary(Binaries binary) const
QStringList possibleCommands;
switch (binary) {
case QmlScene: {
-#if defined(Q_OS_WIN)
- possibleCommands << QLatin1String("qmlscene.exe");
-#else
- possibleCommands << QLatin1String("qmlscene");
-#endif
+ if (HostOsInfo::isWindowsHost())
+ possibleCommands << QLatin1String("qmlscene.exe");
+ else
+ possibleCommands << QLatin1String("qmlscene");
}
case QmlViewer: {
-#if defined(Q_OS_WIN)
- possibleCommands << QLatin1String("qmlviewer.exe");
-#elif defined(Q_OS_MAC)
- possibleCommands << QLatin1String("QMLViewer.app/Contents/MacOS/QMLViewer");
-#else
- possibleCommands << QLatin1String("qmlviewer");
-#endif
+ if (HostOsInfo::isWindowsHost())
+ possibleCommands << QLatin1String("qmlviewer.exe");
+ else if (HostOsInfo::isMacHost())
+ possibleCommands << QLatin1String("QMLViewer.app/Contents/MacOS/QMLViewer");
+ else
+ possibleCommands << QLatin1String("qmlviewer");
}
break;
case Designer:
-#if defined(Q_OS_WIN)
- possibleCommands << QLatin1String("designer.exe");
-#elif defined(Q_OS_MAC)
- possibleCommands << QLatin1String("Designer.app/Contents/MacOS/Designer");
-#else
- possibleCommands << QLatin1String("designer");
-#endif
+ if (HostOsInfo::isWindowsHost())
+ possibleCommands << QLatin1String("designer.exe");
+ else if (HostOsInfo::isMacHost())
+ possibleCommands << QLatin1String("Designer.app/Contents/MacOS/Designer");
+ else
+ possibleCommands << QLatin1String("designer");
break;
case Linguist:
-#if defined(Q_OS_WIN)
- possibleCommands << QLatin1String("linguist.exe");
-#elif defined(Q_OS_MAC)
- possibleCommands << QLatin1String("Linguist.app/Contents/MacOS/Linguist");
-#else
- possibleCommands << QLatin1String("linguist");
-#endif
+ if (HostOsInfo::isWindowsHost())
+ possibleCommands << QLatin1String("linguist.exe");
+ else if (HostOsInfo::isMacHost())
+ possibleCommands << QLatin1String("Linguist.app/Contents/MacOS/Linguist");
+ else
+ possibleCommands << QLatin1String("linguist");
break;
case Uic:
-#ifdef Q_OS_WIN
- possibleCommands << QLatin1String("uic.exe");
-#else
- possibleCommands << QLatin1String("uic-qt4") << QLatin1String("uic4") << QLatin1String("uic");
-#endif
+ if (HostOsInfo::isWindowsHost()) {
+ possibleCommands << QLatin1String("uic.exe");
+ } else {
+ possibleCommands << QLatin1String("uic-qt4") << QLatin1String("uic4")
+ << QLatin1String("uic");
+ }
break;
default:
Q_ASSERT(false);
@@ -726,13 +725,13 @@ void BaseQtVersion::updateMkspec() const
if (m_mkspecFullPath.isEmpty())
return;
- Utils::FileName baseMkspecDir = mkspecDirectoryFromVersionInfo(versionInfo());
+ FileName baseMkspecDir = mkspecDirectoryFromVersionInfo(versionInfo());
if (m_mkspec.isChildOf(baseMkspecDir)) {
m_mkspec = m_mkspec.relativeChildPath(baseMkspecDir);
// qDebug() << "Setting mkspec to"<<mkspec;
} else {
- Utils::FileName sourceMkSpecPath = sourcePath().appendPath(QLatin1String("mkspecs"));
+ FileName sourceMkSpecPath = sourcePath().appendPath(QLatin1String("mkspecs"));
if (m_mkspec.isChildOf(sourceMkSpecPath)) {
m_mkspec = m_mkspec.relativeChildPath(sourceMkSpecPath);
} else {
@@ -750,7 +749,7 @@ void BaseQtVersion::ensureMkSpecParsed() const
if (mkspecPath().isEmpty())
return;
- QMakeGlobals option;
+ ProFileGlobals option;
option.setProperties(versionInfo());
ProMessageHandler msgHandler(true);
ProFileCacheManager::instance()->incRefCount();
@@ -783,22 +782,22 @@ void BaseQtVersion::parseMkSpec(ProFileEvaluator *evaluator) const
m_mkspecValues.insert(declarativeBins, evaluator->value(declarativeBins));
}
-Utils::FileName BaseQtVersion::mkspec() const
+FileName BaseQtVersion::mkspec() const
{
updateMkspec();
return m_mkspec;
}
-Utils::FileName BaseQtVersion::mkspecFor(ProjectExplorer::ToolChain *tc) const
+FileName BaseQtVersion::mkspecFor(ProjectExplorer::ToolChain *tc) const
{
Utils::FileName versionSpec = mkspec();
if (!tc)
return versionSpec;
- const QList<Utils::FileName> tcSpecList = tc->suggestedMkspecList();
+ const QList<FileName> tcSpecList = tc->suggestedMkspecList();
if (tcSpecList.contains(versionSpec))
return versionSpec;
- foreach (const Utils::FileName &tcSpec, tcSpecList) {
+ foreach (const FileName &tcSpec, tcSpecList) {
if (hasMkspec(tcSpec))
return tcSpec;
}
@@ -806,13 +805,13 @@ Utils::FileName BaseQtVersion::mkspecFor(ProjectExplorer::ToolChain *tc) const
return versionSpec;
}
-Utils::FileName BaseQtVersion::mkspecPath() const
+FileName BaseQtVersion::mkspecPath() const
{
updateMkspec();
return m_mkspecFullPath;
}
-bool BaseQtVersion::hasMkspec(const Utils::FileName &spec) const
+bool BaseQtVersion::hasMkspec(const FileName &spec) const
{
updateVersionInfo();
QFileInfo fi;
@@ -867,7 +866,7 @@ void BaseQtVersion::updateVersionInfo() const
m_hasQmlDebuggingLibrary = false;
m_hasQmlObserver = false;
- if (!queryQMakeVariables(qmakeCommand(), &m_versionInfo, &m_qmakeIsExecutable))
+ if (!queryQMakeVariables(qmakeCommand(), qmakeRunEnvironment(), &m_versionInfo, &m_qmakeIsExecutable))
return;
const QString qtInstallData = qmakeProperty("QT_INSTALL_DATA");
@@ -966,12 +965,11 @@ QString BaseQtVersion::demosPath() const
QString BaseQtVersion::frameworkInstallPath() const
{
-#ifdef Q_OS_MAC
- updateVersionInfo();
- return m_versionInfo.value(QLatin1String("QT_INSTALL_LIBS"));
-#else
+ if (HostOsInfo::isMacHost()) {
+ updateVersionInfo();
+ return m_versionInfo.value(QLatin1String("QT_INSTALL_LIBS"));
+ }
return QString();
-#endif
}
bool BaseQtVersion::hasExamples() const
@@ -994,13 +992,23 @@ QList<ProjectExplorer::HeaderPath> BaseQtVersion::systemHeaderPathes(const Proje
return result;
}
-void BaseQtVersion::addToEnvironment(const ProjectExplorer::Kit *k, Utils::Environment &env) const
+void BaseQtVersion::addToEnvironment(const ProjectExplorer::Kit *k, Environment &env) const
{
Q_UNUSED(k);
env.set(QLatin1String("QTDIR"), QDir::toNativeSeparators(qmakeProperty("QT_HOST_DATA")));
env.prependOrSetPath(qmakeProperty("QT_HOST_BINS"));
}
+// Some Qt versions may require environment settings for qmake to work
+//
+// One such example is Blackberry which for some reason decided to always use the same
+// qmake and use environment variables embedded in their mkspecs to make that point to
+// the different Qt installations.
+Utils::Environment BaseQtVersion::qmakeRunEnvironment() const
+{
+ return Utils::Environment::systemEnvironment();
+}
+
bool BaseQtVersion::hasGdbDebuggingHelper() const
{
updateVersionInfo();
@@ -1038,10 +1046,10 @@ bool BaseQtVersion::hasQmlObserver() const
return m_hasQmlObserver;
}
-Utils::Environment BaseQtVersion::qmlToolsEnvironment() const
+Environment BaseQtVersion::qmlToolsEnvironment() const
{
// FIXME: This seems broken!
- Utils::Environment environment = Utils::Environment::systemEnvironment();
+ Environment environment = Environment::systemEnvironment();
#if 0 // FIXME: Fix this!
addToEnvironment(environment);
#endif
@@ -1127,7 +1135,7 @@ QList<ProjectExplorer::Task> BaseQtVersion::reportIssuesImpl(const QString &proF
if (!isValid()) {
//: %1: Reason for being invalid
const QString msg = QCoreApplication::translate("Qt4ProjectManager::QtVersion", "The Qt version is invalid: %1").arg(invalidReason());
- results.append(ProjectExplorer::Task(ProjectExplorer::Task::Error, msg, Utils::FileName(), -1,
+ results.append(ProjectExplorer::Task(ProjectExplorer::Task::Error, msg, FileName(), -1,
Core::Id(ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM)));
}
@@ -1137,7 +1145,7 @@ QList<ProjectExplorer::Task> BaseQtVersion::reportIssuesImpl(const QString &proF
//: %1: Path to qmake executable
const QString msg = QCoreApplication::translate("Qt4ProjectManager::QtVersion",
"The qmake command \"%1\" was not found or is not executable.").arg(qmakeCommand().toUserOutput());
- results.append(ProjectExplorer::Task(ProjectExplorer::Task::Error, msg, Utils::FileName(), -1,
+ results.append(ProjectExplorer::Task(ProjectExplorer::Task::Error, msg, FileName(), -1,
Core::Id(ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM)));
}
@@ -1148,13 +1156,13 @@ QList<ProjectExplorer::Task> BaseQtVersion::reportIssuesImpl(const QString &proF
if ((tmpBuildDir.startsWith(sourcePath)) && (tmpBuildDir != sourcePath)) {
const QString msg = QCoreApplication::translate("Qt4ProjectManager::QtVersion",
"Qmake does not support build directories below the source directory.");
- results.append(ProjectExplorer::Task(ProjectExplorer::Task::Warning, msg, Utils::FileName(), -1,
+ results.append(ProjectExplorer::Task(ProjectExplorer::Task::Warning, msg, FileName(), -1,
Core::Id(ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM)));
} else if (tmpBuildDir.count(slash) != sourcePath.count(slash) && qtVersion() < QtVersionNumber(4,8, 0)) {
const QString msg = QCoreApplication::translate("Qt4ProjectManager::QtVersion",
"The build directory needs to be at the same level as the source directory.");
- results.append(ProjectExplorer::Task(ProjectExplorer::Task::Warning, msg, Utils::FileName(), -1,
+ results.append(ProjectExplorer::Task(ProjectExplorer::Task::Warning, msg, FileName(), -1,
Core::Id(ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM)));
}
@@ -1169,23 +1177,19 @@ BaseQtVersion::reportIssues(const QString &proFile, const QString &buildDir) con
return results;
}
-ProjectExplorer::IOutputParser *BaseQtVersion::createOutputParser() const
-{
- return new ProjectExplorer::GnuMakeParser;
-}
-
QtConfigWidget *BaseQtVersion::createConfigurationWidget() const
{
return 0;
}
-bool BaseQtVersion::queryQMakeVariables(const Utils::FileName &binary, QHash<QString, QString> *versionInfo)
+bool BaseQtVersion::queryQMakeVariables(const FileName &binary, const Utils::Environment &env,
+ QHash<QString, QString> *versionInfo)
{
bool qmakeIsExecutable;
- return BaseQtVersion::queryQMakeVariables(binary, versionInfo, &qmakeIsExecutable);
+ return BaseQtVersion::queryQMakeVariables(binary, env, versionInfo, &qmakeIsExecutable);
}
-static QByteArray runQmakeQuery(const Utils::FileName &binary, const Utils::Environment &env,
+static QByteArray runQmakeQuery(const FileName &binary, const Environment &env,
bool *isExecutable)
{
const int timeOutMS = 30000; // Might be slow on some machines.
@@ -1200,7 +1204,7 @@ static QByteArray runQmakeQuery(const Utils::FileName &binary, const Utils::Envi
return QByteArray();
}
if (!process.waitForFinished(timeOutMS)) {
- Utils::SynchronousProcess::stopProcess(process);
+ SynchronousProcess::stopProcess(process);
*isExecutable = true;
qWarning("Timeout running '%s' (%dms).", qPrintable(binary.toUserOutput()), timeOutMS);
return QByteArray();
@@ -1215,8 +1219,8 @@ static QByteArray runQmakeQuery(const Utils::FileName &binary, const Utils::Envi
return process.readAllStandardOutput();
}
-bool BaseQtVersion::queryQMakeVariables(const Utils::FileName &binary, QHash<QString, QString> *versionInfo,
- bool *qmakeIsExecutable)
+bool BaseQtVersion::queryQMakeVariables(const FileName &binary, const Environment &env,
+ QHash<QString, QString> *versionInfo, bool *qmakeIsExecutable)
{
const QFileInfo qmake = binary.toFileInfo();
*qmakeIsExecutable = qmake.exists() && qmake.isExecutable() && !qmake.isDir();
@@ -1224,7 +1228,7 @@ bool BaseQtVersion::queryQMakeVariables(const Utils::FileName &binary, QHash<QSt
return false;
QByteArray output;
- output = runQmakeQuery(binary, Utils::Environment::systemEnvironment(), qmakeIsExecutable);
+ output = runQmakeQuery(binary, env, qmakeIsExecutable);
if (output.isNull() && !qmakeIsExecutable) {
// Note: Don't rerun if we were able to execute the binary before.
@@ -1237,9 +1241,9 @@ bool BaseQtVersion::queryQMakeVariables(const Utils::FileName &binary, QHash<QSt
foreach (ProjectExplorer::ToolChain *tc, tcList) {
if (!abiList.contains(tc->targetAbi()))
continue;
- Utils::Environment env = Utils::Environment::systemEnvironment();
- tc->addToEnvironment(env);
- output = runQmakeQuery(binary, env, qmakeIsExecutable);
+ Environment realEnv = env;
+ tc->addToEnvironment(realEnv);
+ output = runQmakeQuery(binary, realEnv, qmakeIsExecutable);
if (qmakeIsExecutable)
break;
}
@@ -1278,19 +1282,19 @@ bool BaseQtVersion::queryQMakeVariables(const Utils::FileName &binary, QHash<QSt
return true;
}
-Utils::FileName BaseQtVersion::mkspecDirectoryFromVersionInfo(const QHash<QString, QString> &versionInfo)
+FileName BaseQtVersion::mkspecDirectoryFromVersionInfo(const QHash<QString, QString> &versionInfo)
{
QString dataDir = qmakeProperty(versionInfo, "QT_HOST_DATA");
if (dataDir.isEmpty())
- return Utils::FileName();
- return Utils::FileName::fromUserInput(dataDir + QLatin1String("/mkspecs"));
+ return FileName();
+ return FileName::fromUserInput(dataDir + QLatin1String("/mkspecs"));
}
-Utils::FileName BaseQtVersion::mkspecFromVersionInfo(const QHash<QString, QString> &versionInfo)
+FileName BaseQtVersion::mkspecFromVersionInfo(const QHash<QString, QString> &versionInfo)
{
- Utils::FileName baseMkspecDir = mkspecDirectoryFromVersionInfo(versionInfo);
+ FileName baseMkspecDir = mkspecDirectoryFromVersionInfo(versionInfo);
if (baseMkspecDir.isEmpty())
- return Utils::FileName();
+ return FileName();
bool qt5 = false;
QString theSpec = qmakeProperty(versionInfo, "QMAKE_XSPEC");
@@ -1299,67 +1303,66 @@ Utils::FileName BaseQtVersion::mkspecFromVersionInfo(const QHash<QString, QStrin
else
qt5 = true;
- Utils::FileName mkspecFullPath = baseMkspecDir;
+ FileName mkspecFullPath = baseMkspecDir;
mkspecFullPath.appendPath(theSpec);
// qDebug() << "default mkspec is located at" << mkspecFullPath;
-#ifdef Q_OS_WIN
- if (!qt5) {
- QFile f2(mkspecFullPath.toString() + QLatin1String("/qmake.conf"));
- if (f2.exists() && f2.open(QIODevice::ReadOnly)) {
- while (!f2.atEnd()) {
- QByteArray line = f2.readLine();
- if (line.startsWith("QMAKESPEC_ORIGINAL")) {
- const QList<QByteArray> &temp = line.split('=');
- if (temp.size() == 2) {
- QString possibleFullPath = QString::fromLocal8Bit(temp.at(1).trimmed().constData());
- // We sometimes get a mix of different slash styles here...
- possibleFullPath = possibleFullPath.replace(QLatin1Char('\\'), QLatin1Char('/'));
- if (QFileInfo(possibleFullPath).exists()) // Only if the path exists
- mkspecFullPath = Utils::FileName::fromUserInput(possibleFullPath);
+ if (HostOsInfo::isWindowsHost()) {
+ if (!qt5) {
+ QFile f2(mkspecFullPath.toString() + QLatin1String("/qmake.conf"));
+ if (f2.exists() && f2.open(QIODevice::ReadOnly)) {
+ while (!f2.atEnd()) {
+ QByteArray line = f2.readLine();
+ if (line.startsWith("QMAKESPEC_ORIGINAL")) {
+ const QList<QByteArray> &temp = line.split('=');
+ if (temp.size() == 2) {
+ QString possibleFullPath = QString::fromLocal8Bit(temp.at(1).trimmed().constData());
+ // We sometimes get a mix of different slash styles here...
+ possibleFullPath = possibleFullPath.replace(QLatin1Char('\\'), QLatin1Char('/'));
+ if (QFileInfo(possibleFullPath).exists()) // Only if the path exists
+ mkspecFullPath = FileName::fromUserInput(possibleFullPath);
+ }
+ break;
}
- break;
}
+ f2.close();
}
- f2.close();
}
- }
-#else
-# ifdef Q_OS_MAC
- QFile f2(mkspecFullPath.toString() + QLatin1String("/qmake.conf"));
- if (f2.exists() && f2.open(QIODevice::ReadOnly)) {
- while (!f2.atEnd()) {
- QByteArray line = f2.readLine();
- if (line.startsWith("MAKEFILE_GENERATOR")) {
- const QList<QByteArray> &temp = line.split('=');
- if (temp.size() == 2) {
- const QByteArray &value = temp.at(1);
- if (value.contains("XCODE")) {
- // we don't want to generate xcode projects...
-// qDebug() << "default mkspec is xcode, falling back to g++";
- return baseMkspecDir.appendPath(QLatin1String("macx-g++"));
+ } else {
+ if (HostOsInfo::isMacHost()) {
+ QFile f2(mkspecFullPath.toString() + QLatin1String("/qmake.conf"));
+ if (f2.exists() && f2.open(QIODevice::ReadOnly)) {
+ while (!f2.atEnd()) {
+ QByteArray line = f2.readLine();
+ if (line.startsWith("MAKEFILE_GENERATOR")) {
+ const QList<QByteArray> &temp = line.split('=');
+ if (temp.size() == 2) {
+ const QByteArray &value = temp.at(1);
+ if (value.contains("XCODE")) {
+ // we don't want to generate xcode projects...
+ // qDebug() << "default mkspec is xcode, falling back to g++";
+ return baseMkspecDir.appendPath(QLatin1String("macx-g++"));
+ }
+ }
+ break;
}
}
- break;
+ f2.close();
}
}
- f2.close();
- }
-# endif
- if (!qt5) {
- //resolve mkspec link
- QString rspec = mkspecFullPath.toFileInfo().readLink();
- if (!rspec.isEmpty())
- mkspecFullPath = Utils::FileName::fromUserInput(
- QDir(baseMkspecDir.toString()).absoluteFilePath(rspec));
+ if (!qt5) {
+ //resolve mkspec link
+ QString rspec = mkspecFullPath.toFileInfo().readLink();
+ if (!rspec.isEmpty())
+ mkspecFullPath = FileName::fromUserInput(
+ QDir(baseMkspecDir.toString()).absoluteFilePath(rspec));
+ }
}
-#endif
-
return mkspecFullPath;
}
-Utils::FileName BaseQtVersion::qtCorePath(const QHash<QString,QString> &versionInfo, const QString &versionString)
+FileName BaseQtVersion::qtCorePath(const QHash<QString,QString> &versionInfo, const QString &versionString)
{
QStringList dirs;
dirs << qmakeProperty(versionInfo, "QT_INSTALL_LIBS")
@@ -1377,7 +1380,7 @@ Utils::FileName BaseQtVersion::qtCorePath(const QHash<QString,QString> &versionI
&& file.startsWith(QLatin1String("QtCore"))
&& file.endsWith(QLatin1String(".framework"))) {
// handle Framework
- Utils::FileName lib(info);
+ FileName lib(info);
lib.appendPath(file.left(file.lastIndexOf(QLatin1Char('.'))));
return lib;
}
@@ -1393,18 +1396,18 @@ Utils::FileName BaseQtVersion::qtCorePath(const QHash<QString,QString> &versionI
|| file.endsWith(QString::fromLatin1(".so.") + versionString)
|| file.endsWith(QLatin1String(".so"))
|| file.endsWith(QLatin1Char('.') + versionString + QLatin1String(".dylib")))
- return Utils::FileName(info);
+ return FileName(info);
}
}
}
}
// Return path to first static library found:
if (!staticLibs.isEmpty())
- return Utils::FileName(staticLibs.at(0));
- return Utils::FileName();
+ return FileName(staticLibs.at(0));
+ return FileName();
}
-QList<ProjectExplorer::Abi> BaseQtVersion::qtAbisFromLibrary(const Utils::FileName &coreLibrary)
+QList<ProjectExplorer::Abi> BaseQtVersion::qtAbisFromLibrary(const FileName &coreLibrary)
{
return ProjectExplorer::Abi::abisOfBinary(coreLibrary);
}
diff --git a/src/plugins/qtsupport/baseqtversion.h b/src/plugins/qtsupport/baseqtversion.h
index f9fc3ff573..261ff50e10 100644
--- a/src/plugins/qtsupport/baseqtversion.h
+++ b/src/plugins/qtsupport/baseqtversion.h
@@ -131,6 +131,7 @@ public:
static QString qmakeProperty(const QHash<QString,QString> &versionInfo, const QByteArray &name);
QString qmakeProperty(const QByteArray &name) const;
virtual void addToEnvironment(const ProjectExplorer::Kit *k, Utils::Environment &env) const;
+ virtual Utils::Environment qmakeRunEnvironment() const;
virtual Utils::FileName sourcePath() const;
// used by QtUiCodeModelSupport
@@ -185,10 +186,11 @@ public:
/// warnings and finally info items.
QList<ProjectExplorer::Task> reportIssues(const QString &proFile, const QString &buildDir) const;
- virtual ProjectExplorer::IOutputParser *createOutputParser() const;
-
- static bool queryQMakeVariables(const Utils::FileName &binary, QHash<QString, QString> *versionInfo);
- static bool queryQMakeVariables(const Utils::FileName &binary, QHash<QString, QString> *versionInfo, bool *qmakeIsExecutable);
+ static bool queryQMakeVariables(const Utils::FileName &binary, const Utils::Environment &env,
+ QHash<QString, QString> *versionInfo);
+ static bool queryQMakeVariables(const Utils::FileName &binary, const Utils::Environment &env,
+ QHash<QString, QString> *versionInfo,
+ bool *qmakeIsExecutable);
static Utils::FileName mkspecDirectoryFromVersionInfo(const QHash<QString, QString> &versionInfo);
static Utils::FileName mkspecFromVersionInfo(const QHash<QString, QString> &versionInfo);
diff --git a/src/plugins/qtsupport/customexecutablerunconfiguration.cpp b/src/plugins/qtsupport/customexecutablerunconfiguration.cpp
index a21288ca34..8848ee74cf 100644
--- a/src/plugins/qtsupport/customexecutablerunconfiguration.cpp
+++ b/src/plugins/qtsupport/customexecutablerunconfiguration.cpp
@@ -54,14 +54,14 @@ using namespace QtSupport;
using namespace QtSupport::Internal;
namespace {
-const char * const CUSTOM_EXECUTABLE_ID("ProjectExplorer.CustomExecutableRunConfiguration");
-
-const char * const EXECUTABLE_KEY("ProjectExplorer.CustomExecutableRunConfiguration.Executable");
-const char * const ARGUMENTS_KEY("ProjectExplorer.CustomExecutableRunConfiguration.Arguments");
-const char * const WORKING_DIRECTORY_KEY("ProjectExplorer.CustomExecutableRunConfiguration.WorkingDirectory");
-const char * const USE_TERMINAL_KEY("ProjectExplorer.CustomExecutableRunConfiguration.UseTerminal");
-const char * const USER_ENVIRONMENT_CHANGES_KEY("ProjectExplorer.CustomExecutableRunConfiguration.UserEnvironmentChanges");
-const char * const BASE_ENVIRONMENT_BASE_KEY("ProjectExplorer.CustomExecutableRunConfiguration.BaseEnvironmentBase");
+const char CUSTOM_EXECUTABLE_ID[] = "ProjectExplorer.CustomExecutableRunConfiguration";
+
+const char EXECUTABLE_KEY[] = "ProjectExplorer.CustomExecutableRunConfiguration.Executable";
+const char ARGUMENTS_KEY[] = "ProjectExplorer.CustomExecutableRunConfiguration.Arguments";
+const char WORKING_DIRECTORY_KEY[] = "ProjectExplorer.CustomExecutableRunConfiguration.WorkingDirectory";
+const char USE_TERMINAL_KEY[] = "ProjectExplorer.CustomExecutableRunConfiguration.UseTerminal";
+const char USER_ENVIRONMENT_CHANGES_KEY[] = "ProjectExplorer.CustomExecutableRunConfiguration.UserEnvironmentChanges";
+const char BASE_ENVIRONMENT_BASE_KEY[] = "ProjectExplorer.CustomExecutableRunConfiguration.BaseEnvironmentBase";
}
void CustomExecutableRunConfiguration::ctor()
diff --git a/src/plugins/qtsupport/gettingstartedwelcomepage.cpp b/src/plugins/qtsupport/gettingstartedwelcomepage.cpp
index fbc5a159dd..2d562ab065 100644
--- a/src/plugins/qtsupport/gettingstartedwelcomepage.cpp
+++ b/src/plugins/qtsupport/gettingstartedwelcomepage.cpp
@@ -51,7 +51,7 @@
#include <QMutex>
#include <QThread>
#include <QMutexLocker>
-#include <QWeakPointer>
+#include <QPointer>
#include <QWaitCondition>
#include <QDir>
#include <QBuffer>
@@ -71,14 +71,16 @@
#include <QDeclarativeContext>
#include <QDesktopServices>
+using namespace Utils;
+
namespace QtSupport {
namespace Internal {
const char C_FALLBACK_ROOT[] = "ProjectsFallbackRoot";
-QWeakPointer<ExamplesListModel> &examplesModelStatic()
+QPointer<ExamplesListModel> &examplesModelStatic()
{
- static QWeakPointer<ExamplesListModel> s_examplesModel;
+ static QPointer<ExamplesListModel> s_examplesModel;
return s_examplesModel;
}
@@ -175,7 +177,7 @@ public:
Q_UNUSED(size)
QMutexLocker lock(&m_mutex);
- QUrl url = QUrl::fromEncoded(id.toAscii());
+ QUrl url = QUrl::fromEncoded(id.toLatin1());
if (!m_fetcher.asynchronousFetchData(url))
return QImage();
@@ -336,9 +338,9 @@ QString ExamplesWelcomePage::copyToAlternativeLocation(const QFileInfo& proFileI
.arg(nativeProjectDir));
lay->addWidget(descrLbl, 0, 0, 1, 2);
QLabel *txt = new QLabel(tr("&Location:"));
- Utils::PathChooser *chooser = new Utils::PathChooser;
+ PathChooser *chooser = new PathChooser;
txt->setBuddy(chooser);
- chooser->setExpectedKind(Utils::PathChooser::ExistingDirectory);
+ chooser->setExpectedKind(PathChooser::ExistingDirectory);
QSettings *settings = Core::ICore::settings();
chooser->setPath(settings->value(QString::fromLatin1(C_FALLBACK_ROOT),
Core::DocumentManager::projectsDirectory()).toString());
@@ -367,15 +369,18 @@ QString ExamplesWelcomePage::copyToAlternativeLocation(const QFileInfo& proFileI
} else {
QString error;
QString targetDir = destBaseDir + QLatin1Char('/') + exampleDirName;
- if (Utils::FileUtils::copyRecursively(projectDir, targetDir, &error)) {
+ if (FileUtils::copyRecursively(FileName::fromString(projectDir),
+ FileName::fromString(targetDir), &error)) {
// set vars to new location
const QStringList::Iterator end = filesToOpen.end();
for (QStringList::Iterator it = filesToOpen.begin(); it != end; ++it)
it->replace(projectDir, targetDir);
foreach (const QString &dependency, dependencies) {
- QString dirName = QDir(dependency).dirName();
- if (!Utils::FileUtils::copyRecursively(dependency, targetDir + QDir::separator()+ dirName, &error)) {
+ FileName targetFile = FileName::fromString(targetDir);
+ targetFile.appendPath(QDir(dependency).dirName());
+ if (!FileUtils::copyRecursively(FileName::fromString(dependency), targetFile,
+ &error)) {
QMessageBox::warning(Core::ICore::mainWindow(), tr("Cannot Copy Project"), error);
// do not fail, just warn;
}
diff --git a/src/plugins/qtsupport/profilereader.cpp b/src/plugins/qtsupport/profilereader.cpp
index c37e629a1f..5b909d5882 100644
--- a/src/plugins/qtsupport/profilereader.cpp
+++ b/src/plugins/qtsupport/profilereader.cpp
@@ -39,8 +39,10 @@ using namespace QtSupport;
static QString format(const QString &fileName, int lineNo, const QString &msg)
{
- if (lineNo)
+ if (lineNo > 0)
return QString::fromLatin1("%1(%2): %3").arg(fileName, QString::number(lineNo), msg);
+ else if (lineNo)
+ return QString::fromLatin1("%1: %3").arg(fileName, msg);
else
return msg;
}
@@ -65,7 +67,7 @@ void ProMessageHandler::fileMessage(const QString &)
}
-ProFileReader::ProFileReader(QMakeGlobals *option)
+ProFileReader::ProFileReader(ProFileGlobals *option)
: QMakeParser(ProFileCacheManager::instance()->cache(), this)
, ProFileEvaluator(option, this, this)
, m_ignoreLevel(0)
diff --git a/src/plugins/qtsupport/profilereader.h b/src/plugins/qtsupport/profilereader.h
index 0e6ca9b098..f51b71e0fd 100644
--- a/src/plugins/qtsupport/profilereader.h
+++ b/src/plugins/qtsupport/profilereader.h
@@ -70,7 +70,7 @@ class QTSUPPORT_EXPORT ProFileReader : public ProMessageHandler, public QMakePar
Q_OBJECT
public:
- ProFileReader(QMakeGlobals *option);
+ ProFileReader(ProFileGlobals *option);
~ProFileReader();
QList<ProFile*> includeFiles() const;
diff --git a/src/plugins/qtsupport/qmldumptool.cpp b/src/plugins/qtsupport/qmldumptool.cpp
index 5d86596f8f..701862882e 100644
--- a/src/plugins/qtsupport/qmldumptool.cpp
+++ b/src/plugins/qtsupport/qmldumptool.cpp
@@ -41,6 +41,7 @@
#include <projectexplorer/runconfiguration.h>
#include <utils/runextensions.h>
#include <qmljs/qmljsmodelmanagerinterface.h>
+#include <utils/hostosinfo.h>
#include <utils/qtcassert.h>
#include <QDesktopServices>
#include <QCoreApplication>
@@ -244,9 +245,8 @@ static QStringList sourceFileNames()
files << QLatin1String("main.cpp") << QLatin1String("qmldump.pro")
<< QLatin1String("qmlstreamwriter.cpp") << QLatin1String("qmlstreamwriter.h")
<< QLatin1String("LICENSE.LGPL") << QLatin1String("LGPL_EXCEPTION.TXT");
-#ifdef Q_OS_MAC
- files << QLatin1String("Info.plist");
-#endif
+ if (Utils::HostOsInfo::isMacHost())
+ files << QLatin1String("Info.plist");
return files;
}
diff --git a/src/plugins/qtsupport/qtkitconfigwidget.cpp b/src/plugins/qtsupport/qtkitconfigwidget.cpp
index 64b02115b7..c5a3fb033a 100644
--- a/src/plugins/qtsupport/qtkitconfigwidget.cpp
+++ b/src/plugins/qtsupport/qtkitconfigwidget.cpp
@@ -45,34 +45,21 @@
namespace QtSupport {
namespace Internal {
-QtKitConfigWidget::QtKitConfigWidget(ProjectExplorer::Kit *k, QWidget *parent) :
- ProjectExplorer::KitConfigWidget(parent),
- m_kit(k),
- m_combo(new QComboBox),
- m_manageButton(new QPushButton(this))
+QtKitConfigWidget::QtKitConfigWidget(ProjectExplorer::Kit *k) :
+ KitConfigWidget(k)
{
- setToolTip(tr("The Qt library to use for all projects using this kit.<br>"
- "A Qt version is required for qmake-based projects and optional when using other build systems."));
- QHBoxLayout *layout = new QHBoxLayout(this);
- layout->setMargin(0);
-
- m_combo->setContentsMargins(0, 0, 0, 0);
- m_combo->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
- layout->addWidget(m_combo);
-
- m_manageButton->setContentsMargins(0, 0, 0, 0);
- m_manageButton->setText(tr("Manage..."));
+ m_combo = new QComboBox;
+ m_combo->addItem(tr("None"), -1);
QtVersionManager *mgr = QtVersionManager::instance();
-
- // initially populate combobox:
- m_combo->addItem(tr("None"), -1);
QList<BaseQtVersion *> versions = mgr->validVersions();
QList<int> versionIds;
foreach (BaseQtVersion *v, versions)
versionIds.append(v->uniqueId());
versionsChanged(versionIds, QList<int>(), QList<int>());
+ m_manageButton = new QPushButton(tr("Manage..."));
+
refresh();
connect(m_combo, SIGNAL(currentIndexChanged(int)), this, SLOT(currentWasChanged(int)));
@@ -87,6 +74,13 @@ QString QtKitConfigWidget::displayName() const
return tr("Qt version:");
}
+QString QtKitConfigWidget::toolTip() const
+{
+ return tr("The Qt library to use for all projects using this kit.<br>"
+ "A Qt version is required for qmake-based projects "
+ "and optional when using other build systems.");
+}
+
void QtKitConfigWidget::makeReadOnly()
{
m_combo->setEnabled(false);
@@ -97,6 +91,11 @@ void QtKitConfigWidget::refresh()
m_combo->setCurrentIndex(findQtVersion(QtKitInformation::qtVersionId(m_kit)));
}
+QWidget *QtKitConfigWidget::mainWidget() const
+{
+ return m_combo;
+}
+
QWidget *QtKitConfigWidget::buttonWidget() const
{
return m_manageButton;
diff --git a/src/plugins/qtsupport/qtkitconfigwidget.h b/src/plugins/qtsupport/qtkitconfigwidget.h
index 0ee01d6838..d163998df7 100644
--- a/src/plugins/qtsupport/qtkitconfigwidget.h
+++ b/src/plugins/qtsupport/qtkitconfigwidget.h
@@ -32,14 +32,12 @@
#include <projectexplorer/kitconfigwidget.h>
-QT_FORWARD_DECLARE_CLASS(QComboBox)
-QT_FORWARD_DECLARE_CLASS(QPushButton)
-
-namespace ProjectExplorer { class Kit; }
+QT_BEGIN_NAMESPACE
+class QComboBox;
+class QPushButton;
+QT_END_NAMESPACE
namespace QtSupport {
-class BaseQtVersion;
-
namespace Internal {
class QtKitConfigWidget : public ProjectExplorer::KitConfigWidget
@@ -47,14 +45,16 @@ class QtKitConfigWidget : public ProjectExplorer::KitConfigWidget
Q_OBJECT
public:
- explicit QtKitConfigWidget(ProjectExplorer::Kit *k, QWidget *parent = 0);
+ explicit QtKitConfigWidget(ProjectExplorer::Kit *k);
QString displayName() const;
void makeReadOnly();
void refresh();
+ QWidget *mainWidget() const;
QWidget *buttonWidget() const;
+ QString toolTip() const;
private slots:
void versionsChanged(const QList<int> &added, const QList<int> &removed, const QList<int> &changed);
@@ -64,7 +64,6 @@ private slots:
private:
int findQtVersion(const int id) const;
- ProjectExplorer::Kit *m_kit;
QComboBox *m_combo;
QPushButton *m_manageButton;
};
diff --git a/src/plugins/qtsupport/qtkitinformation.cpp b/src/plugins/qtsupport/qtkitinformation.cpp
index 40fef3c0aa..b742a7e6dc 100644
--- a/src/plugins/qtsupport/qtkitinformation.cpp
+++ b/src/plugins/qtsupport/qtkitinformation.cpp
@@ -32,6 +32,7 @@
#include "qtkitconfigwidget.h"
#include "qtsupportconstants.h"
#include "qtversionmanager.h"
+#include "qtparser.h"
#include <utils/environment.h>
@@ -126,6 +127,13 @@ void QtKitInformation::addToEnvironment(const ProjectExplorer::Kit *k, Utils::En
version->addToEnvironment(k, env);
}
+ProjectExplorer::IOutputParser *QtKitInformation::createOutputParser(const ProjectExplorer::Kit *k) const
+{
+ if (qtVersion(k))
+ return new QtParser;
+ return 0;
+}
+
int QtKitInformation::qtVersionId(const ProjectExplorer::Kit *k)
{
if (!k)
diff --git a/src/plugins/qtsupport/qtkitinformation.h b/src/plugins/qtsupport/qtkitinformation.h
index ac788e4745..508c21f246 100644
--- a/src/plugins/qtsupport/qtkitinformation.h
+++ b/src/plugins/qtsupport/qtkitinformation.h
@@ -61,6 +61,7 @@ public:
ItemList toUserOutput(ProjectExplorer::Kit *k) const;
void addToEnvironment(const ProjectExplorer::Kit *k, Utils::Environment &env) const;
+ ProjectExplorer::IOutputParser *createOutputParser(const ProjectExplorer::Kit *k) const;
static int qtVersionId(const ProjectExplorer::Kit *k);
static void setQtVersionId(ProjectExplorer::Kit *k, const int id);
diff --git a/src/plugins/qtsupport/qtoptionspage.cpp b/src/plugins/qtsupport/qtoptionspage.cpp
index af5d0480bc..8cfc89763d 100644
--- a/src/plugins/qtsupport/qtoptionspage.cpp
+++ b/src/plugins/qtsupport/qtoptionspage.cpp
@@ -48,6 +48,7 @@
#include <projectexplorer/toolchainmanager.h>
#include <projectexplorer/toolchain.h>
#include <projectexplorer/projectexplorerconstants.h>
+#include <utils/hostosinfo.h>
#include <utils/runextensions.h>
#include <QDir>
@@ -616,16 +617,14 @@ static QString filterForQmakeFileDialog()
for (int i = 0; i < commands.size(); ++i) {
if (i)
filter += QLatin1Char(' ');
-#ifdef Q_OS_MAC
- // work around QTBUG-7739 that prohibits filters that don't start with *
- filter += QLatin1Char('*');
-#endif
+ if (Utils::HostOsInfo::isMacHost())
+ // work around QTBUG-7739 that prohibits filters that don't start with *
+ filter += QLatin1Char('*');
filter += commands.at(i);
-#if defined(Q_OS_UNIX) && !defined(Q_OS_MAC)
- // kde bug, we need at least one wildcard character
- // see QTCREATORBUG-7771
- filter += QLatin1Char('*');
-#endif
+ if (Utils::HostOsInfo::isAnyUnixHost() && !Utils::HostOsInfo::isMacHost())
+ // kde bug, we need at least one wildcard character
+ // see QTCREATORBUG-7771
+ filter += QLatin1Char('*');
}
filter += QLatin1Char(')');
return filter;
diff --git a/src/plugins/qtsupport/qtoutputformatter.cpp b/src/plugins/qtsupport/qtoutputformatter.cpp
index fec46be1e5..d670d5a0bd 100644
--- a/src/plugins/qtsupport/qtoutputformatter.cpp
+++ b/src/plugins/qtsupport/qtoutputformatter.cpp
@@ -43,8 +43,7 @@ using namespace QtSupport;
QtOutputFormatter::QtOutputFormatter(ProjectExplorer::Project *project)
: OutputFormatter()
- , m_qmlError(QLatin1String("^(?:\\[Qt Message\\] )?" // '[Qt Message] ' prefix (optional, on Symbian)
- "(file:///.+" // file url
+ , m_qmlError(QLatin1String("^(file:///.+" // file url
":\\d+" // colon, line
"(?::\\d+)?)" // colon, column (optional)
":")) // colon
diff --git a/src/plugins/qtsupport/qtoutputformatter.h b/src/plugins/qtsupport/qtoutputformatter.h
index 141c471b02..47665bd772 100644
--- a/src/plugins/qtsupport/qtoutputformatter.h
+++ b/src/plugins/qtsupport/qtoutputformatter.h
@@ -36,7 +36,7 @@
#include <utils/fileinprojectfinder.h>
#include <QRegExp>
-#include <QWeakPointer>
+#include <QPointer>
QT_FORWARD_DECLARE_CLASS(QTextCursor)
@@ -80,7 +80,7 @@ private:
mutable QRegExp m_qtAssert;
mutable QRegExp m_qtAssertX;
mutable QRegExp m_qtTestFail;
- QWeakPointer<ProjectExplorer::Project> m_project;
+ QPointer<ProjectExplorer::Project> m_project;
QString m_lastLine;
Utils::FileInProjectFinder m_projectFinder;
};
diff --git a/src/plugins/qtsupport/qtparser.cpp b/src/plugins/qtsupport/qtparser.cpp
index 56d03ee547..975e84407c 100644
--- a/src/plugins/qtsupport/qtparser.cpp
+++ b/src/plugins/qtsupport/qtparser.cpp
@@ -41,7 +41,7 @@ using ProjectExplorer::Task;
#define FILE_PATTERN "^(([A-Za-z]:)?[^:]+\\.[^:]+)"
QtParser::QtParser() :
- m_mocRegExp(QLatin1String(FILE_PATTERN"[:\\(](\\d+)\\)?:\\s(Warning|Error):\\s(.+)$"))
+ m_mocRegExp(QLatin1String(FILE_PATTERN"[:\\(](\\d+)\\)?:\\s([Ww]arning|[Ee]rror):\\s(.+)$"))
{
setObjectName(QLatin1String("QtParser"));
m_mocRegExp.setMinimal(true);
@@ -60,7 +60,7 @@ void QtParser::stdError(const QString &line)
Utils::FileName::fromUserInput(m_mocRegExp.cap(1)) /* filename */,
lineno,
Core::Id(ProjectExplorer::Constants::TASK_CATEGORY_COMPILE));
- if (m_mocRegExp.cap(4) == QLatin1String("Warning"))
+ if (m_mocRegExp.cap(4).compare(QLatin1String("Warning"), Qt::CaseInsensitive) == 0)
task.type = Task::Warning;
emit addTask(task);
return;
@@ -116,6 +116,15 @@ void QtSupportPlugin::testQtOutputParser_data()
"../../scriptbug/main.cpp:22: instantiated from here\n")
<< QList<ProjectExplorer::Task>()
<< QString();
+ QTest::newRow("qdoc warning")
+ << QString::fromLatin1("/home/user/dev/qt5/qtscript/src/script/api/qscriptengine.cpp:295: warning: Can't create link to 'Object Trees & Ownership'")
+ << OutputParserTester::STDERR
+ << QString() << QString()
+ << (QList<ProjectExplorer::Task>() << Task(Task::Warning,
+ QLatin1String("Can't create link to 'Object Trees & Ownership'"),
+ Utils::FileName::fromUserInput(QLatin1String("/home/user/dev/qt5/qtscript/src/script/api/qscriptengine.cpp")), 295,
+ Core::Id(ProjectExplorer::Constants::TASK_CATEGORY_COMPILE)))
+ << QString();
QTest::newRow("moc warning")
<< QString::fromLatin1("..\\untitled\\errorfile.h:0: Warning: No relevant classes found. No output generated.")
<< OutputParserTester::STDERR
diff --git a/src/plugins/qtsupport/qtsupport.pri b/src/plugins/qtsupport/qtsupport.pri
index a419733faf..e4de26c4ca 100644
--- a/src/plugins/qtsupport/qtsupport.pri
+++ b/src/plugins/qtsupport/qtsupport.pri
@@ -5,3 +5,4 @@ DEFINES *= QMAKE_AS_LIBRARY
DEFINES *= PROPARSER_THREAD_SAFE
DEFINES *= PROEVALUATOR_THREAD_SAFE
DEFINES *= PROEVALUATOR_CUMULATIVE
+DEFINES *= PROEVALUATOR_SETENV
diff --git a/src/plugins/qtsupport/qtsupport.pro b/src/plugins/qtsupport/qtsupport.pro
index c1a2ad0be6..701aa5dd0e 100644
--- a/src/plugins/qtsupport/qtsupport.pro
+++ b/src/plugins/qtsupport/qtsupport.pro
@@ -7,7 +7,7 @@ include(../../qtcreatorplugin.pri)
include(qtsupport_dependencies.pri)
DEFINES += \
QMAKE_AS_LIBRARY QMAKE_LIBRARY \
- PROPARSER_THREAD_SAFE PROEVALUATOR_THREAD_SAFE PROEVALUATOR_CUMULATIVE
+ PROPARSER_THREAD_SAFE PROEVALUATOR_THREAD_SAFE PROEVALUATOR_CUMULATIVE PROEVALUATOR_SETENV
include(../../shared/proparser/proparser.pri)
HEADERS += \
diff --git a/src/plugins/qtsupport/qtsupport.qbs b/src/plugins/qtsupport/qtsupport.qbs
index e8aed6c497..d513058452 100644
--- a/src/plugins/qtsupport/qtsupport.qbs
+++ b/src/plugins/qtsupport/qtsupport.qbs
@@ -12,101 +12,104 @@ QtcPlugin {
Depends { name: "QmlJS" }
Depends { name: "cpp" }
- cpp.includePaths: [
- ".",
+ cpp.includePaths: base.concat([
"../../shared",
- "../../shared/proparser",
- "..",
- "../../libs",
- buildDirectory
- ]
- cpp.defines: {
- return base.concat([
- "QT_NO_CAST_FROM_ASCII",
- "QT_NO_CAST_TO_ASCII",
- "QMAKE_AS_LIBRARY",
- "QMAKE_LIBRARY",
- "PROPARSER_THREAD_SAFE",
- "PROEVALUATOR_THREAD_SAFE",
- "PROEVALUATOR_CUMULATIVE",
- "QMAKE_BUILTIN_PRFS"
- ])
+ "../../shared/proparser"
+ ])
+
+ cpp.defines: base.concat([
+ "QT_NO_CAST_FROM_ASCII",
+ "QT_NO_CAST_TO_ASCII",
+ "QMAKE_AS_LIBRARY",
+ "QMAKE_LIBRARY",
+ "PROPARSER_THREAD_SAFE",
+ "PROEVALUATOR_THREAD_SAFE",
+ "PROEVALUATOR_CUMULATIVE",
+ "QMAKE_BUILTIN_PRFS",
+ "PROEVALUATOR_SETENV"
+ ])
+
+ Group {
+ prefix: "../../shared/proparser/"
+ files: [
+ "ioutils.cpp",
+ "ioutils.h",
+ "profileevaluator.cpp",
+ "profileevaluator.h",
+ "proitems.cpp",
+ "proitems.h",
+ "proparser.qrc",
+ "prowriter.cpp",
+ "prowriter.h",
+ "qmake_global.h",
+ "qmakebuiltins.cpp",
+ "qmakeevaluator.cpp",
+ "qmakeevaluator.h",
+ "qmakeevaluator_p.h",
+ "qmakeglobals.cpp",
+ "qmakeglobals.h",
+ "qmakeparser.cpp",
+ "qmakeparser.h",
+ ]
}
files: [
- "../../shared/proparser/qmakebuiltins.cpp",
- "../../shared/proparser/qmakeevaluator.cpp",
- "../../shared/proparser/qmakeevaluator.h",
- "../../shared/proparser/qmakeevaluator_p.h",
- "../../shared/proparser/qmakeglobals.cpp",
- "../../shared/proparser/qmakeglobals.h",
- "../../shared/proparser/qmakeparser.cpp",
- "../../shared/proparser/qmakeparser.h",
- "../../shared/proparser/qmake_global.h",
- "../../shared/proparser/profileevaluator.cpp",
- "../../shared/proparser/profileevaluator.h",
- "../../shared/proparser/proitems.cpp",
- "../../shared/proparser/proitems.h",
- "../../shared/proparser/prowriter.cpp",
- "../../shared/proparser/prowriter.h",
- "../../shared/proparser/proparser.qrc",
- "../../shared/proparser/ioutils.h",
- "../../shared/proparser/ioutils.cpp",
- "qtversioninfo.ui",
- "qtversionmanager.ui",
+ "baseqtversion.cpp",
"baseqtversion.h",
+ "customexecutableconfigurationwidget.cpp",
+ "customexecutableconfigurationwidget.h",
+ "customexecutablerunconfiguration.cpp",
+ "customexecutablerunconfiguration.h",
"debugginghelper.cpp",
"debugginghelper.h",
"debugginghelper.ui",
+ "debugginghelperbuildtask.cpp",
"debugginghelperbuildtask.h",
+ "exampleslistmodel.cpp",
"exampleslistmodel.h",
+ "gettingstartedwelcomepage.cpp",
"gettingstartedwelcomepage.h",
"profilereader.cpp",
"profilereader.h",
+ "qmldebugginglibrary.cpp",
"qmldebugginglibrary.h",
+ "qmldumptool.cpp",
"qmldumptool.h",
+ "qmlobservertool.cpp",
"qmlobservertool.h",
- "qtoptionspage.h",
- "qtoutputformatter.cpp",
- "qtoutputformatter.h",
- "qtparser.h",
"qtkitconfigwidget.cpp",
"qtkitconfigwidget.h",
"qtkitinformation.cpp",
"qtkitinformation.h",
+ "qtoptionspage.cpp",
+ "qtoptionspage.h",
+ "qtoutputformatter.cpp",
+ "qtoutputformatter.h",
+ "qtparser.cpp",
+ "qtparser.h",
"qtsupport_global.h",
"qtsupportconstants.h",
"qtsupportplugin.cpp",
"qtsupportplugin.h",
+ "qtversionfactory.cpp",
"qtversionfactory.h",
+ "qtversioninfo.ui",
+ "qtversionmanager.cpp",
"qtversionmanager.h",
+ "qtversionmanager.ui",
"screenshotcropper.cpp",
"screenshotcropper.h",
"showbuildlog.ui",
- "baseqtversion.cpp",
- "customexecutableconfigurationwidget.cpp",
- "customexecutableconfigurationwidget.h",
- "customexecutablerunconfiguration.cpp",
- "customexecutablerunconfiguration.h",
- "debugginghelperbuildtask.cpp",
- "exampleslistmodel.cpp",
- "gettingstartedwelcomepage.cpp",
- "qmldebugginglibrary.cpp",
- "qmldumptool.cpp",
- "qmlobservertool.cpp",
- "qtoptionspage.cpp",
- "qtparser.cpp",
- "qtversionfactory.cpp",
- "qtversionmanager.cpp"
]
ProductModule {
Depends { name: "cpp" }
- cpp.includePaths: [ "../../shared" ]
+ cpp.includePaths: "../../shared"
cpp.defines: [
"QMAKE_AS_LIBRARY",
"PROEVALUATOR_THREAD_SAFE",
- "QMAKE_BUILTIN_PRFS"
+ "QMAKE_BUILTIN_PRFS",
+ "PROEVALUATOR_SETENV"
]
}
}
diff --git a/src/plugins/qtsupport/qtsupportplugin.cpp b/src/plugins/qtsupport/qtsupportplugin.cpp
index 1b773d1215..08007f9d45 100644
--- a/src/plugins/qtsupport/qtsupportplugin.cpp
+++ b/src/plugins/qtsupport/qtsupportplugin.cpp
@@ -38,12 +38,19 @@
#include "gettingstartedwelcomepage.h"
+#include <coreplugin/variablemanager.h>
#include <extensionsystem/pluginmanager.h>
#include <projectexplorer/kitmanager.h>
+#include <projectexplorer/project.h>
+#include <projectexplorer/projectexplorer.h>
+#include <projectexplorer/target.h>
#include <QtPlugin>
#include <QMenu>
+static const char kHostBins[] = "CurrentProject:QT_HOST_BINS";
+static const char kInstallBins[] = "CurrentProject:QT_INSTALL_BINS";
+
using namespace QtSupport;
using namespace QtSupport::Internal;
@@ -81,6 +88,15 @@ bool QtSupportPlugin::initialize(const QStringList &arguments, QString *errorMes
void QtSupportPlugin::extensionsInitialized()
{
+ Core::VariableManager *vm = Core::VariableManager::instance();
+ vm->registerVariable(kHostBins,
+ tr("Full path to the host bin directory of the current project's Qt version."));
+ vm->registerVariable(kInstallBins,
+ tr("Full path to the target bin directory of the current project's Qt version."
+ " You probably want %1 instead.").arg(QString::fromLatin1(kHostBins)));
+ connect(vm, SIGNAL(variableUpdateRequested(QByteArray)),
+ this, SLOT(updateVariable(QByteArray)));
+
QtVersionManager::instance()->extensionsInitialized();
ProjectExplorer::KitManager::instance()->registerKitInformation(new QtKitInformation);
}
@@ -90,4 +106,25 @@ bool QtSupportPlugin::delayedInitialize()
return QtVersionManager::instance()->delayedInitialize();
}
+void QtSupportPlugin::updateVariable(const QByteArray &variable)
+{
+ if (variable != kHostBins && variable != kInstallBins)
+ return;
+
+ ProjectExplorer::Project *project = ProjectExplorer::ProjectExplorerPlugin::currentProject();
+ if (!project || !project->activeTarget()) {
+ Core::VariableManager::instance()->remove(variable);
+ return;
+ }
+
+ const BaseQtVersion *qtVersion = QtKitInformation::qtVersion(project->activeTarget()->kit());
+ if (!qtVersion) {
+ Core::VariableManager::instance()->remove(variable);
+ return;
+ }
+
+ QString value = qtVersion->qmakeProperty(variable == kHostBins ? "QT_HOST_BINS" : "QT_INSTALL_BINS");
+ Core::VariableManager::instance()->insert(variable, value);
+}
+
Q_EXPORT_PLUGIN(QtSupportPlugin)
diff --git a/src/plugins/qtsupport/qtsupportplugin.h b/src/plugins/qtsupport/qtsupportplugin.h
index b529c5335a..8a5a24eb79 100644
--- a/src/plugins/qtsupport/qtsupportplugin.h
+++ b/src/plugins/qtsupport/qtsupportplugin.h
@@ -49,6 +49,8 @@ public:
bool delayedInitialize();
private slots:
+ void updateVariable(const QByteArray &variable);
+
#ifdef WITH_TESTS
void testQtOutputParser_data();
void testQtOutputParser();
diff --git a/src/plugins/qtsupport/qtversionfactory.cpp b/src/plugins/qtsupport/qtversionfactory.cpp
index f5422d4b82..a0287bb5b8 100644
--- a/src/plugins/qtsupport/qtversionfactory.cpp
+++ b/src/plugins/qtsupport/qtversionfactory.cpp
@@ -33,6 +33,8 @@
#include "baseqtversion.h"
#include <extensionsystem/pluginmanager.h>
+#include <utils/environment.h>
+
#include <QSettings>
using namespace QtSupport;
@@ -57,12 +59,13 @@ bool sortByPriority(QtVersionFactory *a, QtVersionFactory *b)
BaseQtVersion *QtVersionFactory::createQtVersionFromQMakePath(const Utils::FileName &qmakePath, bool isAutoDetected, const QString &autoDetectionSource)
{
QHash<QString, QString> versionInfo;
- bool success = BaseQtVersion::queryQMakeVariables(qmakePath, &versionInfo);
+ Utils::Environment env = Utils::Environment::systemEnvironment();
+ bool success = BaseQtVersion::queryQMakeVariables(qmakePath, env, &versionInfo);
if (!success)
return 0;
Utils::FileName mkspec = BaseQtVersion::mkspecFromVersionInfo(versionInfo);
- QMakeGlobals globals;
+ ProFileGlobals globals;
globals.setProperties(versionInfo);
ProMessageHandler msgHandler(true);
ProFileCacheManager::instance()->incRefCount();
diff --git a/src/plugins/qtsupport/qtversionmanager.cpp b/src/plugins/qtsupport/qtversionmanager.cpp
index a229e3d570..6159000963 100644
--- a/src/plugins/qtsupport/qtversionmanager.cpp
+++ b/src/plugins/qtsupport/qtversionmanager.cpp
@@ -473,20 +473,6 @@ bool QtVersionManager::isValidId(int id) const
return m_versions.contains(id);
}
-QString QtVersionManager::popPendingMwcUpdate()
-{
- if (m_pendingMwcUpdates.isEmpty())
- return QString();
- return m_pendingMwcUpdates.takeFirst();
-}
-
-QString QtVersionManager::popPendingGcceUpdate()
-{
- if (m_pendingGcceUpdates.isEmpty())
- return QString();
- return m_pendingGcceUpdates.takeFirst();
-}
-
Core::FeatureSet QtVersionManager::availableFeatures(const QString &platformName) const
{
Core::FeatureSet features;
diff --git a/src/plugins/qtsupport/qtversionmanager.h b/src/plugins/qtsupport/qtversionmanager.h
index d391c83323..ea8db4d339 100644
--- a/src/plugins/qtsupport/qtversionmanager.h
+++ b/src/plugins/qtsupport/qtversionmanager.h
@@ -91,10 +91,6 @@ public:
static Utils::FileName findQMakeBinaryFromMakefile(const QString &directory);
bool isValidId(int id) const;
- // Compatibility with pre-2.2:
- QString popPendingMwcUpdate();
- QString popPendingGcceUpdate();
-
Core::FeatureSet availableFeatures(const QString &platformName) const;
QStringList availablePlatforms() const;
QString displayNameForPlatform(const QString &string) const;
@@ -122,7 +118,6 @@ private:
static BaseQtVersion::QmakeBuildConfigs qmakeBuildConfigFromCmdArgs(QList<QMakeAssignment> *assignments,
BaseQtVersion::QmakeBuildConfigs defaultBuildConfig);
bool restoreQtVersions();
- bool legacyRestore();
void findSystemQt();
void saveQtVersions();
void updateDocumentation();
@@ -140,10 +135,6 @@ private:
// managed by QtProjectManagerPlugin
static QtVersionManager *m_self;
- // Compatibility with pre-2.2:
- QStringList m_pendingMwcUpdates;
- QStringList m_pendingGcceUpdates;
-
Utils::FileSystemWatcher *m_configFileWatcher;
QTimer *m_fileWatcherTimer;
Utils::PersistentSettingsWriter *m_writer;