summaryrefslogtreecommitdiff
path: root/pokemontools/scan_includes.py
diff options
context:
space:
mode:
authorBryan Bishop <kanzure@gmail.com>2013-12-09 17:48:11 -0800
committerBryan Bishop <kanzure@gmail.com>2013-12-09 17:48:11 -0800
commit58de3846c732a5e3e856ea8935a6e6ab830af82a (patch)
treef0e3918e1e9f0955c656c720f78a3fc169d53ad2 /pokemontools/scan_includes.py
parent4294fdc140677f98df38affe7955a97223b778e9 (diff)
parentf35bb2c5cc390ec0008cede2721104592dbcb29d (diff)
Merge pull request #59 from yenatch/dependencies
Use a mapfile instead of labels.json; object dependency handling
Diffstat (limited to 'pokemontools/scan_includes.py')
-rw-r--r--pokemontools/scan_includes.py36
1 files changed, 36 insertions, 0 deletions
diff --git a/pokemontools/scan_includes.py b/pokemontools/scan_includes.py
new file mode 100644
index 0000000..7f34e92
--- /dev/null
+++ b/pokemontools/scan_includes.py
@@ -0,0 +1,36 @@
+# coding: utf-8
+
+"""
+Recursively scan an asm file for rgbasm INCLUDEs and INCBINs.
+Used to generate dependencies for each rgbasm object.
+"""
+
+import os
+import sys
+
+import configuration
+conf = configuration.Config()
+
+def recursive_scan(filename, includes = []):
+ if (filename[-4:] == '.asm' or filename[-3] == '.tx') and os.path.exists(filename):
+ lines = open(filename).readlines()
+ for line in lines:
+ for directive in ('INCLUDE', 'INCBIN'):
+ if directive in line:
+ line = line[:line.find(';')]
+ if directive in line:
+ include = line.split('"')[1]
+ if include not in includes:
+ includes += [include]
+ includes = recursive_scan(os.path.join(conf.path, include), includes)
+ break
+ return includes
+
+if __name__ == '__main__':
+ filenames = sys.argv[1:]
+ dependencies = []
+ for filename in filenames:
+ dependencies += recursive_scan(os.path.join(conf.path, filename))
+ dependencies = list(set(dependencies))
+ sys.stdout.write(' '.join(dependencies))
+