diff options
| -rw-r--r-- | Jamroot.jam | 2 | ||||
| -rw-r--r-- | netfs/daemon/.ycm_extra_conf.py | 113 | ||||
| -rw-r--r-- | netfs/fuse/.ycm_extra_conf.py | 113 | 
3 files changed, 227 insertions, 1 deletions
| diff --git a/Jamroot.jam b/Jamroot.jam index bab30f0..e02a59a 100644 --- a/Jamroot.jam +++ b/Jamroot.jam @@ -7,7 +7,7 @@ project    : requirements        <variant>release:<cflags>"-std=c++0x"        <variant>debug:<cflags>"-W -Wall -Werror -Wwrite-strings -std=c++0x" -      <variant>debug:<linkflags>"-Wl,-z,defs" +      <linkflags>"-Wl,-z,defs,--warn-once"  	; diff --git a/netfs/daemon/.ycm_extra_conf.py b/netfs/daemon/.ycm_extra_conf.py new file mode 100644 index 0000000..76707ba --- /dev/null +++ b/netfs/daemon/.ycm_extra_conf.py @@ -0,0 +1,113 @@ +import os +import ycm_core + +flags = [ +'-Wall', +'-Wextra', +'-Werror', +'-Wc++98-compat', +'-Wno-long-long', +'-Wno-variadic-macros', +'-fexceptions', +'-DNDEBUG', +'-std=c++11', +'-x', +'c++', +'-I', +'.', +'-I', +'../lib', +'-I', +'../ice', +'-I', +'../ice/bin/*/debug', +'-isystem', +'/usr/include', +'-isystem', +'/usr/include/glibmm-2.4', +] + +compilation_database_folder = '' + +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 DirectoryOfThisScript(): +  return os.path.dirname( os.path.abspath( __file__ ) ) + + +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 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 database: +    # Bear in mind that compilation_info.compiler_flags_ does NOT return a +    # python list, but a "list-like" StringVec object +    compilation_info = GetCompilationInfoForFile( filename ) +    if not compilation_info: +      return None + +    final_flags = MakeRelativePathsInFlagsAbsolute( +      compilation_info.compiler_flags_, +      compilation_info.compiler_working_dir_ ) +  else: +    relative_to = DirectoryOfThisScript() +    final_flags = MakeRelativePathsInFlagsAbsolute( flags, relative_to ) + +  return { +    'flags': final_flags, +    'do_cache': True +  } diff --git a/netfs/fuse/.ycm_extra_conf.py b/netfs/fuse/.ycm_extra_conf.py new file mode 100644 index 0000000..76707ba --- /dev/null +++ b/netfs/fuse/.ycm_extra_conf.py @@ -0,0 +1,113 @@ +import os +import ycm_core + +flags = [ +'-Wall', +'-Wextra', +'-Werror', +'-Wc++98-compat', +'-Wno-long-long', +'-Wno-variadic-macros', +'-fexceptions', +'-DNDEBUG', +'-std=c++11', +'-x', +'c++', +'-I', +'.', +'-I', +'../lib', +'-I', +'../ice', +'-I', +'../ice/bin/*/debug', +'-isystem', +'/usr/include', +'-isystem', +'/usr/include/glibmm-2.4', +] + +compilation_database_folder = '' + +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 DirectoryOfThisScript(): +  return os.path.dirname( os.path.abspath( __file__ ) ) + + +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 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 database: +    # Bear in mind that compilation_info.compiler_flags_ does NOT return a +    # python list, but a "list-like" StringVec object +    compilation_info = GetCompilationInfoForFile( filename ) +    if not compilation_info: +      return None + +    final_flags = MakeRelativePathsInFlagsAbsolute( +      compilation_info.compiler_flags_, +      compilation_info.compiler_working_dir_ ) +  else: +    relative_to = DirectoryOfThisScript() +    final_flags = MakeRelativePathsInFlagsAbsolute( flags, relative_to ) + +  return { +    'flags': final_flags, +    'do_cache': True +  } | 
