[Scons-users] SConsignFile(None) + Decider('MD5-timestamp')
trevor fitzsimmons
t_fitzs at hotmail.com
Wed Aug 12 09:47:52 EDT 2020
I've dug more into this issue, and have attached a proposed patch against scons-4.0.1.
The general idea is to pass the parent node to _build_dependency_map, to then correlate "children" to signatures the same way Node/__init__.py changed() does, rather than using bsources/etc. This fixes the pathing issues, and should perform the same when building from the same directory repeatedly.
Can anyone verify the bug, or provide feedback on the proposed patch?
Should I open a bug report instead?
Thanks,
Trevor
________________________________
From: Scons-users <scons-users-bounces at scons.org> on behalf of trevor fitzsimmons <t_fitzs at hotmail.com>
Sent: Wednesday, July 29, 2020 11:52 AM
To: scons-users at scons.org <scons-users at scons.org>
Subject: [Scons-users] SConsignFile(None) + Decider('MD5-timestamp')
Since scons-3.0.2 (through the current scons-4.0.1), using SConsignFile(None) in conjunction with Decider('MD5-timestamp') causes scons to rebuild targets when invoked from different directories in the source code hierarchy.
Attached is a simple example to illustrate the issue. Building from test/src will cause an initial build as expecting. Building again from test/src will do nothing, as expected, and report everything is up-to-date. However, if you build from test, everything in test/src will be rebuilt, even though it is already up-to-date. Building again from test will do nothing, as expected, and report everything is up-to-date. Building from test/src will then cause another full rebuild, even though everything is up-to-date, and the cycle continues.
This has something to do with the dependency_map which was added in Node/FS.py in scons-3.0.2, but I do not know enough about the inner workings of scons to propose a fix. FS.py changed_timestamp_then_content(self, target, prev_ni, node=None) calls prev_ni = self._get_previous_signatures(dependency_map). Depending on the starting directory, self is either main.cpp or src/main.cpp, while the key in dependency_map is the other.
In our full code-base, it's quite usual to build in a subdirectory while changing code, to avoid waiting on a full build, so the current work-around is to not use Decider('MD5-timestamp'). It would be ideal to have a patch that could eventually be applied to scons, to fix the issue in a future version.
Thanks
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://pairlist4.pair.net/pipermail/scons-users/attachments/20200812/e033f6ee/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: md5_timestamp_stop_unnecessary_rebuilds.patch
Type: text/x-patch
Size: 1386 bytes
Desc: md5_timestamp_stop_unnecessary_rebuilds.patch
URL: <https://pairlist4.pair.net/pipermail/scons-users/attachments/20200812/e033f6ee/attachment.bin>
More information about the Scons-users
mailing list