[Scons-users] Order of execution of a one-file builder

Matthew Marinets Matthew.Marinets at Kardium.com
Tue Nov 22 13:08:49 EST 2022


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 <scons-users-bounces at scons.org> On Behalf Of Javier Llopis
Sent: November 22, 2022 08:57
To: SCons users mailing list <scons-users at scons.org>
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://pairlist4.pair.net/pipermail/scons-users/attachments/20221122/edecec5e/attachment-0001.htm>


More information about the Scons-users mailing list