diff --git a/config_gen.py b/config_gen.py index 54e89f9..e4627d9 100755 --- a/config_gen.py +++ b/config_gen.py @@ -136,7 +136,10 @@ def main(): else: lang, flags = ("c++", cxx_flags) - generate_conf(["-x", lang] + flags, config_file) + if force_lang: + lang += ["-x", force_lang] + + generate_conf(flags, config_file) print("Created {} config file with {} {} flags".format(output_format.upper(), len(flags), lang.upper())) diff --git a/template.py b/template.py index 2985a70..15ae98d 100644 --- a/template.py +++ b/template.py @@ -92,6 +92,29 @@ def IsHeaderFile( filename ): extension = os.path.splitext( filename )[ 1 ] return extension in [ '.H', '.h', '.hxx', '.hpp', '.hh' ] +def filter_out_cxx_std( flags ): + return [f for f in flags if not (f[:5] == '-std=' and f[5:].find('++') != -1)] + +def filter_out_c_std( flags ): + return [f for f in flags if not (f[:5] == '-std=' and f[5:].find('++') == -1)] + +def LangFlags( filename, flags ): + extension = os.path.splitext( filename )[ 1 ] + langmap = { + 'c++': [ '.hh', '.hpp', '.cc', '.cpp', '.cxx' ], + 'c': [ '.h', '.c' ] + } + for lang, extlist in langmap.iteritems(): + if extension in extlist: + if lang == 'c++': + fflags = filter_out_c_std(flags) + elif lang == 'c': + fflags = filter_out_cxx_std(flags) + else: + fflags = flags + return [ '-x', lang ] + fflags + return flags + def GetCompilationInfoForFile( filename ): # The compilation_commands.json file generated by CMake does not have entries @@ -127,6 +150,9 @@ def FlagsForFile( filename, **kwargs ): relative_to = DirectoryOfThisScript() final_flags = MakeRelativePathsInFlagsAbsolute( flags, relative_to ) + if '-x' not in final_flags: + final_flags = LangFlags( filename, final_flags ) + return { 'flags': final_flags, 'do_cache': True