ajwillia-ms pushed a commit to branch master. http://git.enlightenment.org/tools/edi.git/commit/?id=5523b4d449c7ec10806cc1588281d93a05e7b166
commit 5523b4d449c7ec10806cc1588281d93a05e7b166 Author: Andy Williams <[email protected]> Date: Thu Oct 19 16:44:36 2017 +0100 clang: Let's load clang relative to the build commands This fixes relative includes for meson and cmake projects. --- src/bin/language/edi_language_provider_c.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/bin/language/edi_language_provider_c.c b/src/bin/language/edi_language_provider_c.c index 4d09d9c..d7216b4 100644 --- a/src/bin/language/edi_language_provider_c.c +++ b/src/bin/language/edi_language_provider_c.c @@ -34,24 +34,21 @@ _clang_commands_get(const char *path, const char ***args, unsigned int *argc) CXCompilationDatabase database = NULL; CXCompileCommands commands; CXCompileCommand command; + char *working; const char** arguments; unsigned int i, numargs, ignored = 0; - if (edi_project_file_exists("compile_commands.json")) - { - database = clang_CompilationDatabase_fromDirectory(edi_project_get(), &error); - } - else if (edi_project_file_exists("build/compile_commands.json")) - { - char *build = edi_project_file_path_get("build"); - database = clang_CompilationDatabase_fromDirectory(build, &error); - free(build); - } + if (edi_project_file_exists("build/compile_commands.json")) + working = edi_project_file_path_get("build"); + else + working = strdup(edi_project_get()); + database = clang_CompilationDatabase_fromDirectory(working, &error); if (database == NULL || error == CXCompilationDatabase_CanNotLoadDatabase) { INF("Could not load compile_commands.json in %s", edi_project_get()); _clang_commands_fallback_get(args, argc); + free(working); return; } @@ -63,10 +60,11 @@ _clang_commands_get(const char *path, const char ***args, unsigned int *argc) { INF("File %s not found in compile_commands.json", path); _clang_commands_fallback_get(args, argc); + free(working); return; } - arguments = malloc(sizeof(char*) * (numargs + 1)); + arguments = malloc(sizeof(char*) * (numargs + 2)); INF("Loading clang parameters for %s", path); arguments[0] = CLANG_INCLUDES; @@ -85,10 +83,12 @@ _clang_commands_get(const char *path, const char ***args, unsigned int *argc) clang_disposeString(argument); } + arguments[i - ignored] = eina_slstr_printf("-working-directory=%s", working); *args = arguments; - *argc = numargs + 1 - ignored; + *argc = numargs + 2 - ignored; clang_CompilationDatabase_dispose(database); + free(working); } static void --
