[Scons-users] find new targets from other targets?
Scott Johnson
scott.johnson at arilinc.com
Thu Feb 20 19:50:33 EST 2020
> On Feb 20, 2020, at 4:18 AM, Paweł Tomulik <ptomulik at meil.pw.edu.pl> wrote:
> Looks like a perfect job for a scanner.
>
I was hopeful when I saw the target_scanner= option to Builder, but when I tried this, it seems that SCons is running my scanner before the target gets built. Which isn’t very helpful, since I can’t parse the file to find the additional targets until this target gets built.
Is there a way to get the scanner to run only after the target is built? I’m not sure I understand the expected use model of target_scanner otherwise.
Here’s my SConstruct:
```
import re
ffile_include = re.compile(r'-F\s+(.*)')
def scan_f_file(node, env, path):
"""Scan the specified node for new targets."""
print(f"HACK scan_f_file scanning {node}")
contents = node.get_text_contents()
for line in contents.splitlines():
ffile_match = ffile_include.fullmatch(line)
if ffile_match:
print(f"HACK found -F {ffile_match.group(1)}")
return []
verilog_f_scanner = Scanner(function=scan_f_file)
verilog_f_builder = Builder(action = 'cp $SOURCE $TARGET',
target_scanner=verilog_f_scanner)
env = Environment(tools=[], BUILDERS={
'VerilogF': verilog_f_builder,
})
env.VerilogF('outputs/tb1.F', 'inputs/tb1.F’)
```
And when I run it twice (clean, then incremental):
```
$ scons
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
HACK scan_f_file scanning outputs/tb1.F
cp inputs/tb1.F outputs/tb1.F
scons: done building targets.
$ scons
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
HACK scan_f_file scanning outputs/tb1.F
HACK found -F sub1/sub1.F
HACK found -F sub2/sub2.F
scons: `.' is up to date.
scons: done building targets.
```
I need it to find sub1.F and sub2.F in the clean build, so that I can tell it to build those files too.
More information about the Scons-users
mailing list