summaryrefslogtreecommitdiffstats
path: root/Tools/asm.py
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2019-10-14 11:01:21 +0200
committerDavid Robillard <d@drobilla.net>2019-10-14 11:01:21 +0200
commitfa87543e7d6bb243ff068c64069fc43342041073 (patch)
tree92284f108be4868e5aa849da21519e326c81c5a0 /Tools/asm.py
parent2f22513494d9c5092254c428eb487510d81a7857 (diff)
downloadautowaf-fa87543e7d6bb243ff068c64069fc43342041073.tar.gz
autowaf-fa87543e7d6bb243ff068c64069fc43342041073.tar.bz2
autowaf-fa87543e7d6bb243ff068c64069fc43342041073.zip
Upgrade to waf 2.0.18
Diffstat (limited to 'Tools/asm.py')
-rw-r--r--Tools/asm.py37
1 files changed, 36 insertions, 1 deletions
diff --git a/Tools/asm.py b/Tools/asm.py
index b6f26fb..a57e83b 100644
--- a/Tools/asm.py
+++ b/Tools/asm.py
@@ -34,9 +34,22 @@ Support for pure asm programs and libraries should also work::
target = 'asmtest')
"""
-from waflib import Task
+import re
+from waflib import Errors, Logs, Task
from waflib.Tools.ccroot import link_task, stlink_task
from waflib.TaskGen import extension
+from waflib.Tools import c_preproc
+
+re_lines = re.compile(
+ '^[ \t]*(?:%)[ \t]*(ifdef|ifndef|if|else|elif|endif|include|import|define|undef)[ \t]*(.*)\r*$',
+ re.IGNORECASE | re.MULTILINE)
+
+class asm_parser(c_preproc.c_parser):
+ def filter_comments(self, node):
+ code = node.read()
+ code = c_preproc.re_nl.sub('', code)
+ code = c_preproc.re_cpp.sub(c_preproc.repl, code)
+ return re_lines.findall(code)
class asm(Task.Task):
"""
@@ -45,6 +58,28 @@ class asm(Task.Task):
color = 'BLUE'
run_str = '${AS} ${ASFLAGS} ${ASMPATH_ST:INCPATHS} ${DEFINES_ST:DEFINES} ${AS_SRC_F}${SRC} ${AS_TGT_F}${TGT}'
+ def scan(self):
+ if self.env.ASM_NAME == 'gas':
+ return c_preproc.scan(self)
+ Logs.warn('There is no dependency scanner for Nasm!')
+ return [[], []]
+ elif self.env.ASM_NAME == 'nasm':
+ Logs.warn('The Nasm dependency scanner is incomplete!')
+
+ try:
+ incn = self.generator.includes_nodes
+ except AttributeError:
+ raise Errors.WafError('%r is missing the "asm" feature' % self.generator)
+
+ if c_preproc.go_absolute:
+ nodepaths = incn
+ else:
+ nodepaths = [x for x in incn if x.is_child_of(x.ctx.srcnode) or x.is_child_of(x.ctx.bldnode)]
+
+ tmp = asm_parser(nodepaths)
+ tmp.start(self.inputs[0], self.env)
+ return (tmp.nodes, tmp.names)
+
@extension('.s', '.S', '.asm', '.ASM', '.spp', '.SPP')
def asm_hook(self, node):
"""