[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