import os import shlex import subprocess import ycm_core # These are the compilation flags that will be used in case there's no # compilation database set (by default, one is not set). # CHANGE THIS LIST OF FLAGS. YES, THIS IS THE DROID YOU HAVE BEEN LOOKING FOR. flags = [ '-Wall', # '-Wextra', # '-Wshadow', # '-Werror', # '-Wc++98-compat', # '-Wno-long-long', # '-Wno-variadic-macros', # '-fexceptions', # '-DNDEBUG', '-std=c++11', '-stdlib=libc++', '-x', 'c++', '-I', '.', '-I', './include', '-isystem', '/usr/include/c++/4.9.0', '-isystem', '/usr/include/c++/4.9.0/x86_64-unknown-linux-gnu', '-isystem', '/usr/include/c++/4.9.0/backward', '-isystem', '/usr/lib/clang/3.4.1/include' ] # This function makes it easy to pull in additional flags from rospack def rospack(): cmd = ['rospack', 'cflags-only-I'] try: out = subprocess.Popen(cmd, shell=False, stdout=subprocess.PIPE).stdout except: return [] line = out.readline()[:-1].split(" ") includes = [] for include in line: if include.startswith(os.path.expanduser('~')): includes += ['-I', include] else: includes += ['-isystem', include] return filter(lambda a: a != ' ', includes) flags += rospack() def DirectoryOfThisScript(): return os.path.dirname( os.path.abspath( __file__ ) ) def MakeRelativePathsInFlagsAbsolute( flags, working_directory ): if not working_directory: return list( flags ) new_flags = [] make_next_absolute = False path_flags = [ '-isystem', '-I', '-iquote', '--sysroot=' ] for flag in flags: new_flag = flag if make_next_absolute: make_next_absolute = False if not flag.startswith( '/' ): new_flag = os.path.join( working_directory, flag ) for path_flag in path_flags: if flag == path_flag: make_next_absolute = True break if flag.startswith( path_flag ): path = flag[ len( path_flag ): ] new_flag = path_flag + os.path.join( working_directory, path ) break if new_flag: new_flags.append( new_flag ) return new_flags def FlagsForFile( filename, **kwargs ): relative_to = DirectoryOfThisScript() final_flags = MakeRelativePathsInFlagsAbsolute( flags, relative_to ) return { 'flags': final_flags, 'do_cache': True }