[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