diff --git a/src/plugins/qt4projectmanager/qt4nodes.cpp b/src/plugins/qt4projectmanager/qt4nodes.cpp index a2189b441161881f4e554b3de159dc87192e6e8f..2ec850951de48f26d848a3e52f4f15c174ec6be6 100644 --- a/src/plugins/qt4projectmanager/qt4nodes.cpp +++ b/src/plugins/qt4projectmanager/qt4nodes.cpp @@ -1603,6 +1603,8 @@ void Qt4ProFileNode::applyEvaluate(bool parseResult, bool async) // update TargetInformation m_qt4targetInformation = targetInformation(m_readerExact); + setupInstallsList(m_readerExact); + // update other variables QHash<Qt4Variable, QStringList> newVarValues; @@ -1932,6 +1934,51 @@ TargetInformation Qt4ProFileNode::targetInformation() const return m_qt4targetInformation; } +void Qt4ProFileNode::setupInstallsList(const ProFileReader *reader) +{ + m_installsList.clear(); + if (!reader) + return; + const QStringList &itemList = reader->values(QLatin1String("INSTALLS")); + foreach (const QString &item, itemList) { + QString itemPath; + const QString pathVar = item + QLatin1String(".path"); + const QStringList &itemPaths = reader->values(pathVar); + if (itemPaths.count() != 1) { + qDebug("Invalid RHS: Variable '%s' has %d values.", + qPrintable(pathVar), itemPaths.count()); + if (itemPaths.isEmpty()) { + qDebug("Ignoring INSTALLS item '%s', because it has no path.", + qPrintable(item)); + continue; + } else { + itemPath = itemPaths.last(); + } + } + + const QStringList &itemFiles + = reader->absoluteFileValues(item + QLatin1String(".files"), + m_projectDir, QStringList() << m_projectDir, 0); + if (item == QLatin1String("target")) { + if (!m_installsList.targetPath.isEmpty()) + qDebug("Overwriting existing target.path in INSTALLS list."); + m_installsList.targetPath = itemPath; + } else { + if (itemFiles.isEmpty()) { + qDebug("Ignoring INSTALLS item '%s', because it has no files.", + qPrintable(item)); + continue; + } + m_installsList.items << InstallsItem(itemPath, itemFiles); + } + } +} + +InstallsList Qt4ProFileNode::installsList() const +{ + return m_installsList; +} + QString Qt4ProFileNode::buildDir() const { const QDir srcDirRoot = QFileInfo(m_project->rootProjectNode()->path()).absoluteDir(); diff --git a/src/plugins/qt4projectmanager/qt4nodes.h b/src/plugins/qt4projectmanager/qt4nodes.h index a616f552714f8561368c12a7c750f4300e60184a..104e6e21ca2ae0aea0c2f371339d54e93955ef8b 100644 --- a/src/plugins/qt4projectmanager/qt4nodes.h +++ b/src/plugins/qt4projectmanager/qt4nodes.h @@ -248,6 +248,18 @@ struct TargetInformation }; +struct InstallsItem { + InstallsItem(QString p, QStringList f) : path(p), files(f) {} + QString path; + QStringList files; +}; + +struct InstallsList { + void clear() { targetPath.clear(); items.clear(); } + QString targetPath; + QList<InstallsItem> items; +}; + // Implements ProjectNode for qt4 pro files class Qt4ProFileNode : public Qt4PriFileNode { @@ -279,6 +291,8 @@ public: TargetInformation targetInformation(const QString &fileName) const; TargetInformation targetInformation() const; + InstallsList installsList() const; + QString makefile() const; void update(); @@ -309,6 +323,7 @@ private: QStringList libDirectories(ProFileReader *reader) const; QStringList subDirsPaths(ProFileReader *reader) const; TargetInformation targetInformation(ProFileReader *reader) const; + void setupInstallsList(const ProFileReader *reader); void invalidate(); @@ -317,6 +332,7 @@ private: QMap<QString, QDateTime> m_uitimestamps; TargetInformation m_qt4targetInformation; + InstallsList m_installsList; friend class Qt4NodeHierarchy; // Async stuff