From 0073788bfead1239d563e93f60dc8021bbf3dfaf Mon Sep 17 00:00:00 2001 From: dec05eba Date: Mon, 8 Oct 2018 15:15:43 +0200 Subject: Use compdb tool to include header files in compile_commands.json --- backend/ninja/Ninja.cpp | 43 +++++++++++++++++++++++++++++++++---------- 1 file changed, 33 insertions(+), 10 deletions(-) (limited to 'backend/ninja') diff --git a/backend/ninja/Ninja.cpp b/backend/ninja/Ninja.cpp index a212280..ef6c365 100644 --- a/backend/ninja/Ninja.cpp +++ b/backend/ninja/Ninja.cpp @@ -979,7 +979,6 @@ namespace backend compileCCommand.insert(compileCCommand.end(), { ninja::NinjaArg::createRaw("-MMD"), - ninja::NinjaArg("-I" + config.getPackageName() + "@exe"), ninja::NinjaArg::createRaw("$globalIncDir") }); @@ -1816,20 +1815,18 @@ namespace backend Result Ninja::buildCompilationDatabase(const _tinydir_char_t *buildFilePath, const FileString &saveDir) { + Result compdbAvailableResult = exec(TINYDIR_STRING("compdb version"), false); + bool isCompdbAvailable = (compdbAvailableResult && compdbAvailableResult.unwrap().exitCode == 0); + FileString command = TINYDIR_STRING("ninja -C \""); - command += buildFilePath; + command += (isCompdbAvailable ? buildFilePath : saveDir); command += TINYDIR_STRING("\" -t compdb compile_c compile_cpp compile_zig > \""); - command += saveDir; + command += buildFilePath; command += TINYDIR_STRING("/compile_commands.json\""); Result execResult = exec(command.c_str(), false); - if(execResult.isOk()) + if(execResult) { - if(execResult.unwrap().exitCode == 0) - { - //printf("%s\n", execResult.unwrap().execStdout.c_str()); - return Result::Ok(true); - } - else + if(execResult.unwrap().exitCode != 0) { string errMsg = "Failed to build compilation database, reason: "; errMsg += execResult.unwrap().execStdout; @@ -1842,5 +1839,31 @@ namespace backend errMsg += execResult.getErrMsg(); return Result::Err(errMsg); } + + if(isCompdbAvailable) + { + command = TINYDIR_STRING("compdb -p \""); + command += buildFilePath; + command += TINYDIR_STRING("\" list > \""); + command += saveDir; + command += TINYDIR_STRING("/compile_commands.json\""); + execResult = exec(command.c_str(), false); + if(execResult) + { + if(execResult.unwrap().exitCode != 0) + { + string errMsg = "Failed to build compilation database, reason: "; + errMsg += execResult.unwrap().execStdout; + return Result::Err(errMsg); + } + } + else + { + string errMsg = "Failed to build compilation database, reason: "; + errMsg += execResult.getErrMsg(); + return Result::Err(errMsg); + } + } + return Result::Ok(true); } } -- cgit v1.2.3