[Scons-users] env.Command with build explicit build

Philipp Kraus philipp.kraus at flashpixx.de
Sun Aug 12 05:16:33 EDT 2012


On 2012-08-12 07:40:17 +0200, William Deegan said:


> Kraus,

> On Aug 11, 2012, at 11:39 AM, Kraus Philipp <philipp.kraus at flashpixx.de> wrote:

>

>> Hello,

>>

>> I'm using an env.Command call with a own function for running some

>> externel command:

>> My function shows

>>

>> def runfunc(target, source, env) :

>> ### do something in preprocess ###

>> if a :

>> run command 1

>> elif b :

>> run command 2

>> elif c :

>> ### build shared library with scons env.SharedLibrary ####

>> return []

>>

>> My problem is the case c. I need at this point a env.SharedLibrary call, so

>> that a shared library is build after the function is run. I can create the env

>> (which is not a clone of the parameter env, it must be its own structure)

>> but in which way I can run the build process explicit?

>> I need something link

>>

>> envlib = Environment()

>> set parameter to envlib

>> envlib.SharedLibrary(target="mylib", sources= [...])

>> do envlib

>>

>> Do you have an idea to solve the problem?

>

> I'm not really sure what it is you want to do from the description above.

> Do you know a,b,and c at the time you SConscript is executed, or not

> until the build tree is being processed by SCons?

> If not can you provide a more full example?

>

> If you do, then you probably want a Pseudo-builder, see:

> http://www.scons.org/doc/production/HTML/scons-user/c3938.html

>

> No builders are run when the SConstruct/SConscript is processed. They

> are used to build the DAG for SCons to decide what needs to built, and

> then the actions they specify are executed.



I know that scons creates the targets after the DAG is created and
analysed. I need a "practial" idea to do this. I use external code
which has got a own SConstruct, but this SConstruct
has some errors and does not works on all platforms. This SConstruct
builds a library and also there is a unix Makefile for building the
library. I have got create an env-command with
a own function like

env.Command("buildmylib", "", runfunc)

and the runfunc is
def runfunc(target, source, env) :
if is unix :
os.system("make")
elif is osx
os.system("make")
else
envlib = Environment()
envlib.Sharedlib(...)
return []

In which way can I pass the envlib to th main DAG, so if my SConstruct
script is called the envlib library is build?
Thanks

Phil




More information about the Scons-users mailing list