[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