[Scons-users] Value/Alias Nodes default to up-to-date
Brad Kraemer
computerpro_58 at hotmail.com
Sun Jan 2 23:06:41 EST 2022
I can't actually give a more concrete example. I'm just testing
different aspects of SCons. i.e. reading through the man-page (and user
guide), Oh that looks interesting...wonder how that works...Ah I see,
that could be useful when doing X/Y/Z (rinse/repeat)
In this particular example, I came across the note that said Alias's
were in a separate namespace. So I thought I'd explore that a bit. And
then I came across Value's which also do there own thing. I just thought
it odd that they were considered up-to-date right on creation, although
your explanation equally makes sense (created as up-to-date, so why
should they be built, unless you explicitly request they AlwaysBuild).
So thank-you for clearing that up (all is is working as designed).
One last thing. Could you give me a more concrete example of when a
Value() would be used? Alias() is fairly obvious, but the manual example
for Value() is a bit convoluted.
On 2022-01-02 10:52 p.m., Bill Deegan wrote:
> Can you give a more concrete example of what you're trying to do?
> Sounds like you want a target which isn't built unless explicitly
> requested?
> Is that correct?
> An your current approach is to use an Action for that?
>
> Lots of users dig around the docs and come up with some poorly
> constructed overcomplicated "solution".
> I'm trying to help you avoid doing such.
>
> Yes. If any node has no children or the children are up to date, then
> it will not rebuild the node.. (as you'd expect).
>
>
> On Sun, Jan 2, 2022 at 5:37 PM Brad Kraemer
> <computerpro_58 at hotmail.com> wrote:
>
> Simply that I can use the Node returned by Alias() in places where
> a Node is expected (for instance in the example I've given
> Depends(t1, a1)).
>
> Now you may ask why wouldn't I use Command(), since that it's
> defined purpose? In this case I wanted the special property of
> Alias Node's (they exist in their own namespace, outside the
> standard FS namespace). Well why would I need this target to exist
> outside the standard FS namespace? Simply because I have some
> internal Action's that I want to run (in the process of building)
> that are not specific to any target (that the user can specify).
> i.e. $ scons / , or $ scons . is not going to pick up these Alias
> Node targets (and thats exactly what I want).
>
>
> My reasons for wanting this are more abstract at this point (as I
> said I'm experimenting around the limitations of SCons). But to
> save some time here, I'm literally looking for a Yes or No answer,
> with regards to the Alias/Value node's up-to-date behavior.
>
> Specifically, check the file: /SCons/Node/__init__.py:1520
>
> def children_are_up_to_date(self):
> """Alternate check for whether the Node is current: If all of
> our children were up-to-date, then this Node was up-to-date, too.
> The SCons.Node.Alias and SCons.Node.Python.Value subclasses
> rebind their current() method to this method."""
> # Allow the children to calculate their signatures..
> self.binfo = self.get_binfo()
> if self.always_build:
> return None
> state = 0
> for kid in self.children(None):
> s = kid.get_state()
> if s and (not state or s > state):
> state = s
> return (state == 0 or state == SCons.Node.up_to_date)
>
>
> *Both Value/Alias Node's use this method to cite there up-to-date
> state. As written, with either no children or children with
> unchanging states a Value/Alias will always be considered
> up-to-date (i.e. it is considered built/up-to-date directly after
> creation). Is this correct?
>
>
> If this behavior is correct what is the purpose of the
> 'built_value' business on Value Node's? I don't fully grasp how
> Value Node's are meant to work in the standard case...
>
>
> On 2022-01-02 8:05 p.m., Bill Deegan wrote:
>> Still don't really understand what you're trying to do..
>>
>> What do you mean by this "allowing me to make Action()'s with
>> dependency orderings"?
>>
>> On Sun, Jan 2, 2022 at 3:10 PM Brad Kraemer
>> <computerpro_58 at hotmail.com> wrote:
>>
>> * Fixed subject line (the original line from the mailer
>> daemon added JUNK, as this one doesn't allow unconfirmed
>> posters, i.e. I should have waited for the mailing-list
>> confirmation before sending the first e-mail off)
>>
>>
>> Currently, just experimenting with some SCons features. At
>> this time I was creating an Alias() because I wanted the
>> Alias() object (which is namespaced outside the regular FS
>> namespace), allowing me to make Action()'s with dependency
>> orderings. While not having these actions kicked off by
>> running something like '$ scons /' (which something like
>> Command() would).
>>
>>
>> I realize this is outside the intended use of these
>> functions. However, the doc's don't forbid it so it's clean
>> in my eyes.
>>
>> The Command() part is just for something to depend on (can
>> replace it with Program() or any other builder, my issue is
>> with the Alias() lines).
>>
>>
>> Your reasoning makes sense, however, if my Alias is never out
>> of date (i.e. on creation it's meant to be considered already
>> built), why can I run AlwaysBuild() and thus force it to
>> build (is this the equivalent of rebuilding something already
>> up-to-date)?
>>
>> Just looking at the sources, it seems these Node's are meant
>> to be built at least once (however, Value() in particular
>> does seem to have a parameter to be considered built on
>> creation). Or am I off base with this?
>>
>>
>> On 2022-01-02 5:30 p.m., Bill Deegan wrote:
>>> Maybe you explain what you're trying to do, rather than how
>>> you're currently trying to do it?
>>> Because this looks like a mess of hard to understand code
>>> and there's very likely a better way to do this.
>>>
>>> Those aliases would never be out of date with a static source..
>>> Your command has no source listed, so it will also never be
>>> out of date..(after the first time, if the file t1 was
>>> actually built).
>>>
>>> -Bill
>>>
>>>
>>> On Sun, Jan 2, 2022 at 2:20 PM Bill Deegan
>>> <bill at baddogconsulting.com> wrote:
>>>
>>> also why **JUNK** in subject?
>>>
>>> On Sun, Jan 2, 2022 at 2:20 PM Bill Deegan
>>> <bill at baddogconsulting.com> wrote:
>>>
>>> What output do you see when you run your example?
>>>
>>>
>>> On Sun, Jan 2, 2022 at 7:56 AM Brad Kraemer
>>> <computerpro_58 at hotmail.com> wrote:
>>>
>>> Hello,
>>>
>>> I filed a GitHub Issue
>>> <https://github.com/SCons/scons/issues/4079> and
>>> got bounced to this mailing list. So here we go
>>> again:
>>>
>>> Value/Alias nodes (as created by the Alias() and
>>> Value() functions/methods receptively) default
>>> to up-to-date.
>>>
>>> SCons 4.1.0
>>>
>>> Python 3.9
>>>
>>> Installed from nixpkgs (NixOS, $ nix-env -iA
>>> nixos.scons)
>>>
>>> Linux
>>>
>>> Reproduction (SConstruct):
>>>
>>> def print_target_1(target, source, env):
>>> print("Target 1 built")
>>>
>>> def print_alias_1(target, source, env):
>>> print("[I'm not getting called]")
>>>
>>> def print_alias_2(target, source, env):
>>> print("I'm getting called because of AlwaysBuild() workaround")
>>>
>>> t1 = Command("t1", [], Action(print_target_1, cmdstr=None))
>>> Default(t1)
>>>
>>> v = Value("_")
>>> a1 = Alias("a1", v, Action(print_alias_1, cmdstr=None))
>>> a2 = Alias("a2", v, Action(print_alias_2, cmdstr=None))
>>> Depends(t1, a1)
>>> Depends(t1, a2)
>>>
>>> AlwaysBuild(a2)
>>>
>>>
>>> Invoke via executing '$ scons' from the
>>> directory where the above SConstruct file exists.
>>>
>>>
>>> Thanks,
>>>
>>> simplejack-src
>>>
>>>
>>> _______________________________________________
>>> 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
> _______________________________________________
> 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/20220102/fac671dd/attachment-0001.htm>
More information about the Scons-users
mailing list