[Scons-users] Problems with env.Install()

Michel Lestrade michel.lestrade at crosslight.com
Fri Jan 25 12:21:32 EST 2013


Hi,

The idea of storing my list of DLLs into the environment variable is to
make it easier to propagate it to various SConscript in sub-folders; I
named that key 'DLLS' to match the existing 'LIBS' key which contains
the link libraries. I guess I could pass the list as a separate variable
but since I can print the contents properly, that should not really
matter; it seems to be imported properly.

In each of those sub-folders I mainly build libraries for a top-level
project but there are test programs which need those earlier DLLs to run
properly. I don't actually need those test programs for my final project
but it helps to be able to run them in the early stages to make sure I
did not mess anything up when porting the original Makefiles. Once the
final project is built it would also be convenient to have all those
files copied to a single install/redistributable folder, hence the idea
of having a single list of those binary files.

The project dependency basically looks like this (omitting the MPI code
which is linked pretty much everywhere):

linear solver exe -> MUMPS DLL -> PT-Scotch DLL -> Pthread for Windows DLL

So the PT-Scotch test programs need the ptscotch and pthread DLLs while
the MUMPS test programs need that DLL on top of those two from before.
Each of those projects is in its own folder and has one ore more
SConscript files.

Now, as to the reason why I initialize with a NodeList() it's because
that if I create the 'DLLS' key in my environment straight with
env.Append(DLLS=pthread[0]), it will store it as a File() node and
subsequent Append() commands will fail since File() does not support
insert (at least, that's the error message I seem to remember). It's the
same thing that happens when the first thing you store in a key is a
string: sometimes SCons will concatenate that string on the next
Append() rather than adding another list item. I have also tried simply
initializing with a regular empty Python list ([]) but I get the same
behavior.

Is this enough information ? I can attach a couple of my SCons files but
I have pretty much tailored everything to the Intel compiler so it is
not very portable yet. Not quite sure about sending attachments to a
mailing list either.

Michel Lestrade

On 24/01/2013 11:57 PM, William Deegan wrote:

> Michel,

> On Jan 24, 2013, at 3:59 PM, Michel Lestrade <michel.lestrade at crosslight.com> wrote:

>

>> Hi,

>>

>> I think the documentation is pretty clear that you can install multiple targets at the same time but I have some trouble making that work.

>>

>> What I am doing is building up a list of DLLs used by my test programs in environment variable and then installing those in my build folders:

>>

>>> env['DLLS'] = SCons.Node.NodeList()

> Why do this?

>

>>> .....

>>> env.Append(DLLS=pthread[0])

>>> etc .... (more DLLS added in SConscript)

>> The list appears to be populated correctly but env.Install() only copies the last item:

>>

>>> for x in env['DLLS']: print 'Debug:', x.abspath

>>> env.Install('scotch_dll',env['DLLS'])

>> which produces the following output:

>>

>>> Debug: D:\Source\MUMPS_scons\build\pthread64\pthread64.dll

>>> Debug: D:\Source\MUMPS_scons\build\scotch64\scotch_wexit64.dll

>>> scons: done reading SConscript files.

>>> scons: Building targets ...

>>> Install file: "build\scotch64\scotch_wexit64.dll" as "build\scotch64\scotch_dll\

>>> scotch_wexit64.dll"

>>> scons: done building targets.

>> Before doing this, I deleted all the DLLs in that folder so it is not simply that this single build target was missing. After scons finishes, only 1 DLL is in my scotch_dll directory instead of the expected 2. It's maddening that something so simple does not work. Even doing it the brute force way (for x in env['DLLS']: env.Install('scotch_dll',x)) produces the same behavior.

>>

>> As a complete newbie, am I missing something obvious ?

> You need to post more of your logic to be able to help you.

> -Bill

> _______________________________________________

> Scons-users mailing list

> Scons-users at scons.org

> http://four.pairlist.net/mailman/listinfo/scons-users

>




More information about the Scons-users mailing list