diff options
-rwxr-xr-x | deheader | 30 |
1 files changed, 19 insertions, 11 deletions
@@ -30,20 +30,27 @@ def trim(line): else: return `line` -def extract_includes(sourcefile, ignores, verbosity): +def extract_includes(sourcefile, ignore, verbosity): "Extract a list of #include lines used in a given sourcfile." includes = [] + ifdepth = 0 for line in open(sourcefile): - if line.startswith("#include"): + if line.startswith("#ifdef") or line.startswith("#ifndef"): + ifdepth += 1 + elif line.startswith("#endif"): + ifdepth -= 1 + elif line.startswith("#include"): if verbosity: - print "deheader: %s requires %s" % (sourcefile, trim(line)) - for stopper in ignores: - if stopper.search(line): - if verbosity: - print "deheader: ignoring %s" % (trim(line)) - break - else: + name = trim(line) + print "deheader: %s requires %s" % (sourcefile, name) + if ignore.search(line): + if verbosity: + print "deheader: ignoring %s (exclusion match with %s)." % (name, ignore.pattern) + continue + if ifdepth == 0: includes.append(line) + elif verbose: + print "deheader: ignoring %s (conditional inclusion)" % name return includes def compile(source, msg="", verbosity=0): @@ -135,11 +142,12 @@ if __name__ == "__main__": sys.stderr.write(__doc__) sys.exit(0) elif switch in ('-i', '--ignore'): - ignores.append(re.compile(val)) + ignores.append(val) elif switch in ('-r', '--remove'): remove = True elif switch in ('-v', '--verbose'): verbose += 1 + ignore = re.compile("|".join(ignores)) for sourcefile in arguments: - deheader(sourcefile, ignores, verbose) + deheader(sourcefile, ignore, verbose) |