From 95ef11af2da5316474421ea507e3b028157a857b Mon Sep 17 00:00:00 2001 From: Dmitry Petroff Date: Mon, 3 Apr 2017 15:57:42 +0300 Subject: [PATCH 1/2] Detect file language by source file extension --- config_gen.py | 5 ++++- template.py | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) 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..db2654e 100644 --- a/template.py +++ b/template.py @@ -92,6 +92,17 @@ def IsHeaderFile( filename ): extension = os.path.splitext( filename )[ 1 ] return extension in [ '.H', '.h', '.hxx', '.hpp', '.hh' ] +def LangFlags( filename ): + extension = os.path.splitext( filename )[ 1 ] + langmap = { + 'c++': [ 'hh', 'hpp', 'cc', 'cpp', 'cxx' ], + 'c': [ 'h', 'c' ] + } + for lang, extlist in langmap: + if extension in extlist: + return [ '-x', lang ] + return [] + def GetCompilationInfoForFile( filename ): # The compilation_commands.json file generated by CMake does not have entries @@ -127,6 +138,9 @@ def FlagsForFile( filename, **kwargs ): relative_to = DirectoryOfThisScript() final_flags = MakeRelativePathsInFlagsAbsolute( flags, relative_to ) + if '-x' not in final_flags: + final_flags += LangFlags( filename ) + return { 'flags': final_flags, 'do_cache': True From 8058bbbfe459631d15e52c466cbca6573e8c8cd9 Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Tue, 4 Apr 2017 13:46:47 +0300 Subject: [PATCH 2/2] Fixed errors in template, filter out C/C++ standard flags for c++/c sources --- template.py | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/template.py b/template.py index db2654e..15ae98d 100644 --- a/template.py +++ b/template.py @@ -92,16 +92,28 @@ def IsHeaderFile( filename ): extension = os.path.splitext( filename )[ 1 ] return extension in [ '.H', '.h', '.hxx', '.hpp', '.hh' ] -def LangFlags( filename ): +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' ] + 'c++': [ '.hh', '.hpp', '.cc', '.cpp', '.cxx' ], + 'c': [ '.h', '.c' ] } - for lang, extlist in langmap: + for lang, extlist in langmap.iteritems(): if extension in extlist: - return [ '-x', lang ] - return [] + 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 ): @@ -139,7 +151,7 @@ def FlagsForFile( filename, **kwargs ): final_flags = MakeRelativePathsInFlagsAbsolute( flags, relative_to ) if '-x' not in final_flags: - final_flags += LangFlags( filename ) + final_flags = LangFlags( filename, final_flags ) return { 'flags': final_flags,