From 2f017c071edd35dd19cfb8c2d49c70b99a50760e Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Thu, 9 Jul 2015 01:28:04 +0200 Subject: [PATCH] AutoTools: Handle (abs_)?top_srcdir, and (abs_)?top_builddir in include paths taken from the Autotools project. These are widely used in include paths. Change-Id: I78d5e1f6ce6cd7bfe92bb670b73e276cb558b9eb Reviewed-by: hjk --- .../autotoolsproject.cpp | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/plugins/autotoolsprojectmanager/autotoolsproject.cpp b/src/plugins/autotoolsprojectmanager/autotoolsproject.cpp index 25d454ca763..5af16f3e4f7 100644 --- a/src/plugins/autotoolsprojectmanager/autotoolsproject.cpp +++ b/src/plugins/autotoolsprojectmanager/autotoolsproject.cpp @@ -402,6 +402,24 @@ QList AutotoolsProject::nodes(FolderNode *parent) const return list; } +static QStringList filterIncludes(const QString &absSrc, const QString &absBuild, + const QStringList &in) +{ + QStringList result; + foreach (const QString i, in) { + QString out = i; + out.replace(QLatin1String("$(top_srcdir)"), absSrc); + out.replace(QLatin1String("$(abs_top_srcdir)"), absSrc); + + out.replace(QLatin1String("$(top_builddir)"), absBuild); + out.replace(QLatin1String("$(abs_top_builddir)"), absBuild); + + result << out; + } + + return result; +} + void AutotoolsProject::updateCppCodeModel() { CppTools::CppModelManager *modelManager = CppTools::CppModelManager::instance(); @@ -427,7 +445,12 @@ void AutotoolsProject::updateCppCodeModel() ppBuilder.setCFlags(cflags); ppBuilder.setCxxFlags(cxxflags); - ppBuilder.setIncludePaths(m_makefileParserThread->includePaths()); + const QString absSrc = projectDirectory().toString(); + const Target *target = activeTarget(); + const QString absBuild = (target && target->activeBuildConfiguration()) + ? target->activeBuildConfiguration()->buildDirectory().toString() : QString(); + + ppBuilder.setIncludePaths(filterIncludes(absSrc, absBuild, m_makefileParserThread->includePaths())); ppBuilder.setDefines(m_makefileParserThread->defines()); const QList languages = ppBuilder.createProjectPartsForFiles(m_files);