[Scons-users] 2.5.0 scanner fidelity regression since 2.3.4
Dave Vitek
dvitek at grammatech.com
Thu Mar 16 15:25:45 EDT 2017
Hi all,
I'll just start off with a self-contained test case to describe the problem:
# SConstruct
Command('test2.h', 'test.h', 'echo "" > test2.h')
Library('test.c')
// test.c
#include "test.h"
#include "test2.h"
// test.h
#include "test2.h"
With 2.3.4, this ran successfully.
With 2.5.0 we have this:
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
scons: done building targets.
scons: *** Found dependency cycle(s):
test2.h -> test2.h
The problem is that it is trying to use the C preprocessor scanner to do
scanning on behalf of the Command builder, which is not desirable since
echo does not run the CPP.
It looks like this is happening because in the old version, scons would
not run scanners on nodes without scanners due to this line inside the
scan method inside Executor.py:
scanner = node.get_env_scanner(env, kw)
if not scanner:
continue
In the new Executor.py, this logic is gone, so various scanner-related
stuff gets activated regardless.
One thought that crossed my mind was to set scanner to None inside
Node/__init__.py here:
def _get_scanner(self, env, initial_scanner, root_node_scanner, kw):
if not initial_scanner:
# handle implicit scanner case
scanner = self.get_env_scanner(env, kw)
if scanner:
scanner = scanner.select(self)
instead of getting a scanner based on the file extension.
Thoughts?
- Dave
More information about the Scons-users
mailing list