From 0fdb4f7b4ceb06aec4fb7d65083a942751fb7669 Mon Sep 17 00:00:00 2001 From: "Thiago Marcos P. Santos" Date: Fri, 26 Jun 2015 16:31:53 +0300 Subject: Add YCM config file for VIM users Tailor-made for Mapbox GL Native. For instructions of how to use, see: https://github.com/Valloric/YouCompleteMe --- .ycm_extra_conf.py | 123 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 .ycm_extra_conf.py (limited to '.ycm_extra_conf.py') diff --git a/.ycm_extra_conf.py b/.ycm_extra_conf.py new file mode 100644 index 0000000000..3b0ee6de67 --- /dev/null +++ b/.ycm_extra_conf.py @@ -0,0 +1,123 @@ +# Adapted version of .ycm_extra_conf.py sample file adapted +# for the Mapbox GL Native project. +# +# This file is NOT licensed under the GPLv3, which is the license for the rest +# of YouCompleteMe. +# +# Here's the license text for this file: +# +# This is free and unencumbered software released into the public domain. +# +# Anyone is free to copy, modify, publish, use, compile, sell, or +# distribute this software, either in source code form or as a compiled +# binary, for any purpose, commercial or non-commercial, and by any +# means. +# +# In jurisdictions that recognize copyright laws, the author or authors +# of this software dedicate any and all copyright interest in the +# software to the public domain. We make this dedication for the benefit +# of the public at large and to the detriment of our heirs and +# successors. We intend this dedication to be an overt act of +# relinquishment in perpetuity of all present and future rights to this +# software under copyright law. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +# +# For more information, please refer to + +import os +import subprocess +import sys +import ycm_core + + +def DirectoryOfThisScript(): + return os.path.dirname(os.path.abspath(__file__)) + + +default_flags = [ + '-std=c++14', + '-I%s' % (os.path.join(DirectoryOfThisScript(), 'src')), + '-I%s' % (os.path.join(DirectoryOfThisScript(), 'include')), +] + + +def MakeRelativePathsInFlagsAbsolute(flags, working_directory): + if not working_directory: + return list(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 FlagsForFileLinux(filename): + working_directory = os.path.join('build', 'linux') + + if not os.path.exists(os.path.join(DirectoryOfThisScript(), working_directory)): + return { + 'flags': default_flags, + 'do_cache': False, + } + + relative_source_path = filename.replace(DirectoryOfThisScript() + '/', '') + relative_obj_path = os.path.splitext(relative_source_path)[0] + '.o' + + make_cmd = 'make -pn |grep %s: |grep GYP_CXXFLAGS |cut -d\' \' -f4-' % relative_obj_path + + p = subprocess.Popen([make_cmd], shell=True, stdout=subprocess.PIPE) + stdout, stderr = p.communicate() + + if p.returncode: + return { + 'flags': default_flags, + 'do_cache': False, + } + + flags = stdout.split(' ') + flags_relative = MakeRelativePathsInFlagsAbsolute(flags, os.path.join(DirectoryOfThisScript(), working_directory)) + flags_final = [flag for flag in flags_relative if flag.startswith("-")] + + return { + 'flags': flags_final, + 'do_cache': True, + } + + +def FlagsForFile(filename, **kwargs): + if sys.platform.startswith('linux'): + return FlagsForFileLinux(filename) + + return { + 'flags': default_flags, + 'do_cache': False, + } -- cgit v1.2.1