[Scons-users] SCons bug when combining CacheDir and MSVC_BATCH

Eric Fahlgren ericfahlgren at gmail.com
Wed May 24 13:10:41 EDT 2023


Edit site-packages/SCons/Tool/msvc.py and change line 203 (in scons 4.5.2)
to the following and see if that helps...

    if msvc_batch_key(None, env, target, source) is None:  # Original fails
when base names are different.

On Wed, May 24, 2023 at 9:03 AM Bill Deegan <bill at baddogconsulting.com>
wrote:

> Can you try without MSVC_BATCH enabled?
> -Bill
>
> On Wed, May 24, 2023 at 8:50 AM Steve Hill (Wireless) via Scons-users <
> scons-users at scons.org> wrote:
>
>> Thanks for the reply, Mats.
>>
>>
>>
>> 1) Moving the setting of MSVC_BATCH to the constructor doesn't make any
>> difference - I get the same link failure.
>>
>> 2) Adding debug, I get:
>>
>>
>>
>> $ scons --cache-debug=-
>>
>> scons: Reading SConscript files ...
>>
>> scons: done reading SConscript files.
>>
>> scons: Building targets ...
>>
>> Retrieved `build1\main.obj' from cache
>>
>> CacheRetrieve(build1\main.obj):  retrieving from
>> 97427c14b8c8b53e9e7af4d7d8afd524
>>
>> requests: 1, hits: 1, misses: 0, hit rate: 100.00%
>>
>> CacheRetrieve(build1\foo.obj):  2c4b62611510a27efcd0dd7066b26b04 not in
>> cache
>>
>> requests: 2, hits: 1, misses: 1, hit rate: 50.00%
>>
>> cl /Fobuild1\\ /c src\main.c src\foo.c /nologo
>>
>> main.c
>>
>> foo.c
>>
>> Generating Code...
>>
>> CachePush(build1\main.obj):  97427c14b8c8b53e9e7af4d7d8afd524 already
>> exists in cache
>>
>> requests: 2, hits: 1, misses: 1, hit rate: 50.00%
>>
>> CachePush(build1\foo.obj):  pushing to 2c4b62611510a27efcd0dd7066b26b04
>>
>> requests: 2, hits: 1, misses: 1, hit rate: 50.00%
>>
>> CacheRetrieve(build1\a.exe):  bcd159a2ee6e98e239022957d9dfe010 not in
>> cache
>>
>> requests: 3, hits: 1, misses: 2, hit rate: 33.33%
>>
>> link /nologo /OUT:build1\a.exe build1\main.obj build1\foo.obj
>>
>> CachePush(build1\a.exe):  pushing to bcd159a2ee6e98e239022957d9dfe010
>>
>> requests: 3, hits: 1, misses: 2, hit rate: 33.33%
>>
>> Retrieved `build2\main.obj' from cache
>>
>> CacheRetrieve(build2\main.obj):  retrieving from
>> 5619d81a934ee71939605662178f5d54
>>
>> requests: 1, hits: 1, misses: 0, hit rate: 100.00%
>>
>> CacheRetrieve(build2\foo.obj):  6d30ba71fee8872f9c2c8541225ead92 not in
>> cache
>>
>> requests: 2, hits: 1, misses: 1, hit rate: 50.00%
>>
>> cl /Fobuild2\\ /c src\foo.c /nologo
>>
>> foo.c
>>
>> CachePush(build2\foo.obj):  pushing to 6d30ba71fee8872f9c2c8541225ead92
>>
>> requests: 2, hits: 1, misses: 1, hit rate: 50.00%
>>
>> CacheRetrieve(build2\a.exe):  e4533b0dc80dcb3d3b1cd2cdd081933c not in
>> cache
>>
>> requests: 3, hits: 1, misses: 2, hit rate: 33.33%
>>
>> link /nologo /OUT:build2\a.exe build2\main.obj build2\foo.obj
>>
>> LINK : fatal error LNK1181: cannot open input file 'build2\main.obj'
>>
>> scons: *** [build2\a.exe] Error 1181
>>
>> scons: building terminated because of errors.
>>
>>
>>
>> The odd thing is that it is retrieving build2/main.obj from the cache
>> when it is already up-to-date but that still doesn’t explain why it gets
>> deleted…
>>
>>
>>
>> S.
>>
>>
>>
>> -----Original Message-----
>> From: Scons-users <scons-users-bounces at scons.org> On Behalf Of Mats
>> Wichmann
>> Sent: Wednesday, May 24, 2023 3:49 PM
>> To: scons-users at scons.org
>> Subject: Re: [Scons-users] SCons bug when combining CacheDir and
>> MSVC_BATCH
>>
>>
>>
>> On 5/24/23 06:24, Steve Hill (Wireless) via Scons-users wrote:
>>
>> > All,
>>
>> >
>>
>> > We have recently switched on CacheDir in our CI machine and, while
>>
>> > this has largely been a positive experience, we have seen the odd link
>>
>> > failure that we could not explain. I was eventually able to reproduce
>>
>> > the issue and produce a minimal SConstruct that illustrates the problem.
>>
>>
>>
>> Something's broken here.  I've tried to trace this a little bit and it
>> looks like things can get removed after they're retrieved.  There are other
>> oddities too, in your rebuild log:
>>
>>
>>
>> > Retrieved `build1\main.obj' from cache cl /Fobuild1\\ /c src\main.c
>>
>> > src\foo.c /nologo main.c foo.c Generating Code...
>>
>>
>>
>> If there are two sources, but one object is up to date, SCons should not
>> calculate a batched build is needed, in other words it should have emitted:
>>
>>
>>
>> cl /Fobuild1\foo.o /c src\foo.c /nologo
>>
>>
>>
>> > Would you like me to raise an issue on GitHub for this?
>>
>> I'd say yes, but not being wise in the ways of MSVC_BATCH maybe there's
>> something I'm missing.
>>
>>
>>
>> Can you try a couple of tweaks to your reproducer (thanks for taking the
>> time to come up with one!) while you're at things?
>>
>>
>>
>> 1) put the MSVC_BATCH initialization in the Environment call.  The msvc
>> tool is notoriously sensitive to getting its initialization wrong if it
>> doesn't have all its details in hand when it runs.  No idea if that moves
>> the goalposts but worth trying.
>>
>> 2) turn on some debugging - add  --cache-debug=-   (the dash argument
>>
>> sends the debug to the console)
>>
>>
>>
>>
>>
>> MSVC_BATCH has several issues already in the tracker about interaction
>> with things, didn't look to me like any of them were likely this issue,
>> though.
>> _______________________________________________
>> Scons-users mailing list
>> Scons-users at scons.org
>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>
> _______________________________________________
> Scons-users mailing list
> Scons-users at scons.org
> https://pairlist4.pair.net/mailman/listinfo/scons-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://pairlist4.pair.net/pipermail/scons-users/attachments/20230524/2956ddaa/attachment.htm>


More information about the Scons-users mailing list