[Scons-users] Environment clones linked?
Bill Deegan
bill at baddogconsulting.com
Fri May 25 14:35:33 EDT 2018
Pull request? ;)
On Fri, May 25, 2018 at 1:28 PM, Jonathon Reinhart <
jonathon.reinhart at gmail.com> wrote:
> Yes a friendly warning might be helpful, pointing out that Clone() is
> not a totally deep-clone, and that specifically Action objects remain
> linked.
>
> You might also consider going on to say that the correct way to
> manipulate the way Actions work on a per-environment basis is to
> manipulate the *COM variables which the Actions reference.
>
> On Fri, May 25, 2018 at 11:01 AM, Bill Deegan <bill at baddogconsulting.com>
> wrote:
> > Any thoughts on how better to document this?
> > More verbiage under Clone()
> >
> > You're already in the deep end of the pool when you're doing this kind of
> > SCons code though..
> >
> > On Fri, May 25, 2018 at 9:25 AM, Jonathon Reinhart
> > <jonathon.reinhart at gmail.com> wrote:
> >>
> >> We've fought this exact issue before as well: Modifications to Actions
> >> or ActionLists affect all environments.
> >>
> >> The key, as Bill explained, is to leverage the indirection that the
> >> environments provide via the *COM variables. In our case, we actually
> >> append to the action lists in the environments.
> >>
> >>
> >> Jonathon
> >>
> >> On Fri, May 25, 2018 at 12:23 AM, Daniel Moody <dmoody256 at gmail.com>
> >> wrote:
> >> > Thanks that worked!
> >> >
> >> > I didn't understand how deep Clone went. Originally I tried to modify
> >> > the
> >> > Action command directly because I didn't want to mess with the other
> >> > actions
> >> > for the SHLINKCOM.
> >> >
> >> > On Thu, May 24, 2018 at 11:54 PM, Bill Deegan
> >> > <bill at baddogconsulting.com>
> >> > wrote:
> >> >>
> >> >> So you're reaching into an Action defined in a builder.
> >> >> That's pretty far inside the Environment to a level that there's not
> a
> >> >> deep copy of it.
> >> >>
> >> >> This when using mslink right?
> >> >>
> >> >> shlibLinkAction = SCons.Action.Action('${TEMPFILE("$SHLINK
> $SHLINKFLAGS
> >> >> $_SHLINK_TARGETS $_LIBDIRFLAGS $_LIBFLAGS $_PDB $_SHLINK_SOURCES",
> >> >> "$SHLINKCOMSTR")}', '$SHLINKCOMSTR')
> >> >>
> >> >> regServerAction = SCons.Action.Action("$REGSVRCOM", "$REGSVRCOMSTR")
> >> >>
> >> >> embedManifestDllCheckAction =
> >> >> SCons.Action.Action(embedManifestDllCheck,
> >> >> None)
> >> >>
> >> >> compositeShLinkAction = shlibLinkAction + regServerCheck +
> >> >> embedManifestDllCheckAction
> >> >>
> >> >> env['SHLINKCOM'] = compositeShLinkAction
> >> >>
> >> >>
> >> >> In this case I'd expect the Clone copy/deep copying logic would yield
> >> >> what
> >> >> you are seeing.
> >> >> If you did this:
> >> >>
> >> >> env2['SHLINKCOM'] = SCons.Action.Action("echo link command
> env2",None)
> >> >> +
> >> >> env2['SHLINKCOM'].list[1] + env2['SHLINKCOM'].list[2]
> >> >>
> >> >> Then it shouldn't modify env1..
> >> >> -Bill
> >> >>
> >> >>
> >> >> On Thu, May 24, 2018 at 8:33 PM, Daniel Moody <dmoody256 at gmail.com>
> >> >> wrote:
> >> >>>
> >> >>> I am trying to clone an environment and then make changes to the
> clone
> >> >>> so
> >> >>> that it is different than the original.
> >> >>>
> >> >>> But somehow changing the clone also changes my original env? Is that
> >> >>> expected behavior?
> >> >>>
> >> >>> Below is an example SConstruct which reproduces the issue (SCons
> 3.01
> >> >>> installed from pip on windows 10):
> >> >>>
> >> >>> env1 = Environment()
> >> >>> env2 = env1.Clone()
> >> >>>
> >> >>> print("env2 before = " + env1['SHLINKCOM'].list[0].cmd_list)
> >> >>> env2['SHLINKCOM'].list[0].cmd_list = "echo link command env2"
> >> >>> print("env2 after = " + env1['SHLINKCOM'].list[0].cmd_list)
> >> >>>
> >> >>> print("env1 = " + env2['SHLINKCOM'].list[0].cmd_list)
> >> >>>
> >> >>> Which produces this output:
> >> >>>
> >> >>> C:\Users\Daniel\workspace>scons -f SConstruct.py
> >> >>> scons: Reading SConscript files ...
> >> >>> env2 before = ${TEMPFILE("$SHLINK $SHLINKFLAGS $_SHLINK_TARGETS
> >> >>> $_LIBDIRFLAGS $_LIBFLAGS $_PDB $_SHLINK_SOURCES", "$SHLINKCOMSTR")}
> >> >>> env2 after = echo link command env2
> >> >>> env1 = echo link command env2
> >> >>> scons: done reading SConscript files.
> >> >>> scons: Building targets ...
> >> >>> scons: `.' is up to date.
> >> >>> scons: done building targets.
> >> >>>
> >> >>> Can someone shed some light on if this is a bug or how do I uniquely
> >> >>> modify the SHLINKCOM?
> >> >>>
> >> >>> _______________________________________________
> >> >>> 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/20180525/6ac41ebd/attachment-0001.html>
More information about the Scons-users
mailing list