1289177Speter# Configuration file for YouCompleteMe vim plugin to allow the plugin 2289177Speter# to determine the compile flags. This file is based on: 3289177Speter# https://github.com/Valloric/YouCompleteMe/blob/master/cpp/ycm/.ycm_extra_conf.py 4289177Speter# 5289177Speter# This is free and unencumbered software released into the public domain. 6289177Speter# 7289177Speter# Anyone is free to copy, modify, publish, use, compile, sell, or 8289177Speter# distribute this software, either in source code form or as a compiled 9289177Speter# binary, for any purpose, commercial or non-commercial, and by any 10289177Speter# means. 11289177Speter# 12289177Speter# In jurisdictions that recognize copyright laws, the author or authors 13289177Speter# of this software dedicate any and all copyright interest in the 14289177Speter# software to the public domain. We make this dedication for the benefit 15289177Speter# of the public at large and to the detriment of our heirs and 16289177Speter# successors. We intend this dedication to be an overt act of 17289177Speter# relinquishment in perpetuity of all present and future rights to this 18289177Speter# software under copyright law. 19289177Speter# 20289177Speter# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 21289177Speter# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 22289177Speter# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 23289177Speter# IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 24289177Speter# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 25289177Speter# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 26289177Speter# OTHER DEALINGS IN THE SOFTWARE. 27289177Speter# 28289177Speter# For more information, please refer to <http://unlicense.org/> 29289177Speter 30289177Speterimport os 31289177Speterimport ycm_core 32289177Speterfrom clang_helpers import PrepareClangFlags 33289177Speter 34289177Spetercompilation_database_folder = os.path.dirname(os.path.realpath(__file__)) 35289177Speter 36289177Speterif compilation_database_folder: 37289177Speter database = ycm_core.CompilationDatabase( compilation_database_folder ) 38289177Speterelse: 39289177Speter database = None 40289177Speter 41289177Speterdef MakeRelativePathsInFlagsAbsolute( flags, working_directory ): 42289177Speter if not working_directory: 43289177Speter return flags 44289177Speter new_flags = [] 45289177Speter make_next_absolute = False 46289177Speter path_flags = [ '-isystem', '-I', '-iquote', '--sysroot=' ] 47289177Speter for flag in flags: 48289177Speter new_flag = flag 49289177Speter 50289177Speter if make_next_absolute: 51289177Speter make_next_absolute = False 52289177Speter if not flag.startswith( '/' ): 53289177Speter new_flag = os.path.join( working_directory, flag ) 54289177Speter 55289177Speter for path_flag in path_flags: 56289177Speter if flag == path_flag: 57289177Speter make_next_absolute = True 58289177Speter break 59289177Speter 60289177Speter if flag.startswith( path_flag ): 61289177Speter path = flag[ len( path_flag ): ] 62289177Speter new_flag = path_flag + os.path.join( working_directory, path ) 63289177Speter break 64289177Speter 65289177Speter if new_flag: 66289177Speter new_flags.append( new_flag ) 67289177Speter return new_flags 68289177Speter 69289177Speter 70289177Speterdef FlagsForFile( filename ): 71289177Speter if database: 72289177Speter # Bear in mind that compilation_info.compiler_flags_ does NOT return a 73289177Speter # python list, but a "list-like" StringVec object 74289177Speter compilation_info = database.GetCompilationInfoForFile( filename ) 75289177Speter final_flags = PrepareClangFlags( 76289177Speter MakeRelativePathsInFlagsAbsolute( 77289177Speter compilation_info.compiler_flags_, 78289177Speter compilation_info.compiler_working_dir_ ), 79289177Speter filename ) 80289177Speter do_cache = True 81289177Speter else: 82289177Speter final_flags = [ ] 83289177Speter do_cache = False 84289177Speter 85289177Speter return { 86289177Speter 'flags': final_flags, 87289177Speter 'do_cache': do_cache 88289177Speter } 89