diff options
author | yenatch <yenatch@gmail.com> | 2016-01-28 20:44:49 -0500 |
---|---|---|
committer | yenatch <yenatch@gmail.com> | 2016-01-28 20:44:49 -0500 |
commit | 8ed04a61e0d02937d0930ffad43feeb0c1f98ee7 (patch) | |
tree | 689b1d0f07dcf9b95c4d06bbd70b15889b3d9a15 | |
parent | adbc204d741bec7a68c1e6cd67751f226d0347cb (diff) |
Rewrite scan_includes.
-rw-r--r-- | pokemontools/scan_includes.py | 63 |
1 files changed, 15 insertions, 48 deletions
diff --git a/pokemontools/scan_includes.py b/pokemontools/scan_includes.py index e8255ac..d2046dc 100644 --- a/pokemontools/scan_includes.py +++ b/pokemontools/scan_includes.py @@ -5,61 +5,28 @@ Recursively scan an asm file for dependencies. """ -import os import sys import argparse +includes = set() -class IncludeReader: - """ - Usage: - includer = IncludeReader() - includer.read(filename) - or - includer = IncludeReader(filename='filename.asm') - includer.read() - """ - path = '' - includes = [] - directives = ['INCLUDE', 'INCBIN'] - extensions = ['.asm', '.tx'] +def scan_file(filename): + for line in open(filename): + if 'INCLUDE' in line: + include = line.split('"')[1] + includes.add(include) + scan_file(include) + elif 'INCBIN' in line: + include = line.split('"')[1] + includes.add(include) - def __init__(self, **kwargs): - self.__dict__.update(kwargs) - - def read(self, filename=None): - """ - Recursively look for includes in <filename> and add them to self.includes. - """ - if filename is None: - if hasattr(self, 'filename'): - filename = os.path.join(self.path, self.filename) - else: - raise Exception, 'no filename given!' - if os.path.splitext(filename)[1] in self.extensions and os.path.exists(filename): - for line in open(filename).readlines(): - self.read_line(line) - - def read_line(self, line): - """ - Add any includes in <line> to self.includes, and look for includes in those. - """ - parts = line[:line.find(';')].split() - for directive in self.directives: - if directive in map(str.upper, parts): - include = os.path.join(self.path, parts[parts.index(directive) + 1].split('"')[1]) - if include not in self.includes: - self.includes.append(include) - self.read(include) - -if __name__ == '__main__': +def main(): ap = argparse.ArgumentParser() - ap.add_argument('-i', default='') ap.add_argument('filenames', nargs='*') args = ap.parse_args() - - includes = IncludeReader(path=args.i) for filename in args.filenames: - includes.read(filename) - sys.stdout.write(' '.join(includes.includes)) + scan_file(filename) + sys.stdout.write(' '.join(includes)) +if __name__ == '__main__': + main() |