Re: Order of execution of a one-file builder
Bill Deegan <[email protected]>
| Newsgroups | gmane.comp.programming.tools.scons.user |
|---|---|
| Message-ID | <CAEyG4CEMH1=QRoXKGgX2_nhfwZrBXxNDufXhdTKGjYaBvLwnBA@mail.gmail.com> |
env.Sign = Action(....) But as I said earlier a better solution would be to change your Installer builder to optionally do the signing Action. On Wed, Nov 23, 2022 at 4:25 AM Javier Llopis <[email protected]> wrote: > I'm exploring creating an Action instead of a builder. Is there any way I > can give a name to my Action, just like the built-in actions "env.Chmod" or > "env.Copy" have? If possible, I'd like my action to be called "Sign", so > the code would like AddPostAction(installer, env.Sign) > > TIA > J > > > ------------------------------ > *From*: Bill Deegan <[email protected]> > *Sent*: 11/22/22 6:52 PM > *To*: SCons users mailing list <[email protected]> > *Cc*: "[email protected]" <[email protected]> > *Subject*: Re: [Scons-users] Order of execution of a one-file builder > Another way to do this would be to alter the Installer() builder to > optionally do the signing step based on KEYFILE and PASSWORD being set. > That might be a better solution. > > On Tue, Nov 22, 2022 at 10:08 AM Matthew Marinets < > [email protected]> wrote: > >> Rather than a builder, you can refactor your action into a SCons Action >> object, then use AddPostAction (or AddPreAction if you want and action to >> run before another one). >> >> >> >> So if signing happens after your Install builder, something like: >> >> my_sign_action = Action(string_or_python_function, >> print_str) >> >> installed_exe = env.Install(target_exe, source_exe) >> >> env.AddPostAction(installed_exe, my_sign_action) >> >> >> >> Hope this helps! >> >> —Matthew >> >> >> >> *From:* Scons-users <[email protected]> *On Behalf Of *Javier >> Llopis >> *Sent:* November 22, 2022 08:57 >> *To:* SCons users mailing list <[email protected]> >> *Subject:* [Scons-users] Order of execution of a one-file builder >> >> >> >> Hello All, >> >> >> >> I have written a builder around SignTool.exe, a program that comes with >> Visual Studio which digitally signs an executable or a DLL, and have >> included it in the build system for a piece of software that I have written. >> >> The problem is that the input and output of the builder are the same >> file, i.e. the builder just runs SignTool on the source[0] parameter and >> the target is the same file which can create the problem below. >> >> This is my code (the relevant parts): >> >> # on SConscript >> instexe = env.Installer(installer_name, "InstallEncVPG.nsi") # NSIS >> builder from Contributed Builders page >> if must_sign: >> env.Sign(instexe, KEYFILE=keyfile, PASSWORD=password) >> env["installer"] = instexe >> Return("env") >> >> #on SConstruct >> env = SConscript("Installer/SConscript", exports=["env"]) >> Install("distrib", env["installer"]) >> >> Since the input and output are the same, scons apparently doesn't seem >> to know when a file is 'ready'. >> >> >> >> The issue I am running into is that the actions are done in the wrong >> order: The 'instexe' is built on SConscript, then Install copies it to the >> 'distrib' directory on SConstruct, then Sign on SConscript signs it on the >> original directory, so the installer on 'distrib' is unsigned. >> >> >> >> I cannot reproduce the issue on a smaller script. I tried to write an >> illustrative, simpler example but then the issue doesn't happen. Only on >> the big builds. >> >> Is there any way I can force an order of execution? >> >> TIA >> >> >> >> J >> _______________________________________________ >> Scons-users mailing list >> [email protected] >> https://pairlist4.pair.net/mailman/listinfo/scons-users >> > _______________________________________________ Scons-users mailing list [email protected] https://pairlist4.pair.net/mailman/listinfo/scons-users