mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-27 22:03:31 +01:00
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.
This commit is contained in:
parent
d7301a456a
commit
178b738be0
60
scripts/maint/rectify_include_paths.py
Executable file
60
scripts/maint/rectify_include_paths.py
Executable file
@ -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)
|
Loading…
Reference in New Issue
Block a user