|
@@ -0,0 +1,60 @@
|
|
|
+
|
|
|
+
|
|
|
+import os
|
|
|
+import os.path
|
|
|
+import re
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+def exclude(paths, dirnames):
|
|
|
+ for p in paths:
|
|
|
+ if p in dirnames:
|
|
|
+ dirnames.remove(p)
|
|
|
+
|
|
|
+def get_include_map():
|
|
|
+ includes = { }
|
|
|
+
|
|
|
+ for dirpath,dirnames,fnames in os.walk("src"):
|
|
|
+ exclude(["ext", "win32"], dirnames)
|
|
|
+
|
|
|
+ for fname in fnames:
|
|
|
+ if fname.endswith(".h"):
|
|
|
+ assert fname not in includes
|
|
|
+ include = os.path.join(dirpath, fname)
|
|
|
+ assert include.startswith("src/")
|
|
|
+ includes[fname] = include[4:]
|
|
|
+
|
|
|
+ return includes
|
|
|
+
|
|
|
+INCLUDE_PAT = re.compile(r'( *# *include +")([^"]+)(".*)')
|
|
|
+
|
|
|
+def get_base_header_name(hdr):
|
|
|
+ return os.path.split(hdr)[1]
|
|
|
+
|
|
|
+def fix_includes(inp, out, mapping):
|
|
|
+ for line in inp:
|
|
|
+ m = INCLUDE_PAT.match(line)
|
|
|
+ if m:
|
|
|
+ include,hdr,rest = m.groups()
|
|
|
+ basehdr = get_base_header_name(hdr)
|
|
|
+ if basehdr in mapping:
|
|
|
+ out.write('{}{}{}\n'.format(include,mapping[basehdr],rest))
|
|
|
+ continue
|
|
|
+
|
|
|
+ out.write(line)
|
|
|
+
|
|
|
+incs = get_include_map()
|
|
|
+
|
|
|
+for dirpath,dirnames,fnames in os.walk("src"):
|
|
|
+ exclude(["ext", "trunnel"], dirnames)
|
|
|
+
|
|
|
+ for fname in fnames:
|
|
|
+ if fname.endswith(".c") or fname.endswith(".h"):
|
|
|
+ fname = os.path.join(dirpath, fname)
|
|
|
+ tmpfile = fname+".tmp"
|
|
|
+ f_in = open(fname, 'r')
|
|
|
+ f_out = open(tmpfile, 'w')
|
|
|
+ fix_includes(f_in, f_out, incs)
|
|
|
+ f_in.close()
|
|
|
+ f_out.close()
|
|
|
+ os.rename(tmpfile, fname)
|