[Scons-users] Unexpected warning when defining a target twice during reading of SConscripts

Daniel Moody dmoody256 at gmail.com
Sun Dec 3 16:47:00 EST 2017


Hey Bill,

Just to clarify, is the plan still to move to github issue tracker even if
no work atm?

>From the github repo switch email it seemed to indicate that was the plan:

<quote>

*The bugtracker is still at scons.tigris.org <http://scons.tigris.org/>,
but will be moved (real soon now) to github.*
*Dirk has a start on a script to migrate from scons.tigris.org
<http://scons.tigris.org/>, but we need some help completing the logic to
upload the bugs (and their attachments) to github.*
<quote/>

So once we can extract the tigris issues to github, we would move from
using tigris to using github issues going forward?

Sorry if I missed the email explaining this, I did quick search but didn't
find anything.

Best regards,

On Sun, Dec 3, 2017 at 12:25 PM, Bill Deegan <bill at baddogconsulting.com>
wrote:

> Andrew,
>
> There's no active work at this time on moving the bug tracker.
> There's some work in progress code for extracting from tigris.
> Any help is most welcome.
>
> -Bill
>
> On Sun, Dec 3, 2017 at 3:51 AM, Andrew Featherstone <
> andrew.featherstone at gmail.com> wrote:
>
>> I can create an issue for this on tigris, but how far away is using
>> GitHub's issue tracker? This would allow PRs to mention issues in a more
>> rich way, allowing us to follow some more of the "Collective Code
>> Construction Contract" defined at https://rfc.zeromq.org/spec:22/C4/ .
>>
>> I can believe it requires a bit of thought, but ultimately it is a case
>> of implementing the __eq__ function correctly for Envrionment.
>>
>> Andrew
>>
>> On Sat, 02 Dec 2017 21:29:42 -0000, Bill Deegan <
>> bill at baddogconsulting.com> wrote:
>>
>> Andrew,
>>
>> You wouldn't see it build twice because you cannot due to checking for
>> different environments, thus the error.
>> There are two different Environments(), so the message is not incorrect.
>> Their contents may be equivalent, I know we had a patch to address
>> override environments which were equivalent.
>>
>> Feel free to create a pull request with a fix.
>>
>> In this specific case it does point out something which has no value in
>> the build assuming the two environments are equivalent.
>> Whether that's worthy of an error is probably debatable.
>>
>> There is currently no bug in scons.tigris.org to capture this, so please
>> go ahead and file.
>>
>> I think the issue is the following: (src/engine/SCons/Builder.py line 296)
>> if (not t.env is None and not t.env is env and
>>
>>
>> Since there are two different objects, the t.env is env fails.
>> Comparing two environments for equality is not done, and indeed could get
>> quite complicated as you'll need to compare any dictionaries, lists, sets
>> and functions/classes stored in both  Environment()s
>>
>> Hope that helps.
>> -Bill
>>
>> On Fri, Dec 1, 2017 at 5:54 PM, Andrew Featherstone <
>> andrew.featherstone at gmail.com> wrote:
>>
>>> They might be different instances, but they're also equal. Surely
>>> something must be sharing information or we'd see something like
>>>
>>> scons: Building targets ...
>>> simple_cmd(["foo.out"], ["foo.in"])
>>> simple_cmd(["foo.out"], ["foo.in"])
>>> scons: done building targets.
>>>
>>> In the logs.
>>>
>>> Andrew
>>>
>>>
>>> On 2 Dec 2017 00:26, "Bill Deegan" <bill at baddogconsulting.com> wrote:
>>>
>>> Here's my recipe for finding such in the sources:
>>>
>>> $ grep -r "Two different environments" src/engine/SCons/
>>>
>>> src/engine/SCons/Builder.py:                    msg = "Two different
>>> environments were specified for target %s,\n\tbut they appear to have the
>>> same action: %s" % (t, action.genstring(tlist, slist, t.env))
>>>
>>>
>>> Actually it's probably correct.
>>> Each time you call SConscript above, it's creating a new Environment().
>>> SConscripts are evaluated basically by python eval.
>>> There's no shared context between the two evaluations of the same
>>> SConscript in this case.
>>>
>>>
>>> On Fri, Dec 1, 2017 at 3:37 PM, Andrew Featherstone <
>>> andrew.featherstone at cantab.net> wrote:
>>>
>>>> Hi all,
>>>>
>>>> Here's a simple setup using scons 3.0.1
>>>>
>>>> $ ls
>>>> SConscript  SConstruct  foo.in
>>>> $ cat SConstruct
>>>> env_a = Environment()
>>>> env_b = Environment()
>>>> for env in (env_a, env_b):
>>>>     SConscript(
>>>>         'SConscript'
>>>>     )
>>>> $ cat SConscript
>>>> import shutil
>>>>
>>>> env_c = Environment()
>>>>
>>>> def simple_cmd(target, source, env):
>>>>     shutil.copy(str(source[0]), str(target[0]))
>>>>
>>>> env_c.Command('foo.out', 'foo.in', simple_cmd)
>>>>
>>>> The expected behaviour when running scons is that the foo.out is
>>>> produced once. This does happen, but SCons incorrectly (AFAICT) warns that
>>>> different environments are used to build the target foo.out:
>>>>
>>>> $ scons
>>>> scons: Reading SConscript files ...
>>>>
>>>> scons: warning: Two different environments were specified for target
>>>> foo.out,
>>>>         but they appear to have the same action: simple_cmd(target,
>>>> source, env)
>>>> File "C:\Users\Andrew\projects\scons-env\SConscript", line 8, in
>>>> <module>
>>>> scons: done reading SConscript files.
>>>> scons: Building targets ...
>>>> simple_cmd(["foo.out"], ["foo.in"])
>>>> scons: done building targets.
>>>>
>>>> The output of --taskmastertrace:
>>>>
>>>>
>>>> Taskmaster: Looking for a node to evaluate
>>>> Taskmaster:     Considering node <no_state   0   '.'> and its children:
>>>> Taskmaster:        <no_state   0   'foo.in'>
>>>> Taskmaster:        <no_state   0   'foo.out'>
>>>> Taskmaster:        <no_state   0   'SConscript'>
>>>> Taskmaster:        <no_state   0   'SConstruct'>
>>>> Taskmaster:      adjusted ref count: <pending    1   '.'>, child '
>>>> foo.in'
>>>> Taskmaster:      adjusted ref count: <pending    2   '.'>, child
>>>> 'foo.out'
>>>> Taskmaster:      adjusted ref count: <pending    3   '.'>, child
>>>> 'SConscript'
>>>> Taskmaster:      adjusted ref count: <pending    4   '.'>, child
>>>> 'SConstruct'
>>>> Taskmaster:     Considering node <no_state   0   'foo.in'> and its
>>>> children:
>>>> Taskmaster: Evaluating <pending    0   'foo.in'>
>>>>
>>>> Task.make_ready_current(): node <pending    0   'foo.in'>
>>>> Task.prepare():      node <up_to_date 0   'foo.in'>
>>>> Task.executed_with_callbacks(): node <up_to_date 0   'foo.in'>
>>>> Task.postprocess():  node <up_to_date 0   'foo.in'>
>>>> Task.postprocess():  removing <up_to_date 0   'foo.in'>
>>>> Task.postprocess():  adjusted parent ref count <pending    3   '.'>
>>>>
>>>> Taskmaster: Looking for a node to evaluate
>>>> Taskmaster:     Considering node <no_state   0   'foo.out'> and its
>>>> children:
>>>> Taskmaster:        <up_to_date 0   'foo.in'>
>>>> Taskmaster: Evaluating <pending    0   'foo.out'>
>>>>
>>>> Task.make_ready_current(): node <pending    0   'foo.out'>
>>>> Task.prepare():      node <executing  0   'foo.out'>
>>>> Task.execute():      node <executing  0   'foo.out'>
>>>> Task.executed_with_callbacks(): node <executing  0   'foo.out'>
>>>> Task.postprocess():  node <executed   0   'foo.out'>
>>>> Task.postprocess():  removing <executed   0   'foo.out'>
>>>> Task.postprocess():  adjusted parent ref count <pending    2   '.'>
>>>>
>>>> Taskmaster: Looking for a node to evaluate
>>>> Taskmaster:     Considering node <no_state   0   'SConscript'> and its
>>>> children:
>>>> Taskmaster: Evaluating <pending    0   'SConscript'>
>>>>
>>>> Task.make_ready_current(): node <pending    0   'SConscript'>
>>>> Task.prepare():      node <up_to_date 0   'SConscript'>
>>>> Task.executed_with_callbacks(): node <up_to_date 0   'SConscript'>
>>>> Task.postprocess():  node <up_to_date 0   'SConscript'>
>>>> Task.postprocess():  removing <up_to_date 0   'SConscript'>
>>>> Task.postprocess():  adjusted parent ref count <pending    1   '.'>
>>>>
>>>> Taskmaster: Looking for a node to evaluate
>>>> Taskmaster:     Considering node <no_state   0   'SConstruct'> and its
>>>> children:
>>>> Taskmaster: Evaluating <pending    0   'SConstruct'>
>>>>
>>>> Task.make_ready_current(): node <pending    0   'SConstruct'>
>>>> Task.prepare():      node <up_to_date 0   'SConstruct'>
>>>> Task.executed_with_callbacks(): node <up_to_date 0   'SConstruct'>
>>>> Task.postprocess():  node <up_to_date 0   'SConstruct'>
>>>> Task.postprocess():  removing <up_to_date 0   'SConstruct'>
>>>> Task.postprocess():  adjusted parent ref count <pending    0   '.'>
>>>>
>>>> Taskmaster: Looking for a node to evaluate
>>>> Taskmaster:     Considering node <pending    0   '.'> and its children:
>>>> Taskmaster:        <up_to_date 0   'foo.in'>
>>>> Taskmaster:        <executed   0   'foo.out'>
>>>> Taskmaster:        <up_to_date 0   'SConscript'>
>>>> Taskmaster:        <up_to_date 0   'SConstruct'>
>>>> Taskmaster: Evaluating <pending    0   '.'>
>>>>
>>>> Task.make_ready_current(): node <pending    0   '.'>
>>>> Task.prepare():      node <executing  0   '.'>
>>>> Task.execute():      node <executing  0   '.'>
>>>> Task.executed_with_callbacks(): node <executing  0   '.'>
>>>> Task.postprocess():  node <executed   0   '.'>
>>>>
>>>> Taskmaster: Looking for a node to evaluate
>>>> Taskmaster: No candidate anymore.
>>>>
>>>> Any ideas on how to debug this further?
>>>>
>>>> Andrew
>>>>
>>>> _______________________________________________
>>>> 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
>>>
>>>
>>>
>>> _______________________________________________
>>> 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/20171203/6ad4835e/attachment-0001.html>


More information about the Scons-users mailing list