[Scons-users] Builder execution order?
    Dirk Bächle 
    tshortik at gmx.de
       
    Sat Jan 18 17:37:39 EST 2014
    
    
  
Hi,
On 18.01.2014 20:53, delbert dev wrote:
> URLDOWNLOAD_USEURLFILENAME=False makes it possible to override that it 
> should NOT use the filename from the url.
>
> I tried this:
>
>  pkg = env.URLDownload(gtestOutputFile, gtestUrl)
>  dir = env.Unpack( ouutdir, gtestOutputFile )
>  Depends(dir, pkg)
>  a = env.Alias('abc', pkg)
>  b = env.Alias('xyz', dir)
>
> scons: *** source file [gtest-1.7.0.zip] must be exist  Stop.
>
this error message is not directly related to SCons dependency analysis, 
that's why explicitly specifying dependencies with Depends() doesn't help.
The underlying problem is that the Unpack() Tool tries to read the 
archive 'gtestOutputFile', such that it can detect which files are 
contained in the archive and therefore have to get emitted as targets of 
the whole Unpack() operation.
But in your case the gtestOutputFile doesn't exist yet, since it hasn't 
been downloaded yet.
That's why you need to kickstart the whole thing by using the UNPACKLIST 
variable, as is described on the page 
http://www.scons.org/wiki/DownloadUnpack :
<quote>
The emitter __emitter must read the archive data, so it must create a 
file- and/or dictory list of the content, so for each extractor must be 
set a list command and an optional splitting function. The Unpack 
builder should be used in combination with the Download builder. In this 
process the emitter can create a problem, because the emitter of the 
Download builder does not create a correct archive, which can be read by 
the emitter of the Unpack builder, so there must be an "injection hack" 
with "user knowledge". The user knows which files are needed by the 
build process, so the Unpack builder has got a flag UNPACKLIST, which 
can be used for injection the emitter, so the filelist can be pushed 
into the emitter and is returned during the build process. With this 
injection the Download- and Unpack builder can connect in order, so the 
full build process works correct. The emitter reads equal to the builder 
the extractor commands, if an unpacklist is set, the emitter returns 
this list, if not the emitter uses the list command of the toolkit and 
runs the command in a subprocess, get its output and push the output 
line-by-line to the splitting function, uniquifies the resulted file- & 
directorylist and returns the list.
</quote>
>
>
> and it gives the same result.
>
> It appears to me that scons is not designed to design/implement a 
> buildflow (like ant, maven, gradle etc.) but are specialized to simply 
> compiling/building a single cross platform cpp/c binary.
>
> Maybe its time to give this a try:
> http://www.gradleware.com/news/blog/creating-world-class-cc-build-system-gradle
> http://www.gradle.org/docs/current/userguide/userguide_single.html#native_binaries:languages
> http://www.gradle.org/docs/current/userguide/userguide_single.html#nativeBinaries
>
I hope the above convinces you that this step isn't really necessary.
Best regards,
Dirk
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://four.pairlist.net/pipermail/scons-users/attachments/20140118/26b2a313/attachment-0001.html 
    
    
More information about the Scons-users
mailing list