diff options
author | Dave Reisner <dreisner@archlinux.org> | 2013-11-24 08:56:56 -0500 |
---|---|---|
committer | Dave Reisner <dreisner@archlinux.org> | 2014-01-11 13:35:43 -0500 |
commit | 0d8efe3535b3ce9ecbc2c6482007edfc3ac492d0 (patch) | |
tree | 635381953e6d5ecd7cf17607acc92b7fc2022c01 | |
parent | 8042e377b8bb8f79b7da2dff89d2247ce1f74b66 (diff) |
ycm: autocompose flags from the Makefile
This should hopefully be self-maintaining.
-rw-r--r-- | .ycm_extra_conf.py | 67 | ||||
-rw-r--r-- | Makefile.am | 4 |
2 files changed, 29 insertions, 42 deletions
diff --git a/.ycm_extra_conf.py b/.ycm_extra_conf.py index 57b868a18e..a90610d29d 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 8b3b81daca..65b445ec50 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 $($*) |