From 0d8efe3535b3ce9ecbc2c6482007edfc3ac492d0 Mon Sep 17 00:00:00 2001 From: Dave Reisner Date: Sun, 24 Nov 2013 08:56:56 -0500 Subject: [PATCH] ycm: autocompose flags from the Makefile This should hopefully be self-maintaining. --- .ycm_extra_conf.py | 67 +++++++++++++++++----------------------------- Makefile.am | 4 +++ 2 files changed, 29 insertions(+), 42 deletions(-) diff --git a/.ycm_extra_conf.py b/.ycm_extra_conf.py index 57b868a18..a90610d29 100644 --- a/.ycm_extra_conf.py +++ b/.ycm_extra_conf.py @@ -1,34 +1,14 @@ +import itertools import os -import ycm_core -from clang_helpers import PrepareClangFlags - -compilation_database_folder = '' - -flags = [ -'-include', -'./config.h', -'-I', -'/usr/include/dbus-1.0', -'-I', -'./src/shared', -'-I', -'./src/systemd', -'-Wall', -'-Wextra', -'-Werror', -'-Wno-long-long', -'-Wno-variadic-macros', -'-fexceptions', -'-DNDEBUG', -'-DUSE_CLANG_COMPLETER', -'-D_GNU_SOURCE', -'-std=c99', -] - -if compilation_database_folder: - database = ycm_core.CompilationDatabase(compilation_database_folder) -else: - database = None +import subprocess + +def GetFlagsFromMakefile(varname): + return subprocess.check_output([ + "make", "-s", "print-%s" % varname]).decode().split() + + +def Flatten(lists): + return list(itertools.chain.from_iterable(lists)) def DirectoryOfThisScript(): @@ -65,19 +45,22 @@ def MakeRelativePathsInFlagsAbsolute(flags, working_directory): def FlagsForFile(filename): - if database: - compilation_info = database.GetCompilationInfoForFile(filename) - final_flags = PrepareClangFlags( - MakeRelativePathsInFlagsAbsolute( - compilation_info.compiler_flags_, - compilation_info.compiler_working_dir_), - filename) - - else: - relative_to = DirectoryOfThisScript() - final_flags = MakeRelativePathsInFlagsAbsolute(flags, relative_to) + relative_to = DirectoryOfThisScript() return { - 'flags': final_flags, + 'flags': MakeRelativePathsInFlagsAbsolute(flags, relative_to), 'do_cache': True } + +flags = Flatten(map(GetFlagsFromMakefile, [ + 'AM_CPPFLAGS', + 'CPPFLAGS', + 'AM_CFLAGS', + 'CFLAGS', +])) + +# these flags cause crashes in libclang, so remove them +flags.remove('-Wlogical-op') +flags.remove('-Wsuggest-attribute=noreturn') + +# vim: set et ts=2 sw=2: diff --git a/Makefile.am b/Makefile.am index 8b3b81dac..65b445ec5 100644 --- a/Makefile.am +++ b/Makefile.am @@ -5081,3 +5081,7 @@ tests += \ cppcheck: cppcheck --enable=all -q $(top_srcdir) + +# Used to extract compile flags for YCM. +print-%: + @echo $($*) -- 2.30.2