95 lines
2 KiB
Python
95 lines
2 KiB
Python
|
#!/usr/bin/env python
|
||
|
#-*- coding: utf-8 -*-
|
||
|
|
||
|
import sys
|
||
|
|
||
|
CONFIG_NAME = ".clang_complete"
|
||
|
|
||
|
def readConfiguration():
|
||
|
try:
|
||
|
f = open(CONFIG_NAME, "r")
|
||
|
except IOError:
|
||
|
return []
|
||
|
|
||
|
result = []
|
||
|
for line in f.readlines():
|
||
|
strippedLine = line.strip()
|
||
|
if strippedLine:
|
||
|
result.append(strippedLine)
|
||
|
f.close()
|
||
|
return result
|
||
|
|
||
|
def writeConfiguration(lines):
|
||
|
f = open(CONFIG_NAME, "w")
|
||
|
f.writelines(lines)
|
||
|
f.close()
|
||
|
|
||
|
def parseArguments(arguments):
|
||
|
nextIsInclude = False
|
||
|
nextIsDefine = False
|
||
|
nextIsIncludeFile = False
|
||
|
|
||
|
includes = []
|
||
|
defines = []
|
||
|
include_file = []
|
||
|
options = []
|
||
|
|
||
|
for arg in arguments:
|
||
|
if nextIsInclude:
|
||
|
includes += [arg]
|
||
|
nextIsInclude = False
|
||
|
elif nextIsDefine:
|
||
|
defines += [arg]
|
||
|
nextIsDefine = False
|
||
|
elif nextIsIncludeFile:
|
||
|
include_file += [arg]
|
||
|
nextIsIncludeFile = False
|
||
|
elif arg == "-I":
|
||
|
nextIsInclude = True
|
||
|
elif arg == "-D":
|
||
|
nextIsDefine = True
|
||
|
elif arg[:2] == "-I":
|
||
|
includes += [arg[2:]]
|
||
|
elif arg[:2] == "-D":
|
||
|
defines += [arg[2:]]
|
||
|
elif arg == "-include":
|
||
|
nextIsIncludeFile = True
|
||
|
elif arg.startswith('-std='):
|
||
|
options.append(arg)
|
||
|
elif arg == '-ansi':
|
||
|
options.append(arg)
|
||
|
elif arg.startswith('-pedantic'):
|
||
|
options.append(arg)
|
||
|
elif arg.startswith('-W'):
|
||
|
options.append(arg)
|
||
|
|
||
|
result = list(map(lambda x: "-I" + x, includes))
|
||
|
result.extend(map(lambda x: "-D" + x, defines))
|
||
|
result.extend(map(lambda x: "-include " + x, include_file))
|
||
|
result.extend(options)
|
||
|
|
||
|
return result
|
||
|
|
||
|
def mergeLists(base, new):
|
||
|
result = list(base)
|
||
|
for newLine in new:
|
||
|
if newLine not in result:
|
||
|
result.append(newLine)
|
||
|
return result
|
||
|
|
||
|
configuration = readConfiguration()
|
||
|
args = parseArguments(sys.argv)
|
||
|
result = mergeLists(configuration, args)
|
||
|
writeConfiguration(map(lambda x: x + "\n", result))
|
||
|
|
||
|
|
||
|
import subprocess
|
||
|
proc = subprocess.Popen(sys.argv[1:])
|
||
|
ret = proc.wait()
|
||
|
|
||
|
if ret is None:
|
||
|
sys.exit(1)
|
||
|
sys.exit(ret)
|
||
|
|
||
|
# vim: set ts=2 sts=2 sw=2 expandtab :
|