summaryrefslogtreecommitdiffstats
path: root/src/jaegertracing/jaeger-client-cpp/.ycm_extra_conf.py
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/jaegertracing/jaeger-client-cpp/.ycm_extra_conf.py104
1 files changed, 104 insertions, 0 deletions
diff --git a/src/jaegertracing/jaeger-client-cpp/.ycm_extra_conf.py b/src/jaegertracing/jaeger-client-cpp/.ycm_extra_conf.py
new file mode 100644
index 000000000..ad3fcc3d7
--- /dev/null
+++ b/src/jaegertracing/jaeger-client-cpp/.ycm_extra_conf.py
@@ -0,0 +1,104 @@
+# Copyright (c) 2017-2018 Uber Technologies, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import os
+import ycm_core
+
+
+def DirectoryOfThisScript():
+ return os.path.dirname( os.path.abspath( __file__ ) )
+
+
+project_dir = DirectoryOfThisScript()
+
+try:
+ with open('build/_3rdParty/Hunter/install-root-dir') as f:
+ hunter_install_dir = f.readline()
+except IOError:
+ # Ignore if file does not exist
+ hunter_install_dir = ''
+
+flags = [
+'-Wall',
+'-Werror',
+'-pedantic',
+'-std=c++11',
+'-x',
+'c++',
+'-DBOOST_COROUTINES_NO_DEPRECATION_WARNING=1',
+'-DGTEST_HAS_TR1_TUPLE=0',
+'-DGTEST_USE_OWN_TR1_TUPLE=0',
+'-isystem',
+'/usr/local/include',
+'-I',
+os.path.join(project_dir, 'src'),
+'-I',
+os.path.join(project_dir, 'build/src')
+]
+
+if hunter_install_dir:
+ flags += ['-I', hunter_install_dir]
+
+compilation_database_folder = os.path.join(project_dir, 'build')
+
+if os.path.exists( compilation_database_folder ):
+ database = ycm_core.CompilationDatabase( compilation_database_folder )
+else:
+ database = None
+
+SOURCE_EXTENSIONS = [ '.cpp', '.cxx', '.cc', '.c', '.m', '.mm' ]
+
+
+def IsHeaderFile( filename ):
+ extension = os.path.splitext( filename )[ 1 ]
+ return extension in [ '.h', '.hxx', '.hpp', '.hh' ]
+
+
+def GetCompilationInfoForFile( filename ):
+ # The compilation_commands.json file generated by CMake does not have entries
+ # for header files. So we do our best by asking the db for flags for a
+ # corresponding source file, if any. If one exists, the flags for that file
+ # should be good enough.
+ if IsHeaderFile( filename ):
+ basename = os.path.splitext( filename )[ 0 ]
+ for extension in SOURCE_EXTENSIONS:
+ replacement_file = basename + extension
+ if os.path.exists( replacement_file ):
+ compilation_info = database.GetCompilationInfoForFile(
+ replacement_file )
+ if compilation_info.compiler_flags_:
+ return compilation_info
+ return None
+ return database.GetCompilationInfoForFile( filename )
+
+
+def FlagsForFile( filename, **kwargs ):
+ if not database:
+ return {
+ 'flags': flags,
+ 'include_paths_relative_to_dir': DirectoryOfThisScript()
+ }
+
+ compilation_info = GetCompilationInfoForFile( filename )
+ if not compilation_info:
+ return None
+
+ # Bear in mind that compilation_info.compiler_flags_ does NOT return a
+ # python list, but a "list-like" StringVec object.
+ final_flags = list( compilation_info.compiler_flags_ )
+
+ return {
+ 'flags': final_flags,
+ 'include_paths_relative_to_dir': compilation_info.compiler_working_dir_
+ }