Updated colors
[my-vim-dotfolder.git] / bin / cc_args.py
blob4a4e282214c7a9dea41c648f4b082e3c1708633a
1 #!/usr/bin/env python
2 #-*- coding: utf-8 -*-
4 import os
5 import sys
7 CONFIG_NAME = ".clang_complete"
9 def readConfiguration():
10 try:
11 f = open(CONFIG_NAME, "r")
12 except IOError:
13 return []
15 result = []
16 for line in f.readlines():
17 strippedLine = line.strip()
18 if len(strippedLine) > 0:
19 result += [strippedLine]
20 f.close()
21 return result
23 def writeConfiguration(lines):
24 f = open(CONFIG_NAME, "w")
25 f.writelines(lines)
26 f.close()
28 def parseArguments(arguments):
29 nextIsInclude = False
30 nextIsDefine = False
31 nextIsIncludeFile = False
33 includes = []
34 defines = []
35 include_file = []
37 for arg in arguments:
38 if nextIsInclude:
39 includes += [arg]
40 nextIsInclude = False
41 elif nextIsDefine:
42 defines += [arg]
43 nextIsDefine = False
44 elif nextIsIncludeFile:
45 include_file += [arg]
46 nextIsIncludeFile = False
47 elif arg == "-I":
48 nextIsInclude = True
49 elif arg == "-D":
50 nextIsDefine = True
51 elif arg[:2] == "-I":
52 includes += [arg[2:]]
53 elif arg[:2] == "-D":
54 defines += [arg[2:]]
55 elif arg == "-include":
56 nextIsIncludeFile = True
58 result = map(lambda x: "-I" + x, includes)
59 result += map(lambda x: "-D" + x, defines)
60 result += map(lambda x: "-include " + x, include_file)
62 return result
64 def mergeLists(base, new):
65 result = list(base)
66 for newLine in new:
67 try:
68 result.index(newLine)
69 except ValueError:
70 result += [newLine]
71 return result
73 configuration = readConfiguration()
74 args = parseArguments(sys.argv)
75 result = mergeLists(configuration, args)
76 writeConfiguration(map(lambda x: x + "\n", result))
79 status = os.system(" ".join(sys.argv[1:]))
80 if not os.WIFEXITED(status):
81 sys.exit(1)
82 sys.exit(os.WEXITSTATUS(status))
84 # vim: set ts=2 sts=2 sw=2 expandtab :