[Scons-users] Value/Alias Nodes default to up-to-date

Brad Kraemer computerpro_58 at hotmail.com
Sun Jan 2 20:37:06 EST 2022


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://pairlist4.pair.net/pipermail/scons-users/attachments/20220102/7976ff71/attachment-0001.htm>


More information about the Scons-users mailing list