summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryenatch <yenatch@gmail.com>2016-01-28 20:44:49 -0500
committeryenatch <yenatch@gmail.com>2016-01-28 20:44:49 -0500
commit8ed04a61e0d02937d0930ffad43feeb0c1f98ee7 (patch)
tree689b1d0f07dcf9b95c4d06bbd70b15889b3d9a15
parentadbc204d741bec7a68c1e6cd67751f226d0347cb (diff)
Rewrite scan_includes.
-rw-r--r--pokemontools/scan_includes.py63
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()