summaryrefslogtreecommitdiffstats
path: root/Source/cmNinjaTargetGenerator.cxx
diff options
context:
space:
mode:
authorStephen Kelly <steveire@gmail.com>2012-06-18 17:59:33 (GMT)
committerStephen Kelly <steveire@gmail.com>2012-06-19 07:01:28 (GMT)
commite30d46e20ee71d57e09f83fafa39b7e464efe110 (patch)
treec2a4ed0ea02f844272200031ca19a19462205573 /Source/cmNinjaTargetGenerator.cxx
parent1d8199ffecbd8881c38e0e63ee07844a50abac49 (diff)
downloadCMake-e30d46e20ee71d57e09f83fafa39b7e464efe110.zip
CMake-e30d46e20ee71d57e09f83fafa39b7e464efe110.tar.gz
CMake-e30d46e20ee71d57e09f83fafa39b7e464efe110.tar.bz2
Use full paths in compile_commands.json for out of source builds.
Clang tooling requires that paths in the directory and file JSON fields are relative to the directory field, but clang doesn't normalize the paths already. The result is that clang doesn't find the relevant entry for files which begin with ../.
Diffstat (limited to 'Source/cmNinjaTargetGenerator.cxx')
-rw-r--r--Source/cmNinjaTargetGenerator.cxx9
1 files changed, 9 insertions, 0 deletions
diff --git a/Source/cmNinjaTargetGenerator.cxx b/Source/cmNinjaTargetGenerator.cxx
index a362d13..0c8ae8d 100644
--- a/Source/cmNinjaTargetGenerator.cxx
+++ b/Source/cmNinjaTargetGenerator.cxx
@@ -492,6 +492,15 @@ cmNinjaTargetGenerator
std::string escapedSourceFileName =
this->LocalGenerator->ConvertToOutputFormat(
sourceFileName.c_str(), cmLocalGenerator::SHELL);
+
+ if (!cmSystemTools::FileIsFullPath(escapedSourceFileName.c_str()))
+ {
+ escapedSourceFileName = cmSystemTools::CollapseFullPath(
+ escapedSourceFileName.c_str(),
+ this->GetGlobalGenerator()->GetCMakeInstance()->GetHomeOutputDirectory());
+ }
+
+
compileObjectVars.Source = escapedSourceFileName.c_str();
compileObjectVars.Object = objectFileName.c_str();
compileObjectVars.Flags = vars["FLAGS"].c_str();