[Scons-users] How to find the directory of the invoking SConstruct

Manuel Naranjo naranjo.manuel at gmail.com
Fri Jul 19 07:29:10 EDT 2013


Dir('#').srcnode().abspath gives you the absolute path to the SConstruct
file.

Dir('.').srcnode().abspath gives you the absolute path to the current
SConscript file.

Manuel


> Hi

>

> Did you find useful solution for this. Here is my approach.

>

> I ended up with putting this code into my (toplevel) SConstruct file:

>

> import os

> this_sconscript_file = (lambda x:x).func_code.co_filename

> BUILDDIR = os.path.dirname(this_sconscript_file)

>

> This is based on a solution, that I found here: http://stackoverflow.com/questions/9806573/does-scons-know-in-which-directory-a-sconscript-file-resides

>

> There is nothing scons specific about it. You define a lambda function, which you do you not use for anything else than taking the func_code.co_filename value (the filename, where the function is defined) from it.

>

> I tried other things before this:

>

> BUILDDIR = GetLaunchDir()

> and

> BUILDDIR= Dir('#/.').abspath

>

> but both give me the current directory, when it I launch scons, and not the directory of the SConstruct file.

>

> E.g. with the command

> /home/hpj$ scons -f /project/p/SConstruct

> I get /home/hpj with the last two approach, but /project/p with the first approach.

>

> I use scons, version 2.3.0 under Cygwin.

>

> Regards

>

> Hans Peter Jepsen

> Lodam Electronics, Denmark

>

>> -----Original Message-----

>> From: scons-users-bounces at scons.org [mailto:scons-users-

>> bounces at scons.org] On Behalf Of Russell, J.J.

>> Sent: 13. juli 2013 22:44

>> To: scons-users at scons.org

>> Subject: [Scons-users] How to find the directory of the invoking SConstruct

>>

>> For a variety of reasons, we discourage folk from cd'ing into directory where

>> the SConstruct file lives to invoke the build. They have a tendency to drop

>> crud in the directory, or worse, of accidentally invoking "rm *" via careless

>> command line recall actions.

>>

>> We would prefer that they invoke the command using the -f <file> command

>> line option, where 'file' usually includes a directory path. However, when

>> doing this relative paths within the SConstruct file are misinterpreted, e.g.,

>> SConscript ('src/Sconscript') fails. This is certainly consistent with SCons not

>> 'cd'ing into the SConstruct directory ala 'make'.

>>

>> One way that works is -C<directory> followed by -f<file-name>. This seems

>> a little clunky, but, if that's the way it is intended to work, then okay. I just

>> worry that a user mistakenly specifying the full path to the SConstruct file via

>> -f will be, at best, frustrated and, at worst, get something he did not bargain

>> for.

>>

>> I want to make sure I am not missing the correct/intended way to do this.

>>

>>

>> JJRussell

>> _______________________________________________

>> Scons-users mailing list

>> Scons-users at scons.org

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

> _______________________________________________

> 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