[Scons-users] Order of execution of a one-file builder
Mats Wichmann
mats at wichmann.us
Tue Nov 22 12:37:37 EST 2022
On 11/22/22 09:57, Javier Llopis wrote:
> 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?
SCons is always going to have trouble if the soruce and target are the same.
The typical approach in this case - where you need to modify a target in
place - is to use AddPostAction.
Can you check if that will work for you?
More information about the Scons-users
mailing list