Re: SConsignFile(None) + Decider('MD5-timestamp')
trevor fitzsimmons <[email protected]>
| Newsgroups | gmane.comp.programming.tools.scons.user |
|---|---|
| Message-ID | <DM6PR19MB4232E9F358B21077EDD0DF7296430@DM6PR19MB4232.namprd19.prod.outlook.com> |
When not using SConsignFile(None), regardless of Decider, building from directories doesn't have the "infinite loop" of rebuilding like I'm trying to address, but building from each directory will cause a full rebuild once. So, in the test case, building from test would cause a full build, and then trying to build from test/src would also cause a full rebuild. After that, scons will detect everything as up-to-date, regardless of where you build from. In practice, I don't really keep building alternately from 2 different directories. What I'm really after is targets being correctly identified as up-to-date, regardless of the level at which the build is executed. ________________________________ From: Scons-users <[email protected]> on behalf of Bill Deegan <[email protected]> Sent: Wednesday, August 12, 2020 8:43 PM To: SCons users mailing list <[email protected]> Subject: Re: [Scons-users] SConsignFile(None) + Decider('MD5-timestamp') If you don't use SConsignFile(None), then is this still an issue? Any reason you want a per directory sconsignfile? On Wed, Aug 12, 2020 at 6:47 AM trevor fitzsimmons <[email protected]<mailto:[email protected]>> wrote: 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 <[email protected]<mailto:[email protected]>> on behalf of trevor fitzsimmons <[email protected]<mailto:[email protected]>> Sent: Wednesday, July 29, 2020 11:52 AM To: [email protected]<mailto:[email protected]> <[email protected]<mailto:[email protected]>> 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 _______________________________________________ Scons-users mailing list [email protected]<mailto:[email protected]> https://pairlist4.pair.net/mailman/listinfo/scons-users _______________________________________________ Scons-users mailing list [email protected] https://pairlist4.pair.net/mailman/listinfo/scons-users