import itertools import os 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(): return os.path.dirname(os.path.abspath(__file__)) def MakeRelativePathsInFlagsAbsolute(flags, working_directory): if not working_directory: return 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): relative_to = DirectoryOfThisScript() return { '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') flags.remove('-Wdate-time') # vim: set et ts=2 sw=2: