2013-11-24 17:56:56 +04:00
import itertools
2013-09-17 03:09:36 +04:00
import os
2013-11-24 17:56:56 +04:00
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 ) )
2013-09-17 03:09:36 +04:00
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 ) :
2013-11-24 17:56:56 +04:00
relative_to = DirectoryOfThisScript ( )
2013-09-17 03:09:36 +04:00
return {
2013-11-24 17:56:56 +04:00
' flags ' : MakeRelativePathsInFlagsAbsolute ( flags , relative_to ) ,
2013-09-17 03:09:36 +04:00
' do_cache ' : True
}
2013-11-24 17:56:56 +04:00
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: