[tor-commits] [tor/master] Script to replace include paths with full paths under src/

nickm at torproject.org nickm at torproject.org
Wed Jun 20 13:49:47 UTC 2018


commit 178b738be0e1cb7a20dbb8b0d01eadc0cf6db0ba
Author: Nick Mathewson <nickm at torproject.org>
Date:   Wed Jun 20 09:25:16 2018 -0400

    Script to replace include paths with full paths under src/
    
    This will let us move around header files without having to fix up
    all the include sites manually.
---
 scripts/maint/rectify_include_paths.py | 60 ++++++++++++++++++++++++++++++++++
 1 file changed, 60 insertions(+)

diff --git a/scripts/maint/rectify_include_paths.py b/scripts/maint/rectify_include_paths.py
new file mode 100755
index 000000000..dc9163445
--- /dev/null
+++ b/scripts/maint/rectify_include_paths.py
@@ -0,0 +1,60 @@
+#!/usr/bin/python3
+
+import os
+import os.path
+import re
+
+# Find all the include files, map them to their real names.
+
+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)





More information about the tor-commits mailing list