chiark / gitweb /
bus: test-bus-objects - add missing header
[elogind.git] / .ycm_extra_conf.py
1 import os
2 import ycm_core
3 from clang_helpers import PrepareClangFlags
4
5 compilation_database_folder = ''
6
7 flags = [
8 '-include',
9 './config.h',
10 '-I',
11 '/usr/include/dbus-1.0',
12 '-I',
13 './src/shared',
14 '-Wall',
15 '-Wextra',
16 '-Werror',
17 '-Wno-long-long',
18 '-Wno-variadic-macros',
19 '-fexceptions',
20 '-DNDEBUG',
21 '-DUSE_CLANG_COMPLETER',
22 '-D_GNU_SOURCE',
23 '-std=c99',
24 ]
25
26 if compilation_database_folder:
27   database = ycm_core.CompilationDatabase(compilation_database_folder)
28 else:
29   database = None
30
31
32 def DirectoryOfThisScript():
33   return os.path.dirname(os.path.abspath(__file__))
34
35
36 def MakeRelativePathsInFlagsAbsolute(flags, working_directory):
37   if not working_directory:
38     return flags
39   new_flags = []
40   make_next_absolute = False
41   path_flags = [ '-isystem', '-I', '-iquote', '--sysroot=' ]
42   for flag in flags:
43     new_flag = flag
44
45     if make_next_absolute:
46       make_next_absolute = False
47       if not flag.startswith('/'):
48         new_flag = os.path.join(working_directory, flag)
49
50     for path_flag in path_flags:
51       if flag == path_flag:
52         make_next_absolute = True
53         break
54
55       if flag.startswith(path_flag):
56         path = flag[ len(path_flag): ]
57         new_flag = path_flag + os.path.join(working_directory, path)
58         break
59
60     if new_flag:
61       new_flags.append(new_flag)
62   return new_flags
63
64
65 def FlagsForFile(filename):
66   if database:
67     compilation_info = database.GetCompilationInfoForFile(filename)
68     final_flags = PrepareClangFlags(
69         MakeRelativePathsInFlagsAbsolute(
70             compilation_info.compiler_flags_,
71             compilation_info.compiler_working_dir_),
72         filename)
73
74   else:
75     relative_to = DirectoryOfThisScript()
76     final_flags = MakeRelativePathsInFlagsAbsolute(flags, relative_to)
77
78   return {
79     'flags': final_flags,
80     'do_cache': True
81   }