other versions
- wheezy 2.1.0-1
- wheezy-backports 2.3.1-1~bpo70+1
- jessie 2.3.1-2
- testing 2.5.1-1
- unstable 2.5.1-1
SCONS(1) | General Commands Manual | SCONS(1) |
NAME¶
scons - a software construction toolSYNOPSIS¶
scons [ options... ] [ name=val... ] [ targets... ]DESCRIPTION¶
The scons utility builds software (or other files) by determining which component pieces must be rebuilt and executing the necessary commands to rebuild them.$ scons foo.out scons: Reading SConscript files ... scons: done reading SConscript files. scons: Building targets ... cp foo.in foo.out scons: done building targets. $
import os env = Environment(ENV = {'PATH' : os.environ['PATH']})
import os env = Environment(ENV = {'PATH' : os.environ['PATH'], 'HOME' : os.environ['HOME']})
import os env = Environment(ENV = os.environ)
scons
scons .
scons /
scons C:\ D:\
scons foo bar
scons -c .
scons -c build export
scons src/subdir
cd src/subdir scons -u .
scons -j 4
scons debug=1 .
if ARGUMENTS.get('debug', 0): env = Environment(CCFLAGS = '-g') else: env = Environment()
OPTIONS¶
In general, scons supports the same command-line options as GNU make, and many of those supported by cons.- -b
- Ignored for compatibility with non-GNU versions of
make.
- -c, --clean, --remove
- Clean up by removing all target files for which a
construction command is specified. Also remove any files or directories
associated to the construction command using the Clean() function.
Will not remove any targets specified by the NoClean() function.
- --cache-debug=file
- Print debug information about the CacheDir()
derived-file caching to the specified file. If file is
- (a hyphen), the debug information are printed to the standard
output. The printed messages describe what signature file names are being
looked for in, retrieved from, or written to the CacheDir()
directory tree.
- --cache-disable, --no-cache
- Disable the derived-file caching specified by
CacheDir(). scons will neither retrieve files from the cache
nor copy files to the cache.
- --cache-force, --cache-populate
- When using CacheDir(), populate a cache by copying
any already-existing, up-to-date derived files to the cache, in addition
to files built by this invocation. This is useful to populate a new cache
with all the current derived files, or to add to the cache any derived
files recently built with caching disabled via the --cache-disable
option.
- --cache-show
- When using CacheDir() and retrieving a derived file
from the cache, show the command that would have been executed to build
the file, instead of the usual report, "Retrieved `file' from
cache." This will produce consistent output for build logs,
regardless of whether a target file was rebuilt or retrieved from the
cache.
- --config=mode
- This specifies how the Configure call should use or
generate the results of configuration tests. The option should be
specified from among the following choices:
- --config=auto
- scons will use its normal dependency mechanisms to decide
if a test must be rebuilt or not. This saves time by not running the same
configuration tests every time you invoke scons, but will overlook changes
in system header files or external commands (such as compilers) if you
don't specify those dependecies explicitly. This is the default behavior.
- --config=force
- If this option is specified, all configuration tests will
be re-run regardless of whether the cached results are out of date. This
can be used to explicitly force the configuration tests to be updated in
response to an otherwise unconfigured change in a system header file or
compiler.
- --config=cache
- If this option is specified, no configuration tests will be
rerun and all results will be taken from cache. Note that scons will still
consider it an error if --config=cache is specified and a necessary test
does not yet have any results in the cache.
- -C directory, --directory=directory
- Change to the specified directory before searching
for the SConstruct, Sconstruct, or sconstruct file,
or doing anything else. Multiple -C options are interpreted
relative to the previous one, and the right-most -C option wins.
(This option is nearly equivalent to -f directory/SConstruct,
except that it will search for SConstruct, Sconstruct, or
sconstruct in the specified directory.)
- -D
- Works exactly the same way as the -u option except
for the way default targets are handled. When this option is used and no
targets are specified on the command line, all default targets are built,
whether or not they are below the current directory.
- --debug=type
- Debug the build process. type specifies what type of
debugging:
- --debug=count
- Print how many objects are created of the various classes
used internally by SCons before and after reading the SConscript files and
before and after building targets. This is not supported when SCons is
executed with the Python -O (optimized) option or when the SCons
modules have been compiled with optimization (that is, when executing from
*.pyo files).
- --debug=duplicate
- Print a line for each unlink/relink (or copy) of a variant
file from its source file. Includes debugging info for unlinking stale
variant files, as well as unlinking old targets before building them.
- --debug=dtree
- A synonym for the newer --tree=derived option. This
will be deprecated in some future release and ultimately removed.
- --debug=explain
- Print an explanation of precisely why scons is
deciding to (re-)build any targets. (Note: this does not print anything
for targets that are not rebuilt.)
- --debug=findlibs
- Instruct the scanner that searches for libraries to print a
message about each potential library name it is searching for, and about
the actual libraries it finds.
- --debug=includes
- Print the include tree after each top-level target is
built. This is generally used to find out what files are included by the
sources of a given derived file:
$ scons --debug=includes foo.o
- --debug=memoizer
- Prints a summary of hits and misses using the Memoizer, an
internal subsystem that counts how often SCons uses cached values in
memory instead of recomputing them each time they're needed.
- --debug=memory
- Prints how much memory SCons uses before and after reading
the SConscript files and before and after building targets.
- --debug=nomemoizer
- A deprecated option preserved for backwards compatibility.
- --debug=objects
- Prints a list of the various objects of the various classes
used internally by SCons.
- --debug=pdb
- Re-run SCons under the control of the pdb Python debugger.
- --debug=prepare
- Print a line each time any target (internal or external) is
prepared for building. scons prints this for each target it
considers, even if that target is up to date (see also --debug=explain).
This can help debug problems with targets that aren't being built; it
shows whether scons is at least considering them or not.
- --debug=presub
- Print the raw command line used to build each target before the construction environment variables are substituted. Also shows which targets are being built by this command. Output looks something like this:
$ scons --debug=presub Building myprog.o with action(s): $SHCC $SHCFLAGS $SHCCFLAGS $CPPFLAGS $_CPPINCFLAGS -c -o $TARGET $SOURCES ...
- --debug=stacktrace
- Prints an internal Python stack trace when encountering an
otherwise unexplained error.
- --debug=stree
- A synonym for the newer --tree=all,status option.
This will be deprecated in some future release and ultimately removed.
- --debug=time
- Prints various time profiling information: the time spent
executing each individual build command; the total build time (time SCons
ran from beginning to end); the total time spent reading and executing
SConscript files; the total time spent SCons itself spend running (that
is, not counting reading and executing SConscript files); and both the
total time spent executing all build commands and the elapsed wall-clock
time spent executing those build commands. (When scons is executed
without the -j option, the elapsed wall-clock time will typically
be slightly longer than the total time spent executing all the build
commands, due to the SCons processing that takes place in between
executing each command. When scons is executed with the
-j option, and your build configuration allows good
parallelization, the elapsed wall-clock time should be significantly
smaller than the total time spent executing all the build commands, since
multiple build commands and intervening SCons processing should take place
in parallel.)
- --debug=tree
- A synonym for the newer --tree=all option. This will
be deprecated in some future release and ultimately removed.
- --diskcheck=types
- Enable specific checks for whether or not there is a file
on disk where the SCons configuration expects a directory (or vice versa),
and whether or not RCS or SCCS sources exist when searching for source and
include files. The types argument can be set to: all, to
enable all checks explicitly (the default behavior); none, to
disable all such checks; match, to check that files and directories
on disk match SCons' expected configuration; rcs, to check for the
existence of an RCS source for any missing source or include files;
sccs, to check for the existence of an SCCS source for any missing
source or include files. Multiple checks can be specified separated by
commas; for example, --diskcheck=sccs,rcs would still check for
SCCS and RCS sources, but disable the check for on-disk matches of files
and directories. Disabling some or all of these checks can provide a
performance boost for large configurations, or when the configuration will
check for files and/or directories across networked or shared file
systems, at the slight increased risk of an incorrect build or of not
handling errors gracefully (if include files really should be found in
SCCS or RCS, for example, or if a file really does exist where the SCons
configuration expects a directory).
- --duplicate=ORDER
- There are three ways to duplicate files in a build tree:
hard links, soft (symbolic) links and copies. The default behaviour of
SCons is to prefer hard links to soft links to copies. You can specify
different behaviours with this option. ORDER must be one of
hard-soft-copy (the default), soft-hard-copy,
hard-copy, soft-copy or copy. SCons will attempt to
duplicate files using the mechanisms in the specified order.
- -f file, --file=file, --makefile=file, --sconstruct=file
- Use file as the initial SConscript file. Multiple
-f options may be specified, in which case scons will read
all of the specified files.
- -h, --help
- Print a local help message for this build, if one is
defined in the SConscript file(s), plus a line that describes the
-H option for command-line option help. If no local help message is
defined, prints the standard help message about command-line options.
Exits after displaying the appropriate message.
- -H, --help-options
- Print the standard help message about command-line options
and exit.
- -i, --ignore-errors
- Ignore all errors from commands executed to rebuild files.
- -I directory, --include-dir=directory
- Specifies a directory to search for imported Python
modules. If several -I options are used, the directories are
searched in the order specified.
- --implicit-cache
- Cache implicit dependencies. This causes scons to use the implicit (scanned) dependencies from the last time it was run instead of scanning the files for implicit dependencies. This can significantly speed up SCons, but with the following limitations:
- scons will not detect changes to implicit dependency search paths (e.g. CPPPATH, LIBPATH) that would ordinarily cause different versions of same-named files to be used.
- scons will miss changes in the implicit dependencies
in cases where a new implicit dependency is added earlier in the implicit
dependency search path (e.g. CPPPATH, LIBPATH) than a
current implicit dependency with the same name.
- --implicit-deps-changed
- Forces SCons to ignore the cached implicit dependencies.
This causes the implicit dependencies to be rescanned and recached. This
implies --implicit-cache.
- --implicit-deps-unchanged
- Force SCons to ignore changes in the implicit dependencies.
This causes cached implicit dependencies to always be used. This implies
--implicit-cache.
- --interactive
- Starts SCons in interactive mode. The SConscript files are
read once and a scons>>> prompt is printed. Targets may
now be rebuilt by typing commands at interactive prompt without having to
re-read the SConscript files and re-initialize the dependency graph from
scratch.
- build[OPTIONS] [TARGETS] ...
- Builds the specified TARGETS (and their
dependencies) with the specified SCons command-line OPTIONS.
b and scons are synonyms.
--cache-debug=FILE --cache-disable, --no-cache --cache-force, --cache-populate --cache-show --debug=TYPE -i, --ignore-errors -j N, --jobs=N -k, --keep-going -n, --no-exec, --just-print, --dry-run, --recon -Q -s, --silent, --quiet --taskmastertrace=FILE --tree=OPTIONS
- Any other SCons command-line options that are specified do
not cause errors but have no effect on the build command (mainly
because they affect how the SConscript files are read, which only happens
once at the beginning of interactive mode).
- clean[OPTIONS] [TARGETS] ...
- Cleans the specified TARGETS (and their
dependencies) with the specified options. c is a synonym. This
command is itself a synonym for build --clean
- exit
- Exits SCons interactive mode. You can also exit by
terminating input (CTRL+D on UNIX or Linux systems, CTRL+Z on Windows
systems).
- help[COMMAND]
- Provides a help message about the commands available in
SCons interactive mode. If COMMAND is specified, h and
? are synonyms.
- shell[COMMANDLINE]
- Executes the specified COMMANDLINE in a subshell. If
no COMMANDLINE is specified, executes the interactive command
interpreter specified in the SHELL environment variable (on UNIX
and Linux systems) or the COMSPEC environment variable (on Windows
systems). sh and ! are synonyms.
- version
- Prints SCons version information.
- An empty line repeats the last typed command. Command-line
editing can be used if the readline module is available.
$ scons --interactive scons: Reading SConscript files ... scons: done reading SConscript files. scons>>> build -n prog scons>>> exit
- -j N, --jobs=N
- Specifies the number of jobs (commands) to run
simultaneously. If there is more than one -j option, the last one
is effective.
- -k, --keep-going
- Continue as much as possible after an error. The target
that failed and those that depend on it will not be remade, but other
targets specified on the command line will still be processed.
- -m
- Ignored for compatibility with non-GNU versions of
make.
- --max-drift=SECONDS
- Set the maximum expected drift in the modification time of
files to SECONDS. This value determines how long a file must be
unmodified before its cached content signature will be used instead of
calculating a new content signature (MD5 checksum) of the file's contents.
The default value is 2 days, which means a file must have a modification
time of at least two days ago in order to have its cached content
signature used. A negative value means to never cache the content
signature and to ignore the cached value if there already is one. A value
of 0 means to always use the cached signature, no matter how old the file
is.
- --md5-chunksize=KILOBYTES
- Set the block size used to compute MD5 signatures to
KILOBYTES. This value determines the size of the chunks which are
read in at once when computing MD5 signatures. Files below that size are
fully stored in memory before performing the signature computation while
bigger files are read in block-by-block. A huge block-size leads to high
memory consumption while a very small block-size slows down the build
considerably.
- -n, --just-print, --dry-run, --recon
- No execute. Print the commands that would be executed to
build any out-of-date target files, but do not execute the commands.
- --no-site-dir
- Prevents the automatic addition of the standard
site_scons dirs to sys.path. Also prevents loading the
site_scons/site_init.py modules if they exist, and prevents adding
their site_scons/site_tools dirs to the toolpath.
- --profile=file
- Run SCons under the Python profiler and save the results in
the specified file. The results may be analyzed using the Python
pstats module.
- -q, --question
- Do not run any commands, or print anything. Just return an exit status that is zero if the specified targets are already up to date, non-zero otherwise.
- -Q
- Quiets SCons status messages about reading SConscript
files, building targets and entering directories. Commands that are
executed to rebuild target files are still printed.
- --random
- Build dependencies in a random order. This is useful when
building multiple trees simultaneously with caching enabled, to prevent
multiple builds from simultaneously trying to build or retrieve the same
target files.
- -s, --silent, --quiet
- Silent. Do not print commands that are executed to rebuild
target files. Also suppresses SCons status messages.
- -S, --no-keep-going, --stop
- Ignored for compatibility with GNU make.
- --site-dir=dir
- Uses the named dir as the site dir rather than the default
site_scons dirs. This dir will get prepended to sys.path,
the module dir/site_init.py will get loaded if it exists, and
dir/site_tools will get added to the default toolpath.
- Windows:
-
%ALLUSERSPROFILE/Application Data/scons/site_scons %USERPROFILE%/Local Settings/Application Data/scons/site_scons %APPDATA%/scons/site_scons %HOME%/.scons/site_scons ./site_scons
- Mac OS X:
-
/Library/Application Support/SCons/site_scons /opt/local/share/scons/site_scons (for MacPorts) /sw/share/scons/site_scons (for Fink) $HOME/Library/Application Support/SCons/site_scons $HOME/.scons/site_scons ./site_scons
- Solaris:
-
/opt/sfw/scons/site_scons /usr/share/scons/site_scons $HOME/.scons/site_scons ./site_scons
- Linux, HPUX, and other Posix-like systems:
-
/usr/share/scons/site_scons $HOME/.scons/site_scons ./site_scons
- --stack-size=KILOBYTES
- Set the size stack used to run threads to KILOBYTES.
This value determines the stack size of the threads used to run jobs.
These are the threads that execute the actions of the builders for the
nodes that are out-of-date. Note that this option has no effect unless the
num_jobs option, which corresponds to -j and --jobs, is larger than
one. Using a stack size that is too small may cause stack overflow errors.
This usually shows up as segmentation faults that cause scons to abort
before building anything. Using a stack size that is too large will cause
scons to use more memory than required and may slow down the entire build
process.
- -t, --touch
- Ignored for compatibility with GNU make. (Touching a
file to make it appear up-to-date is unnecessary when using scons.)
- --taskmastertrace=file
- Prints trace information to the specified file about
how the internal Taskmaster object evaluates and controls the order in
which Nodes are built. A file name of - may be used to specify the
standard output.
- -tree=options
- Prints a tree of the dependencies after each top-level
target is built. This prints out some or all of the tree, in various
formats, depending on the options specified:
- --tree=all
- Print the entire dependency tree after each top-level
target is built. This prints out the complete dependency tree, including
implicit dependencies and ignored dependencies.
- --tree=derived
- Restricts the tree output to only derived (target) files,
not source files.
- --tree=status
- Prints status information for each displayed node.
- --tree=prune
- Prunes the tree to avoid repeating dependency information
for nodes that have already been displayed. Any node that has already been
displayed will have its name printed in [square brackets], as an
indication that the dependencies for that node can be found by searching
for the relevant output higher up in the tree.
- Multiple options may be specified, separated by commas:
# Prints only derived files, with status information: scons --tree=derived,status # Prints all dependencies of target, with status information # and pruning dependencies of already-visited Nodes: scons --tree=all,prune,status target
- -u, --up, --search-up
- Walks up the directory structure until an SConstruct
, Sconstruct or sconstruct file is found, and uses that
as the top of the directory tree. If no targets are specified on the
command line, only targets at or below the current directory will be
built.
- -U
- Works exactly the same way as the -u option except
for the way default targets are handled. When this option is used and no
targets are specified on the command line, all default targets that are
defined in the SConscript(s) in the current directory are built,
regardless of what directory the resultant targets end up in.
- -v, --version
- Print the scons version, copyright information, list
of authors, and any other relevant information. Then exit.
- -w, --print-directory
- Print a message containing the working directory before and
after other processing.
- --no-print-directory
- Turn off -w, even if it was turned on implicitly.
- --warn=type, --warn=no-type
- Enable or disable warnings. type specifies the type
of warnings to be enabled or disabled:
- --warn=all, --warn=no-all
- Enables or disables all warnings.
- --warn=cache-write-error, --warn=no-cache-write-error
- Enables or disables warnings about errors trying to write a
copy of a built file to a specified CacheDir(). These warnings are
disabled by default.
- --warn=corrupt-sconsign, --warn=no-corrupt-sconsign
- Enables or disables warnings about unfamiliar signature
data in .sconsign files. These warnings are enabled by default.
- --warn=dependency, --warn=no-dependency
- Enables or disables warnings about dependencies. These
warnings are disabled by default.
- --warn=deprecated, --warn=no-deprecated
- Enables or disables all warnings about use of currently
deprecated features. These warnings are enabled by default. Note that the
--warn=no-deprecated option does not disable warnings about
absolutely all deprecated features. Warnings for some deprecated features
that have already been through several releases with deprecation warnings
may be mandatory for a release or two before they are officially no longer
supported by SCons. Warnings for some specific deprecated features may be
enabled or disabled individually; see below.
- --warn=deprecated-copy, --warn=no-deprecated-copy
- Enables or disables warnings about use of the deprecated
env.Copy() method.
- --warn=deprecated-source-signatures, --warn=no-deprecated-source-signatures
- Enables or disables warnings about use of the deprecated
SourceSignatures() function or env.SourceSignatures()
method.
- --warn=deprecated-target-signatures, --warn=no-deprecated-target-signatures
- Enables or disables warnings about use of the deprecated TargetSignatures() function or env.TargetSignatures() method.
- --warn=duplicate-environment, --warn=no-duplicate-environment
- Enables or disables warnings about attempts to specify a
build of a target with two different construction environments that use
the same action. These warnings are enabled by default.
- --warn=fortran-cxx-mix, --warn=no-fortran-cxx-mix
- Enables or disables the specific warning about linking
Fortran and C++ object files in a single executable, which can yield
unpredictable behavior with some compilers.
- --warn=future-deprecated, --warn=no-future-deprecated
- Enables or disables warnings about features that will be
deprecated in the future. These warnings are disabled by default. Enabling
this warning is especially recommended for projects that redistribute
SCons configurations for other users to build, so that the project can be
warned as soon as possible about to-be-deprecated features that may
require changes to the configuration.
- --warn=link, --warn=no-link
- Enables or disables warnings about link steps.
- --warn=misleading-keywords, --warn=no-misleading-keywords
- Enables or disables warnings about use of the misspelled
keywords targets and sources when calling Builders. (Note
the last s characters, the correct spellings are target and
source.) These warnings are enabled by default.
- --warn=missing-sconscript, --warn=no-missing-sconscript
- Enables or disables warnings about missing SConscript
files. These warnings are enabled by default.
- --warn=no-md5-module, --warn=no-no-md5-module
- Enables or disables warnings about the version of Python
not having an MD5 checksum module available. These warnings are enabled by
default.
- --warn=no-metaclass-support, --warn=no-no-metaclass-support
- Enables or disables warnings about the version of Python
not supporting metaclasses when the --debug=memoizer option is
used. These warnings are enabled by default.
- --warn=no-object-count, --warn=no-no-object-count
- Enables or disables warnings about the
--debug=object feature not working when scons is run with
the python -O option or from optimized Python (.pyo) modules.
- --warn=no-parallel-support, --warn=no-no-parallel-support
- Enables or disables warnings about the version of Python
not being able to support parallel builds when the -j option is
used. These warnings are enabled by default.
- --warn=python-version, --warn=no-python-version
- Enables or disables the warning about running SCons with a
deprecated version of Python. These warnings are enabled by default.
- --warn=reserved-variable, --warn=no-reserved-variable
- Enables or disables warnings about attempts to set the
reserved construction variable names CHANGED_SOURCES,
CHANGED_TARGETS, TARGET, TARGETS, SOURCE,
SOURCES, UNCHANGED_SOURCES or UNCHANGED_TARGETS.
These warnings are disabled by default.
- --warn=stack-size, --warn=no-stack-size
- Enables or disables warnings about requests to set the
stack size that could not be honored. These warnings are enabled by
default.
- -Y repository, --repository=repository, --srcdir=repository
- Search the specified repository for any input and target
files not found in the local directory hierarchy. Multiple -Y
options may be specified, in which case the repositories are searched in
the order specified.
CONFIGURATION FILE REFERENCE¶
Construction Environments¶
A construction environment is the basic means by which the SConscript files communicate build information to scons. A new construction environment is created using the Environment function:env = Environment()
env = Environment(FOO = 'foo') env['BAR'] = 'bar'
env = Environment(parse_flags = '-Iinclude -DEBUG -lm')
env = Environment(platform = 'cygwin') env = Environment(platform = 'os2') env = Environment(platform = 'posix') env = Environment(platform = 'win32')
def my_platform(env): env['VAR'] = 'xyzzy' env = Environment(platform = my_platform)
env = Environment(tools = ['msvc', 'lex'])
env = Environment(tools = ['default', 'foo'], toolpath = ['tools'])
base = Environment(toolpath=['custom_path']) derived = base.Clone(tools=['custom_tool']) derived.CustomBuilder()
def my_tool(env): env['XYZZY'] = 'xyzzy' env = Environment(tools = [my_tool])
# in tools/my_tool.py: def generate(env, **kw): # Sets MY_TOOL to the value of keyword argument 'arg1' or 1. env['MY_TOOL'] = kw.get('arg1', '1') def exists(env): return 1 # in SConstruct: env = Environment(tools = ['default', ('my_tool', {'arg1': 'abc'})], toolpath=['tools'])
386asm aixc++ aixcc aixf77 aixlink ar as bcc32 c++ cc cvf dmd dvipdf dvips f77 f90 f95 fortran g++ g77 gas gcc gfortran gnulink gs hpc++ hpcc hplink icc icl ifl ifort ilink ilink32 intelc jar javac javah latex lex link linkloc m4 masm midl mingw mslib mslink mssdk msvc msvs mwcc mwld nasm pdflatex pdftex qt rmic rpcgen sgiar sgic++ sgicc sgilink sunar sunc++ suncc sunf77 sunf90 sunf95 sunlink swig tar tex textfile tlib yacc zip
Builder Methods¶
Build rules are specified by calling a construction environment's builder methods. The arguments to the builder methods are target (a list of targets to be built, usually file names) and source (a list of sources to be built, usually file names).env.Program('bar', ['bar.c', 'foo.c']) env.Program('bar', Split('bar.c foo.c')) env.Program('bar', env.Split('bar.c foo.c')) env.Program(source = ['bar.c', 'foo.c'], target = 'bar') env.Program(target = 'bar', Split('bar.c foo.c')) env.Program(target = 'bar', env.Split('bar.c foo.c')) env.Program('bar', source = 'bar.c foo.c'.split())
# The comments describing the targets that will be built # assume these calls are in a SConscript file in the # a subdirectory named "subdir". # Builds the program "subdir/foo" from "subdir/foo.c": env.Program('foo', 'foo.c') # Builds the program "/tmp/bar" from "subdir/bar.c": env.Program('/tmp/bar', 'bar.c') # An initial '#' or '#/' are equivalent; the following # calls build the programs "foo" and "bar" (in the # top-level SConstruct directory) from "subdir/foo.c" and # "subdir/bar.c", respectively: env.Program('#foo', 'foo.c') env.Program('#/bar', 'bar.c') # Builds the program "other/foo" (relative to the top-level # SConstruct directory) from "subdir/foo.c": env.Program('#other/foo', 'foo.c')
env.Program(target = 'bar', source = 'bar.c') env.Program('bar', source = 'bar.c') env.Program(source = 'bar.c') env.Program('bar.c')
env.Program('build/prog', ['f1.c', 'f2.c'], srcdir='src')
env.Program('hello', 'hello.c', LIBS=['gl', 'glut'])
env.SharedLibrary('word', 'word.cpp', SHLIBSUFFIX='.ocx', LIBSUFFIXES=['.ocx'])
env = Program('hello', 'hello.c', parse_flags = '-Iinclude -DEBUG -lm')
Program('hello', 'hello.c') SharedLibrary('word', 'word.cpp')
from SCons.Script import *
bar_obj_list = env.StaticObject('bar.c', CPPDEFINES='-DBAR') env.Program(source = ['foo.c', bar_obj_list, 'main.c'])
foo = Object('foo.c') bar = Object('bar.c') objects = ['begin.o'] + foo + ['middle.o'] + bar + ['end.o'] for object in objects: print str(object)
foo = Object('foo.c') bar = Object('bar.c') objects = Flatten(['begin.o', foo, 'middle.o', bar, 'end.o']) for object in objects: print str(object)
object_files = [] # Do NOT use += as follows: # # object_files += Object('bar.c') # # It will not update the object_files list in place. # # Instead, use the .extend() method: object_files.extend(Object('bar.c'))
bar_obj_list = env.StaticObject('bar.c', CPPDEFINES='-DBAR') print "The path to bar_obj is:", str(bar_obj_list[0])
# scons will change to the "sub" subdirectory # before executing the "cp" command. env.Command('sub/dir/foo.out', 'sub/dir/foo.in', "cp dir/foo.in dir/foo.out", chdir='sub') # Because chdir is not a string, scons will change to the # target's directory ("sub/dir") before executing the # "cp" command. env.Command('sub/dir/foo.out', 'sub/dir/foo.in', "cp foo.in foo.out", chdir=1)
- CFile()
- env.CFile()
- Builds a C source file given a lex (.l) or yacc (
.y) input file. The suffix specified by the $CFILESUFFIX
construction variable ( .c by default) is automatically added to
the target if it is not already present. Example:
# builds foo.c env.CFile(target = 'foo.c', source = 'foo.l') # builds bar.c env.CFile(target = 'bar', source = 'bar.y')
- Command()
- env.Command()
- The Command() "Builder" is actually
implemented as a function that looks like a Builder, but actually takes an
additional argument of the action from which the Builder should be made.
See the Command() function description for the calling syntax and
details.
- CXXFile()
- env.CXXFile()
- Builds a C++ source file given a lex (.ll) or yacc (
.yy) input file. The suffix specified by the $CXXFILESUFFIX
construction variable ( .cc by default) is automatically added to
the target if it is not already present. Example:
# builds foo.cc env.CXXFile(target = 'foo.cc', source = 'foo.ll') # builds bar.cc env.CXXFile(target = 'bar', source = 'bar.yy')
- DVI()
- env.DVI()
- Builds a .dvi file from a .tex, .ltx
or .latex input file. If the source file suffix is .tex,
scons will examine the contents of the file; if the string
ocumentclass or ocumentstyle is found, the file is assumed
to be a LaTeX file and the target is built by invoking the
$LATEXCOM command line; otherwise, the $TEXCOM command line
is used. If the file is a LaTeX file, the DVI() builder method will
also examine the contents of the .aux file and invoke the
$BIBTEX command line if the string bibdata is found, start
$MAKEINDEX to generate an index if a .ind file is found and
will examine the contents .log file and re-run the $LATEXCOM
command if the log file says it is necessary.
# builds from aaa.tex env.DVI(target = 'aaa.dvi', source = 'aaa.tex') # builds bbb.dvi env.DVI(target = 'bbb', source = 'bbb.ltx') # builds from ccc.latex env.DVI(target = 'ccc.dvi', source = 'ccc.latex')
- Install()
- env.Install()
- Installs one or more source files or directories in the
specified target, which must be a directory. The names of the specified
source files or directories remain the same within the destination
directory. The sources may be given as a string or as a node returned by a
builder.
env.Install('/usr/local/bin', source = ['foo', 'bar'])
- InstallAs()
- env.InstallAs()
- Installs one or more source files or directories to
specific names, allowing changing a file or directory name as part of the
installation. It is an error if the target and source arguments list
different numbers of files or directories.
- InstallVersionedLib()
- env.InstallVersionedLib()
- Installs a versioned shared library. The
$SHLIBVERSION construction variable should be defined in the
environment to confirm the version number in the library name. The
symlinks appropriate to the architecture will be generated.
env.InstallAs(target = '/usr/local/bin/foo', source = 'foo_debug') env.InstallAs(target = ['../lib/libfoo.a', '../lib/libbar.a'], source = ['libFOO.a', 'libBAR.a'])
- Jar()
- env.Jar()
- Builds a Java archive (.jar) file from the specified
list of sources. Any directories in the source list will be searched for
.class files). Any .java files in the source list will be
compiled to .class files by calling the Java() Builder.
env.Jar(target = 'foo.jar', source = 'classes') env.Jar(target = 'bar.jar', source = ['bar1.java', 'bar2.java'])
- Java()
- env.Java()
- Builds one or more Java class files. The sources may be any
combination of explicit .java files, or directory trees which will
be scanned for .java files.
env.Java(target = 'classes', source = 'src') env.Java(target = 'classes', source = ['src1', 'src2']) env.Java(target = 'classes', source = ['File1.java', 'File2.java'])
- Java source files can use the native encoding for the
underlying OS. Since SCons compiles in simple ASCII mode by default, the
compiler will generate warnings about unmappable characters, which may
lead to errors as the file is processed further. In this case, the user
must specify the LANG environment variable to tell the compiler
what encoding is used. For portibility, it's best if the encoding is
hard-coded so that the compile will work if it is done on a system with a
different encoding.
env = Environment() env['ENV']['LANG'] = 'en_GB.UTF-8'
- JavaH()
- env.JavaH()
- Builds C header and source files for implementing Java
native methods. The target can be either a directory in which the header
files will be written, or a header file name which will contain all of the
definitions. The source can be the names of .class files, the names
of .java files to be compiled into .class files by calling
the Java() builder method, or the objects returned from the
Java() builder method.
# builds java_native.h classes = env.Java(target = 'classdir', source = 'src') env.JavaH(target = 'java_native.h', source = classes) # builds include/package_foo.h and include/package_bar.h env.JavaH(target = 'include', source = ['package/foo.class', 'package/bar.class']) # builds export/foo.h and export/bar.h env.JavaH(target = 'export', source = ['classes/foo.class', 'classes/bar.class'], JAVACLASSDIR = 'classes')
- Library()
- env.Library()
- A synonym for the StaticLibrary() builder method.
- LoadableModule()
- env.LoadableModule()
- On most systems, this is the same as
SharedLibrary(). On Mac OS X (Darwin) platforms, this creates a
loadable module bundle.
- M4()
- env.M4()
- Builds an output file from an M4 input file. This uses a
default $M4FLAGS value of -E, which considers all warnings
to be fatal and stops on the first warning when using the GNU version of
m4. Example:
env.M4(target = 'foo.c', source = 'foo.c.m4')
- Moc()
- env.Moc()
- Builds an output file from a moc input file. Moc input
files are either header files or cxx files. This builder is only available
after using the tool 'qt'. See the $QTDIR variable for more
information. Example:
env.Moc('foo.h') # generates moc_foo.cc env.Moc('foo.cpp') # generates foo.moc
- MOFiles()
- env.MOFiles()
- This builder belongs to &t-link-msgfmt; tool. The
builder compiles PO files to MO files.
# ... env.MOFiles(['pl', 'en'])
- Example2. Compile files for languages defined in LINGUAS file:
# ... env.MOFiles(LINGUAS_FILE = 1)
- Example3. Create pl.mo and en.mo by compiling pl.po and en.po plus files for languages defined in LINGUAS file:
# ... env.MOFiles(['pl', 'en'], LINGUAS_FILE = 1)
- Example4. Compile files for languages defined in LINGUAS file (another version):
# ... env['LINGUAS_FILE'] = 1 env.MOFiles()
- MSVSProject()
- env.MSVSProject()
- Builds a Microsoft Visual Studio project file, and by
default builds a solution file as well.
barsrcs = ['bar.cpp'], barincs = ['bar.h'], barlocalincs = ['StdAfx.h'] barresources = ['bar.rc','resource.h'] barmisc = ['bar_readme.txt'] dll = env.SharedLibrary(target = 'bar.dll', source = barsrcs) env.MSVSProject(target = 'Bar' + env['MSVSPROJECTSUFFIX'], srcs = barsrcs, incs = barincs, localincs = barlocalincs, resources = barresources, misc = barmisc, buildtarget = dll, variant = 'Release')
- MSVSSolution()
- env.MSVSSolution()
- Builds a Microsoft Visual Studio solution file.
env.MSVSSolution(target = 'Bar' + env['MSVSSOLUTIONSUFFIX'], projects = ['bar' + env['MSVSPROJECTSUFFIX']], variant = 'Release')
- Object()
- env.Object()
- A synonym for the StaticObject() builder method.
- Package()
- env.Package()
- Builds software distribution packages. Packages consist of
files to install and packaging information. The former may be specified
with the source parameter and may be left out, in which case the
&FindInstalledFiles; function will collect all files that have an
Install() or InstallAs() Builder attached. If the
target is not specified it will be deduced from additional
information given to this Builder.
* msi - Microsoft Installer
* rpm - Redhat Package Manger
* ipkg - Itsy Package Management System
* tarbz2 - compressed tar
* targz - compressed tar
* zip - zip file
* src_tarbz2 - compressed tar source
* src_targz - compressed tar source
* src_zip - zip file source
env = Environment(tools=['default', 'packaging']) env.Install('/bin/', 'my_program') env.Package( NAME = 'foo', VERSION = '1.2.3', PACKAGEVERSION = 0, PACKAGETYPE = 'rpm', LICENSE = 'gpl', SUMMARY = 'balalalalal', DESCRIPTION = 'this should be really really long', X_RPM_GROUP = 'Application/fu', SOURCE_URL = 'http://foo.org/foo-1.2.3.tar.gz' )
- PCH()
- env.PCH()
- Builds a Microsoft Visual C++ precompiled header. Calling
this builder method returns a list of two targets: the PCH as the first
element, and the object file as the second element. Normally the object
file is ignored. This builder method is only provided when Microsoft
Visual C++ is being used as the compiler. The PCH builder method is
generally used in conjunction with the PCH construction variable to force
object files to use the precompiled header:
env['PCH'] = env.PCH('StdAfx.cpp')[0]
- PDF()
- env.PDF()
- Builds a .pdf file from a .dvi input file
(or, by extension, a .tex, .ltx, or .latex input
file). The suffix specified by the $PDFSUFFIX construction variable
( .pdf by default) is added automatically to the target if it is
not already present. Example:
# builds from aaa.tex env.PDF(target = 'aaa.pdf', source = 'aaa.tex') # builds bbb.pdf from bbb.dvi env.PDF(target = 'bbb', source = 'bbb.dvi')
- POInit()
- env.POInit()
- This builder belongs to &t-link-msginit; tool. The
builder initializes missing PO file(s) if $POAUTOINIT is
set. If $POAUTOINIT is not set (default), POInit() prints
instruction for user (that is supposed to be a translator), telling how
the PO file should be initialized. In normal projects
youshouldnotusePOInit()andusePOUpdate()
instead. POUpdate() chooses intelligently between
msgmerge(1)
andmsginit(1).POInit()
always uses msginit(1) and should be regarded as builder
for special purposes or for temporary use (e.g. for quick, one time
initialization of a bunch of PO files) or for
tests.
# ... env.POInit(['en', 'pl']) # messages.pot --> [en.po, pl.po]
- Example2. Initialize en.po and pl.po from foo.pot:
# ... env.POInit(['en', 'pl'], ['foo']) # foo.pot --> [en.po, pl.po]
- Example3. Initialize en.po and pl.po from foo.pot but using $POTDOMAIN construction variable:
# ... env.POInit(['en', 'pl'], POTDOMAIN='foo') # foo.pot --> [en.po, pl.po]
- Example4. Initialize PO files for languages defined in LINGUAS file. The files will be initialized from template messages.pot:
# ... env.POInit(LINGUAS_FILE = 1) # needs 'LINGUAS' file
- Example5. Initialize en.po and pl.pl PO files plus files for languages defined in LINGUAS file. The files will be initialized from template messages.pot:
# ... env.POInit(['en', 'pl'], LINGUAS_FILE = 1)
- Example6. You may preconfigure your environment first, and then initialize PO files:
# ... env['POAUTOINIT'] = 1 env['LINGUAS_FILE'] = 1 env['POTDOMAIN'] = 'foo' env.POInit()
# ... env.POInit(POAUTOINIT = 1, LINGUAS_FILE = 1, POTDOMAIN = 'foo')
- PostScript()
- env.PostScript()
- Builds a .ps file from a .dvi input file (or,
by extension, a .tex, .ltx, or .latex input file).
The suffix specified by the $PSSUFFIX construction variable (
.ps by default) is added automatically to the target if it is not
already present. Example:
# builds from aaa.tex env.PostScript(target = 'aaa.ps', source = 'aaa.tex') # builds bbb.ps from bbb.dvi env.PostScript(target = 'bbb', source = 'bbb.dvi')
- POTUpdate()
- env.POTUpdate()
- The builder belongs to &t-link-xgettext; tool. The
builder updates target POT file if exists or creates one if it
doesn't. The node is not built by default (i.e. it is Ignored from
'.'), but only on demand (i.e. when given POT file is
required or when special alias is invoked). This builder adds its targe
node ( messages.pot, say) to a special alias ( pot-update by
default, see $POTUPDATE_ALIAS) so you can update/create them easily
with scons pot-update. The file is not written until there is no
real change in internationalized messages (or in comments that enter
POT file).
# SConstruct in 'po/' subdir env = Environment( tools = ['default', 'xgettext'] ) env.POTUpdate(['foo'], ['../a.cpp', '../b.cpp']) env.POTUpdate(['bar'], ['../c.cpp', '../d.cpp'])
user@host:$ scons # Does not create foo.pot nor bar.pot user@host:$ scons foo.pot # Updates or creates foo.pot user@host:$ scons pot-update # Updates or creates foo.pot and bar.pot user@host:$ scons -c # Does not clean foo.pot nor bar.pot.
# SConstruct script env = Environment( tools = ['default', 'xgettext'] ) env['POTDOMAIN'] = "foo" env.POTUpdate(source = ["a.cpp", "b.cpp"]) # Creates foo.pot ... env.POTUpdate(POTDOMAIN = "bar", source = ["c.cpp", "d.cpp"]) # and bar.pot
- Example 3. The sources may be specified within separate file, for example POTFILES.in:
# POTFILES.in in 'po/' subdirectory ../a.cpp ../b.cpp # end of file
# SConstruct file in 'po/' subdirectory env = Environment( tools = ['default', 'xgettext'] ) env.POTUpdate(XGETTEXTFROM = 'POTFILES.in')
# POTFILES.in in 'po/' subdirectory a.cpp b.cpp # end of file
# SConstruct file in 'po/' subdirectory env = Environment( tools = ['default', 'xgettext'] ) env.POTUpdate(XGETTEXTFROM = 'POTFILES.in', XGETTEXTPATH='../')
- Example 5. Multiple search directories may be
defined within a list, i.e. XGETTEXTPATH = ['dir1', 'dir2', ...].
The order in the list determines the search order of source files. The
path to the first file found is used.
# SConstruct file in '0/1/po/' subdirectory env = Environment( tools = ['default', 'xgettext'] ) env.POTUpdate(XGETTEXTFROM = 'POTFILES.in', XGETTEXTPATH=['../', '../../'])
# POTFILES.in in '0/1/po/' subdirectory a.cpp # end of file
/* 0/a.cpp */ gettext("Hello from ../../a.cpp")
/* 0/1/a.cpp */ gettext("Hello from ../a.cpp")
# SConstruct file in '0/1/po/' subdirectory env = Environment( tools = ['default', 'xgettext'] ) env.POTUpdate(XGETTEXTFROM = 'POTFILES.in', XGETTEXTPATH=['../../', '../'])
-
then the messages.pot will contain msgid "Hello from ../../a.cpp" line and not msgidHello from ../a.cpp.
- POUpdate()
- env.POUpdate()
- The builder belongs to &t-link-msgmerge; tool. The
builder updates PO files with msgmerge(1), or initializes
missing PO files as described in documentation of
&t-link-msginit; tool and POInit() builder (see also
$POAUTOINIT). Note, that POUpdate() does not add its
targets to po-create alias as
POInit() does.
# ... env.POUpdate(['en','pl']) # messages.pot --> [en.po, pl.po]
- Example 2. Update en.po and pl.po from foo.pot template:
# ... env.POUpdate(['en', 'pl'], ['foo']) # foo.pot --> [en.po, pl.pl]
- Example 3. Update en.po and pl.po from foo.pot (another version):
# ... env.POUpdate(['en', 'pl'], POTDOMAIN='foo') # foo.pot -- > [en.po, pl.pl]
- Example 4. Update files for languages defined in LINGUAS file. The files are updated from messages.pot template:
# ... env.POUpdate(LINGUAS_FILE = 1) # needs 'LINGUAS' file
- Example 5. Same as above, but update from foo.pot template:
# ... env.POUpdate(LINGUAS_FILE = 1, source = ['foo'])
- Example 6. Update en.po and pl.po plus files for languages defined in LINGUAS file. The files are updated from messages.pot template:
# produce 'en.po', 'pl.po' + files defined in 'LINGUAS': env.POUpdate(['en', 'pl' ], LINGUAS_FILE = 1)
- Example 7. Use $POAUTOINIT to automatically initialize PO file if it doesn't exist:
# ... env.POUpdate(LINGUAS_FILE = 1, POAUTOINIT = 1)
- Example 8. Update PO files for languages defined in LINGUAS file. The files are updated from foo.pot template. All necessary settings are pre-configured via environment.
# ... env['POAUTOINIT'] = 1 env['LINGUAS_FILE'] = 1 env['POTDOMAIN'] = 'foo' env.POUpdate()
- Program()
- env.Program()
- Builds an executable given one or more object files or C,
C++, D, or Fortran source files. If any C, C++, D or Fortran source files
are specified, then they will be automatically compiled to object files
using the Object() builder method; see that builder method's
description for a list of legal source file suffixes and how they are
interpreted. The target executable file prefix (specified by the
$PROGPREFIX construction variable; nothing by default) and suffix
(specified by the $PROGSUFFIX construction variable; by default,
.exe on Windows systems, nothing on POSIX systems) are
automatically added to the target if not already present. Example:
env.Program(target = 'foo', source = ['foo.o', 'bar.c', 'baz.f'])
- RES()
- env.RES()
- Builds a Microsoft Visual C++ resource file. This builder
method is only provided when Microsoft Visual C++ or MinGW is being used
as the compiler. The .res (or .o for MinGW) suffix is added
to the target name if no other suffix is given. The source file is scanned
for implicit dependencies as though it were a C file. Example:
env.RES('resource.rc')
- RMIC()
- env.RMIC()
- Builds stub and skeleton class files for remote objects
from Java .class files. The target is a directory relative to which
the stub and skeleton class files will be written. The source can be the
names of .class files, or the objects return from the Java()
builder method.
classes = env.Java(target = 'classdir', source = 'src') env.RMIC(target = 'outdir1', source = classes) env.RMIC(target = 'outdir2', source = ['package/foo.class', 'package/bar.class']) env.RMIC(target = 'outdir3', source = ['classes/foo.class', 'classes/bar.class'], JAVACLASSDIR = 'classes')
- RPCGenClient()
- env.RPCGenClient()
- Generates an RPC client stub (_clnt.c) file from a
specified RPC ( .x) source file. Because rpcgen only builds output
files in the local directory, the command will be executed in the source
file's directory by default.
# Builds src/rpcif_clnt.c env.RPCGenClient('src/rpcif.x')
- RPCGenHeader()
- env.RPCGenHeader()
- Generates an RPC header (.h) file from a specified
RPC ( .x) source file. Because rpcgen only builds output files in
the local directory, the command will be executed in the source file's
directory by default.
# Builds src/rpcif.h env.RPCGenHeader('src/rpcif.x')
- RPCGenService()
- env.RPCGenService()
- Generates an RPC server-skeleton (_svc.c) file from
a specified RPC ( .x) source file. Because rpcgen only builds
output files in the local directory, the command will be executed in the
source file's directory by default.
# Builds src/rpcif_svc.c env.RPCGenClient('src/rpcif.x')
- RPCGenXDR()
- env.RPCGenXDR()
- Generates an RPC XDR routine (_xdr.c) file from a
specified RPC ( .x) source file. Because rpcgen only builds output
files in the local directory, the command will be executed in the source
file's directory by default.
# Builds src/rpcif_xdr.c env.RPCGenClient('src/rpcif.x')
- SharedLibrary()
- env.SharedLibrary()
- Builds a shared library ( .so on a POSIX system,
.dll on Windows) given one or more object files or C, C++, D or
Fortran source files. If any source files are given, then they will be
automatically compiled to object files. The static library prefix and
suffix (if any) are automatically added to the target. The target library
file prefix (specified by the $SHLIBPREFIX construction variable;
by default, lib on POSIX systems, nothing on Windows systems) and
suffix (specified by the $SHLIBSUFFIX construction variable; by
default, .dll on Windows systems, .so on POSIX systems) are
automatically added to the target if not already present. Example:
env.SharedLibrary(target = 'bar', source = ['bar.c', 'foo.o'])
- On Windows systems, the SharedLibrary() builder
method will always build an import ( .lib) library in addition to
the shared ( .dll) library, adding a .lib library with the
same basename if there is not already a .lib file explicitly listed
in the targets.
env.SharedLibrary(target = 'bar', source = ['bar.cxx', 'foo.obj'], register=1)
- will register bar.dll as a COM object when it is
done linking it.
- SharedObject()
- env.SharedObject()
- Builds an object file for inclusion in a shared library.
Source files must have one of the same set of extensions specified above
for the StaticObject() builder method. On some platforms building a
shared object requires additional compiler option (e.g. -fPIC for
gcc) in addition to those needed to build a normal (static) object, but on
some platforms there is no difference between a shared object and a normal
(static) one. When there is a difference, SCons will only allow shared
objects to be linked into a shared library, and will use a different
suffix for shared objects. On platforms where there is no difference,
SCons will allow both normal (static) and shared objects to be linked into
a shared library, and will use the same suffix for shared and normal
(static) objects. The target object file prefix (specified by the
$SHOBJPREFIX construction variable; by default, the same as
$OBJPREFIX) and suffix (specified by the $SHOBJSUFFIX
construction variable) are automatically added to the target if not
already present. Examples:
env.SharedObject(target = 'ddd', source = 'ddd.c') env.SharedObject(target = 'eee.o', source = 'eee.cpp') env.SharedObject(target = 'fff.obj', source = 'fff.for')
- Note that the source files will be scanned according to the
suffix mappings in the SourceFileScanner object. See the section
"Scanner Objects," below, for more information.
- StaticLibrary()
- env.StaticLibrary()
- Builds a static library given one or more object files or
C, C++, D or Fortran source files. If any source files are given, then
they will be automatically compiled to object files. The static library
prefix and suffix (if any) are automatically added to the target. The
target library file prefix (specified by the $LIBPREFIX
construction variable; by default, lib on POSIX systems, nothing on
Windows systems) and suffix (specified by the $LIBSUFFIX
construction variable; by default, .lib on Windows systems,
.a on POSIX systems) are automatically added to the target if not
already present. Example:
env.StaticLibrary(target = 'bar', source = ['bar.c', 'foo.o'])
- Any object files listed in the source must have been
built for a static library (that is, using the StaticObject()
builder method). scons will raise an error if there is any
mismatch.
- StaticObject()
- env.StaticObject()
- Builds a static object file from one or more C, C++, D, or
Fortran source files. Source files must have one of the following
extensions:
.asm assembly language file .ASM assembly language file .c C file .C Windows: C file POSIX: C++ file .cc C++ file .cpp C++ file .cxx C++ file .cxx C++ file .c++ C++ file .C++ C++ file .d D file .f Fortran file .F Windows: Fortran file POSIX: Fortran file + C pre-processor .for Fortran file .FOR Fortran file .fpp Fortran file + C pre-processor .FPP Fortran file + C pre-processor .m Object C file .mm Object C++ file .s assembly language file .S Windows: assembly language file ARM: CodeSourcery Sourcery Lite .sx assembly language file + C pre-processor POSIX: assembly language file + C pre-processor .spp assembly language file + C pre-processor .SPP assembly language file + C pre-processor
- The target object file prefix (specified by the
$OBJPREFIX construction variable; nothing by default) and suffix
(specified by the $OBJSUFFIX construction variable; .obj on
Windows systems, .o on POSIX systems) are automatically added to
the target if not already present. Examples:
env.StaticObject(target = 'aaa', source = 'aaa.c') env.StaticObject(target = 'bbb.o', source = 'bbb.c++') env.StaticObject(target = 'ccc.obj', source = 'ccc.f')
- Note that the source files will be scanned according to the
suffix mappings in SourceFileScanner object. See the section
"Scanner Objects," below, for more information.
- Substfile()
- env.Substfile()
- The Substfile() builder generates a single text file
by concatenating the source files. Nested lists of sources are flattened.
$LINESEPARATOR is used to separate the source files; see the
description of Textfile() for details.
env = Environment(tools = ['default', 'textfile']) env['prefix'] = '/usr/bin' script_dict = {'@prefix@': '/bin', @exec_prefix@: '$prefix'} env.Substfile('script.in', SUBST_DICT = script_dict) conf_dict = {'%VERSION%': '1.2.3', '%BASE%': 'MyProg'} env.Substfile('config.h.in', conf_dict, SUBST_DICT = conf_dict) # UNPREDICTABLE - one key is a prefix of another bad_foo = {'$foo': '$foo', '$foobar': '$foobar'} env.Substfile('foo.in', SUBST_DICT = bad_foo) # PREDICTABLE - keys are applied longest first good_foo = [('$foobar', '$foobar'), ('$foo', '$foo')] env.Substfile('foo.in', SUBST_DICT = good_foo) # UNPREDICTABLE - one substitution could be futher expanded bad_bar = {'@bar@': '@soap@', '@soap@': 'lye'} env.Substfile('bar.in', SUBST_DICT = bad_bar) # PREDICTABLE - substitutions are expanded in order good_bar = (('@bar@', '@soap@'), ('@soap@', 'lye')) env.Substfile('bar.in', SUBST_DICT = good_bar) # the SUBST_DICT may be in common (and not an override) substutions = {} subst = Environment(tools = ['textfile'], SUBST_DICT = substitutions) substitutions['@foo@'] = 'foo' subst['SUBST_DICT']['@bar@'] = 'bar' subst.Substfile('pgm1.c', [Value('#include "@foo@.h"'), Value('#include "@bar@.h"'), "common.in", "pgm1.in" ]) subst.Substfile('pgm2.c', [Value('#include "@foo@.h"'), Value('#include "@bar@.h"'), "common.in", "pgm2.in" ])
- Tar()
- env.Tar()
- Builds a tar archive of the specified files and/or
directories. Unlike most builder methods, the Tar() builder method
may be called multiple times for a given target; each additional call adds
to the list of entries that will be built into the archive. Any source
directories will be scanned for changes to any on-disk files, regardless
of whether or not scons knows about them from other Builder or
function calls.
env.Tar('src.tar', 'src') # Create the stuff.tar file. env.Tar('stuff', ['subdir1', 'subdir2']) # Also add "another" to the stuff.tar file. env.Tar('stuff', 'another') # Set TARFLAGS to create a gzip-filtered archive. env = Environment(TARFLAGS = '-c -z') env.Tar('foo.tar.gz', 'foo') # Also set the suffix to .tgz. env = Environment(TARFLAGS = '-c -z', TARSUFFIX = '.tgz') env.Tar('foo')
- Textfile()
- env.Textfile()
- The Textfile() builder generates a single text file.
The source strings constitute the lines; nested lists of sources are
flattened. $LINESEPARATOR is used to separate the strings.
# builds/writes foo.txt env.Textfile(target = 'foo.txt', source = ['Goethe', 42, 'Schiller']) # builds/writes bar.txt env.Textfile(target = 'bar', source = ['lalala', 'tanteratei'], LINESEPARATOR='|*') # nested lists are flattened automatically env.Textfile(target = 'blob', source = ['lalala', ['Goethe', 42 'Schiller'], 'tanteratei']) # files may be used as input by wraping them in File() env.Textfile(target = 'concat', # concatenate files with a marker between source = [File('concat1'), File('concat2')], LINESEPARATOR = '====================\n') Results are: foo.txt ....8<---- Goethe 42 Schiller ....8<---- (no linefeed at the end) bar.txt: ....8<---- lalala|*tanteratei ....8<---- (no linefeed at the end) blob.txt ....8<---- lalala Goethe 42 Schiller tanteratei ....8<---- (no linefeed at the end)
- Translate()
- env.Translate()
- This pseudo-builder belongs to &t-link-gettext;
toolset. The builder extracts internationalized messages from source
files, updates POT template (if necessary) and then updates
PO translations (if necessary). If $POAUTOINIT is set,
missing PO files will be automatically created (i.e. without
translator person intervention). The variables $LINGUAS_FILE and
$POTDOMAIN are taken into acount too. All other construction
variables used by POTUpdate(), and POUpdate() work here too.
# SConscript in 'po/' directory env = Environment( tools = ["default", "gettext"] ) env['POAUTOINIT'] = 1 env.Translate(['en','pl'], ['../a.cpp','../b.cpp'])
- Example2. If you wish, you may also stick to conventional style known from <productname>autotools</productname>, i.e. using POTFILES.in and LINGUAS files
# LINGUAS en pl #end
# POTFILES.in a.cpp b.cpp # end
# SConscript env = Environment( tools = ["default", "gettext"] ) env['POAUTOINIT'] = 1 env['XGETTEXTPATH'] = ['../'] env.Translate(LINGUAS_FILE = 1, XGETTEXTFROM = 'POTFILES.in')
- The last approach is perhaps the recommended one. It allows
easily split internationalization/localization onto separate SCons
scripts, where a script in source tree is responsible for translations
(from sources to PO files) and script(s) under variant directories
are responsible for compilation of PO to MO files to and for
installation of MO files. The "gluing factor"
synchronizing these two scripts is then the content of LINGUAS
file. Note, that the updated POT and PO files are usually
going to be committed back to the repository, so they must be updated
within the source directory (and not in variant directories).
Additionally, the file listing of po/ directory contains
LINGUAS file, so the source tree looks familiar to translators, and
they may work with the project in their usual way.
project/ + SConstruct + build/ + src/ + po/ + SConscript + SConscript.i18n + POTFILES.in + LINGUAS
# SConstruct env = Environment( tools = ["default", "gettext"] ) VariantDir('build', 'src', duplicate = 0) env['POAUTOINIT'] = 1 SConscript('src/po/SConscript.i18n', exports = 'env') SConscript('build/po/SConscript', exports = 'env')
# src/po/SConscript.i18n Import('env') env.Translate(LINGUAS_FILE=1, XGETTEXTFROM='POTFILES.in', XGETTEXTPATH=['../'])
# src/po/SConscript Import('env') env.MOFiles(LINGUAS_FILE = 1)
- TypeLibrary()
- env.TypeLibrary()
- Builds a Windows type library (.tlb) file from an
input IDL file ( .idl). In addition, it will build the associated
inteface stub and proxy source files, naming them according to the base
name of the .idl file. For example,
env.TypeLibrary(source="foo.idl")
- Will create foo.tlb, foo.h, foo_i.c,
foo_p.c and foo_data.c files.
- Uic()
- env.Uic()
- Builds a header file, an implementation file and a moc file
from an ui file. and returns the corresponding nodes in the above order.
This builder is only available after using the tool 'qt'. Note: you can
specify .ui files directly as source files to the Program(),
Library() and SharedLibrary() builders without using this
builder. Using this builder lets you override the standard naming
conventions (be careful: prefixes are always prepended to names of built
files; if you don't want prefixes, you may set them to ``). See the
$QTDIR variable for more information. Example:
env.Uic('foo.ui') # -> ['foo.h', 'uic_foo.cc', 'moc_foo.cc'] env.Uic(target = Split('include/foo.h gen/uicfoo.cc gen/mocfoo.cc'), source = 'foo.ui') # -> ['include/foo.h', 'gen/uicfoo.cc', 'gen/mocfoo.cc']
- Zip()
- env.Zip()
- Builds a zip archive of the specified files and/or
directories. Unlike most builder methods, the Zip() builder method
may be called multiple times for a given target; each additional call adds
to the list of entries that will be built into the archive. Any source
directories will be scanned for changes to any on-disk files, regardless
of whether or not scons knows about them from other Builder or
function calls.
env.Zip('src.zip', 'src') # Create the stuff.zip file. env.Zip('stuff', ['subdir1', 'subdir2']) # Also add "another" to the stuff.tar file. env.Zip('stuff', 'another')
Methods and Functions to Do Things¶
In addition to Builder methods, scons provides a number of other construction environment methods and global functions to manipulate the build configuration.Function(arguments)
env.Function(arguments)
from SCons.Script import *
env = Environment(FOO = 'foo') Default('$FOO') env.Default('$FOO')
- Action(action, [cmd/str/fun, [var, ...]] [option=value, ...])
- env.Action(action, [cmd/str/fun, [var, ...]] [option=value, ...])
- Creates an Action object for the specified action.
See the section "Action Objects," below, for a complete
explanation of the arguments and behavior.
- AddMethod(object, function, [name])
- env.AddMethod(function, [name])
- When called with the AddMethod() form, adds the
specified function to the specified object as the specified
method name. When called with the env.AddMethod() form, adds
the specified function to the construction environment env
as the specified method name. In both cases, if name is
omitted or None, the name of the specified function itself
is used for the method name.
# Note that the first argument to the function to # be attached as a method must be the object through # which the method will be called; the Python # convention is to call it 'self'. def my_method(self, arg): print "my_method() got", arg # Use the global AddMethod() function to add a method # to the Environment class. This AddMethod(Environment, my_method) env = Environment() env.my_method('arg') # Add the function as a method, using the function # name for the method call. env = Environment() env.AddMethod(my_method, 'other_method_name') env.other_method_name('another arg')
- AddOption(arguments)
- This function adds a new command-line option to be
recognized. The specified arguments are the same as supported by
the standard Python optparse.add_option() method (with a few
additional capabilities noted below); see the documentation for
optparse for a thorough discussion of its option-processing
capabities.
AddOption('--prefix', dest='prefix', nargs=1, type='string', action='store', metavar='DIR', help='installation prefix') env = Environment(PREFIX = GetOption('prefix'))
- AddPostAction(target, action)
- env.AddPostAction(target, action)
- Arranges for the specified action to be performed
after the specified target has been built. The specified action(s)
may be an Action object, or anything that can be converted into an Action
object (see below).
- AddPreAction(target, action)
- env.AddPreAction(target, action)
- Arranges for the specified action to be performed
before the specified target is built. The specified action(s) may
be an Action object, or anything that can be converted into an Action
object (see below).
foo = Program('foo.c') AddPreAction(foo, 'pre_action')
- The specified pre_action would be executed before
scons calls the link command that actually generates the executable
program binary foo, not before compiling the foo.c file into
an object file.
- Alias(alias, [targets, [action]])
- env.Alias(alias, [targets, [action]])
- Creates one or more phony targets that expand to one or
more other targets. An optional action (command) or list of actions
can be specified that will be executed whenever the any of the alias
targets are out-of-date. Returns the Node object representing the alias,
which exists outside of any file system. This Node object, or the alias
name, may be used as a dependency of any other target, including another
alias. Alias() can be called multiple times for the same alias to
add additional targets to the alias, or additional actions to the list for
this alias.
Alias('install') Alias('install', '/usr/bin') Alias(['install', 'install-lib'], '/usr/local/lib') env.Alias('install', ['/usr/local/bin', '/usr/local/lib']) env.Alias('install', ['/usr/local/man']) env.Alias('update', ['file1', 'file2'], "update_database $SOURCES")
- AllowSubstExceptions([exception, ...])
- Specifies the exceptions that will be allowed when
expanding construction variables. By default, any construction variable
expansions that generate a NameError or IndexError exception
will expand to a '' (a null string) and not cause scons to fail.
All exceptions not in the specified list will generate an error message
and terminate processing.
# Requires that all construction variable names exist. # (You may wish to do this if you want to enforce strictly # that all construction variables must be defined before use.) AllowSubstExceptions() # Also allow a string containing a zero-division expansion # like '${1 / 0}' to evalute to ''. AllowSubstExceptions(IndexError, NameError, ZeroDivisionError)
- AlwaysBuild(target, ...)
- env.AlwaysBuild(target, ...)
- Marks each given target so that it is always assumed
to be out of date, and will always be rebuilt if needed. Note, however,
that AlwaysBuild() does not add its target(s) to the default target
list, so the targets will only be built if they are specified on the
command line, or are a dependent of a target specified on the command
line--but they will always be built if so specified. Multiple
targets can be passed in to a single call to AlwaysBuild().
- env.Append(key=val, [...])
- Appends the specified keyword arguments to the end of
construction variables in the environment. If the Environment does not
have the specified construction variable, it is simply added to the
environment. If the values of the construction variable and the keyword
argument are the same type, then the two values will be simply added
together. Otherwise, the construction variable and the value of the
keyword argument are both coerced to lists, and the lists are added
together. (See also the Prepend method, below.)
env.Append(CCFLAGS = ' -g', FOO = ['foo.yyy'])
- env.AppendENVPath(name, newpath, [envname, sep, delete_existing])
- This appends new path elements to the given path in the
specified external environment (ENV by default). This will only add
any particular path once (leaving the last one it encounters and ignoring
the rest, to preserve path order), and to help assure this, will normalize
all paths (using os.path.normpath and os.path.normcase).
This can also handle the case where the given old path variable is a list
instead of a string, in which case a list will be returned instead of a
string.
print 'before:',env['ENV']['INCLUDE'] include_path = '/foo/bar:/foo' env.AppendENVPath('INCLUDE', include_path) print 'after:',env['ENV']['INCLUDE'] yields: before: /foo:/biz after: /biz:/foo/bar:/foo
- env.AppendUnique(key=val, [...], delete_existing=0)
- Appends the specified keyword arguments to the end of
construction variables in the environment. If the Environment does not
have the specified construction variable, it is simply added to the
environment. If the construction variable being appended to is a list,
then any value(s) that already exist in the construction variable will
not be added again to the list. However, if delete_existing is 1,
existing matching values are removed first, so existing values in the arg
list move to the end of the list.
env.AppendUnique(CCFLAGS = '-g', FOO = ['foo.yyy'])
- env.BitKeeper()
- A factory function that returns a Builder object to be used
to fetch source files using BitKeeper. The returned Builder is intended to
be passed to the SourceCode() function.
env.SourceCode('.', env.BitKeeper())
- BuildDir(build_dir, src_dir, [duplicate])
- env.BuildDir(build_dir, src_dir, [duplicate])
- Deprecated synonyms for VariantDir() and
env.VariantDir(). The build_dir argument becomes the
variant_dir argument of VariantDir() or
env.VariantDir().
- Builder(action, [arguments])
- env.Builder(action, [arguments])
- Creates a Builder object for the specified action.
See the section "Builder Objects," below, for a complete
explanation of the arguments and behavior.
- CacheDir(cache_dir)
- env.CacheDir(cache_dir)
- Specifies that scons will maintain a cache of
derived files in cache_dir. The derived files in the cache will be
shared among all the builds using the same CacheDir() call.
Specifying a cache_dir of None disables derived file
caching.
- Clean(targets, files_or_dirs)
- env.Clean(targets, files_or_dirs)
- This specifies a list of files or directories which should
be removed whenever the targets are specified with the -c command
line option. The specified targets may be a list or an individual target.
Multiple calls to Clean() are legal, and create new targets or add
files and directories to the clean list for the specified targets.
Clean('foo', ['bar', 'baz']) Clean('dist', env.Program('hello', 'hello.c')) Clean(['foo', 'bar'], 'something_else_to_clean')
- In this example, installing the project creates a subdirectory for the documentation. This statement causes the subdirectory to be removed if the project is deinstalled.
Clean(docdir, os.path.join(docdir, projectname))
- env.Clone([key=val, ...])
- Returns a separate copy of a construction environment. If
there are any keyword arguments specified, they are added to the returned
copy, overwriting any existing values for the keywords.
env2 = env.Clone() env3 = env.Clone(CCFLAGS = '-g')
- Additionally, a list of tools and a toolpath may be
specified, as in the Environment constructor:
def MyTool(env): env['FOO'] = 'bar' env4 = env.Clone(tools = ['msvc', MyTool])
- The parse_flags keyword argument is also recognized:
# create an environment for compiling programs that use wxWidgets wx_env = env.Clone(parse_flags = '!wx-config --cflags --cxxflags')
- Command(target, source, action, [key=val, ...])
- env.Command(target, source, action, [key=val, ...])
- Executes a specific action (or list of actions) to build a
target file or files. This is more convenient than defining a separate
Builder object for a single special-case build.
env.Command('foo.out', 'foo.in', "$FOO_BUILD < $SOURCES > $TARGET") env.Command('bar.out', 'bar.in', ["rm -f $TARGET", "$BAR_BUILD < $SOURCES > $TARGET"], ENV = {'PATH' : '/usr/local/bin/'}) def rename(env, target, source): import os os.rename('.tmp', str(target[0])) env.Command('baz.out', 'baz.in', ["$BAZ_BUILD < $SOURCES > .tmp", rename ])
- Note that the Command() function will usually
assume, by default, that the specified targets and/or sources are Files,
if no other part of the configuration identifies what type of entry it is.
If necessary, you can explicitly specify that targets or source nodes
should be treated as directoriese by using the Dir() or
env.Dir() functions.
env.Command('ddd.list', Dir('ddd'), 'ls -l $SOURCE > $TARGET') env['DISTDIR'] = 'destination/directory' env.Command(env.Dir('$DISTDIR')), None, make_distdir)
- (Also note that SCons will usually automatically create any
directory necessary to hold a target file, so you normally don't need to
create directories by hand.)
- Configure(env, [custom_tests, conf_dir, log_file, config_h])
- env.Configure([custom_tests, conf_dir, log_file, config_h])
- Creates a Configure object for integrated functionality
similar to GNU autoconf. See the section "Configure Contexts,"
below, for a complete explanation of the arguments and behavior.
- env.Copy([key=val, ...])
- A now-deprecated synonym for env.Clone().
- env.CVS(repository, module)
- A factory function that returns a Builder object to be used
to fetch source files from the specified CVS repository. The
returned Builder is intended to be passed to the SourceCode()
function.
# Will fetch foo/bar/src.c # from /usr/local/CVSROOT/foo/bar/src.c. env.SourceCode('.', env.CVS('/usr/local/CVSROOT')) # Will fetch bar/src.c # from /usr/local/CVSROOT/foo/bar/src.c. env.SourceCode('.', env.CVS('/usr/local/CVSROOT', 'foo')) # Will fetch src.c # from /usr/local/CVSROOT/foo/bar/src.c. env.SourceCode('.', env.CVS('/usr/local/CVSROOT', 'foo/bar'))
- Decider(function)
- env.Decider(function)
- Specifies that all up-to-date decisions for targets built
through this construction environment will be handled by the specified
function. The function can be one of the following strings
that specify the type of decision function to be performed:
- timestamp-newer
- Specifies that a target shall be considered out of date and rebuilt if the dependency's timestamp is newer than the target file's timestamp. This is the behavior of the classic Make utility, and make can be used a synonym for timestamp-newer.
- timestamp-match
- Specifies that a target shall be considered out of date and rebuilt if the dependency's timestamp is different than the timestamp recorded the last time the target was built. This provides behavior very similar to the classic Make utility (in particular, files are not opened up so that their contents can be checksummed) except that the target will also be rebuilt if a dependency file has been restored to a version with an earlier timestamp, such as can happen when restoring files from backup archives.
- MD5
- Specifies that a target shall be considered out of date and rebuilt if the dependency's content has changed sine the last time the target was built, as determined be performing an MD5 checksum on the dependency's contents and comparing it to the checksum recorded the last time the target was built. content can be used as a synonym for MD5.
- MD5-timestamp
- Specifies that a target shall be considered out of date and rebuilt if the dependency's content has changed sine the last time the target was built, except that dependencies with a timestamp that matches the last time the target was rebuilt will be assumed to be up-to-date and not rebuilt. This provides behavior very similar to the MD5 behavior of always checksumming file contents, with an optimization of not checking the contents of files whose timestamps haven't changed. The drawback is that SCons will not detect if a file's content has changed but its timestamp is the same, as might happen in an automated script that runs a build, updates a file, and runs the build again, all within a single second.
# Use exact timestamp matches by default. Decider('timestamp-match') # Use MD5 content signatures for any targets built # with the attached construction environment. env.Decider('content')
- In addition to the above already-available functions, the
function argument may be an actual Python function that takes the
following three arguments:
- dependency
- The Node (file) which should cause the target to be rebuilt if it has "changed" since the last tme target was built.
- target
- The Node (file) being built. In the normal case, this is what should get rebuilt if the dependency has "changed."
- prev_ni
- Stored information about the state of the dependency the last time the target was built. This can be consulted to match various file characteristics such as the timestamp, size, or content signature.
def my_decider(dependency, target, prev_ni): return not os.path.exists(str(target)) env.Decider(my_decider)
- Default(targets)
- env.Default(targets)
- This specifies a list of default targets, which will be
built by scons if no explicit targets are given on the command
line. Multiple calls to Default() are legal, and add to the list of
default targets.
Default('foo', 'bar', 'baz') env.Default(['a', 'b', 'c']) hello = env.Program('hello', 'hello.c') env.Default(hello)
- An argument to Default() of None will clear
all default targets. Later calls to Default() will add to the (now
empty) default-target list like normal.
- DefaultEnvironment([args])
- Creates and returns a default construction environment
object. This construction environment is used internally by SCons in order
to execute many of the global functions in this list, and to fetch source
files transparently from source code management systems.
- Depends(target, dependency)
- env.Depends(target, dependency)
- Specifies an explicit dependency; the target will be
rebuilt whenever the dependency has changed. Both the specified
target and dependency can be a string (usually the path name
of a file or directory) or Node objects, or a list of strings or Node
objects (such as returned by a Builder call). This should only be
necessary for cases where the dependency is not caught by a Scanner for
the file.
env.Depends('foo', 'other-input-file-for-foo') mylib = env.Library('mylib.c') installed_lib = env.Install('lib', mylib) bar = env.Program('bar.c') # Arrange for the library to be copied into the installation # directory before trying to build the "bar" program. # (Note that this is for example only. A "real" library # dependency would normally be configured through the $LIBS # and $LIBPATH variables, not using an env.Depends() call.) env.Depends(bar, installed_lib)
- env.Dictionary([vars])
- Returns a dictionary object containing copies of all of the
construction variables in the environment. If there are any variable names
specified, only the specified construction variables are returned in the
dictionary.
dict = env.Dictionary() cc_dict = env.Dictionary('CC', 'CCFLAGS', 'CCCOM')
- Dir(name, [directory])
- env.Dir(name, [directory])
- This returns a Directory Node, an object that represents
the specified directory name. name can be a relative or
absolute path. directory is an optional directory that will be used
as the parent directory. If no directory is specified, the current
script's directory is used as the parent.
- env.Dump([key])
- Returns a pretty printable representation of the
environment. key, if not None, should be a string containing
the name of the variable of interest.
env=Environment() print env.Dump('CCCOM')
- will print:
´$CC -c -o $TARGET $CCFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS $SOURCES'
- While this SConstruct:
env=Environment() print env.Dump()
- will print:
{ 'AR': 'ar', 'ARCOM': '$AR $ARFLAGS $TARGET $SOURCES\n$RANLIB $RANLIBFLAGS $TARGET', 'ARFLAGS': ['r'], 'AS': 'as', 'ASCOM': '$AS $ASFLAGS -o $TARGET $SOURCES', 'ASFLAGS': [], ...
- EnsurePythonVersion(major, minor)
- env.EnsurePythonVersion(major, minor)
- Ensure that the Python version is at least
major.minor. This function will
print out an error message and exit SCons with a non-zero exit code if
the actual Python version is not late enough.
EnsurePythonVersion(2,2)
- EnsureSConsVersion(major, minor, [revision])
- env.EnsureSConsVersion(major, minor, [revision])
- Ensure that the SCons version is at least
major.minor, or major.minor.revision. if revision is
specified. This function will print out an error message and exit SCons
with a non-zero exit code if the actual SCons version is not late enough.
EnsureSConsVersion(0,14) EnsureSConsVersion(0,96,90)
- Environment([key=value, ...])
- env.Environment([key=value, ...])
- Return a new construction environment initialized with the
specified key=value pairs.
- Execute(action, [strfunction, varlist])
- env.Execute(action, [strfunction, varlist])
- Executes an Action object. The specified action may
be an Action object (see the section "Action Objects," below,
for a complete explanation of the arguments and behavior), or it may be a
command-line string, list of commands, or executable Python function, each
of which will be converted into an Action object and then executed. The
exit value of the command or return value of the Python function will be
returned.
Execute(Copy('file.out', 'file.in')) if Execute("mkdir sub/dir/ectory"): # The mkdir failed, don't try to build. Exit(1)
- Exit([value])
- env.Exit([value])
- This tells scons to exit immediately with the
specified value. A default exit value of 0 (zero) is used if
no value is specified.
- Export(vars)
- env.Export(vars)
- This tells scons to export a list of variables from
the current SConscript file to all other SConscript files. The exported
variables are kept in a global collection, so subsequent calls to
Export() will over-write previous exports that have the same name.
Multiple variable names can be passed to Export() as separate
arguments or as a list. Keyword arguments can be used to provide names and
their values. A dictionary can be used to map variables to a different
name when exported. Both local variables and global variables can be
exported.
env = Environment() # Make env available for all SConscript files to Import(). Export("env") package = 'my_name' # Make env and package available for all SConscript files:. Export("env", "package") # Make env and package available for all SConscript files: Export(["env", "package"]) # Make env available using the name debug: Export(debug = env) # Make env available using the name debug: Export({"debug":env})
- Note that the SConscript() function supports an
exports argument that makes it easier to to export a variable or
set of variables to a single SConscript file. See the description of the
SConscript() function, below.
- File(name, [directory])
- env.File(name, [directory])
- This returns a File Node, an object that represents the
specified file name. name can be a relative or absolute
path. directory is an optional directory that will be used as the
parent directory.
- FindFile(file, dirs)
- env.FindFile(file, dirs)
- Search for file in the path specified by
dirs. dirs may be a list of directory names or a single
directory name. In addition to searching for files that exist in the
filesystem, this function also searches for derived files that have not
yet been built.
foo = env.FindFile('foo', ['dir1', 'dir2'])
- FindInstalledFiles()
- env.FindInstalledFiles()
- Returns the list of targets set up by the Install()
or InstallAs() builders.
Install( '/bin', [ 'executable_a', 'executable_b' ] ) # will return the file node list # [ '/bin/executable_a', '/bin/executable_b' ] FindInstalledFiles() Install( '/lib', [ 'some_library' ] ) # will return the file node list # [ '/bin/executable_a', '/bin/executable_b', '/lib/some_library' ] FindInstalledFiles()
- FindPathDirs(variable)
- Returns a function (actually a callable Python object)
intended to be used as the path_function of a Scanner object. The
returned object will look up the specified variable in a
construction environment and treat the construction variable's value as a
list of directory paths that should be searched (like $CPPPATH,
$LIBPATH, etc.).
def my_scan(node, env, path, arg): # Code to scan file contents goes here... return include_files scanner = Scanner(name = 'myscanner', function = my_scan, path_function = FindPathDirs('MYPATH'))
- FindSourceFiles(node='"."')
- env.FindSourceFiles(node='"."')
- Returns the list of nodes which serve as the source of the
built files. It does so by inspecting the dependency tree starting at the
optional argument node which defaults to the '"."'-node.
It will then return all leaves of node. These are all children
which have no further children.
Program( 'src/main_a.c' ) Program( 'src/main_b.c' ) Program( 'main_c.c' ) # returns ['main_c.c', 'src/main_a.c', 'SConstruct', 'src/main_b.c'] FindSourceFiles() # returns ['src/main_b.c', 'src/main_a.c' ] FindSourceFiles( 'src' )
- As you can see build support files (SConstruct in the above
example) will also be returned by this function.
- Flatten(sequence)
- env.Flatten(sequence)
- Takes a sequence (that is, a Python list or tuple) that may
contain nested sequences and returns a flattened list containing all of
the individual elements in any sequence. This can be helpful for
collecting the lists returned by calls to Builders; other Builders will
automatically flatten lists specified as input, but direct Python
manipulation of these lists does not.
foo = Object('foo.c') bar = Object('bar.c') # Because `foo' and `bar' are lists returned by the Object() Builder, # `objects' will be a list containing nested lists: objects = ['f1.o', foo, 'f2.o', bar, 'f3.o'] # Passing such a list to another Builder is all right because # the Builder will flatten the list automatically: Program(source = objects) # If you need to manipulate the list directly using Python, you need to # call Flatten() yourself, or otherwise handle nested lists: for object in Flatten(objects): print str(object)
- GetBuildFailures()
- Returns a list of exceptions for the actions that failed
while attempting to build targets. Each element in the returned list is a
BuildError object with the following attributes that record various
aspects of the build failure:
import atexit def print_build_failures(): from SCons.Script import GetBuildFailures for bf in GetBuildFailures(): print "%s failed: %s" % (bf.node, bf.errstr) atexit.register(print_build_failures)
- GetBuildPath(file, [...])
- env.GetBuildPath(file, [...])
- Returns the scons path name (or names) for the
specified file (or files). The specified file or files may
be scons Nodes or strings representing path names.
- GetLaunchDir()
- env.GetLaunchDir()
- Returns the absolute path name of the directory from which
scons was initially invoked. This can be useful when using the
-u, -U or -D options, which internally change to the
directory in which the SConstruct file is found.
- GetOption(name)
- env.GetOption(name)
- This function provides a way to query the value of SCons
options set on scons command line (or set using the SetOption()
function). The options supported are:
- cache_debug
- which corresponds to --cache-debug;
- cache_disable
- which corresponds to --cache-disable;
- cache_force
- which corresponds to --cache-force;
- cache_show
- which corresponds to --cache-show;
- clean
- which corresponds to -c, --clean and --remove;
- config
- which corresponds to --config;
- directory
- which corresponds to -C and --directory;
- diskcheck
- which corresponds to --diskcheck
- duplicate
- which corresponds to --duplicate;
- file
- which corresponds to -f, --file, --makefile and --sconstruct;
- help
- which corresponds to -h and --help;
- ignore_errors
- which corresponds to --ignore-errors;
- implicit_cache
- which corresponds to --implicit-cache;
- implicit_deps_changed
- which corresponds to --implicit-deps-changed;
- implicit_deps_unchanged
- which corresponds to --implicit-deps-unchanged;
- interactive
- which corresponds to --interact and --interactive;
- keep_going
- which corresponds to -k and --keep-going;
- max_drift
- which corresponds to --max-drift;
- no_exec
- which corresponds to -n, --no-exec, --just-print, --dry-run and --recon;
- no_site_dir
- which corresponds to --no-site-dir;
- num_jobs
- which corresponds to -j and --jobs;
- profile_file
- which corresponds to --profile;
- question
- which corresponds to -q and --question;
- random
- which corresponds to --random;
- repository
- which corresponds to -Y, --repository and --srcdir;
- silent
- which corresponds to -s, --silent and --quiet;
- site_dir
- which corresponds to --site-dir;
- stack_size
- which corresponds to --stack-size;
- taskmastertrace_file
- which corresponds to --taskmastertrace; and
- warn
- which corresponds to --warn and --warning.
- Glob(pattern, [ondisk, source, strings])
- env.Glob(pattern, [ondisk, source, strings])
- Returns Nodes (or strings) that match the specified
pattern, relative to the directory of the current SConscript
file. The env.Glob() form performs string substition on
pattern and returns whatever matches the resulting expanded
pattern.
* matches everything ? matches any single character [seq] matches any character in seq [!seq] matches any char not in seq
- If the first character of a filename is a dot, it must be
matched explicitly. Character matches do not span directory
separators.
Program('foo', Glob('*.c')) Zip('/tmp/everything', Glob('.??*') + Glob('*'))
- Help(text)
- env.Help(text)
- This specifies help text to be printed if the -h
argument is given to scons. If Help() is called multiple
times, the text is appended together in the order that Help() is
called.
- Ignore(target, dependency)
- env.Ignore(target, dependency)
- The specified dependency file(s) will be ignored when
deciding if the target file(s) need to be rebuilt.
env.Ignore('foo', 'foo.c') env.Ignore('bar', ['bar1.h', 'bar2.h']) env.Ignore('.','foobar.obj') env.Ignore('bar','bar/foobar.obj')
- Import(vars)
- env.Import(vars)
- This tells scons to import a list of variables into
the current SConscript file. This will import variables that were exported
with Export() or in the exports argument to
SConscript(). Variables exported by SConscript() have
precedence. Multiple variable names can be passed to Import() as
separate arguments or as a list. The variable "*" can be used to
import all variables.
Import("env") Import("env", "variable") Import(["env", "variable"]) Import("*")
- Literal(string)
- env.Literal(string)
- The specified string will be preserved as-is and not
have construction variables expanded.
- Local(targets)
- env.Local(targets)
- The specified targets will have copies made in the
local tree, even if an already up-to-date copy exists in a repository.
Returns a list of the target Node or Nodes.
- env.MergeFlags(arg, [unique])
- Merges the specified arg values to the construction
environment's construction variables. If the arg argument is not a
dictionary, it is converted to one by calling env.ParseFlags() on
the argument before the values are merged. Note that arg must be a
single value, so multiple strings must be passed in as a list, not as
separate arguments to env.MergeFlags().
# Add an optimization flag to $CCFLAGS. env.MergeFlags('-O3') # Combine the flags returned from running pkg-config with an optimization # flag and merge the result into the construction variables. env.MergeFlags(['!pkg-config gtk+-2.0 --cflags', '-O3']) # Combine an optimization flag with the flags returned from running pkg-config # twice and merge the result into the construction variables. env.MergeFlags(['-O3', '!pkg-config gtk+-2.0 --cflags --libs', '!pkg-config libpng12 --cflags --libs'])
- NoCache(target, ...)
- env.NoCache(target, ...)
- Specifies a list of files which should not be cached
whenever the CacheDir() method has been activated. The specified
targets may be a list or an individual target.
NoCache('foo.elf') NoCache(env.Program('hello', 'hello.c'))
- NoClean(target, ...)
- env.NoClean(target, ...)
- Specifies a list of files or directories which should
not be removed whenever the targets (or their dependencies) are
specified with the -c command line option. The specified targets
may be a list or an individual target. Multiple calls to NoClean()
are legal, and prevent each specified target from being removed by calls
to the -c option.
NoClean('foo.elf') NoClean(env.Program('hello', 'hello.c'))
- env.ParseConfig(command, [function, unique])
- Calls the specified function to modify the
environment as specified by the output of command. The default
function is env.MergeFlags(), which expects the output of a
typical *-config command (for example, gtk-config) and adds
the options to the appropriate construction variables. By default,
duplicate values are not added to any construction variables; you can
specify unique=0 to allow duplicate values to be added.
- ParseDepends(filename, [must_exist, only_one])
- env.ParseDepends(filename, [must_exist, only_one])
- Parses the contents of the specified filename as a
list of dependencies in the style of Make or mkdep, and
explicitly establishes all of the listed dependencies.
- env.ParseFlags(flags, ...)
- Parses one or more strings containing typical command-line
flags for GCC tool chains and returns a dictionary with the flag values
separated into the appropriate SCons construction variables. This is
intended as a companion to the env.MergeFlags() method, but allows
for the values in the returned dictionary to be modified, if necessary,
before merging them into the construction environment. (Note that
env.MergeFlags() will call this method if its argument is not a
dictionary, so it is usually not necessary to call env.ParseFlags()
directly unless you want to manipulate the values.)
-arch CCFLAGS, LINKFLAGS -D CPPDEFINES -framework FRAMEWORKS -frameworkdir= FRAMEWORKPATH -include CCFLAGS -isysroot CCFLAGS, LINKFLAGS -I CPPPATH -l LIBS -L LIBPATH -mno-cygwin CCFLAGS, LINKFLAGS -mwindows LINKFLAGS -pthread CCFLAGS, LINKFLAGS -std= CFLAGS -Wa, ASFLAGS, CCFLAGS -Wl,-rpath= RPATH -Wl,-R, RPATH -Wl,-R RPATH -Wl, LINKFLAGS -Wp, CPPFLAGS - CCFLAGS + CCFLAGS, LINKFLAGS
- Any other strings not associated with options are assumed
to be the names of libraries and added to the $LIBS construction
variable.
dict = env.ParseFlags('-O2 -Dfoo -Dbar=1') dict = env.ParseFlags('-O2', '-Dfoo', '-Dbar=1') dict = env.ParseFlags(['-O2', '-Dfoo -Dbar=1']) dict = env.ParseFlags('-O2', '!echo -Dfoo -Dbar=1')
- env.Perforce()
- A factory function that returns a Builder object to be used
to fetch source files from the Perforce source code management system. The
returned Builder is intended to be passed to the SourceCode()
function.
env.SourceCode('.', env.Perforce())
- Perforce uses a number of external environment variables
for its operation. Consequently, this function adds the following
variables from the user's external environment to the construction
environment's ENV dictionary: P4CHARSET, P4CLIENT, P4LANGUAGE, P4PASSWD,
P4PORT, P4USER, SystemRoot, USER, and USERNAME.
- Platform(string)
- The Platform() form returns a callable object that
can be used to initialize a construction environment using the platform
keyword of the Environment() function.
env = Environment(platform = Platform('win32'))
- The env.Platform() form applies the callable object
for the specified platform string to the environment through which
the method was called.
env.Platform('posix')
- Note that the win32 platform adds the
SystemDrive and SystemRoot variables from the user's
external environment to the construction environment's $ENV
dictionary. This is so that any executed commands that use sockets to
connect with other systems (such as fetching source files from external
CVS repository specifications like
:pserver:anonymous@cvs.sourceforge.net:/cvsroot/scons) will work on
Windows systems.
- Precious(target, ...)
- env.Precious(target, ...)
- Marks each given target as precious so it is not
deleted before it is rebuilt. Normally scons deletes a target
before building it. Multiple targets can be passed in to a single call to
Precious().
- env.Prepend(key=val, [...])
- Appends the specified keyword arguments to the beginning of
construction variables in the environment. If the Environment does not
have the specified construction variable, it is simply added to the
environment. If the values of the construction variable and the keyword
argument are the same type, then the two values will be simply added
together. Otherwise, the construction variable and the value of the
keyword argument are both coerced to lists, and the lists are added
together. (See also the Append method, above.)
env.Prepend(CCFLAGS = '-g ', FOO = ['foo.yyy'])
- env.PrependENVPath(name, newpath, [envname, sep, delete_existing])
- This appends new path elements to the given path in the
specified external environment ($ENV by default). This will only
add any particular path once (leaving the first one it encounters and
ignoring the rest, to preserve path order), and to help assure this, will
normalize all paths (using os.path.normpath and
os.path.normcase). This can also handle the case where the given
old path variable is a list instead of a string, in which case a list will
be returned instead of a string.
print 'before:',env['ENV']['INCLUDE'] include_path = '/foo/bar:/foo' env.PrependENVPath('INCLUDE', include_path) print 'after:',env['ENV']['INCLUDE']
- The above example will print:
before: /biz:/foo after: /foo/bar:/foo:/biz
- env.PrependUnique(key=val, delete_existing=0, [...])
- Appends the specified keyword arguments to the beginning of
construction variables in the environment. If the Environment does not
have the specified construction variable, it is simply added to the
environment. If the construction variable being appended to is a list,
then any value(s) that already exist in the construction variable will
not be added again to the list. However, if delete_existing is 1,
existing matching values are removed first, so existing values in the arg
list move to the front of the list.
env.PrependUnique(CCFLAGS = '-g', FOO = ['foo.yyy'])
- Progress(callable, [interval])
- Progress(string, [interval, file, overwrite])
- Progress(list_of_strings, [interval, file, overwrite])
- Allows SCons to show progress made during the build by
displaying a string or calling a function while evaluating Nodes (e.g.
files).
def my_progress_function(node, *args, **kw): print 'Evaluating node %s!' % node Progress(my_progress_function, interval=10)
- A more complicated example of a custom progress display
object that prints a string containing a count every 100 evaluated Nodes.
Note the use of r (a carriage return) at the end so that the string
will overwrite itself on a display:
import sys class ProgressCounter(object): count = 0 def __call__(self, node, *args, **kw): self.count += 100 sys.stderr.write('Evaluated %s nodes\r' % self.count) Progress(ProgressCounter(), interval=100)
- If the first argument Progress() is a string, the
string will be displayed every interval evaluated Nodes. The
default is to print the string on standard output; an alternate output
stream may be specified with the file= argument. The following will
print a series of dots on the error output, one dot for every 100
evaluated Nodes:
import sys Progress('.', interval=100, file=sys.stderr)
- If the string contains the verbatim substring
$TARGET, it will be replaced with the Node. Note that, for
performance reasons, this is not a regular SCons variable
substition, so you can not use other variables or use curly braces. The
following example will print the name of every evaluated Node, using a
r (carriage return) to cause each line to overwritten by the next
line, and the overwrite= keyword argument to make sure the
previously-printed file name is overwritten with blank spaces:
import sys Progress('$TARGET\r', overwrite=True)
- If the first argument to Progress() is a list of
strings, then each string in the list will be displayed in rotating
fashion every interval evaluated Nodes. This can be used to
implement a "spinner" on the user's screen as follows:
Progress(['-\r', '\\\r', '|\r', '/\r'], interval=5)
- env.RCS()
- A factory function that returns a Builder object to be used
to fetch source files from RCS. The returned Builder is intended to be
passed to the SourceCode() function:
env.SourceCode('.', env.RCS())
- Note that scons will fetch source files from RCS
subdirectories automatically, so configuring RCS as demonstrated in the
above example should only be necessary if you are fetching from RCS,v
files in the same directory as the source files, or if you need to
explicitly specify RCS for a specific subdirectory.
- env.Replace(key=val, [...])
- Replaces construction variables in the Environment with the
specified keyword arguments.
env.Replace(CCFLAGS = '-g', FOO = 'foo.xxx')
- Repository(directory)
- env.Repository(directory)
- Specifies that directory is a repository to be
searched for files. Multiple calls to Repository() are legal, and
each one adds to the list of repositories that will be searched.
- Requires(target, prerequisite)
- env.Requires(target, prerequisite)
- Specifies an order-only relationship between the specified
target file(s) and the specified prerequisite file(s). The prerequisite
file(s) will be (re)built, if necessary, before the target file(s),
but the target file(s) do not actually depend on the prerequisites and
will not be rebuilt simply because the prerequisite file(s) change.
env.Requires('foo', 'file-that-must-be-built-before-foo')
- Return([vars..., stop=])
- By default, this stops processing the current SConscript
file and returns to the calling SConscript file the values of the
variables named in the vars string arguments. Multiple strings
contaning variable names may be passed to Return(). Any strings
that contain white space
# Returns without returning a value. Return() # Returns the value of the 'foo' Python variable. Return("foo") # Returns the values of the Python variables 'foo' and 'bar'. Return("foo", "bar") # Returns the values of Python variables 'val1' and 'val2'. Return('val1 val2')
- Scanner(function, [argument, keys, path_function, node_class, node_factory, scan_check, recursive])
- env.Scanner(function, [argument, keys, path_function, node_class, node_factory, scan_check, recursive])
- Creates a Scanner object for the specified function.
See the section "Scanner Objects," below, for a complete
explanation of the arguments and behavior.
- env.SCCS()
- A factory function that returns a Builder object to be used
to fetch source files from SCCS. The returned Builder is intended to be
passed to the SourceCode() function.
env.SourceCode('.', env.SCCS())
- Note that scons will fetch source files from SCCS
subdirectories automatically, so configuring SCCS as demonstrated in the
above example should only be necessary if you are fetching from
s.SCCS files in the same directory as the source files, or if you
need to explicitly specify SCCS for a specific subdirectory.
- SConscript(scripts, [exports, variant_dir, duplicate])
- env.SConscript(scripts, [exports, variant_dir, duplicate])
- SConscript(dirs=subdirs, [name=script, exports, variant_dir, duplicate])
- env.SConscript(dirs=subdirs, [name=script, exports, variant_dir, duplicate])
- This tells scons to execute one or more subsidiary
SConscript (configuration) files. Any variables returned by a called
script using Return() will be returned by the call to
SConscript(). There are two ways to call the SConscript()
function.
SConscript('SConscript') # run SConscript in the current directory SConscript('src/SConscript') # run SConscript in the src directory SConscript(['src/SConscript', 'doc/SConscript']) config = SConscript('MyConfig.py')
- The second way you can call SConscript() is to specify a list of (sub)directory names as a dirs=subdirs keyword argument. In this case, scons will, by default, execute a subsidiary configuration file named SConscript in each of the specified directories. You may specify a name other than SConscript by supplying an optional name=script keyword argument. The first three examples below have the same effect as the first three examples above:
SConscript(dirs='.') # run SConscript in the current directory SConscript(dirs='src') # run SConscript in the src directory SConscript(dirs=['src', 'doc']) SConscript(dirs=['sub1', 'sub2'], name='MySConscript')
- The optional exports argument provides a list of variable names or a dictionary of named values to export to the script(s). These variables are locally exported only to the specified script(s), and do not affect the global pool of variables used by the Export() function. The subsidiary script(s) must use the Import() function to import the variables. Examples:
foo = SConscript('sub/SConscript', exports='env') SConscript('dir/SConscript', exports=['env', 'variable']) SConscript(dirs='subdir', exports='env variable') SConscript(dirs=['one', 'two', 'three'], exports='shared_info')
- If the optional variant_dir argument is present, it
causes an effect equivalent to the VariantDir() method described
below. (If variant_dir is not present, the duplicate
argument is ignored.) The variant_dir argument is interpreted
relative to the directory of the calling SConscript file. See the
description of the VariantDir() function below for additional
details and restrictions.
SConscript('src/SConscript', variant_dir = 'build')
- is equivalent to
VariantDir('build', 'src') SConscript('build/SConscript')
- This later paradigm is often used when the sources are in
the same directory as the SConstruct:
SConscript('SConscript', variant_dir = 'build')
- is equivalent to
VariantDir('build', '.') SConscript('build/SConscript')
- Here are some composite examples:
# collect the configuration information and use it to build src and doc shared_info = SConscript('MyConfig.py') SConscript('src/SConscript', exports='shared_info') SConscript('doc/SConscript', exports='shared_info')
# build debugging and production versions. SConscript # can use Dir('.').path to determine variant. SConscript('SConscript', variant_dir='debug', duplicate=0) SConscript('SConscript', variant_dir='prod', duplicate=0)
# build debugging and production versions. SConscript # is passed flags to use. opts = { 'CPPDEFINES' : ['DEBUG'], 'CCFLAGS' : '-pgdb' } SConscript('SConscript', variant_dir='debug', duplicate=0, exports=opts) opts = { 'CPPDEFINES' : ['NODEBUG'], 'CCFLAGS' : '-O' } SConscript('SConscript', variant_dir='prod', duplicate=0, exports=opts)
# build common documentation and compile for different architectures SConscript('doc/SConscript', variant_dir='build/doc', duplicate=0) SConscript('src/SConscript', variant_dir='build/x86', duplicate=0) SConscript('src/SConscript', variant_dir='build/ppc', duplicate=0)
- SConscriptChdir(value)
- env.SConscriptChdir(value)
- By default, scons changes its working directory to
the directory in which each subsidiary SConscript file lives. This
behavior may be disabled by specifying either:
SConscriptChdir(0) env.SConscriptChdir(0)
- in which case scons will stay in the top-level
directory while reading all SConscript files. (This may be necessary when
building from repositories, when all the directories in which SConscript
files may be found don't necessarily exist locally.) You may enable and
disable this ability by calling SConscriptChdir() multiple times.
env = Environment() SConscriptChdir(0) SConscript('foo/SConscript') # will not chdir to foo env.SConscriptChdir(1) SConscript('bar/SConscript') # will chdir to bar
- SConsignFile([file, dbm_module])
- env.SConsignFile([file, dbm_module])
- This tells scons to store all file signatures in the
specified database file. If the file name is omitted,
.sconsign is used by default. (The actual file name(s) stored on
disk may have an appropriated suffix appended by the dbm_module.)
If file is not an absolute path name, the file is placed in the
same directory as the top-level SConstruct file.
# Explicitly stores signatures in ".sconsign.dblite" # in the top-level SConstruct directory (the # default behavior). SConsignFile() # Stores signatures in the file "etc/scons-signatures" # relative to the top-level SConstruct directory. SConsignFile("etc/scons-signatures") # Stores signatures in the specified absolute file name. SConsignFile("/home/me/SCons/signatures") # Stores signatures in a separate .sconsign file # in each directory. SConsignFile(None)
- env.SetDefault(key=val, [...])
- Sets construction variables to default values specified
with the keyword arguments if (and only if) the variables are not already
set. The following statements are equivalent:
env.SetDefault(FOO = 'foo') if 'FOO' not in env: env['FOO'] = 'foo'
- SetOption(name, value)
- env.SetOption(name, value)
- This function provides a way to set a select subset of the
scons command line options from a SConscript file. The options supported
are:
- clean
- which corresponds to -c, --clean and --remove;
- duplicate
- which corresponds to --duplicate;
- help
- which corresponds to -h and --help;
- implicit_cache
- which corresponds to --implicit-cache;
- max_drift
- which corresponds to --max-drift;
- no_exec
- which corresponds to -n, --no-exec, --just-print, --dry-run and --recon;
- num_jobs
- which corresponds to -j and --jobs;
- random
- which corresponds to --random; and
- stack_size
- which corresponds to --stack-size.
SetOption('max_drift', 1)
- SideEffect(side_effect, target)
- env.SideEffect(side_effect, target)
- Declares side_effect as a side effect of building
target. Both side_effect and target can be a list, a
file name, or a node. A side effect is a target file that is created or
updated as a side effect of building other targets. For example, a Windows
PDB file is created as a side effect of building the .obj files for a
static library, and various log files are created updated as side effects
of various TeX commands. If a target is a side effect of multiple build
commands, scons will ensure that only one set of commands is
executed at a time. Consequently, you only need to use this method for
side-effect targets that are built as a result of multiple build commands.
- SourceCode(entries, builder)
- env.SourceCode(entries, builder)
- This function and its associate factory functions are
deprecated. There is no replacement. The intended use was to keep a local
tree in sync with an archive, but in actuality the function only causes
the archive to be fetched on the first run. Synchronizing with the archive
is best done external to &SCons;.
env.SourceCode('.', None)
- Note that if the specified builder is one you create
by hand, it must have an associated construction environment to use when
fetching a source file.
env.SourceCode('.', env.BitKeeper('/usr/local/BKsources')) env.SourceCode('src', env.CVS('/usr/local/CVSROOT')) env.SourceCode('/', env.RCS()) env.SourceCode(['f1.c', 'f2.c'], env.SCCS()) env.SourceCode('no_source.c', None)
- SourceSignatures(type)
- env.SourceSignatures(type)
- Note: Although it is not yet officially deprecated, use of
this function is discouraged. See the Decider() function for a more
flexible and straightforward way to configure SCons' decision-making.
- Split(arg)
- env.Split(arg)
- Returns a list of file names or other objects. If arg is a
string, it will be split on strings of white-space characters within the
string, making it easier to write long lists of file names. If arg is
already a list, the list will be returned untouched. If arg is any other
type of object, it will be returned as a list containing just the object.
files = Split("f1.c f2.c f3.c") files = env.Split("f4.c f5.c f6.c") files = Split(""" f7.c f8.c f9.c """)
- env.subst(input, [raw, target, source, conv])
- Performs construction variable interpolation on the
specified string or sequence argument input.
print env.subst("The C compiler is: $CC") def compile(target, source, env): sourceDir = env.subst("${SOURCE.srcdir}", target=target, source=source) source_nodes = env.subst('$EXPAND_TO_NODELIST', conv=lambda x: x)
- Tag(node, tags)
- Annotates file or directory Nodes with information about
how the Package() Builder should package those files or
directories. All tags are optional.
# makes sure the built library will be installed with 0644 file # access mode Tag( Library( 'lib.c' ), UNIX_ATTR="0644" ) # marks file2.txt to be a documentation file Tag( 'file2.txt', DOC )
- TargetSignatures(type)
- env.TargetSignatures(type)
- Note: Although it is not yet officially deprecated, use of
this function is discouraged. See the Decider() function for a more
flexible and straightforward way to configure SCons' decision-making.
- Tool(string, [toolpath, **kw])
- env.Tool(string, [toolpath, **kw])
- The Tool() form of the function returns a callable
object that can be used to initialize a construction environment using the
tools keyword of the Environment() method. The object may be called with a
construction environment as an argument, in which case the object will add
the necessary variables to the construction environment and the name of
the tool will be added to the $TOOLS construction variable.
env = Environment(tools = [ Tool('msvc') ]) env = Environment() t = Tool('msvc') t(env) # adds 'msvc' to the TOOLS variable u = Tool('opengl', toolpath = ['tools']) u(env) # adds 'opengl' to the TOOLS variable
- The env.Tool() form of the function applies the
callable object for the specified tool string to the environment
through which the method was called.
env.Tool('gcc') env.Tool('opengl', toolpath = ['build/tools'])
- Value(value, [built_value])
- env.Value(value, [built_value])
- Returns a Node object representing the specified Python
value. Value Nodes can be used as dependencies of targets. If the result
of calling str(value) changes between SCons runs, any
targets depending on Value(value) will be rebuilt.
(This is true even when using timestamps to decide if files are
up-to-date.) When using timestamp source signatures, Value Nodes'
timestamps are equal to the system time when the Node is created.
env = Environment() def create(target, source, env): # A function that will write a 'prefix=$SOURCE' # string into the file name specified as the # $TARGET. f = open(str(target[0]), 'wb') f.write('prefix=' + source[0].get_contents()) # Fetch the prefix= argument, if any, from the command # line, and use /usr/local as the default. prefix = ARGUMENTS.get('prefix', '/usr/local') # Attach a .Config() builder for the above function action # to the construction environment. env['BUILDERS']['Config'] = Builder(action = create) env.Config(target = 'package-config', source = Value(prefix)) def build_value(target, source, env): # A function that "builds" a Python Value by updating # the the Python value with the contents of the file # specified as the source of the Builder call ($SOURCE). target[0].write(source[0].get_contents()) output = env.Value('before') input = env.Value('after') # Attach a .UpdateValue() builder for the above function # action to the construction environment. env['BUILDERS']['UpdateValue'] = Builder(action = build_value) env.UpdateValue(target = Value(output), source = Value(input))
- VariantDir(variant_dir, src_dir, [duplicate])
- env.VariantDir(variant_dir, src_dir, [duplicate])
- Use the VariantDir() function to create a copy of
your sources in another location: if a name under variant_dir is
not found but exists under src_dir, the file or directory is copied
to variant_dir. Target files can be built in a different directory
than the original sources by simply refering to the sources (and targets)
within the variant tree.
# run src/SConscript in two variant directories VariantDir('build/variant1', 'src') SConscript('build/variant1/SConscript') VariantDir('build/variant2', 'src') SConscript('build/variant2/SConscript')
- See also the SConscript() function, described above,
for another way to specify a variant directory in conjunction with calling
a subsidiary SConscript file.
# use names in the build directory, not the source directory VariantDir('build', 'src', duplicate=0) Program('build/prog', 'build/source.c')
# this builds both the source and docs in a separate subtree VariantDir('build', '.', duplicate=0) SConscript(dirs=['build/src','build/doc'])
# same as previous example, but only uses SConscript SConscript(dirs='src', variant_dir='build/src', duplicate=0) SConscript(dirs='doc', variant_dir='build/doc', duplicate=0)
- WhereIs(program, [path, pathext, reject])
- env.WhereIs(program, [path, pathext, reject])
- Searches for the specified executable program,
returning the full path name to the program if it is found, and returning
None if not. Searches the specified path, the value of the calling
environment's PATH (env['ENV']['PATH']), or the user's current
external PATH (os.environ['PATH']) by default. On Windows systems,
searches for executable programs with any of the file extensions listed in
the specified pathext, the calling environment's PATHEXT
(env['ENV']['PATHEXT']) or the user's current PATHEXT
(os.environ['PATHEXT']) by default. Will not select any path name
or names in the specified reject list, if any.
SConscript Variables¶
In addition to the global functions and methods, scons supports a number of Python variables that can be used in SConscript files to affect how you want the build to be performed. These variables may be accessed from custom Python modules that you import into an SConscript file by adding the following to the Python module:from SCons.Script import *
- ARGLIST
- A list keyword=value arguments specified on
the command line. Each element in the list is a tuple containing the
(keyword,value) of the argument. The separate keyword
and value elements of the tuple can be accessed by subscripting for
element [0] and [1] of the tuple, respectively.
print "first keyword, value =", ARGLIST[0][0], ARGLIST[0][1] print "second keyword, value =", ARGLIST[1][0], ARGLIST[1][1] third_tuple = ARGLIST[2] print "third keyword, value =", third_tuple[0], third_tuple[1] for key, value in ARGLIST: # process key and value
- ARGUMENTS
- A dictionary of all the keyword=value
arguments specified on the command line. The dictionary is not in order,
and if a given keyword has more than one value assigned to it on the
command line, the last (right-most) value is the one in the
ARGUMENTS dictionary.
if ARGUMENTS.get('debug', 0): env = Environment(CCFLAGS = '-g') else: env = Environment()
- BUILD_TARGETS
- A list of the targets which scons will actually try
to build, regardless of whether they were specified on the command line or
via the Default() function or method. The elements of this list may
be strings or nodes, so you should run the list through the Python
str function to make sure any Node path names are converted to
strings.
if 'foo' in BUILD_TARGETS: print "Don't forget to test the `foo' program!" if 'special/program' in BUILD_TARGETS: SConscript('special')
- Note that the BUILD_TARGETS list only contains
targets expected listed on the command line or via calls to the
Default() function or method. It does not contain all
dependent targets that will be built as a result of making the sure the
explicitly-specified targets are up to date.
- COMMAND_LINE_TARGETS
- A list of the targets explicitly specified on the command
line. If there are no targets specified on the command line, the list is
empty. This can be used, for example, to take specific actions only when a
certain target or targets is explicitly being built.
if 'foo' in COMMAND_LINE_TARGETS: print "Don't forget to test the `foo' program!" if 'special/program' in COMMAND_LINE_TARGETS: SConscript('special')
- DEFAULT_TARGETS
- A list of the target nodes that have been specified
using the Default() function or method. The elements of the list
are nodes, so you need to run them through the Python str function
to get at the path name for each Node.
print str(DEFAULT_TARGETS[0]) if 'foo' in map(str, DEFAULT_TARGETS): print "Don't forget to test the `foo' program!"
- The contents of the DEFAULT_TARGETS list change on
on each successive call to the Default() function:
print map(str, DEFAULT_TARGETS) # originally [] Default('foo') print map(str, DEFAULT_TARGETS) # now a node ['foo'] Default('bar') print map(str, DEFAULT_TARGETS) # now a node ['foo', 'bar'] Default(None) print map(str, DEFAULT_TARGETS) # back to []
- Consequently, be sure to use DEFAULT_TARGETS only
after you've made all of your Default() calls, or else simply be
careful of the order of these statements in your SConscript files so that
you don't look for a specific default target before it's actually been
added to the list.
Construction Variables¶
A construction environment has an associated dictionary of construction variables that are used by built-in or user-supplied build rules. Construction variables must follow the same rules for Python identifiers: the initial character must be an underscore or letter, followed by any number of underscores, letters, or digits.- AR
- The static library archiver.
- ARCHITECTURE
- Specifies the system architecture for which the package is
being built. The default is the system architecture of the machine on
which SCons is running. This is used to fill in the Architecture:
field in an Ipkg control file, and as part of the name of a
generated RPM file.
- ARCOM
- The command line used to generate a static library from
object files.
- ARCOMSTR
- The string displayed when an object file is generated from
an assembly-language source file. If this is not set, then $ARCOM
(the command line) is displayed.
env = Environment(ARCOMSTR = "Archiving $TARGET")
- ARFLAGS
- General options passed to the static library archiver.
- AS
- The assembler.
- ASCOM
- The command line used to generate an object file from an
assembly-language source file.
- ASCOMSTR
- The string displayed when an object file is generated from
an assembly-language source file. If this is not set, then $ASCOM
(the command line) is displayed.
env = Environment(ASCOMSTR = "Assembling $TARGET")
- ASFLAGS
- General options passed to the assembler.
- ASPPCOM
- The command line used to assemble an assembly-language
source file into an object file after first running the file through the C
preprocessor. Any options specified in the $ASFLAGS and
$CPPFLAGS construction variables are included on this command line.
- ASPPCOMSTR
- The string displayed when an object file is generated from
an assembly-language source file after first running the file through the
C preprocessor. If this is not set, then $ASPPCOM (the command
line) is displayed.
env = Environment(ASPPCOMSTR = "Assembling $TARGET")
- ASPPFLAGS
- General options when an assembling an assembly-language
source file into an object file after first running the file through the C
preprocessor. The default is to use the value of $ASFLAGS.
- BIBTEX
- The bibliography generator for the TeX formatter and
typesetter and the LaTeX structured formatter and typesetter.
- BIBTEXCOM
- The command line used to call the bibliography generator
for the TeX formatter and typesetter and the LaTeX structured formatter
and typesetter.
- BIBTEXCOMSTR
- The string displayed when generating a bibliography for TeX
or LaTeX. If this is not set, then $BIBTEXCOM (the command line) is
displayed.
env = Environment(BIBTEXCOMSTR = "Generating bibliography $TARGET")
- BIBTEXFLAGS
- General options passed to the bibliography generator for
the TeX formatter and typesetter and the LaTeX structured formatter and
typesetter.
- BITKEEPER
- The BitKeeper executable.
- BITKEEPERCOM
- The command line for fetching source files using BitKeeper.
- BITKEEPERCOMSTR
- The string displayed when fetching a source file using
BitKeeper. If this is not set, then $BITKEEPERCOM (the command
line) is displayed.
- BITKEEPERGET
- The command ($BITKEEPER) and subcommand for fetching
source files using BitKeeper.
- BITKEEPERGETFLAGS
- Options that are passed to the BitKeeper get
subcommand.
- BUILDERS
- A dictionary mapping the names of the builders available
through this environment to underlying Builder objects. Builders named
Alias, CFile, CXXFile, DVI, Library, Object, PDF, PostScript, and Program
are available by default. If you initialize this variable when an
Environment is created:
env = Environment(BUILDERS = {'NewBuilder' : foo})
- the default Builders will no longer be available. To use a
new Builder object in addition to the default Builders, add your new
Builder object like this:
env = Environment() env.Append(BUILDERS = {'NewBuilder' : foo})
- or this:
env = Environment() env['BUILDERS]['NewBuilder'] = foo
- CC
- The C compiler.
- CCCOM
- The command line used to compile a C source file to a
(static) object file. Any options specified in the $CFLAGS,
$CCFLAGS and $CPPFLAGS construction variables are included
on this command line.
- CCCOMSTR
- The string displayed when a C source file is compiled to a
(static) object file. If this is not set, then $CCCOM (the command
line) is displayed.
env = Environment(CCCOMSTR = "Compiling static object $TARGET")
- CCFLAGS
- General options that are passed to the C and C++ compilers.
- CCPCHFLAGS
- Options added to the compiler command line to support
building with precompiled headers. The default value expands expands to
the appropriate Microsoft Visual C++ command-line options when the
$PCH construction variable is set.
- CCPDBFLAGS
- Options added to the compiler command line to support
storing debugging information in a Microsoft Visual C++ PDB file. The
default value expands expands to appropriate Microsoft Visual C++
command-line options when the $PDB construction variable is set.
env['CCPDBFLAGS'] = ['${(PDB and "/Zi /Fd%s" % File(PDB)) or ""}']
- An alternative would be to use the /Zi to put the
debugging information in a separate .pdb file for each object file
by overriding the $CCPDBFLAGS variable as follows:
env['CCPDBFLAGS'] = '/Zi /Fd${TARGET}.pdb'
- CCVERSION
- The version number of the C compiler. This may or may not
be set, depending on the specific C compiler being used.
- CFILESUFFIX
- The suffix for C source files. This is used by the internal
CFile builder when generating C files from Lex (.l) or YACC (.y) input
files. The default suffix, of course, is .c (lower case). On
case-insensitive systems (like Windows), SCons also treats .C
(upper case) files as C files.
- CFLAGS
- General options that are passed to the C compiler (C only;
not C++).
- CHANGE_SPECFILE
- A hook for modifying the file that controls the packaging
build (the .spec for RPM, the control for Ipkg, the
.wxs for MSI). If set, the function will be called after the SCons
template for the file has been written. XXX
- CHANGED_SOURCES
- A reserved variable name that may not be set or used in a
construction environment. (See "Variable Substitution," below.)
- CHANGED_TARGETS
- A reserved variable name that may not be set or used in a
construction environment. (See "Variable Substitution," below.)
- CHANGELOG
- The name of a file containing the change log text to be
included in the package. This is included as the %changelog section
of the RPM .spec file.
- _concat
- A function used to produce variables like
$_CPPINCFLAGS. It takes four or five arguments: a prefix to
concatenate onto each element, a list of elements, a suffix to concatenate
onto each element, an environment for variable interpolation, and an
optional function that will be called to transform the list before
concatenation.
env['_CPPINCFLAGS'] = '$( ${_concat(INCPREFIX, CPPPATH, INCSUFFIX, __env__, RDirs)} $)',
- CONFIGUREDIR
- The name of the directory in which Configure context test
files are written. The default is .sconf_temp in the top-level
directory containing the SConstruct file.
- CONFIGURELOG
- The name of the Configure context log file. The default is
config.log in the top-level directory containing the
SConstruct file.
- _CPPDEFFLAGS
- An automatically-generated construction variable containing
the C preprocessor command-line options to define values. The value of
$_CPPDEFFLAGS is created by appending $CPPDEFPREFIX and
$CPPDEFSUFFIX to the beginning and end of each definition in
$CPPDEFINES.
- CPPDEFINES
- A platform independent specification of C preprocessor
definitions. The definitions will be added to command lines through the
automatically-generated $_CPPDEFFLAGS construction variable (see
above), which is constructed according to the type of value of
$CPPDEFINES:
# Will add -Dxyz to POSIX compiler command lines, # and /Dxyz to Microsoft Visual C++ command lines. env = Environment(CPPDEFINES='xyz')
- If $CPPDEFINES is a list, the values of the
$CPPDEFPREFIXand$CPPDEFSUFFIX construction variables will be
appended to the beginning and end of each element in the list. If any
element is a list or tuple, then the first item is the name being defined
and the second item is its value:
# Will add -DB=2 -DA to POSIX compiler command lines, # and /DB=2 /DA to Microsoft Visual C++ command lines. env = Environment(CPPDEFINES=[('B', 2), 'A'])
- If $CPPDEFINES is a dictionary, the values of the
$CPPDEFPREFIXand$CPPDEFSUFFIX construction variables will be
appended to the beginning and end of each item from the dictionary. The
key of each dictionary item is a name being defined to the dictionary
item's corresponding value; if the value is None, then the name is
defined without an explicit value. Note that the resulting flags are
sorted by keyword to ensure that the order of the options on the command
line is consistent each time scons is run.
# Will add -DA -DB=2 to POSIX compiler command lines, # and /DA /DB=2 to Microsoft Visual C++ command lines. env = Environment(CPPDEFINES={'B':2, 'A':None})
- CPPDEFPREFIX
- The prefix used to specify preprocessor definitions on the
C compiler command line. This will be appended to the beginning of each
definition in the $CPPDEFINES construction variable when the
$_CPPDEFFLAGS variable is automatically generated.
- CPPDEFSUFFIX
- The suffix used to specify preprocessor definitions on the
C compiler command line. This will be appended to the end of each
definition in the $CPPDEFINES construction variable when the
$_CPPDEFFLAGS variable is automatically generated.
- CPPFLAGS
- User-specified C preprocessor options. These will be
included in any command that uses the C preprocessor, including not just
compilation of C and C++ source files via the $CCCOM,
$SHCCCOM, $CXXCOM and $SHCXXCOM command lines, but
also the $FORTRANPPCOM, $SHFORTRANPPCOM, $F77PPCOM
and $SHF77PPCOM command lines used to compile a Fortran source
file, and the $ASPPCOM command line used to assemble an assembly
language source file, after first running each file through the C
preprocessor. Note that this variable does not contain -I
(or similar) include search path options that scons generates
automatically from $CPPPATH. See $_CPPINCFLAGS, below, for
the variable that expands to those options.
- _CPPINCFLAGS
- An automatically-generated construction variable containing
the C preprocessor command-line options for specifying directories to be
searched for include files. The value of $_CPPINCFLAGS is created
by appending $INCPREFIX and $INCSUFFIX to the beginning and
end of each directory in $CPPPATH.
- CPPPATH
- The list of directories that the C preprocessor will search
for include directories. The C/C++ implicit dependency scanner will search
these directories for include files. Don't explicitly put include
directory arguments in CCFLAGS or CXXFLAGS because the result will be
non-portable and the directories will not be searched by the dependency
scanner. Note: directory names in CPPPATH will be looked-up relative to
the SConscript directory when they are used in a command. To force
scons to look-up a directory relative to the root of the source
tree use #:
env = Environment(CPPPATH='#/include')
- The directory look-up can also be forced using the
Dir() function:
include = Dir('include') env = Environment(CPPPATH=include)
- The directory list will be added to command lines through
the automatically-generated $_CPPINCFLAGS construction variable,
which is constructed by appending the values of the
$INCPREFIXand$INCSUFFIX construction variables to the
beginning and end of each directory in $CPPPATH. Any command lines
you define that need the CPPPATH directory list should include
$_CPPINCFLAGS:
env = Environment(CCCOM="my_compiler $_CPPINCFLAGS -c -o $TARGET $SOURCE")
- CPPSUFFIXES
- The list of suffixes of files that will be scanned for C
preprocessor implicit dependencies (#include lines). The default list is:
[".c", ".C", ".cxx", ".cpp", ".c++", ".cc", ".h", ".H", ".hxx", ".hpp", ".hh", ".F", ".fpp", ".FPP", ".m", ".mm", ".S", ".spp", ".SPP"]
- CVS
- The CVS executable.
- CVSCOFLAGS
- Options that are passed to the CVS checkout subcommand.
- CVSCOM
- The command line used to fetch source files from a CVS
repository.
- CVSCOMSTR
- The string displayed when fetching a source file from a CVS
repository. If this is not set, then $CVSCOM (the command line) is
displayed.
- CVSFLAGS
- General options that are passed to CVS. By default, this is
set to -d $CVSREPOSITORY to specify from where the files must be
fetched.
- CVSREPOSITORY
- The path to the CVS repository. This is referenced in the
default $CVSFLAGS value.
- CXX
- The C++ compiler.
- CXXCOM
- The command line used to compile a C++ source file to an
object file. Any options specified in the $CXXFLAGS and
$CPPFLAGS construction variables are included on this command line.
- CXXCOMSTR
- The string displayed when a C++ source file is compiled to
a (static) object file. If this is not set, then $CXXCOM (the
command line) is displayed.
env = Environment(CXXCOMSTR = "Compiling static object $TARGET")
- CXXFILESUFFIX
- The suffix for C++ source files. This is used by the
internal CXXFile builder when generating C++ files from Lex (.ll) or YACC
(.yy) input files. The default suffix is .cc. SCons also treats
files with the suffixes .cpp, .cxx, .c++, and
.C++ as C++ files, and files with .mm suffixes as Objective
C++ files. On case-sensitive systems (Linux, UNIX, and other
POSIX-alikes), SCons also treats .C (upper case) files as C++
files.
- CXXFLAGS
- General options that are passed to the C++ compiler. By
default, this includes the value of $CCFLAGS, so that setting
$CCFLAGS affects both C and C++ compilation. If you want to add
C++-specific flags, you must set or override the value of
$CXXFLAGS.
- CXXVERSION
- The version number of the C++ compiler. This may or may not
be set, depending on the specific C++ compiler being used.
- DESCRIPTION
- A long description of the project being packaged. This is
included in the relevant section of the file that controls the packaging
build.
- DESCRIPTION_lang
- A language-specific long description for the specified
lang. This is used to populate a %description -l section of
an RPM .spec file.
- Dir
- A function that converts a string into a Dir instance
relative to the target being built.
- Dirs
- A function that converts a list of strings into a list of
Dir instances relative to the target being built.
- DSUFFIXES
- The list of suffixes of files that will be scanned for
imported D package files. The default list is:
['.d']
- DVIPDF
- The TeX DVI file to PDF file converter.
- DVIPDFCOM
- The command line used to convert TeX DVI files into a PDF
file.
- DVIPDFCOMSTR
- The string displayed when a TeX DVI file is converted into
a PDF file. If this is not set, then $DVIPDFCOM (the command line)
is displayed.
- DVIPDFFLAGS
- General options passed to the TeX DVI file to PDF file
converter.
- DVIPS
- The TeX DVI file to PostScript converter.
- DVIPSFLAGS
- General options passed to the TeX DVI file to PostScript
converter.
- ENV
- A dictionary of environment variables to use when invoking
commands. When $ENV is used in a command all list values will be
joined using the path separator and any other non-string values will
simply be coerced to a string. Note that, by default, scons does
not propagate the environment in force when you execute
scons to the commands used to build target files. This is so that
builds will be guaranteed repeatable regardless of the environment
variables set at the time scons is invoked.
import os env = Environment(ENV = os.environ)
- Note that you can choose only to propagate certain
environment variables. A common example is the system PATH
environment variable, so that scons uses the same utilities as the
invoking shell (or other process):
import os env = Environment(ENV = {'PATH' : os.environ['PATH']})
- ESCAPE
- A function that will be called to escape shell special
characters in command lines. The function should take one argument: the
command line string to escape; and should return the escaped command line.
- F77
- The Fortran 77 compiler. You should normally set the
$FORTRAN variable, which specifies the default Fortran compiler for
all Fortran versions. You only need to set $F77 if you need to use
a specific compiler or compiler version for Fortran 77 files.
- F77COM
- The command line used to compile a Fortran 77 source file
to an object file. You only need to set $F77COM if you need to use
a specific command line for Fortran 77 files. You should normally set the
$FORTRANCOM variable, which specifies the default command line for
all Fortran versions.
- F77COMSTR
- The string displayed when a Fortran 77 source file is
compiled to an object file. If this is not set, then $F77COM or
$FORTRANCOM (the command line) is displayed.
- F77FILESUFFIXES
- The list of file extensions for which the F77 dialect will
be used. By default, this is ['.f77']
- F77FLAGS
- General user-specified options that are passed to the
Fortran 77 compiler. Note that this variable does not contain
-I (or similar) include search path options that scons generates
automatically from $F77PATH. See $_F77INCFLAGS below, for
the variable that expands to those options. You only need to set
$F77FLAGS if you need to define specific user options for Fortran
77 files. You should normally set the $FORTRANFLAGS variable, which
specifies the user-specified options passed to the default Fortran
compiler for all Fortran versions.
- _F77INCFLAGS
- An automatically-generated construction variable containing
the Fortran 77 compiler command-line options for specifying directories to
be searched for include files. The value of $_F77INCFLAGS is
created by appending $INCPREFIX and $INCSUFFIX to the
beginning and end of each directory in $F77PATH.
- F77PATH
- The list of directories that the Fortran 77 compiler will
search for include directories. The implicit dependency scanner will
search these directories for include files. Don't explicitly put include
directory arguments in $F77FLAGS because the result will be
non-portable and the directories will not be searched by the dependency
scanner. Note: directory names in $F77PATH will be looked-up
relative to the SConscript directory when they are used in a command. To
force scons to look-up a directory relative to the root of the
source tree use #: You only need to set $F77PATH if you need to
define a specific include path for Fortran 77 files. You should normally
set the $FORTRANPATH variable, which specifies the include path for
the default Fortran compiler for all Fortran versions.
env = Environment(F77PATH='#/include')
- The directory look-up can also be forced using the
Dir() function:
include = Dir('include') env = Environment(F77PATH=include)
- The directory list will be added to command lines through
the automatically-generated $_F77INCFLAGS construction variable,
which is constructed by appending the values of the
$INCPREFIXand$INCSUFFIX construction variables to the
beginning and end of each directory in $F77PATH. Any command lines
you define that need the F77PATH directory list should include
$_F77INCFLAGS:
env = Environment(F77COM="my_compiler $_F77INCFLAGS -c -o $TARGET $SOURCE")
- F77PPCOM
- The command line used to compile a Fortran 77 source file
to an object file after first running the file through the C preprocessor.
Any options specified in the $F77FLAGS and $CPPFLAGS
construction variables are included on this command line. You only need to
set $F77PPCOM if you need to use a specific C-preprocessor command
line for Fortran 77 files. You should normally set the
$FORTRANPPCOM variable, which specifies the default C-preprocessor
command line for all Fortran versions.
- F77PPCOMSTR
- The string displayed when a Fortran 77 source file is
compiled to an object file after first running the file through the C
preprocessor. If this is not set, then $F77PPCOM or
$FORTRANPPCOM (the command line) is displayed.
- F77PPFILESUFFIXES
- The list of file extensions for which the compilation +
preprocessor pass for F77 dialect will be used. By default, this is empty
- F90
- The Fortran 90 compiler. You should normally set the
$FORTRAN variable, which specifies the default Fortran compiler for
all Fortran versions. You only need to set $F90 if you need to use
a specific compiler or compiler version for Fortran 90 files.
- F90COM
- The command line used to compile a Fortran 90 source file
to an object file. You only need to set $F90COM if you need to use
a specific command line for Fortran 90 files. You should normally set the
$FORTRANCOM variable, which specifies the default command line for
all Fortran versions.
- F90COMSTR
- The string displayed when a Fortran 90 source file is
compiled to an object file. If this is not set, then $F90COM or
$FORTRANCOM (the command line) is displayed.
- F90FILESUFFIXES
- The list of file extensions for which the F90 dialect will
be used. By default, this is ['.f90']
- F90FLAGS
- General user-specified options that are passed to the
Fortran 90 compiler. Note that this variable does not contain
-I (or similar) include search path options that scons generates
automatically from $F90PATH. See $_F90INCFLAGS below, for
the variable that expands to those options. You only need to set
$F90FLAGS if you need to define specific user options for Fortran
90 files. You should normally set the $FORTRANFLAGS variable, which
specifies the user-specified options passed to the default Fortran
compiler for all Fortran versions.
- _F90INCFLAGS
- An automatically-generated construction variable containing
the Fortran 90 compiler command-line options for specifying directories to
be searched for include files. The value of $_F90INCFLAGS is
created by appending $INCPREFIX and $INCSUFFIX to the
beginning and end of each directory in $F90PATH.
- F90PATH
- The list of directories that the Fortran 90 compiler will
search for include directories. The implicit dependency scanner will
search these directories for include files. Don't explicitly put include
directory arguments in $F90FLAGS because the result will be
non-portable and the directories will not be searched by the dependency
scanner. Note: directory names in $F90PATH will be looked-up
relative to the SConscript directory when they are used in a command. To
force scons to look-up a directory relative to the root of the
source tree use #: You only need to set $F90PATH if you need to
define a specific include path for Fortran 90 files. You should normally
set the $FORTRANPATH variable, which specifies the include path for
the default Fortran compiler for all Fortran versions.
env = Environment(F90PATH='#/include')
- The directory look-up can also be forced using the
Dir() function:
include = Dir('include') env = Environment(F90PATH=include)
- The directory list will be added to command lines through
the automatically-generated $_F90INCFLAGS construction variable,
which is constructed by appending the values of the
$INCPREFIXand$INCSUFFIX construction variables to the
beginning and end of each directory in $F90PATH. Any command lines
you define that need the F90PATH directory list should include
$_F90INCFLAGS:
env = Environment(F90COM="my_compiler $_F90INCFLAGS -c -o $TARGET $SOURCE")
- F90PPCOM
- The command line used to compile a Fortran 90 source file
to an object file after first running the file through the C preprocessor.
Any options specified in the $F90FLAGS and $CPPFLAGS
construction variables are included on this command line. You only need to
set $F90PPCOM if you need to use a specific C-preprocessor command
line for Fortran 90 files. You should normally set the
$FORTRANPPCOM variable, which specifies the default C-preprocessor
command line for all Fortran versions.
- F90PPCOMSTR
- The string displayed when a Fortran 90 source file is
compiled after first running the file through the C preprocessor. If this
is not set, then $F90PPCOM or $FORTRANPPCOM (the command
line) is displayed.
- F90PPFILESUFFIXES
- The list of file extensions for which the compilation +
preprocessor pass for F90 dialect will be used. By default, this is empty
- F95
- The Fortran 95 compiler. You should normally set the
$FORTRAN variable, which specifies the default Fortran compiler for
all Fortran versions. You only need to set $F95 if you need to use
a specific compiler or compiler version for Fortran 95 files.
- F95COM
- The command line used to compile a Fortran 95 source file
to an object file. You only need to set $F95COM if you need to use
a specific command line for Fortran 95 files. You should normally set the
$FORTRANCOM variable, which specifies the default command line for
all Fortran versions.
- F95COMSTR
- The string displayed when a Fortran 95 source file is
compiled to an object file. If this is not set, then $F95COM or
$FORTRANCOM (the command line) is displayed.
- F95FILESUFFIXES
- The list of file extensions for which the F95 dialect will
be used. By default, this is ['.f95']
- F95FLAGS
- General user-specified options that are passed to the
Fortran 95 compiler. Note that this variable does not contain
-I (or similar) include search path options that scons generates
automatically from $F95PATH. See $_F95INCFLAGS below, for
the variable that expands to those options. You only need to set
$F95FLAGS if you need to define specific user options for Fortran
95 files. You should normally set the $FORTRANFLAGS variable, which
specifies the user-specified options passed to the default Fortran
compiler for all Fortran versions.
- _F95INCFLAGS
- An automatically-generated construction variable containing
the Fortran 95 compiler command-line options for specifying directories to
be searched for include files. The value of $_F95INCFLAGS is
created by appending $INCPREFIX and $INCSUFFIX to the
beginning and end of each directory in $F95PATH.
- F95PATH
- The list of directories that the Fortran 95 compiler will
search for include directories. The implicit dependency scanner will
search these directories for include files. Don't explicitly put include
directory arguments in $F95FLAGS because the result will be
non-portable and the directories will not be searched by the dependency
scanner. Note: directory names in $F95PATH will be looked-up
relative to the SConscript directory when they are used in a command. To
force scons to look-up a directory relative to the root of the
source tree use #: You only need to set $F95PATH if you need to
define a specific include path for Fortran 95 files. You should normally
set the $FORTRANPATH variable, which specifies the include path for
the default Fortran compiler for all Fortran versions.
env = Environment(F95PATH='#/include')
- The directory look-up can also be forced using the
Dir() function:
include = Dir('include') env = Environment(F95PATH=include)
- The directory list will be added to command lines through
the automatically-generated $_F95INCFLAGS construction variable,
which is constructed by appending the values of the
$INCPREFIXand$INCSUFFIX construction variables to the
beginning and end of each directory in $F95PATH. Any command lines
you define that need the F95PATH directory list should include
$_F95INCFLAGS:
env = Environment(F95COM="my_compiler $_F95INCFLAGS -c -o $TARGET $SOURCE")
- F95PPCOM
- The command line used to compile a Fortran 95 source file
to an object file after first running the file through the C preprocessor.
Any options specified in the $F95FLAGS and $CPPFLAGS
construction variables are included on this command line. You only need to
set $F95PPCOM if you need to use a specific C-preprocessor command
line for Fortran 95 files. You should normally set the
$FORTRANPPCOM variable, which specifies the default C-preprocessor
command line for all Fortran versions.
- F95PPCOMSTR
- The string displayed when a Fortran 95 source file is
compiled to an object file after first running the file through the C
preprocessor. If this is not set, then $F95PPCOM or
$FORTRANPPCOM (the command line) is displayed.
- F95PPFILESUFFIXES
- The list of file extensions for which the compilation +
preprocessor pass for F95 dialect will be used. By default, this is empty
- File
- A function that converts a string into a File instance
relative to the target being built.
- FORTRAN
- The default Fortran compiler for all versions of Fortran.
- FORTRANCOM
- The command line used to compile a Fortran source file to
an object file. By default, any options specified in the
$FORTRANFLAGS, $CPPFLAGS, $_CPPDEFFLAGS,
$_FORTRANMODFLAG, and $_FORTRANINCFLAGS construction
variables are included on this command line.
- FORTRANCOMSTR
- The string displayed when a Fortran source file is compiled
to an object file. If this is not set, then $FORTRANCOM (the
command line) is displayed.
- FORTRANFILESUFFIXES
- The list of file extensions for which the FORTRAN dialect
will be used. By default, this is ['.f', '.for', '.ftn']
- FORTRANFLAGS
- General user-specified options that are passed to the
Fortran compiler. Note that this variable does not contain
-I (or similar) include or module search path options that scons
generates automatically from $FORTRANPATH. See
$_FORTRANINCFLAGSand$_FORTRANMODFLAG,
below, for the variables that expand those options.
- _FORTRANINCFLAGS
- An automatically-generated construction variable containing
the Fortran compiler command-line options for specifying directories to be
searched for include files and module files. The value of
$_FORTRANINCFLAGS is created by prepending/appending
$INCPREFIX and $INCSUFFIX to the beginning and end of each
directory in $FORTRANPATH.
- FORTRANMODDIR
- Directory location where the Fortran compiler should place
any module files it generates. This variable is empty, by default. Some
Fortran compilers will internally append this directory in the search path
for module files, as well.
- FORTRANMODDIRPREFIX
- The prefix used to specify a module directory on the
Fortran compiler command line. This will be appended to the beginning of
the directory in the $FORTRANMODDIR construction variables when the
$_FORTRANMODFLAG variables is automatically generated.
- FORTRANMODDIRSUFFIX
- The suffix used to specify a module directory on the
Fortran compiler command line. This will be appended to the beginning of
the directory in the $FORTRANMODDIR construction variables when the
$_FORTRANMODFLAG variables is automatically generated.
- _FORTRANMODFLAG
- An automatically-generated construction variable containing
the Fortran compiler command-line option for specifying the directory
location where the Fortran compiler should place any module files that
happen to get generated during compilation. The value of
$_FORTRANMODFLAG is created by prepending/appending
$FORTRANMODDIRPREFIX and $FORTRANMODDIRSUFFIX to the
beginning and end of the directory in $FORTRANMODDIR.
- FORTRANMODPREFIX
- The module file prefix used by the Fortran compiler. SCons
assumes that the Fortran compiler follows the quasi-standard naming
convention for module files of module_name.mod. As a result, this
variable is left empty, by default. For situations in which the compiler
does not necessarily follow the normal convention, the user may use this
variable. Its value will be appended to every module file name as scons
attempts to resolve dependencies.
- FORTRANMODSUFFIX
- The module file suffix used by the Fortran compiler. SCons
assumes that the Fortran compiler follows the quasi-standard naming
convention for module files of module_name.mod. As a result, this
variable is set to ".mod", by default. For situations in which
the compiler does not necessarily follow the normal convention, the user
may use this variable. Its value will be appended to every module file
name as scons attempts to resolve dependencies.
- FORTRANPATH
- The list of directories that the Fortran compiler will
search for include files and (for some compilers) module files. The
Fortran implicit dependency scanner will search these directories for
include files (but not module files since they are autogenerated and, as
such, may not actually exist at the time the scan takes place). Don't
explicitly put include directory arguments in FORTRANFLAGS because the
result will be non-portable and the directories will not be searched by
the dependency scanner. Note: directory names in FORTRANPATH will be
looked-up relative to the SConscript directory when they are used in a
command. To force scons to look-up a directory relative to the root
of the source tree use #:
env = Environment(FORTRANPATH='#/include')
- The directory look-up can also be forced using the
Dir() function:
include = Dir('include') env = Environment(FORTRANPATH=include)
- The directory list will be added to command lines through
the automatically-generated $_FORTRANINCFLAGS construction
variable, which is constructed by appending the values of the
$INCPREFIXand$INCSUFFIX construction variables to the
beginning and end of each directory in $FORTRANPATH. Any command
lines you define that need the FORTRANPATH directory list should include
$_FORTRANINCFLAGS:
env = Environment(FORTRANCOM="my_compiler $_FORTRANINCFLAGS -c -o $TARGET $SOURCE")
- FORTRANPPCOM
- The command line used to compile a Fortran source file to
an object file after first running the file through the C preprocessor. By
default, any options specified in the $FORTRANFLAGS,
$CPPFLAGS, $_CPPDEFFLAGS, $_FORTRANMODFLAG, and
$_FORTRANINCFLAGS construction variables are included on this
command line.
- FORTRANPPCOMSTR
- The string displayed when a Fortran source file is compiled
to an object file after first running the file through the C preprocessor.
If this is not set, then $FORTRANPPCOM (the command line) is
displayed.
- FORTRANPPFILESUFFIXES
- The list of file extensions for which the compilation +
preprocessor pass for FORTRAN dialect will be used. By default, this is
['.fpp', '.FPP']
- FORTRANSUFFIXES
- The list of suffixes of files that will be scanned for
Fortran implicit dependencies (INCLUDE lines and USE statements). The
default list is:
[".f", ".F", ".for", ".FOR", ".ftn", ".FTN", ".fpp", ".FPP", ".f77", ".F77", ".f90", ".F90", ".f95", ".F95"]
- FRAMEWORKPATH
- On Mac OS X with gcc, a list containing the paths to search
for frameworks. Used by the compiler to find framework-style includes like
#include <Fmwk/Header.h>. Used by the linker to find user-specified
frameworks when linking (see $FRAMEWORKS). For example:
env.AppendUnique(FRAMEWORKPATH='#myframeworkdir')
- will add
... -Fmyframeworkdir
- to the compiler and linker command lines.
- _FRAMEWORKPATH
- On Mac OS X with gcc, an automatically-generated
construction variable containing the linker command-line options
corresponding to $FRAMEWORKPATH.
- FRAMEWORKPATHPREFIX
- On Mac OS X with gcc, the prefix to be used for the
FRAMEWORKPATH entries. (see $FRAMEWORKPATH). The default value is
-F.
- FRAMEWORKPREFIX
- On Mac OS X with gcc, the prefix to be used for linking in
frameworks (see $FRAMEWORKS). The default value is
-framework.
- _FRAMEWORKS
- On Mac OS X with gcc, an automatically-generated
construction variable containing the linker command-line options for
linking with FRAMEWORKS.
- FRAMEWORKS
- On Mac OS X with gcc, a list of the framework names to be
linked into a program or shared library or bundle. The default value is
the empty list. For example:
env.AppendUnique(FRAMEWORKS=Split('System Cocoa SystemConfiguration'))
- FRAMEWORKSFLAGS
- On Mac OS X with gcc, general user-supplied frameworks
options to be added at the end of a command line building a loadable
module. (This has been largely superseded by the $FRAMEWORKPATH,
$FRAMEWORKPATHPREFIX, $FRAMEWORKPREFIX and
$FRAMEWORKS variables described above.)
- GS
- The Ghostscript program used to convert PostScript to PDF
files.
- GSCOM
- The Ghostscript command line used to convert PostScript to
PDF files.
- GSCOMSTR
- The string displayed when Ghostscript is used to convert a
PostScript file to a PDF file. If this is not set, then $GSCOM (the
command line) is displayed.
- GSFLAGS
- General options passed to the Ghostscript program when
converting PostScript to PDF files.
- HOST_ARCH
- Sets the host architecture for Visual Studio compiler. If
not set, default to the detected host architecture: note that this may
depend on the python you are using. This variable must be passed as an
argument to the Environment() constructor; setting it later has no effect.
- HOST_OS
-
The name of the host operating system used to create the Environment.
If a platform is specified when creating the Environment, then
that Platform's logic will handle setting this value.
This value is immutable, and should not be changed by the user after
the Environment is initialized.
Currently only set for Win32.
- IDLSUFFIXES
- The list of suffixes of files that will be scanned for IDL
implicit dependencies (#include or import lines). The default list is:
[".idl", ".IDL"]
- IMPLICIT_COMMAND_DEPENDENCIES
- Controls whether or not SCons will add implicit
dependencies for the commands executed to build targets.
env = Environment(IMPLICIT_COMMAND_DEPENDENCIES = 0)
- INCPREFIX
- The prefix used to specify an include directory on the C
compiler command line. This will be appended to the beginning of each
directory in the $CPPPATH and $FORTRANPATH construction
variables when the $_CPPINCFLAGS and $_FORTRANINCFLAGS
variables are automatically generated.
- INCSUFFIX
- The suffix used to specify an include directory on the C
compiler command line. This will be appended to the end of each directory
in the $CPPPATH and $FORTRANPATH construction variables when
the $_CPPINCFLAGS and $_FORTRANINCFLAGS variables are
automatically generated.
- INSTALL
- A function to be called to install a file into a
destination file name. The default function copies the file into the
destination (and sets the destination file's mode and permission bits to
match the source file's). The function takes the following arguments:
def install(dest, source, env):
- dest is the path name of the destination file.
source is the path name of the source file. env is the
construction environment (a dictionary of construction values) in force
for this file installation.
- INSTALLSTR
- The string displayed when a file is installed into a destination file name. The default is:
Install file: "$SOURCE" as "$TARGET"
- INTEL_C_COMPILER_VERSION
- Set by the "intelc" Tool to the major version
number of the Intel C compiler selected for use.
- JAR
- The Java archive tool.
- JARCHDIR
- The directory to which the Java archive tool should change
(using the -C option).
- JARCOM
- The command line used to call the Java archive tool.
- JARCOMSTR
- The string displayed when the Java archive tool is called
If this is not set, then $JARCOM (the command line) is displayed.
env = Environment(JARCOMSTR = "JARchiving $SOURCES into $TARGET")
- JARFLAGS
- General options passed to the Java archive tool. By default
this is set to cf to create the necessary jar file.
- JARSUFFIX
- The suffix for Java archives: .jar by default.
- JAVABOOTCLASSPATH
- Specifies the list of directories that will be added to the
&javac; command line via the -bootclasspath option. The
individual directory names will be separated by the operating system's
path separate character ( : on UNIX/Linux/POSIX, ; on
Windows).
- JAVAC
- The Java compiler.
- JAVACCOM
- The command line used to compile a directory tree
containing Java source files to corresponding Java class files. Any
options specified in the $JAVACFLAGS construction variable are
included on this command line.
- JAVACCOMSTR
- The string displayed when compiling a directory tree of
Java source files to corresponding Java class files. If this is not set,
then $JAVACCOM (the command line) is displayed.
env = Environment(JAVACCOMSTR = "Compiling class files $TARGETS from $SOURCES")
- JAVACFLAGS
- General options that are passed to the Java compiler.
- JAVACLASSDIR
- The directory in which Java class files may be found. This
is stripped from the beginning of any Java .class file names supplied to
the JavaH builder.
- JAVACLASSPATH
- Specifies the list of directories that will be searched for
Java .class file. The directories in this list will be added to the
&javac; and &javah; command lines via the -classpath
option. The individual directory names will be separated by the operating
system's path separate character ( : on UNIX/Linux/POSIX, ;
on Windows).
- JAVACLASSSUFFIX
- The suffix for Java class files; .class by default.
- JAVAH
- The Java generator for C header and stub files.
- JAVAHCOM
- The command line used to generate C header and stub files
from Java classes. Any options specified in the $JAVAHFLAGS
construction variable are included on this command line.
- JAVAHCOMSTR
- The string displayed when C header and stub files are
generated from Java classes. If this is not set, then $JAVAHCOM
(the command line) is displayed.
env = Environment(JAVAHCOMSTR = "Generating header/stub file(s) $TARGETS from $SOURCES")
- JAVAHFLAGS
- General options passed to the C header and stub file
generator for Java classes.
- JAVASOURCEPATH
- Specifies the list of directories that will be searched for
input .java file. The directories in this list will be added to the
&javac; command line via the -sourcepath option. The individual
directory names will be separated by the operating system's path separate
character ( : on UNIX/Linux/POSIX, ; on Windows).
- JAVASUFFIX
- The suffix for Java files; .java by default.
- JAVAVERSION
- Specifies the Java version being used by the Java()
builder. This is not currently used to select one version of the
Java compiler vs. another. Instead, you should set this to specify the
version of Java supported by your &javac; compiler. The default is
1.4.
- LATEX
- The LaTeX structured formatter and typesetter.
- LATEXCOM
- The command line used to call the LaTeX structured
formatter and typesetter.
- LATEXCOMSTR
- The string displayed when calling the LaTeX structured
formatter and typesetter. If this is not set, then $LATEXCOM (the
command line) is displayed.
env = Environment(LATEXCOMSTR = "Building $TARGET from LaTeX input $SOURCES")
- LATEXFLAGS
- General options passed to the LaTeX structured formatter
and typesetter.
- LATEXRETRIES
- The maximum number of times that LaTeX will be re-run if
the .log generated by the $LATEXCOM command indicates that
there are undefined references. The default is to try to resolve undefined
references by re-running LaTeX up to three times.
- LATEXSUFFIXES
- The list of suffixes of files that will be scanned for
LaTeX implicit dependencies ( \include or \import files).
The default list is:
[".tex", ".ltx", ".latex"]
- LDMODULE
- The linker for building loadable modules. By default, this
is the same as $SHLINK.
- LDMODULECOM
- The command line for building loadable modules. On Mac OS
X, this uses the $LDMODULE, $LDMODULEFLAGS and
$FRAMEWORKSFLAGS variables. On other systems, this is the same as
$SHLINK.
- LDMODULECOMSTR
- The string displayed when building loadable modules. If
this is not set, then $LDMODULECOM (the command line) is displayed.
- LDMODULEFLAGS
- General user options passed to the linker for building
loadable modules.
- LDMODULEPREFIX
- The prefix used for loadable module file names. On Mac OS
X, this is null; on other systems, this is the same as
$SHLIBPREFIX.
- LDMODULESUFFIX
- The suffix used for loadable module file names. On Mac OS
X, this is null; on other systems, this is the same as $SHLIBSUFFIX.
- LEX
- The lexical analyzer generator.
- LEXCOM
- The command line used to call the lexical analyzer
generator to generate a source file.
- LEXCOMSTR
- The string displayed when generating a source file using
the lexical analyzer generator. If this is not set, then $LEXCOM
(the command line) is displayed.
env = Environment(LEXCOMSTR = "Lex'ing $TARGET from $SOURCES")
- LEXFLAGS
- General options passed to the lexical analyzer generator.
- _LIBDIRFLAGS
- An automatically-generated construction variable containing
the linker command-line options for specifying directories to be searched
for library. The value of $_LIBDIRFLAGS is created by appending
$LIBDIRPREFIX and $LIBDIRSUFFIX to the beginning and end of
each directory in $LIBPATH.
- LIBDIRPREFIX
- The prefix used to specify a library directory on the
linker command line. This will be appended to the beginning of each
directory in the $LIBPATH construction variable when the
$_LIBDIRFLAGS variable is automatically generated.
- LIBDIRSUFFIX
- The suffix used to specify a library directory on the
linker command line. This will be appended to the end of each directory in
the $LIBPATH construction variable when the $_LIBDIRFLAGS
variable is automatically generated.
- LIBEMITTER
- TODO
- _LIBFLAGS
- An automatically-generated construction variable containing
the linker command-line options for specifying libraries to be linked with
the resulting target. The value of $_LIBFLAGS is created by
appending $LIBLINKPREFIX and $LIBLINKSUFFIX to the beginning
and end of each filename in $LIBS.
- LIBLINKPREFIX
- The prefix used to specify a library to link on the linker
command line. This will be appended to the beginning of each library in
the $LIBS construction variable when the $_LIBFLAGS variable
is automatically generated.
- LIBLINKSUFFIX
- The suffix used to specify a library to link on the linker
command line. This will be appended to the end of each library in the
$LIBS construction variable when the $_LIBFLAGS variable is
automatically generated.
- LIBPATH
- The list of directories that will be searched for
libraries. The implicit dependency scanner will search these directories
for include files. Don't explicitly put include directory arguments in
$LINKFLAGS or $SHLINKFLAGS because the result will be
non-portable and the directories will not be searched by the dependency
scanner. Note: directory names in LIBPATH will be looked-up relative to
the SConscript directory when they are used in a command. To force
scons to look-up a directory relative to the root of the source
tree use #:
env = Environment(LIBPATH='#/libs')
- The directory look-up can also be forced using the
Dir() function:
libs = Dir('libs') env = Environment(LIBPATH=libs)
- The directory list will be added to command lines through
the automatically-generated $_LIBDIRFLAGS construction variable,
which is constructed by appending the values of the
$LIBDIRPREFIXand$LIBDIRSUFFIX construction variables to the
beginning and end of each directory in $LIBPATH. Any command lines
you define that need the LIBPATH directory list should include
$_LIBDIRFLAGS:
env = Environment(LINKCOM="my_linker $_LIBDIRFLAGS $_LIBFLAGS -o $TARGET $SOURCE")
- LIBPREFIX
- The prefix used for (static) library file names. A default
value is set for each platform (posix, win32, os2, etc.), but the value is
overridden by individual tools (ar, mslib, sgiar, sunar, tlib, etc.) to
reflect the names of the libraries they create.
- LIBPREFIXES
- A list of all legal prefixes for library file names. When
searching for library dependencies, SCons will look for files with these
prefixes, the base library name, and suffixes in the $LIBSUFFIXES
list.
- LIBS
- A list of one or more libraries that will be linked with
any executable programs created by this environment.
env = Environment(LINKCOM="my_linker $_LIBDIRFLAGS $_LIBFLAGS -o $TARGET $SOURCE")
- If you add a File object to the $LIBS list, the name
of that file will be added to $_LIBFLAGS, and thus the link line,
as is, without $LIBLINKPREFIX or $LIBLINKSUFFIX. For
example:
env.Append(LIBS=File('/tmp/mylib.so'))
- In all cases, scons will add dependencies from the
executable program to all the libraries in this list.
- LIBSUFFIX
- The suffix used for (static) library file names. A default
value is set for each platform (posix, win32, os2, etc.), but the value is
overridden by individual tools (ar, mslib, sgiar, sunar, tlib, etc.) to
reflect the names of the libraries they create.
- LIBSUFFIXES
- A list of all legal suffixes for library file names. When
searching for library dependencies, SCons will look for files with
prefixes, in the $LIBPREFIXES list, the base library name, and
these suffixes.
- LICENSE
- The abbreviated name of the license under which this
project is released (gpl, lpgl, bsd etc.). See
http://www.opensource.org/licenses/alphabetical for a list of license
names.
- LINESEPARATOR
- The separator used by the Substfile() and
Textfile() builders. This value is used between sources when
constructing the target. It defaults to the current system line separator.
- LINGUAS_FILE
- The $LINGUAS_FILE defines file(s) containing list of
additional linguas to be processed by POInit(), POUpdate()
or MOFiles() builders. It also affects Translate() builder.
If the variable contains a string, it defines name of the list file. The
$LINGUAS_FILE may be a list of file names as well. If
$LINGUAS_FILE is set to True (or non-zero numeric value),
the list will be read from default file named LINGUAS.
- LINK
- The linker.
- LINKCOM
- The command line used to link object files into an
executable.
- LINKCOMSTR
- The string displayed when object files are linked into an
executable. If this is not set, then $LINKCOM (the command line) is
displayed.
env = Environment(LINKCOMSTR = "Linking $TARGET")
- LINKFLAGS
- General user options passed to the linker. Note that this
variable should not contain -l (or similar) options for
linking with the libraries listed in $LIBS, nor -L (or
similar) library search path options that scons generates automatically
from $LIBPATH. See $_LIBFLAGS above, for the variable that
expands to library-link options, and $_LIBDIRFLAGS above, for the
variable that expands to library search path options.
- M4
- The M4 macro preprocessor.
- M4COM
- The command line used to pass files through the M4 macro
preprocessor.
- M4COMSTR
- The string displayed when a file is passed through the M4
macro preprocessor. If this is not set, then $M4COM (the command
line) is displayed.
- M4FLAGS
- General options passed to the M4 macro preprocessor.
- MAKEINDEX
- The makeindex generator for the TeX formatter and
typesetter and the LaTeX structured formatter and typesetter.
- MAKEINDEXCOM
- The command line used to call the makeindex generator for
the TeX formatter and typesetter and the LaTeX structured formatter and
typesetter.
- MAKEINDEXCOMSTR
- The string displayed when calling the makeindex generator
for the TeX formatter and typesetter and the LaTeX structured formatter
and typesetter. If this is not set, then $MAKEINDEXCOM (the command
line) is displayed.
- MAKEINDEXFLAGS
- General options passed to the makeindex generator for the
TeX formatter and typesetter and the LaTeX structured formatter and
typesetter.
- MAXLINELENGTH
- The maximum number of characters allowed on an external
command line. On Win32 systems, link lines longer than this many
characters are linked via a temporary file name.
- MIDL
- The Microsoft IDL compiler.
- MIDLCOM
- The command line used to pass files to the Microsoft IDL
compiler.
- MIDLCOMSTR
- The string displayed when the Microsoft IDL copmiler is
called. If this is not set, then $MIDLCOM (the command line) is
displayed.
- MIDLFLAGS
- General options passed to the Microsoft IDL compiler.
- MOSUFFIX
- Suffix used for MO files (default: '.mo').
See &t-link-msgfmt; tool and MOFiles() builder.
- MSGFMT
- Absolute path to msgfmt(1) binary, found by
Detect(). See &t-link-msgfmt; tool and MOFiles()
builder.
- MSGFMTCOM
- Complete command line to run msgfmt(1) program. See
&t-link-msgfmt; tool and MOFiles() builder.
- MSGFMTCOMSTR
- String to display when msgfmt(1) is invoked
(default: '', which means ``print $MSGFMTCOM''). See
&t-link-msgfmt; tool and MOFiles() builder.
- MSGFMTFLAGS
- Additional flags to msgfmt(1). See
&t-link-msgfmt; tool and MOFiles() builder.
- MSGINIT
- Path to msginit(1) program (found via
Detect()). See &t-link-msginit; tool and POInit()
builder.
- MSGINITCOM
- Complete command line to run msginit(1) program. See
&t-link-msginit; tool and POInit() builder.
- MSGINITCOMSTR
- String to display when msginit(1) is invoked
(default: '', which means ``print $MSGINITCOM''). See
&t-link-msginit; tool and POInit() builder.
- MSGINITFLAGS
- List of additional flags to msginit(1) (default:
[]). See &t-link-msginit; tool and POInit() builder.
- _MSGINITLOCALE
- Internal ``macro''. Computes locale (language) name based
on target filename (default: '${TARGET.filebase}' ).
- MSGMERGE
- Absolute path to msgmerge(1) binary as found by
Detect(). See &t-link-msgmerge; tool and POUpdate()
builder.
- MSGMERGECOM
- Complete command line to run msgmerge(1) command.
See &t-link-msgmerge; tool and POUpdate() builder.
- MSGMERGECOMSTR
- String to be displayed when msgmerge(1) is invoked
(default: '', which means ``print $MSGMERGECOM''). See
&t-link-msgmerge; tool and POUpdate() builder.
- MSGMERGEFLAGS
- Additional flags to msgmerge(1) command. See
&t-link-msgmerge; tool and POUpdate() builder.
- MSSDK_DIR
- The directory containing the Microsoft SDK (either Platform
SDK or Windows SDK) to be used for compilation.
- MSSDK_VERSION
- The version string of the Microsoft SDK (either Platform
SDK or Windows SDK) to be used for compilation. Supported versions include
6.1, 6.0A, 6.0, 2003R2 and 2003R1.
- MSVC_BATCH
- When set to any true value, specifies that SCons should
batch compilation of object files when calling the Microsoft Visual C/C++
compiler. All compilations of source files from the same source directory
that generate target files in a same output directory and were configured
in SCons using the same construction environment will be built in a single
call to the compiler. Only source files that have changed since their
object files were built will be passed to each compiler invocation (via
the $CHANGED_SOURCES construction variable). Any compilations where
the object (target) file base name (minus the .obj) does not match
the source file base name will be compiled separately.
- MSVC_USE_SCRIPT
- Use a batch script to set up Microsoft Visual Studio
compiler
- MSVC_VERSION
- Sets the preferred version of Microsoft Visual C/C++ to
use.
- MSVS
- When the Microsoft Visual Studio tools are initialized,
they set up this dictionary with the following keys:
- MSVS_ARCH
- Sets the architecture for which the generated project(s)
should build.
- MSVS_PROJECT_GUID
- The string placed in a generated Microsoft Visual Studio
project file as the value of the ProjectGUID attribute. There is no
default value. If not defined, a new GUID is generated.
- MSVS_SCC_AUX_PATH
- The path name placed in a generated Microsoft Visual Studio
project file as the value of the SccAuxPath attribute if the
MSVS_SCC_PROVIDER construction variable is also set. There is no
default value.
- MSVS_SCC_CONNECTION_ROOT
- The root path of projects in your SCC workspace, i.e the
path under which all project and solution files will be generated. It is
used as a reference path from which the relative paths of the generated
Microsoft Visual Studio project and solution files are computed. The
relative project file path is placed as the value of the
SccLocalPath attribute of the project file and as the values of the
SccProjectFilePathRelativizedFromConnection[i] (where [i] ranges
from 0 to the number of projects in the solution) attributes of the
GlobalSection(SourceCodeControl) section of the Microsoft Visual
Studio solution file. Similarly the relative solution file path is placed
as the values of the SccLocalPath[i] (where [i] ranges from 0 to
the number of projects in the solution) attributes of the
GlobalSection(SourceCodeControl) section of the Microsoft Visual
Studio solution file. This is used only if the MSVS_SCC_PROVIDER
construction variable is also set. The default value is the current
working directory.
- MSVS_SCC_PROJECT_NAME
- The project name placed in a generated Microsoft Visual
Studio project file as the value of the SccProjectName attribute if
the MSVS_SCC_PROVIDER construction variable is also set. In this
case the string is also placed in the SccProjectName0 attribute of
the GlobalSection(SourceCodeControl) section of the Microsoft
Visual Studio solution file. There is no default value.
- MSVS_SCC_PROVIDER
- The string placed in a generated Microsoft Visual Studio
project file as the value of the SccProvider attribute. The string
is also placed in the SccProvider0 attribute of the
GlobalSection(SourceCodeControl) section of the Microsoft Visual
Studio solution file. There is no default value.
- MSVS_VERSION
- Sets the preferred version of Microsoft Visual Studio to
use.
- MSVSBUILDCOM
- The build command line placed in a generated Microsoft
Visual Studio project file. The default is to have Visual Studio invoke
SCons with any specified build targets.
- MSVSCLEANCOM
- The clean command line placed in a generated Microsoft
Visual Studio project file. The default is to have Visual Studio invoke
SCons with the -c option to remove any specified targets.
- MSVSENCODING
- The encoding string placed in a generated Microsoft Visual
Studio project file. The default is encoding Windows-1252.
- MSVSPROJECTCOM
- The action used to generate Microsoft Visual Studio project
files.
- MSVSPROJECTSUFFIX
- The suffix used for Microsoft Visual Studio project (DSP)
files. The default value is .vcproj when using Visual Studio
version 7.x (.NET) or later version, and .dsp when using earlier
versions of Visual Studio.
- MSVSREBUILDCOM
- The rebuild command line placed in a generated Microsoft
Visual Studio project file. The default is to have Visual Studio invoke
SCons with any specified rebuild targets.
- MSVSSCONS
- The SCons used in generated Microsoft Visual Studio project
files. The default is the version of SCons being used to generate the
project file.
- MSVSSCONSCOM
- The default SCons command used in generated Microsoft
Visual Studio project files.
- MSVSSCONSCRIPT
- The sconscript file (that is, SConstruct or
SConscript file) that will be invoked by Visual Studio project
files (through the $MSVSSCONSCOM variable). The default is the same
sconscript file that contains the call to MSVSProject() to build
the project file.
- MSVSSCONSFLAGS
- The SCons flags used in generated Microsoft Visual Studio
project files.
- MSVSSOLUTIONCOM
- The action used to generate Microsoft Visual Studio
solution files.
- MSVSSOLUTIONSUFFIX
- The suffix used for Microsoft Visual Studio solution (DSW)
files. The default value is .sln when using Visual Studio version
7.x (.NET), and .dsw when using earlier versions of Visual Studio.
- MT
- The program used on Windows systems to embed manifests into
DLLs and EXEs. See also $WINDOWS_EMBED_MANIFEST.
- MTEXECOM
- The Windows command line used to embed manifests into
executables. See also $MTSHLIBCOM.
- MTFLAGS
- Flags passed to the $MT manifest embedding program
(Windows only).
- MTSHLIBCOM
- The Windows command line used to embed manifests into
shared libraries (DLLs). See also $MTEXECOM.
- MWCW_VERSION
- The version number of the MetroWerks CodeWarrior C compiler
to be used.
- MWCW_VERSIONS
- A list of installed versions of the MetroWerks CodeWarrior
C compiler on this system.
- NAME
- Specfies the name of the project to package.
- no_import_lib
- When set to non-zero, suppresses creation of a
corresponding Windows static import lib by the SharedLibrary
builder when used with MinGW, Microsoft Visual Studio or Metrowerks. This
also suppresses creation of an export (.exp) file when using Microsoft
Visual Studio.
- OBJPREFIX
- The prefix used for (static) object file names.
- OBJSUFFIX
- The suffix used for (static) object file names.
- P4
- The Perforce executable.
- P4COM
- The command line used to fetch source files from Perforce.
- P4COMSTR
- The string displayed when fetching a source file from
Perforce. If this is not set, then $P4COM (the command line) is
displayed.
- P4FLAGS
- General options that are passed to Perforce.
- PACKAGEROOT
- Specifies the directory where all files in resulting
archive will be placed if applicable. The default value is
"$NAME-$VERSION".
- PACKAGETYPE
- Selects the package type to build. Currently these are
available:
* msi - Microsoft Installer
* rpm - Redhat Package Manger
* ipkg - Itsy Package Management System
* tarbz2 - compressed tar
* targz - compressed tar
* zip - zip file
* src_tarbz2 - compressed tar source
* src_targz - compressed tar source
* src_zip - zip file source
- PACKAGEVERSION
- The version of the package (not the underlying project).
This is currently only used by the rpm packager and should reflect changes
in the packaging, not the underlying project code itself.
- PCH
- The Microsoft Visual C++ precompiled header that will be
used when compiling object files. This variable is ignored by tools other
than Microsoft Visual C++. When this variable is defined SCons will add
options to the compiler command line to cause it to use the precompiled
header, and will also set up the dependencies for the PCH file. Example:
env['PCH'] = 'StdAfx.pch'
- PCHCOM
- The command line used by the PCH() builder to
generated a precompiled header.
- PCHCOMSTR
- The string displayed when generating a precompiled header.
If this is not set, then $PCHCOM (the command line) is displayed.
- PCHPDBFLAGS
- A construction variable that, when expanded, adds the
/yD flag to the command line only if the $PDB construction
variable is set.
- PCHSTOP
- This variable specifies how much of a source file is
precompiled. This variable is ignored by tools other than Microsoft Visual
C++, or when the PCH variable is not being used. When this variable is
define it must be a string that is the name of the header that is included
at the end of the precompiled portion of the source files, or the empty
string if the "#pragma hrdstop" construct is being used:
env['PCHSTOP'] = 'StdAfx.h'
- PDB
- The Microsoft Visual C++ PDB file that will store debugging
information for object files, shared libraries, and programs. This
variable is ignored by tools other than Microsoft Visual C++. When this
variable is defined SCons will add options to the compiler and linker
command line to cause them to generate external debugging information, and
will also set up the dependencies for the PDB file. Example:
env['PDB'] = 'hello.pdb'
- The Visual C++ compiler switch that SCons uses by default
to generate PDB information is /Z7. This works correctly with
parallel ( -j) builds because it embeds the debug information in
the intermediate object files, as opposed to sharing a single PDB file
between multiple object files. This is also the only way to get debug
information embedded into a static library. Using the /Zi instead
may yield improved link-time performance, although parallel builds will no
longer work. You can generate PDB files with the /Zi switch by
overriding the default $CCPDBFLAGS variable; see the entry for that
variable for specific examples.
- PDFCOM
- A deprecated synonym for $DVIPDFCOM.
- PDFLATEX
- The &pdflatex; utility.
- PDFLATEXCOM
- The command line used to call the &pdflatex; utility.
- PDFLATEXCOMSTR
- The string displayed when calling the &pdflatex;
utility. If this is not set, then $PDFLATEXCOM (the command line)
is displayed.
env = Environment(PDFLATEX;COMSTR = "Building $TARGET from LaTeX input $SOURCES")
- PDFLATEXFLAGS
- General options passed to the &pdflatex; utility.
- PDFPREFIX
- The prefix used for PDF file names.
- PDFSUFFIX
- The suffix used for PDF file names.
- PDFTEX
- The &pdftex; utility.
- PDFTEXCOM
- The command line used to call the &pdftex; utility.
- PDFTEXCOMSTR
- The string displayed when calling the &pdftex; utility.
If this is not set, then $PDFTEXCOM (the command line) is
displayed.
env = Environment(PDFTEXCOMSTR = "Building $TARGET from TeX input $SOURCES")
- PDFTEXFLAGS
- General options passed to the &pdftex; utility.
- PKGCHK
- On Solaris systems, the package-checking program that will
be used (along with $PKGINFO) to look for installed versions of the
Sun PRO C++ compiler. The default is /usr/sbin/pgkchk.
- PKGINFO
- On Solaris systems, the package information program that
will be used (along with $PKGCHK) to look for installed versions of
the Sun PRO C++ compiler. The default is pkginfo.
- PLATFORM
- The name of the platform used to create the Environment. If
no platform is specified when the Environment is created, scons
autodetects the platform.
env = Environment(tools = []) if env['PLATFORM'] == 'cygwin': Tool('mingw')(env) else: Tool('msvc')(env)
- POAUTOINIT
- The $POAUTOINIT variable, if set to True (on
non-zero numeric value), let the &t-link-msginit; tool to
automatically initialize missing PO files with
msginit(1). This applies to both, POInit() and
POUpdate() builders (and others that use any of them).
- POCREATE_ALIAS
- Common alias for all PO files created with
POInit() builder (default: 'po-create'). See
&t-link-msginit; tool and POInit() builder.
- POSUFFIX
- Suffix used for PO files (default: '.po') See
&t-link-msginit; tool and POInit() builder.
- POTDOMAIN
- The $POTDOMAIN defines default domain, used to
generate POT filename as $POTDOMAIN.pot
when no POT file name is provided by the user. This
applies to POTUpdate(), POInit() and
POUpdate() builders (and builders, that use them,
e.g. Translate()). Normally (if $POTDOMAIN
is not defined), the builders use messages.pot as
default POT file name.
- POTSUFFIX
- Suffix used for PO Template files (default: '.pot').
See &t-link-xgettext; tool and POTUpdate() builder.
- POTUPDATE_ALIAS
- Name of the common phony target for all PO Templates
created with
POUpdate()(default:'pot-update').
See &t-link-xgettext; tool and POTUpdate()
builder.
- POUPDATE_ALIAS
- Common alias for all PO files being defined with
POUpdate
()builder(default:'po-update').
See &t-link-msgmerge; tool and POUpdate()
builder.
- PRINT_CMD_LINE_FUNC
- A Python function used to print the command lines as they
are executed (assuming command printing is not disabled by the -q
or -s options or their equivalents). The function should take four
arguments: s, the command being executed (a string), target,
the target being built (file node, list, or string name(s)),
source, the source(s) used (file node, list, or string name(s)),
and env, the environment being used.
def print_cmd_line(s, target, source, env): sys.stdout.write(s + "\n")
- Here's an example of a more interesting function:
def print_cmd_line(s, target, source, env): sys.stdout.write("Building %s -> %s...\n" % (' and '.join([str(x) for x in source]), ' and '.join([str(x) for x in target]))) env=Environment(PRINT_CMD_LINE_FUNC=print_cmd_line) env.Program('foo', 'foo.c')
- This just prints "Building targetname from
sourcename..." instead of the actual commands. Such a function
could also log the actual commands to a log file, for example.
- PROGEMITTER
- TODO
- PROGPREFIX
- The prefix used for executable file names.
- PROGSUFFIX
- The suffix used for executable file names.
- PSCOM
- The command line used to convert TeX DVI files into a
PostScript file.
- PSCOMSTR
- The string displayed when a TeX DVI file is converted into
a PostScript file. If this is not set, then $PSCOM (the command
line) is displayed.
- PSPREFIX
- The prefix used for PostScript file names.
- PSSUFFIX
- The prefix used for PostScript file names.
- QT_AUTOSCAN
- Turn off scanning for mocable files. Use the Moc Builder to
explicitly specify files to run moc on.
- QT_BINPATH
- The path where the qt binaries are installed. The default
value is ' $QTDIR/bin'.
- QT_CPPPATH
- The path where the qt header files are installed. The
default value is ' $QTDIR/include'. Note: If you set this variable
to None, the tool won't change the $CPPPATH construction variable.
- QT_DEBUG
- Prints lots of debugging information while scanning for moc
files.
- QT_LIB
- Default value is 'qt'. You may want to set this to 'qt-mt'.
Note: If you set this variable to None, the tool won't change the
$LIBS variable.
- QT_LIBPATH
- The path where the qt libraries are installed. The default
value is ' $QTDIR/lib'. Note: If you set this variable to None, the
tool won't change the $LIBPATH construction variable.
- QT_MOC
- Default value is '$QT_BINPATH/moc'.
- QT_MOCCXXPREFIX
- Default value is ''. Prefix for moc output files, when
source is a cxx file.
- QT_MOCCXXSUFFIX
- Default value is '.moc'. Suffix for moc output files, when
source is a cxx file.
- QT_MOCFROMCXXCOM
- Command to generate a moc file from a cpp file.
- QT_MOCFROMCXXCOMSTR
- The string displayed when generating a moc file from a cpp
file. If this is not set, then $QT_MOCFROMCXXCOM (the command line)
is displayed.
- QT_MOCFROMCXXFLAGS
- Default value is '-i'. These flags are passed to moc, when
moccing a C++ file.
- QT_MOCFROMHCOM
- Command to generate a moc file from a header.
- QT_MOCFROMHCOMSTR
- The string displayed when generating a moc file from a cpp
file. If this is not set, then $QT_MOCFROMHCOM (the command line)
is displayed.
- QT_MOCFROMHFLAGS
- Default value is ''. These flags are passed to moc, when
moccing a header file.
- QT_MOCHPREFIX
- Default value is 'moc_'. Prefix for moc output files, when
source is a header.
- QT_MOCHSUFFIX
- Default value is '$CXXFILESUFFIX'. Suffix for moc
output files, when source is a header.
- QT_UIC
- Default value is '$QT_BINPATH/uic'.
- QT_UICCOM
- Command to generate header files from .ui files.
- QT_UICCOMSTR
- The string displayed when generating header files from .ui
files. If this is not set, then $QT_UICCOM (the command line) is
displayed.
- QT_UICDECLFLAGS
- Default value is ''. These flags are passed to uic, when
creating a a h file from a .ui file.
- QT_UICDECLPREFIX
- Default value is ''. Prefix for uic generated header files.
- QT_UICDECLSUFFIX
- Default value is '.h'. Suffix for uic generated header
files.
- QT_UICIMPLFLAGS
- Default value is ''. These flags are passed to uic, when
creating a cxx file from a .ui file.
- QT_UICIMPLPREFIX
- Default value is 'uic_'. Prefix for uic generated
implementation files.
- QT_UICIMPLSUFFIX
- Default value is '$CXXFILESUFFIX'. Suffix for uic
generated implementation files.
- QT_UISUFFIX
- Default value is '.ui'. Suffix of designer input files.
- QTDIR
- The qt tool tries to take this from os.environ. It also
initializes all QT_* construction variables listed below. (Note that all
paths are constructed with python's os.path.join() method, but are listed
here with the '/' separator for easier reading.) In addition, the
construction environment variables $CPPPATH, $LIBPATH and
$LIBS may be modified and the variables
$PROGEMITTER,$SHLIBEMITTERand$LIBEMITTER
are modified. Because the build-performance is affected when using this
tool, you have to explicitly specify it at Environment
creation:
Environment(tools=['default','qt'])
- The qt tool supports the following operations:
- RANLIB
- The archive indexer.
- RANLIBCOM
- The command line used to index a static library archive.
- RANLIBCOMSTR
- The string displayed when a static library archive is
indexed. If this is not set, then $RANLIBCOM (the command line) is
displayed.
env = Environment(RANLIBCOMSTR = "Indexing $TARGET")
- RANLIBFLAGS
- General options passed to the archive indexer.
- RC
- The resource compiler used to build a Microsoft Visual C++
resource file.
- RCCOM
- The command line used to build a Microsoft Visual C++
resource file.
- RCCOMSTR
- The string displayed when invoking the resource compiler to
build a Microsoft Visual C++ resource file. If this is not set, then
$RCCOM (the command line) is displayed.
- RCFLAGS
- The flags passed to the resource compiler by the RES
builder.
- RCINCFLAGS
- An automatically-generated construction variable containing
the command-line options for specifying directories to be searched by the
resource compiler. The value of $RCINCFLAGS is created by appending
$RCINCPREFIX and $RCINCSUFFIX to the beginning and end of
each directory in $CPPPATH.
- RCINCPREFIX
- The prefix (flag) used to specify an include directory on
the resource compiler command line. This will be appended to the beginning
of each directory in the $CPPPATH construction variable when the
$RCINCFLAGS variable is expanded.
- RCINCSUFFIX
- The suffix used to specify an include directory on the
resource compiler command line. This will be appended to the end of each
directory in the $CPPPATH construction variable when the
$RCINCFLAGS variable is expanded.
- RCS
- The RCS executable. Note that this variable is not actually
used for the command to fetch source files from RCS; see the
$RCS_CO construction variable, below.
- RCS_CO
- The RCS "checkout" executable, used to fetch
source files from RCS.
- RCS_COCOM
- The command line used to fetch (checkout) source files from
RCS.
- RCS_COCOMSTR
- The string displayed when fetching a source file from RCS.
If this is not set, then $RCS_COCOM (the command line) is
displayed.
- RCS_COFLAGS
- Options that are passed to the $RCS_CO command.
- RDirs
- A function that converts a string into a list of Dir
instances by searching the repositories.
- REGSVR
- The program used on Windows systems to register a
newly-built DLL library whenever the SharedLibrary() builder is
passed a keyword argument of register=1.
- REGSVRCOM
- The command line used on Windows systems to register a
newly-built DLL library whenever the SharedLibrary() builder is
passed a keyword argument of register=1.
- REGSVRCOMSTR
- The string displayed when registering a newly-built DLL
file. If this is not set, then $REGSVRCOM (the command line) is
displayed.
- REGSVRFLAGS
- Flags passed to the DLL registration program on Windows
systems when a newly-built DLL library is registered. By default, this
includes the /s that prevents dialog boxes from popping up and
requiring user attention.
- RMIC
- The Java RMI stub compiler.
- RMICCOM
- The command line used to compile stub and skeleton class
files from Java classes that contain RMI implementations. Any options
specified in the $RMICFLAGS construction variable are included on
this command line.
- RMICCOMSTR
- The string displayed when compiling stub and skeleton class
files from Java classes that contain RMI implementations. If this is not
set, then $RMICCOM (the command line) is displayed.
env = Environment(RMICCOMSTR = "Generating stub/skeleton class files $TARGETS from $SOURCES")
- RMICFLAGS
- General options passed to the Java RMI stub compiler.
- _RPATH
- An automatically-generated construction variable containing
the rpath flags to be used when linking a program with shared libraries.
The value of $_RPATH is created by appending $RPATHPREFIX
and $RPATHSUFFIX to the beginning and end of each directory in
$RPATH.
- RPATH
- A list of paths to search for shared libraries when running
programs. Currently only used in the GNU (gnulink), IRIX (sgilink) and Sun
(sunlink) linkers. Ignored on platforms and toolchains that don't support
it. Note that the paths added to RPATH are not transformed by scons
in any way: if you want an absolute path, you must make it absolute
yourself.
- RPATHPREFIX
- The prefix used to specify a directory to be searched for
shared libraries when running programs. This will be appended to the
beginning of each directory in the $RPATH construction variable
when the $_RPATH variable is automatically generated.
- RPATHSUFFIX
- The suffix used to specify a directory to be searched for
shared libraries when running programs. This will be appended to the end
of each directory in the $RPATH construction variable when the
$_RPATH variable is automatically generated.
- RPCGEN
- The RPC protocol compiler.
- RPCGENCLIENTFLAGS
- Options passed to the RPC protocol compiler when generating
client side stubs. These are in addition to any flags specified in the
$RPCGENFLAGS construction variable.
- RPCGENFLAGS
- General options passed to the RPC protocol compiler.
- RPCGENHEADERFLAGS
- Options passed to the RPC protocol compiler when generating
a header file. These are in addition to any flags specified in the
$RPCGENFLAGS construction variable.
- RPCGENSERVICEFLAGS
- Options passed to the RPC protocol compiler when generating
server side stubs. These are in addition to any flags specified in the
$RPCGENFLAGS construction variable.
- RPCGENXDRFLAGS
- Options passed to the RPC protocol compiler when generating
XDR routines. These are in addition to any flags specified in the
$RPCGENFLAGS construction variable.
- SCANNERS
- A list of the available implicit dependency scanners. New
file scanners may be added by appending to this list, although the more
flexible approach is to associate scanners with a specific Builder. See
the sections "Builder Objects" and "Scanner Objects,"
below, for more information.
- SCCS
- The SCCS executable.
- SCCSCOM
- The command line used to fetch source files from SCCS.
- SCCSCOMSTR
- The string displayed when fetching a source file from a CVS
repository. If this is not set, then $SCCSCOM (the command line) is
displayed.
- SCCSFLAGS
- General options that are passed to SCCS.
- SCCSGETFLAGS
- Options that are passed specifically to the SCCS
"get" subcommand. This can be set, for example, to -e to
check out editable files from SCCS.
- SCONS_HOME
- The (optional) path to the SCons library directory,
initialized from the external environment. If set, this is used to
construct a shorter and more efficient search path in the
$MSVSSCONS command line executed from Microsoft Visual Studio
project files.
- SHCC
- The C compiler used for generating shared-library objects.
- SHCCCOM
- The command line used to compile a C source file to a
shared-library object file. Any options specified in the $SHCFLAGS,
$SHCCFLAGS and $CPPFLAGS construction variables are included
on this command line.
- SHCCCOMSTR
- The string displayed when a C source file is compiled to a
shared object file. If this is not set, then $SHCCCOM (the command
line) is displayed.
env = Environment(SHCCCOMSTR = "Compiling shared object $TARGET")
- SHCCFLAGS
- Options that are passed to the C and C++ compilers to
generate shared-library objects.
- SHCFLAGS
- Options that are passed to the C compiler (only; not C++)
to generate shared-library objects.
- SHCXX
- The C++ compiler used for generating shared-library
objects.
- SHCXXCOM
- The command line used to compile a C++ source file to a
shared-library object file. Any options specified in the
$SHCXXFLAGS and $CPPFLAGS construction variables are
included on this command line.
- SHCXXCOMSTR
- The string displayed when a C++ source file is compiled to
a shared object file. If this is not set, then $SHCXXCOM (the
command line) is displayed.
env = Environment(SHCXXCOMSTR = "Compiling shared object $TARGET")
- SHCXXFLAGS
- Options that are passed to the C++ compiler to generate
shared-library objects.
- SHELL
- A string naming the shell program that will be passed to
the $SPAWN function. See the $SPAWN construction variable
for more information.
- SHF77
- The Fortran 77 compiler used for generating shared-library
objects. You should normally set the $SHFORTRAN variable, which
specifies the default Fortran compiler for all Fortran versions. You only
need to set $SHF77 if you need to use a specific compiler or
compiler version for Fortran 77 files.
- SHF77COM
- The command line used to compile a Fortran 77 source file
to a shared-library object file. You only need to set $SHF77COM if
you need to use a specific command line for Fortran 77 files. You should
normally set the $SHFORTRANCOM variable, which specifies the
default command line for all Fortran versions.
- SHF77COMSTR
- The string displayed when a Fortran 77 source file is
compiled to a shared-library object file. If this is not set, then
$SHF77COM or $SHFORTRANCOM (the command line) is displayed.
- SHF77FLAGS
- Options that are passed to the Fortran 77 compiler to
generated shared-library objects. You only need to set $SHF77FLAGS
if you need to define specific user options for Fortran 77 files. You
should normally set the $SHFORTRANFLAGS variable, which specifies
the user-specified options passed to the default Fortran compiler for all
Fortran versions.
- SHF77PPCOM
- The command line used to compile a Fortran 77 source file
to a shared-library object file after first running the file through the C
preprocessor. Any options specified in the $SHF77FLAGS and
$CPPFLAGS construction variables are included on this command line.
You only need to set $SHF77PPCOM if you need to use a specific
C-preprocessor command line for Fortran 77 files. You should normally set
the $SHFORTRANPPCOM variable, which specifies the default
C-preprocessor command line for all Fortran versions.
- SHF77PPCOMSTR
- The string displayed when a Fortran 77 source file is
compiled to a shared-library object file after first running the file
through the C preprocessor. If this is not set, then $SHF77PPCOM or
$SHFORTRANPPCOM (the command line) is displayed.
- SHF90
- The Fortran 90 compiler used for generating shared-library
objects. You should normally set the $SHFORTRAN variable, which
specifies the default Fortran compiler for all Fortran versions. You only
need to set $SHF90 if you need to use a specific compiler or
compiler version for Fortran 90 files.
- SHF90COM
- The command line used to compile a Fortran 90 source file
to a shared-library object file. You only need to set $SHF90COM if
you need to use a specific command line for Fortran 90 files. You should
normally set the $SHFORTRANCOM variable, which specifies the
default command line for all Fortran versions.
- SHF90COMSTR
- The string displayed when a Fortran 90 source file is
compiled to a shared-library object file. If this is not set, then
$SHF90COM or $SHFORTRANCOM (the command line) is displayed.
- SHF90FLAGS
- Options that are passed to the Fortran 90 compiler to
generated shared-library objects. You only need to set $SHF90FLAGS
if you need to define specific user options for Fortran 90 files. You
should normally set the $SHFORTRANFLAGS variable, which specifies
the user-specified options passed to the default Fortran compiler for all
Fortran versions.
- SHF90PPCOM
- The command line used to compile a Fortran 90 source file
to a shared-library object file after first running the file through the C
preprocessor. Any options specified in the $SHF90FLAGS and
$CPPFLAGS construction variables are included on this command line.
You only need to set $SHF90PPCOM if you need to use a specific
C-preprocessor command line for Fortran 90 files. You should normally set
the $SHFORTRANPPCOM variable, which specifies the default
C-preprocessor command line for all Fortran versions.
- SHF90PPCOMSTR
- The string displayed when a Fortran 90 source file is
compiled to a shared-library object file after first running the file
through the C preprocessor. If this is not set, then $SHF90PPCOM or
$SHFORTRANPPCOM (the command line) is displayed.
- SHF95
- The Fortran 95 compiler used for generating shared-library
objects. You should normally set the $SHFORTRAN variable, which
specifies the default Fortran compiler for all Fortran versions. You only
need to set $SHF95 if you need to use a specific compiler or
compiler version for Fortran 95 files.
- SHF95COM
- The command line used to compile a Fortran 95 source file
to a shared-library object file. You only need to set $SHF95COM if
you need to use a specific command line for Fortran 95 files. You should
normally set the $SHFORTRANCOM variable, which specifies the
default command line for all Fortran versions.
- SHF95COMSTR
- The string displayed when a Fortran 95 source file is
compiled to a shared-library object file. If this is not set, then
$SHF95COM or $SHFORTRANCOM (the command line) is displayed.
- SHF95FLAGS
- Options that are passed to the Fortran 95 compiler to
generated shared-library objects. You only need to set $SHF95FLAGS
if you need to define specific user options for Fortran 95 files. You
should normally set the $SHFORTRANFLAGS variable, which specifies
the user-specified options passed to the default Fortran compiler for all
Fortran versions.
- SHF95PPCOM
- The command line used to compile a Fortran 95 source file
to a shared-library object file after first running the file through the C
preprocessor. Any options specified in the $SHF95FLAGS and
$CPPFLAGS construction variables are included on this command line.
You only need to set $SHF95PPCOM if you need to use a specific
C-preprocessor command line for Fortran 95 files. You should normally set
the $SHFORTRANPPCOM variable, which specifies the default
C-preprocessor command line for all Fortran versions.
- SHF95PPCOMSTR
- The string displayed when a Fortran 95 source file is
compiled to a shared-library object file after first running the file
through the C preprocessor. If this is not set, then $SHF95PPCOM or
$SHFORTRANPPCOM (the command line) is displayed.
- SHFORTRAN
- The default Fortran compiler used for generating
shared-library objects.
- SHFORTRANCOM
- The command line used to compile a Fortran source file to a
shared-library object file.
- SHFORTRANCOMSTR
- The string displayed when a Fortran source file is compiled
to a shared-library object file. If this is not set, then
$SHFORTRANCOM (the command line) is displayed.
- SHFORTRANFLAGS
- Options that are passed to the Fortran compiler to generate
shared-library objects.
- SHFORTRANPPCOM
- The command line used to compile a Fortran source file to a
shared-library object file after first running the file through the C
preprocessor. Any options specified in the $SHFORTRANFLAGS and
$CPPFLAGS construction variables are included on this command line.
- SHFORTRANPPCOMSTR
- The string displayed when a Fortran source file is compiled
to a shared-library object file after first running the file through the C
preprocessor. If this is not set, then $SHFORTRANPPCOM (the command
line) is displayed.
- SHLIBEMITTER
- TODO
- SHLIBPREFIX
- The prefix used for shared library file names.
- SHLIBSUFFIX
- The suffix used for shared library file names.
- SHLIBVERSION
- When this construction variable is defined, a versioned
shared library is created. This modifies the $SHLINKFLAGS as
required, adds the version number to the library name, and creates the
symlinks that are needed. $SHLIBVERSION needs to be of the form
X.Y.Z, where X and Y are numbers, and Z is a number but can also contain
letters to designate alpha, beta, or release candidate patch levels.
- SHLINK
- The linker for programs that use shared libraries.
- SHLINKCOM
- The command line used to link programs using shared
libraries.
- SHLINKCOMSTR
- The string displayed when programs using shared libraries
are linked. If this is not set, then $SHLINKCOM (the command line)
is displayed.
env = Environment(SHLINKCOMSTR = "Linking shared $TARGET")
- SHLINKFLAGS
- General user options passed to the linker for programs
using shared libraries. Note that this variable should not contain
-l (or similar) options for linking with the libraries listed in
$LIBS, nor -L (or similar) include search path options that
scons generates automatically from $LIBPATH. See $_LIBFLAGS
above, for the variable that expands to library-link options, and
$_LIBDIRFLAGS above, for the variable that expands to library
search path options.
- SHOBJPREFIX
- The prefix used for shared object file names.
- SHOBJSUFFIX
- The suffix used for shared object file names.
- SOURCE
- A reserved variable name that may not be set or used in a
construction environment. (See "Variable Substitution," below.)
- SOURCE_URL
- The URL (web address) of the location from which the
project was retrieved. This is used to fill in the Source: field in
the controlling information for Ipkg and RPM packages.
- SOURCES
- A reserved variable name that may not be set or used in a
construction environment. (See "Variable Substitution," below.)
- SPAWN
- A command interpreter function that will be called to
execute command line strings. The function must expect the following
arguments:
def spawn(shell, escape, cmd, args, env):
- sh is a string naming the shell program to use.
escape is a function that can be called to escape shell special
characters in the command line. cmd is the path to the command to
be executed. args is the arguments to the command. env is a
dictionary of the environment variables in which the command should be
executed.
- SUBST_DICT
- The dictionary used by the Substfile() or
Textfile() builders for substitution values. It can be anything
acceptable to the dict() constructor, so in addition to a dictionary,
lists of tuples are also acceptable.
- SUBSTFILEPREFIX
- The prefix used for Substfile() file names, the null
string by default.
- SUBSTFILESUFFIX
- The suffix used for Substfile() file names, the null
string by default.
- SUMMARY
- A short summary of what the project is about. This is used
to fill in the Summary: field in the controlling information for
Ipkg and RPM packages, and as the Description: field in MSI
packages.
- SWIG
- The scripting language wrapper and interface generator.
- SWIGCFILESUFFIX
- The suffix that will be used for intermediate C source
files generated by the scripting language wrapper and interface generator.
The default value is _wrap$CFILESUFFIX. By
default, this value is used whenever the -c++ option is
not specified as part of the $SWIGFLAGS construction
variable.
- SWIGCOM
- The command line used to call the scripting language
wrapper and interface generator.
- SWIGCOMSTR
- The string displayed when calling the scripting language
wrapper and interface generator. If this is not set, then $SWIGCOM
(the command line) is displayed.
- SWIGCXXFILESUFFIX
- The suffix that will be used for intermediate C++ source
files generated by the scripting language wrapper and interface generator.
The default value is _wrap$CFILESUFFIX. By
default, this value is used whenever the -c++ option is
specified as part of the $SWIGFLAGS construction variable.
- SWIGDIRECTORSUFFIX
- The suffix that will be used for intermediate C++ header
files generated by the scripting language wrapper and interface generator.
These are only generated for C++ code when the SWIG 'directors' feature is
turned on. The default value is _wrap.h.
- SWIGFLAGS
- General options passed to the scripting language wrapper
and interface generator. This is where you should set -python,
-perl5, -tcl, or whatever other options you want to specify
to SWIG. If you set the -c++ option in this variable, scons
will, by default, generate a C++ intermediate source file with the
extension that is specified as the $CXXFILESUFFIX variable.
- _SWIGINCFLAGS
- An automatically-generated construction variable containing
the SWIG command-line options for specifying directories to be searched
for included files. The value of $_SWIGINCFLAGS is created by
appending $SWIGINCPREFIX and $SWIGINCSUFFIX to the beginning
and end of each directory in $SWIGPATH.
- SWIGINCPREFIX
- The prefix used to specify an include directory on the SWIG
command line. This will be appended to the beginning of each directory in
the $SWIGPATH construction variable when the $_SWIGINCFLAGS
variable is automatically generated.
- SWIGINCSUFFIX
- The suffix used to specify an include directory on the SWIG
command line. This will be appended to the end of each directory in the
$SWIGPATH construction variable when the $_SWIGINCFLAGS
variable is automatically generated.
- SWIGOUTDIR
- Specifies the output directory in which the scripting
language wrapper and interface generator should place generated
language-specific files. This will be used by SCons to identify the files
that will be generated by the &swig; call, and translated into the
swig -outdir option on the command line.
- SWIGPATH
- The list of directories that the scripting language wrapper
and interface generate will search for included files. The SWIG implicit
dependency scanner will search these directories for include files. The
default is to use the same path specified as $CPPPATH.
env = Environment(SWIGPATH='#/include')
- The directory look-up can also be forced using the
Dir() function:
include = Dir('include') env = Environment(SWIGPATH=include)
- The directory list will be added to command lines through
the automatically-generated $_SWIGINCFLAGS construction variable,
which is constructed by appending the values of the
$SWIGINCPREFIXand$SWIGINCSUFFIX construction variables to
the beginning and end of each directory in $SWIGPATH. Any command
lines you define that need the SWIGPATH directory list should include
$_SWIGINCFLAGS:
env = Environment(SWIGCOM="my_swig -o $TARGET $_SWIGINCFLAGS $SORUCES")
- SWIGVERSION
- The version number of the SWIG tool.
- TAR
- The tar archiver.
- TARCOM
- The command line used to call the tar archiver.
- TARCOMSTR
- The string displayed when archiving files using the tar
archiver. If this is not set, then $TARCOM (the command line) is
displayed.
env = Environment(TARCOMSTR = "Archiving $TARGET")
- TARFLAGS
- General options passed to the tar archiver.
- TARGET
- A reserved variable name that may not be set or used in a
construction environment. (See "Variable Substitution," below.)
- TARGET_ARCH
- Sets the target architecture for Visual Studio compiler
(i.e. the arch of the binaries generated by the compiler). If not set,
default to $HOST_ARCH, or, if that is unset, to the architecture of
the running machine's OS (note that the python build or architecture has
no effect). This variable must be passed as an argument to the
Environment() constructor; setting it later has no effect. This is
currently only used on Windows, but in the future it will be used on other
OSes as well.
- TARGET_OS
-
The name of the target operating system for the compiled objects
created by this Environment.
This defaults to the value of HOST_OS, and the user can override it.
Currently only set for Win32.
- TARGETS
- A reserved variable name that may not be set or used in a
construction environment. (See "Variable Substitution," below.)
- TARSUFFIX
- The suffix used for tar file names.
- TEMPFILEPREFIX
- The prefix for a temporary file used to execute lines
longer than $MAXLINELENGTH. The default is '@'. This may be set for
toolchains that use other values, such as '-@' for the diab compiler or
'-via' for ARM toolchain.
- TEX
- The TeX formatter and typesetter.
- TEXCOM
- The command line used to call the TeX formatter and
typesetter.
- TEXCOMSTR
- The string displayed when calling the TeX formatter and
typesetter. If this is not set, then $TEXCOM (the command line) is
displayed.
env = Environment(TEXCOMSTR = "Building $TARGET from TeX input $SOURCES")
- TEXFLAGS
- General options passed to the TeX formatter and typesetter.
- TEXINPUTS
- List of directories that the LaTeX program will search for
include directories. The LaTeX implicit dependency scanner will search
these directories for \include and \import files.
- TEXTFILEPREFIX
- The prefix used for Textfile() file names, the null
string by default.
- TEXTFILESUFFIX
- The suffix used for Textfile() file names;
.txt by default.
- TOOLS
- A list of the names of the Tool specifications that are
part of this construction environment.
- UNCHANGED_SOURCES
- A reserved variable name that may not be set or used in a
construction environment. (See "Variable Substitution," below.)
- UNCHANGED_TARGETS
- A reserved variable name that may not be set or used in a
construction environment. (See "Variable Substitution," below.)
- VENDOR
- The person or organization who supply the packaged
software. This is used to fill in the Vendor: field in the
controlling information for RPM packages, and the Manufacturer:
field in the controlling information for MSI packages.
- VERSION
- The version of the project, specified as a string.
- WIN32_INSERT_DEF
- A deprecated synonym for $WINDOWS_INSERT_DEF.
- WIN32DEFPREFIX
- A deprecated synonym for $WINDOWSDEFPREFIX.
- WIN32DEFSUFFIX
- A deprecated synonym for $WINDOWSDEFSUFFIX.
- WIN32EXPPREFIX
- A deprecated synonym for $WINDOWSEXPSUFFIX.
- WIN32EXPSUFFIX
- A deprecated synonym for $WINDOWSEXPSUFFIX.
- WINDOWS_EMBED_MANIFEST
- Set this variable to True or 1 to embed the
compiler-generated manifest (normally ${TARGET}.manifest) into all
Windows exes and DLLs built with this environment, as a resource during
their link step. This is done using $MT and $MTEXECOM and
$MTSHLIBCOM.
- WINDOWS_INSERT_DEF
- When this is set to true, a library build of a Windows
shared library ( .dll file) will also build a corresponding
.def file at the same time, if a .def file is not already
listed as a build target. The default is 0 (do not build a .def
file).
- WINDOWS_INSERT_MANIFEST
- When this is set to true, scons will be aware of the
.manifest files generated by Microsoft Visua C/C++ 8.
- WINDOWSDEFPREFIX
- The prefix used for Windows .def file names.
- WINDOWSDEFSUFFIX
- The suffix used for Windows .def file names.
- WINDOWSEXPPREFIX
- The prefix used for Windows .exp file names.
- WINDOWSEXPSUFFIX
- The suffix used for Windows .exp file names.
- WINDOWSPROGMANIFESTPREFIX
- The prefix used for executable program .manifest
files generated by Microsoft Visual C/C++.
- WINDOWSPROGMANIFESTSUFFIX
- The suffix used for executable program .manifest
files generated by Microsoft Visual C/C++.
- WINDOWSSHLIBMANIFESTPREFIX
- The prefix used for shared library .manifest files
generated by Microsoft Visual C/C++.
- WINDOWSSHLIBMANIFESTSUFFIX
- The suffix used for shared library .manifest files
generated by Microsoft Visual C/C++.
- X_IPK_DEPENDS
- This is used to fill in the Depends: field in the
controlling information for Ipkg packages.
- X_IPK_DESCRIPTION
- This is used to fill in the Description: field in the controlling information for Ipkg packages. The default value is $SUMMARYDESCRIPTION
- X_IPK_MAINTAINER
- This is used to fill in the Maintainer: field in the
controlling information for Ipkg packages.
- X_IPK_PRIORITY
- This is used to fill in the Priority: field in the
controlling information for Ipkg packages.
- X_IPK_SECTION
- This is used to fill in the Section: field in the
controlling information for Ipkg packages.
- X_MSI_LANGUAGE
- This is used to fill in the Language: attribute in
the controlling information for MSI packages.
- X_MSI_LICENSE_TEXT
- The text of the software license in RTF format. Carriage
return characters will be replaced with the RTF equivalent \\par.
- X_MSI_UPGRADE_CODE
- TODO
- X_RPM_AUTOREQPROV
- This is used to fill in the AutoReqProv: field in
the RPM .spec file.
- X_RPM_BUILD
- internal, but overridable
- X_RPM_BUILDREQUIRES
- This is used to fill in the BuildRequires: field in
the RPM .spec file.
- X_RPM_BUILDROOT
- internal, but overridable
- X_RPM_CLEAN
- internal, but overridable
- X_RPM_CONFLICTS
- This is used to fill in the Conflicts: field in the
RPM .spec file.
- X_RPM_DEFATTR
- This value is used as the default attributes for the files
in the RPM package. The default value is (-,root,root).
- X_RPM_DISTRIBUTION
- This is used to fill in the Distribution: field in
the RPM .spec file.
- X_RPM_EPOCH
- This is used to fill in the Epoch: field in the
controlling information for RPM packages.
- X_RPM_EXCLUDEARCH
- This is used to fill in the ExcludeArch: field in
the RPM .spec file.
- X_RPM_EXLUSIVEARCH
- This is used to fill in the ExclusiveArch: field in
the RPM .spec file.
- X_RPM_GROUP
- This is used to fill in the Group: field in the RPM
.spec file.
- X_RPM_GROUP_lang
- This is used to fill in the Group(lang): field in
the RPM .spec file. Note that lang is not literal and should
be replaced by the appropriate language code.
- X_RPM_ICON
- This is used to fill in the Icon: field in the RPM
.spec file.
- X_RPM_INSTALL
- internal, but overridable
- X_RPM_PACKAGER
- This is used to fill in the Packager: field in the
RPM .spec file.
- X_RPM_POSTINSTALL
- This is used to fill in the %post: section in the
RPM .spec file.
- X_RPM_POSTUNINSTALL
- This is used to fill in the %postun: section in the
RPM .spec file.
- X_RPM_PREFIX
- This is used to fill in the Prefix: field in the RPM
.spec file.
- X_RPM_PREINSTALL
- This is used to fill in the %pre: section in the RPM
.spec file.
- X_RPM_PREP
- internal, but overridable
- X_RPM_PREUNINSTALL
- This is used to fill in the %preun: section in the
RPM .spec file.
- X_RPM_PROVIDES
- This is used to fill in the Provides: field in the
RPM .spec file.
- X_RPM_REQUIRES
- This is used to fill in the Requires: field in the
RPM .spec file.
- X_RPM_SERIAL
- This is used to fill in the Serial: field in the RPM
.spec file.
- X_RPM_URL
- This is used to fill in the Url: field in the RPM
.spec file.
- XGETTEXT
- Path to xgettext(1) program (found via
Detect()). See &t-link-xgettext; tool and POTUpdate()
builder.
- XGETTEXTCOM
- Complete xgettext command line. See &t-link-xgettext;
tool and POTUpdate() builder.
- XGETTEXTCOMSTR
- A string that is shown when xgettext(1) command is
invoked (default: '', which means "print
$XGETTEXTCOM"). See &t-link-xgettext; tool and
POTUpdate() builder.
- _XGETTEXTDOMAIN
- Internal "macro". Generates xgettext
domain name form source and target (default: '${TARGET.filebase}').
- XGETTEXTFLAGS
- Additional flags to xgettext(1). See
&t-link-xgettext; tool and POTUpdate() builder.
- XGETTEXTFROM
- Name of file containing list of xgettext(1)'s source
files. Autotools' users know this as POTFILES.in so they will in
most cases set XGETTEXTFROM="POTFILES.in" here. The
$XGETTEXTFROM files have same syntax and semantics as the well
known GNU POTFILES.in. See &t-link-xgettext; tool and
POTUpdate() builder.
- _XGETTEXTFROMFLAGS
- Internal "macro". Genrates list of
-D<dir> flags from the $XGETTEXTPATH list.
- XGETTEXTFROMPREFIX
- This flag is used to add single $XGETTEXTFROM file
to xgettext(1)'s commandline (default: '-f').
- XGETTEXTFROMSUFFIX
- (default: '')
- XGETTEXTPATH
- List of directories, there xgettext(1) will look for
source files (default: []). <note>This variable works only
together with $XGETTEXTFROM </para></note> See also
&t-link-xgettext; tool and POTUpdate() builder.
- _XGETTEXTPATHFLAGS
- Internal "macro". Generates list of
-f<file> flags from $XGETTEXTFROM.
- XGETTEXTPATHPREFIX
- This flag is used to add single search path to
xgettext(1)'s commandline (default: '-D').
- XGETTEXTPATHSUFFIX
- (default: '')
- YACC
- The parser generator.
- YACCCOM
- The command line used to call the parser generator to
generate a source file.
- YACCCOMSTR
- The string displayed when generating a source file using
the parser generator. If this is not set, then $YACCCOM (the
command line) is displayed.
env = Environment(YACCCOMSTR = "Yacc'ing $TARGET from $SOURCES")
- YACCFLAGS
- General options passed to the parser generator. If
$YACCFLAGS contains a -d option, SCons assumes that the call
will also create a .h file (if the yacc source file ends in a .y suffix)
or a .hpp file (if the yacc source file ends in a .yy suffix)
- YACCHFILESUFFIX
- The suffix of the C header file generated by the parser
generator when the -d option is used. Note that setting this
variable does not cause the parser generator to generate a header file
with the specified suffix, it exists to allow you to specify what suffix
the parser generator will use of its own accord. The default value is
.h.
- YACCHXXFILESUFFIX
- The suffix of the C++ header file generated by the parser
generator when the -d option is used. Note that setting this
variable does not cause the parser generator to generate a header file
with the specified suffix, it exists to allow you to specify what suffix
the parser generator will use of its own accord. The default value is
.hpp, except on Mac OS X, where the default is
${TARGET.suffix}.h. because the default &bison; parser
generator just appends .h to the name of the generated C++ file.
- YACCVCGFILESUFFIX
- The suffix of the file containing the VCG grammar automaton
definition when the --graph= option is used. Note that setting this
variable does not cause the parser generator to generate a VCG file with
the specified suffix, it exists to allow you to specify what suffix the
parser generator will use of its own accord. The default value is
.vcg.
- ZIP
- The zip compression and file packaging utility.
- ZIPCOM
- The command line used to call the zip utility, or the
internal Python function used to create a zip archive.
- ZIPCOMPRESSION
- The compression flag from the Python zipfile
module used by the internal Python function to control whether the zip
archive is compressed or not. The default value is
zipfile.ZIP_DEFLATED, which creates a compressed zip archive. This
value has no effect if the zipfile module is unavailable.
- ZIPCOMSTR
- The string displayed when archiving files using the zip
utility. If this is not set, then $ZIPCOM (the command line or
internal Python function) is displayed.
env = Environment(ZIPCOMSTR = "Zipping $TARGET")
- ZIPFLAGS
- General options passed to the zip utility.
- ZIPSUFFIX
- The suffix used for zip file names.
dict = env.Dictionary() dict["CC"] = "cc"
env["CC"] = "cc"
env = Environment(CC="cc")
env2 = env.Clone(CC="cl.exe")
Configure Contexts¶
scons supports configure contexts, an integrated mechanism similar to the various AC_CHECK macros in GNU autoconf for testing for the existence of C header files, libraries, etc. In contrast to autoconf, scons does not maintain an explicit cache of the tested values, but uses its normal dependency tracking to keep the checked values up to date. However, users may override this behaviour with the --config command line option.- Configure(env, [custom_tests, conf_dir, log_file, config_h, clean, help])
- env.Configure([custom_tests, conf_dir, log_file, config_h, clean, help])
- This creates a configure context, which can be used to
perform checks. env specifies the environment for building the
tests. This environment may be modified when performing checks.
custom_tests is a dictionary containing custom tests. See also the
section about custom tests below. By default, no custom tests are added to
the configure context. conf_dir specifies a directory where the
test cases are built. Note that this directory is not used for building
normal targets. The default value is the directory #/.sconf_temp.
log_file specifies a file which collects the output from commands
that are executed to check for the existence of header files, libraries,
etc. The default is the file #/config.log. If you are using the
VariantDir() method, you may want to specify a subdirectory under
your variant directory. config_h specifies a C header file where
the results of tests will be written, e.g. #define HAVE_STDIO_H, #define
HAVE_LIBM, etc. The default is to not write a config.h file. You
can specify the same config.h file in multiple calls to Configure,
in which case scons will concatenate all results in the specified
file. Note that SCons uses its normal dependency checking to decide if
it's necessary to rebuild the specified config_h file. This means
that the file is not necessarily re-built each time scons is run, but is
only rebuilt if its contents will have changed and some target that
depends on the config_h file is being built.
- SConf.Finish(context)
- sconf.Finish()
- This method should be called after configuration is done.
It returns the environment as modified by the configuration checks
performed. After this method is called, no further checks can be performed
with this configuration context. However, you can create a new Configure
context to perform additional checks. Only one context should be active at
a time.
- SConf.CheckHeader(context, header, [include_quotes, language])
- sconf.CheckHeader(header, [include_quotes, language])
- Checks if header is usable in the specified
language. header may be a list, in which case the last item in the
list is the header file to be checked, and the previous list items are
header files whose #include lines should precede the header line
being checked for. The optional argument include_quotes must be a
two character string, where the first character denotes the opening quote
and the second character denotes the closing quote. By default, both
characters are " (double quote). The optional argument
language should be either C or C++ and selects the
compiler to be used for the check. Returns 1 on success and 0 on failure.
- SConf.CheckCHeader(context, header, [include_quotes])
- sconf.CheckCHeader(header, [include_quotes])
- This is a wrapper around SConf.CheckHeader which
checks if header is usable in the C language. header may be
a list, in which case the last item in the list is the header file to be
checked, and the previous list items are header files whose
#include lines should precede the header line being checked for.
The optional argument include_quotes must be a two character
string, where the first character denotes the opening quote and the second
character denotes the closing quote (both default to "). Returns 1 on
success and 0 on failure.
- SConf.CheckCXXHeader(context, header, [include_quotes])
- sconf.CheckCXXHeader(header, [include_quotes])
- This is a wrapper around SConf.CheckHeader which
checks if header is usable in the C++ language. header may
be a list, in which case the last item in the list is the header file to
be checked, and the previous list items are header files whose
#include lines should precede the header line being checked for.
The optional argument include_quotes must be a two character
string, where the first character denotes the opening quote and the second
character denotes the closing quote (both default to "). Returns 1 on
success and 0 on failure.
- SConf.CheckFunc(context,, function_name, [header, language])
- sconf.CheckFunc(function_name, [header, language])
- Checks if the specified C or C++ function is available. function_name is the name of the function to check for. The optional header argument is a string that will be placed at the top of the test file that will be compiled to check if the function exists; the default is:
#ifdef __cplusplus extern "C" #endif char function_name();
- SConf.CheckLib(context, [library, symbol, header, language, autoadd=1])
- sconf.CheckLib([library, symbol, header, language, autoadd=1])
- Checks if library provides symbol. If the
value of autoadd is 1 and the library provides the specified
symbol, appends the library to the LIBS construction environment
variable. library may also be None (the default), in which case
symbol is checked with the current LIBS variable, or a list of
library names, in which case each library in the list will be checked for
symbol. If symbol is not set or is None, then
SConf.CheckLib() just checks if you can link against the specified
library. The optional language argument should be C
or C++ and selects the compiler to be used for the check; the
default is "C". The default value for autoadd is 1. This
method returns 1 on success and 0 on error.
- SConf.CheckLibWithHeader(context, library, header, language, [call, autoadd])
- sconf.CheckLibWithHeader(library, header, language, [call, autoadd])
-
- SConf.CheckType(context, type_name, [includes, language])
- sconf.CheckType(type_name, [includes, language])
- Checks for the existence of a type defined by typedef. type_name specifies the typedef name to check for. includes is a string containing one or more #include lines that will be inserted into the program that will be run to test for the existence of the type. The optional language argument should be C or C++ and selects the compiler to be used for the check; the default is "C". Example:
sconf.CheckType('foo_type', '#include "my_types.h"', 'C++')
- Configure.CheckCC(self)
- Checks whether the C compiler (as defined by the CC
construction variable) works by trying to compile a small source file.
- Configure.CheckCXX(self)
- Checks whether the C++ compiler (as defined by the CXX
construction variable) works by trying to compile a small source file. By
default, SCons only detects if there is a program with the correct name,
not if it is a functioning compiler.
- Configure.CheckSHCC(self)
- Checks whether the C compiler (as defined by the SHCC
construction variable) works by trying to compile a small source file. By
default, SCons only detects if there is a program with the correct name,
not if it is a functioning compiler.
- Configure.CheckSHCXX(self)
- Checks whether the C++ compiler (as defined by the SHCXX
construction variable) works by trying to compile a small source file. By
default, SCons only detects if there is a program with the correct name,
not if it is a functioning compiler.
env = Environment() conf = Configure( env ) if not conf.CheckCHeader( 'math.h' ): print 'We really need math.h!' Exit(1) if conf.CheckLibWithHeader( 'qt', 'qapp.h', 'c++', 'QApplication qapp(0,0);' ): # do stuff for qt - usage, e.g. conf.env.Append( CPPFLAGS = '-DWITH_QT' ) env = conf.Finish()
- SConf.CheckTypeSize(context, type_name, [header, language, expect])
- sconf.CheckTypeSize(type_name, [header, language, expect])
- Checks for the size of a type defined by typedef.
type_name specifies the typedef name to check for. The optional
header argument is a string that will be placed at the top of the
test file that will be compiled to check if the function exists; the
default is empty. The optional language argument should be C
or C++ and selects the compiler to be used for the check; the
default is "C". The optional expect argument should be an
integer. If this argument is used, the function will only check whether
the type given in type_name has the expected size (in bytes). For example,
CheckTypeSize('short', expect = 2) will return success only if
short is two bytes.
- SConf.CheckDeclaration(context, symbol, [includes, language])
- sconf.CheckDeclaration(symbol, [includes, language])
- Checks if the specified symbol is declared.
includes is a string containing one or more #include lines
that will be inserted into the program that will be run to test for the
existence of the type. The optional language argument should be
C or C++ and selects the compiler to be used for the check;
the default is "C".
- SConf.Define(context, symbol, [value, comment])
- sconf.Define(symbol, [value, comment])
- This function does not check for anything, but defines a
preprocessor symbol that will be added to the configuration header file.
It is the equivalent of AC_DEFINE, and defines the symbol name with
the optional value and the optional comment comment.
- Examples:
env = Environment() conf = Configure( env ) # Puts the following line in the config header file: # #define A_SYMBOL conf.Define('A_SYMBOL') # Puts the following line in the config header file: # #define A_SYMBOL 1 conf.Define('A_SYMBOL', 1)
- Be careful about quoting string values, though:
env = Environment() conf = Configure( env ) # Puts the following line in the config header file: # #define A_SYMBOL YA conf.Define('A_SYMBOL', "YA") # Puts the following line in the config header file: # #define A_SYMBOL "YA" conf.Define('A_SYMBOL', '"YA"')
- For comment:
env = Environment() conf = Configure( env ) # Puts the following lines in the config header file: # /* Set to 1 if you have a symbol */ # #define A_SYMBOL 1 conf.Define('A_SYMBOL', 1, 'Set to 1 if you have a symbol')
You can define your own custom checks. in addition to the predefined checks. These are passed in a dictionary to the Configure function. This dictionary maps the names of the checks to user defined Python callables (either Python functions or class instances implementing the __call__ method). The first argument of the call is always a CheckContext instance followed by the arguments, which must be supplied by the user of the check. These CheckContext instances define the following methods:
- CheckContext.Message(self, text)
-
- CheckContext.Result(self,, res)
-
- CheckContext.TryCompile(self, text, extension)
- Checks if a file with the specified extension (e.g.
'.c') containing text can be compiled using the environment's
Object builder. Returns 1 on success and 0 on failure.
- CheckContext.TryLink(self, text, extension)
- Checks, if a file with the specified extension (e.g.
'.c') containing text can be compiled using the environment's
Program builder. Returns 1 on success and 0 on failure.
- CheckContext.TryRun(self, text, extension)
- Checks, if a file with the specified extension (e.g.
'.c') containing text can be compiled using the environment's
Program builder. On success, the program is run. If the program
executes successfully (that is, its return status is 0), a tuple (1,
outputStr) is returned, where outputStr is the standard output
of the program. If the program fails execution (its return status is
non-zero), then (0, '') is returned.
- CheckContext.TryAction(self, action, [text, extension])
- Checks if the specified action with an optional
source file (contents text , extension extension = '' ) can
be executed. action may be anything which can be converted to a
scons Action. On success, (1, outputStr) is returned, where
outputStr is the content of the target file. On failure (0,
'') is returned.
- CheckContext.TryBuild(self, builder, [text, extension])
- Low level implementation for testing specific builds; the
methods above are based on this method. Given the Builder instance
builder and the optional text of a source file with optional
extension, this method returns 1 on success and 0 on failure. In
addition, self.lastTarget is set to the build target node, if the
build was successful.
def CheckQt(context, qtdir): context.Message( 'Checking for qt ...' ) lastLIBS = context.env['LIBS'] lastLIBPATH = context.env['LIBPATH'] lastCPPPATH= context.env['CPPPATH'] context.env.Append(LIBS = 'qt', LIBPATH = qtdir + '/lib', CPPPATH = qtdir + '/include' ) ret = context.TryLink(""" #include <qapp.h> int main(int argc, char **argv) { QApplication qapp(argc, argv); return 0; } """) if not ret: context.env.Replace(LIBS = lastLIBS, LIBPATH=lastLIBPATH, CPPPATH=lastCPPPATH) context.Result( ret ) return ret env = Environment() conf = Configure( env, custom_tests = { 'CheckQt' : CheckQt } ) if not conf.CheckQt('/usr/lib/qt'): print 'We really need qt!' Exit(1) env = conf.Finish()
Command-Line Construction Variables¶
Often when building software, some variables must be specified at build time. For example, libraries needed for the build may be in non-standard locations, or site-specific compiler options may need to be passed to the compiler. scons provides a Variables object to support overriding construction variables on the command line:$ scons VARIABLE=foo
- Variables([files], [args])
- This creates a Variables object that will read construction
variables from the file or list of filenames specified in files. If
no files are specified, or the files argument is None, then
no files will be read. The optional argument args is a dictionary
of values that will override anything read from the specified files; it is
primarily intended to be passed the ARGUMENTS dictionary that holds
variables specified on the command line. Example:
vars = Variables('custom.py') vars = Variables('overrides.py', ARGUMENTS) vars = Variables(None, {FOO:'expansion', BAR:7})
- Add(key, [help, default, validator, converter])
- This adds a customizable construction variable to the
Variables object. key is the name of the variable. help is
the help text for the variable. default is the default value of the
variable; if the default value is None and there is no explicit
value specified, the construction variable will not be added to the
construction environment. validator is called to validate the value
of the variable, and should take three arguments: key, value, and
environment. The recommended way to handle an invalid value is to raise an
exception (see example below). converter is called to convert the
value before putting it in the environment, and should take either a
value, or the value and environment, as parameters. The converter
must return a value, which will be converted into a string before being
validated by the validator (if any) and then added to the
environment.
vars.Add('CC', 'The C compiler') def validate_color(key, val, env): if not val in ['red', 'blue', 'yellow']: raise Exception("Invalid color value '%s'" % val) vars.Add('COLOR', validator=valid_color)
- AddVariables(list)
- A wrapper script that adds multiple customizable
construction variables to a Variables object. list is a list of
tuple or list objects that contain the arguments for an individual call to
the Add method.
opt.AddVariables( ('debug', '', 0), ('CC', 'The C compiler'), ('VALIDATE', 'An option for testing validation', 'notset', validator, None), )
- Update(env, [args])
- This updates a construction environment env with the
customized construction variables. Any specified variables that are
not configured for the Variables object will be saved and may be
retrieved with the UnknownVariables() method, below.
env = Environment(variables=vars)
- The text file(s) that were specified when the Variables
object was created are executed as Python scripts, and the values of
(global) Python variables set in the file are added to the construction
environment.
CC = 'my_cc'
- UnknownVariables()
- Returns a dictionary containing any variables that were
specified either in the files or the dictionary with which the Variables
object was initialized, but for which the Variables object was not
configured.
env = Environment(variables=vars) for key, value in vars.UnknownVariables(): print "unknown variable: %s=%s" % (key, value)
- Save(filename, env)
- This saves the currently set variables into a script file
named filename that can be used on the next invocation to
automatically load the current settings. This method combined with the
Variables method can be used to support caching of variables between runs.
env = Environment() vars = Variables(['variables.cache', 'custom.py']) vars.Add(...) vars.Update(env) vars.Save('variables.cache', env)
- GenerateHelpText(env, [sort])
- This generates help text documenting the customizable
construction variables suitable to passing in to the Help() function.
env is the construction environment that will be used to get the
actual values of customizable variables. Calling with an optional
sort function will cause the output to be sorted by the specified
argument. The specific sort function should take two arguments and
return -1, 0 or 1 (like the standard Python cmp function).
Help(vars.GenerateHelpText(env)) Help(vars.GenerateHelpText(env, sort=cmp))
- FormatVariableHelpText(env, opt, help, default, actual)
- This method returns a formatted string containing the
printable help text for one option. It is normally not called directly,
but is called by the GenerateHelpText() method to create the
returned help text. It may be overridden with your own function that takes
the arguments specified above and returns a string of help text formatted
to your liking. Note that the GenerateHelpText() will not put any
blank lines or extra characters in between the entries, so you must add
those characters to the returned string if you want the entries separated.
def my_format(env, opt, help, default, actual): fmt = "0s: default=%s actual=%s (%s)0 return fmt % (opt, default. actual, help) vars.FormatVariableHelpText = my_format
- BoolVariable(key, help, default)
- Return a tuple of arguments to set up a Boolean option. The
option will use the specified name key, have a default value of
default, and display the specified help text. The option
will interpret the values y, yes, t, true,
1, on and all as true, and the values n,
no, f, false, 0, off and none as
false.
- EnumVariable(key, help, default, allowed_values, [map, ignorecase])
- Return a tuple of arguments to set up an option whose value
may be one of a specified list of legal enumerated values. The option will
use the specified name key, have a default value of default,
and display the specified help text. The option will only support
those values in the allowed_values list. The optional map
argument is a dictionary that can be used to convert input values into
specific legal values in the allowed_values list. If the value of
ignore_case is 0 (the default), then the values are
case-sensitive. If the value of ignore_case is 1, then
values will be matched case-insensitive. If the value of
ignore_case is 1, then values will be matched
case-insensitive, and all input values will be converted to lower case.
- ListVariable(key, help, default, names, [,map])
- Return a tuple of arguments to set up an option whose value
may be one or more of a specified list of legal enumerated values. The
option will use the specified name key, have a default value of
default, and display the specified help text. The option
will only support the values all, none, or the values in the
names list. More than one value may be specified, with all values
separated by commas. The default may be a string of comma-separated
default values, or a list of the default values. The optional map
argument is a dictionary that can be used to convert input values into
specific legal values in the names list.
- PackageVariable(key, help, default)
- Return a tuple of arguments to set up an option whose value
is a path name of a package that may be enabled, disabled or given an
explicit path name. The option will use the specified name key,
have a default value of default, and display the specified
help text. The option will support the values yes,
true, on, enable or search, in which case the
specified default will be used, or the option may be set to an
arbitrary string (typically the path name to a package that is being
enabled). The option will also support the values no, false,
off or disable to disable use of the specified option.
- PathVariable(key, help, default, [validator])
- Return a tuple of arguments to set up an option whose value
is expected to be a path name. The option will use the specified name
key, have a default value of default, and display the
specified help text. An additional validator may be
specified that will be called to verify that the specified path is
acceptable. SCons supplies the following ready-made validators:
PathVariable.PathExists (the default), which verifies that the
specified path exists; PathVariable.PathIsFile, which verifies that
the specified path is an existing file; PathVariable.PathIsDir,
which verifies that the specified path is an existing directory;
PathVariable.PathIsDirCreate, which verifies that the specified
path is a directory and will create the specified directory if the path
does not exist; and PathVariable.PathAccept, which simply accepts
the specific path name argument without validation, and which is suitable
if you want your users to be able to specify a directory path that will be
created as part of the build process, for example. You may supply your own
validator function, which must take three arguments (key,
the name of the variable to be set; val, the specified value being
checked; and env, the construction environment) and should raise an
exception if the specified value is not acceptable.
vars.AddVariables( BoolVariable('warnings', 'compilation with -Wall and similiar', 1), EnumVariable('debug', 'debug output and symbols', 'no' allowed_values=('yes', 'no', 'full'), map={}, ignorecase=0), # case sensitive ListVariable('shared', 'libraries to build as shared libraries', 'all', names = list_of_libs), PackageVariable('x11', 'use X11 installed here (yes = search some places)', 'yes'), PathVariable('qtdir', 'where the root of Qt is installed', qtdir), PathVariable('foopath', 'where the foo library is installed', foopath, PathVariable.PathIsDir), )
File and Directory Nodes¶
The File() and Dir() functions return File and Dir Nodes, respectively. python objects, respectively. Those objects have several user-visible attributes and methods that are often useful:- path
- The build path of the given file or directory. This path is
relative to the top-level directory (where the SConstruct file is
found). The build path is the same as the source path if
variant_dir is not being used.
- abspath
- The absolute build path of the given file or directory.
- srcnode()
- The srcnode() method returns another File or
Dir object representing the source path of the given
File or Dir. The
# Get the current build dir's path, relative to top. Dir('.').path # Current dir's absolute path Dir('.').abspath # Next line is always '.', because it is the top dir's path relative to itself. Dir('#.').path File('foo.c').srcnode().path # source path of the given source file. # Builders also return File objects: foo = env.Program('foo.c') print "foo will be built in %s"%foo.path
- d.Dir(name)
- Returns a directory Node for a subdirectory of d
named name.
- d.File(name)
- Returns a file Node for a file within d named
name.
- d.Entry(name)
- Returns an unresolved Node within d named
name.
- f.Dir(name)
- Returns a directory named name within the parent
directory of f.
- f.File(name)
- Returns a file named name within the parent
directory of f.
- f.Entry(name)
- Returns an unresolved Node named name within the
parent directory of f.
# Get a Node for a file within a directory incl = Dir('include') f = incl.File('header.h') # Get a Node for a subdirectory within a directory dist = Dir('project-3.2.1) src = dist.Dir('src') # Get a Node for a file in the same directory cfile = File('sample.c') hfile = cfile.File('sample.h') # Combined example docs = Dir('docs') html = docs.Dir('html') index = html.File('index.html') css = index.File('app.css')
EXTENDING SCONS¶
Builder Objects¶
scons can be extended to build different types of targets by adding new Builder objects to a construction environment. In general, you should only need to add a new Builder object when you want to build a new type of file or other external target. If you just want to invoke a different compiler or other tool to build a Program, Object, Library, or any other type of output file for which scons already has an existing Builder, it is generally much easier to use those existing Builders in a construction environment that sets the appropriate construction variables (CC, LINK, etc.).- action
- The command line string used to build the target from the
source. action can also be: a list of strings representing the
command to be executed and its arguments (suitable for enclosing white
space in an argument), a dictionary mapping source file name suffixes to
any combination of command line strings (if the builder should accept
multiple source file extensions), a Python function; an Action object (see
the next section); or a list of any of the above.
- prefix
- The prefix that will be prepended to the target file name.
This may be specified as a:
*
string,
* callable
object - a function or other callable that takes two arguments (a
construction environment and a list of sources) and returns a prefix,
*
dictionary - specifies a mapping from a specific source suffix (of the
first source specified) to a corresponding target prefix. Both the source
suffix and target prefix specifications may use environment variable
substitution, and the target prefix (the 'value' entries in the dictionary)
may also be a callable object. The default target prefix may be indicated by a
dictionary entry with a key value of None.
b = Builder("build_it < $SOURCE > $TARGET", prefix = "file-") def gen_prefix(env, sources): return "file-" + env['PLATFORM'] + '-' b = Builder("build_it < $SOURCE > $TARGET", prefix = gen_prefix) b = Builder("build_it < $SOURCE > $TARGET", suffix = { None: "file-", "$SRC_SFX_A": gen_prefix })
- suffix
- The suffix that will be appended to the target file name.
This may be specified in the same manner as the prefix above. If the
suffix is a string, then scons will append a '.' to the beginning
of the suffix if it's not already there. The string returned by callable
object (or obtained from the dictionary) is untouched and must append its
own '.' to the beginning if one is desired.
b = Builder("build_it < $SOURCE > $TARGET" suffix = "-file") def gen_suffix(env, sources): return "." + env['PLATFORM'] + "-file" b = Builder("build_it < $SOURCE > $TARGET", suffix = gen_suffix) b = Builder("build_it < $SOURCE > $TARGET", suffix = { None: ".sfx1", "$SRC_SFX_A": gen_suffix })
- ensure_suffix
- When set to any true value, causes scons to add the
target suffix specified by the suffix keyword to any target strings
that have a different suffix. (The default behavior is to leave untouched
any target file name that looks like it already has any suffix.)
b1 = Builder("build_it < $SOURCE > $TARGET" suffix = ".out") b2 = Builder("build_it < $SOURCE > $TARGET" suffix = ".out", ensure_suffix) env = Environment() env['BUILDERS']['B1'] = b1 env['BUILDERS']['B2'] = b2 # Builds "foo.txt" because ensure_suffix is not set. env.B1('foo.txt', 'foo.in') # Builds "bar.txt.out" because ensure_suffix is set. env.B2('bar.txt', 'bar.in')
- src_suffix
- The expected source file name suffix. This may be a string
or a list of strings.
- target_scanner
- A Scanner object that will be invoked to find implicit
dependencies for this target file. This keyword argument should be used
for Scanner objects that find implicit dependencies based only on the
target file and the construction environment, not for implicit
dependencies based on source files. (See the section "Scanner
Objects" below, for information about creating Scanner objects.)
- source_scanner
- A Scanner object that will be invoked to find implicit
dependencies in any source files used to build this target file. This is
where you would specify a scanner to find things like #include
lines in source files. The pre-built DirScanner Scanner object may
be used to indicate that this Builder should scan directory trees for
on-disk changes to files that scons does not know about from other
Builder or function calls. (See the section "Scanner Objects"
below, for information about creating your own Scanner objects.)
- target_factory
- A factory function that the Builder will use to turn any
targets specified as strings into SCons Nodes. By default, SCons assumes
that all targets are files. Other useful target_factory values include
Dir, for when a Builder creates a directory target, and
Entry, for when a Builder can create either a file or directory
target.
MakeDirectoryBuilder = Builder(action=my_mkdir, target_factory=Dir) env = Environment() env.Append(BUILDERS = {'MakeDirectory':MakeDirectoryBuilder}) env.MakeDirectory('new_directory', [])
- Note that the call to the MakeDirectory Builder needs to
specify an empty source list to make the string represent the builder's
target; without that, it would assume the argument is the source, and
would try to deduce the target name from it, which in the absence of an
automatically-added prefix or suffix would lead to a matching target and
source name and a circular dependency.
- source_factory
- A factory function that the Builder will use to turn any
sources specified as strings into SCons Nodes. By default, SCons assumes
that all source are files. Other useful source_factory values include
Dir, for when a Builder uses a directory as a source, and
Entry, for when a Builder can use files or directories (or both) as
sources.
CollectBuilder = Builder(action=my_mkdir, source_factory=Entry) env = Environment() env.Append(BUILDERS = {'Collect':CollectBuilder}) env.Collect('archive', ['directory_name', 'file_name'])
- emitter
- A function or list of functions to manipulate the target
and source lists before dependencies are established and the target(s) are
actually built. emitter can also be a string containing a
construction variable to expand to an emitter function or list of
functions, or a dictionary mapping source file suffixes to emitter
functions. (Only the suffix of the first source file is used to select the
actual emitter function from an emitter dictionary.)
def e(target, source, env): return (target + ['foo.foo'], source + ['foo.src']) # Simple association of an emitter function with a Builder. b = Builder("my_build < $TARGET > $SOURCE", emitter = e) def e2(target, source, env): return (target + ['bar.foo'], source + ['bar.src']) # Simple association of a list of emitter functions with a Builder. b = Builder("my_build < $TARGET > $SOURCE", emitter = [e, e2]) # Calling an emitter function through a construction variable. env = Environment(MY_EMITTER = e) b = Builder("my_build < $TARGET > $SOURCE", emitter = '$MY_EMITTER') # Calling a list of emitter functions through a construction variable. env = Environment(EMITTER_LIST = [e, e2]) b = Builder("my_build < $TARGET > $SOURCE", emitter = '$EMITTER_LIST') # Associating multiple emitters with different file # suffixes using a dictionary. def e_suf1(target, source, env): return (target + ['another_target_file'], source) def e_suf2(target, source, env): return (target, source + ['another_source_file']) b = Builder("my_build < $TARGET > $SOURCE", emitter = {'.suf1' : e_suf1, '.suf2' : e_suf2})
- multi
- Specifies whether this builder is allowed to be called
multiple times for the same target file(s). The default is 0, which means
the builder can not be called multiple times for the same target file(s).
Calling a builder multiple times for the same target simply adds
additional source files to the target; it is not allowed to change the
environment associated with the target, specify addition environment
overrides, or associate a different builder with the target.
- env
- A construction environment that can be used to fetch source
code using this Builder. (Note that this environment is not used
for normal builds of normal target files, which use the environment that
was used to call the Builder for the target file.)
- generator
- A function that returns a list of actions that will be
executed to build the target(s) from the source(s). The returned action(s)
may be an Action object, or anything that can be converted into an Action
object (see the next section).
def g(source, target, env, for_signature): return [["gcc", "-c", "-o"] + target + source] b = Builder(generator=g)
- The generator and action arguments must not
both be used for the same Builder.
- src_builder
- Specifies a builder to use when a source file name suffix
does not match any of the suffixes of the builder. Using this argument
produces a multi-stage builder.
- single_source
- Specifies that this builder expects exactly one source file
per call. Giving more than one source file without target files results in
implicitely calling the builder multiple times (once for each source
given). Giving multiple source files together with target files results in
a UserError exception.
- The generator and action arguments must not
both be used for the same Builder.
- source_ext_match
- When the specified action argument is a dictionary,
the default behavior when a builder is passed multiple source files is to
make sure that the extensions of all the source files match. If it is
legal for this builder to be called with a list of source files with
different extensions, this check can be suppressed by setting
source_ext_match to None or some other non-true value. When
source_ext_match is disable, scons will use the suffix of
the first specified source file to select the appropriate action from the
action dictionary.
b = Builder(action={'.in' : 'build $SOURCES > $TARGET'}, source_ext_match = None) env = Environment(BUILDERS = {'MyBuild':b}) env.MyBuild('foo.out', ['foo.in', 'foo.extra'])
- env
- A construction environment that can be used to fetch source
code using this Builder. (Note that this environment is not used
for normal builds of normal target files, which use the environment that
was used to call the Builder for the target file.)
b = Builder(action="build < $SOURCE > $TARGET") env = Environment(BUILDERS = {'MyBuild' : b}) env.MyBuild('foo.out', 'foo.in', my_arg = 'xyzzy')
- chdir
- A directory from which scons will execute the action(s)
specified for this Builder. If the chdir argument is a string or a
directory Node, scons will change to the specified directory. If the
chdir is not a string or Node and is non-zero, then scons will
change to the target file's directory.
b = Builder(action="build < ${SOURCE.file} > ${TARGET.file}", chdir=1) env = Environment(BUILDERS = {'MyBuild' : b}) env.MyBuild('sub/dir/foo.out', 'sub/dir/foo.in')
Action Objects¶
The Builder() function will turn its action keyword argument into an appropriate internal Action object. You can also explicity create Action objects using the Action() global function, which can then be passed to the Builder() function. This can be used to configure an Action object more flexibly, or it may simply be more efficient than letting each separate Builder object create a separate Action when multiple Builder objects need to do the same thing.- Action
- If the first argument is already an Action object, the
object is simply returned.
- String
- If the first argument is a string, a command-line Action is
returned. Note that the command-line string may be preceded by an @
(at-sign) to suppress printing of the specified command line, or by a
- (hyphen) to ignore the exit status from the specified command:
Action('$CC -c -o $TARGET $SOURCES') # Doesn't print the line being executed. Action('@build $TARGET $SOURCES') # Ignores return value Action('-build $TARGET $SOURCES')
- List
- If the first argument is a list, then a list of Action
objects is returned. An Action object is created as necessary for each
element in the list. If an element within the list is itself a
list, the internal list is the command and arguments to be executed via
the command line. This allows white space to be enclosed in an argument by
defining a command in a list within a list:
Action([['cc', '-c', '-DWHITE SPACE', '-o', '$TARGET', '$SOURCES']])
- Function
- If the first argument is a Python function, a function
Action is returned. The Python function must take three keyword arguments,
target (a Node object representing the target file), source
(a Node object representing the source file) and env (the
construction environment used for building the target file). The
target and source arguments may be lists of Node objects if
there is more than one target file or source file. The actual target and
source file name(s) may be retrieved from their Node objects via the
built-in Python str() function:
target_file_name = str(target) source_file_names = map(lambda x: str(x), source)
- The function should return 0 or None to
indicate a successful build of the target file(s). The function may raise
an exception or return a non-zero exit status to indicate an unsuccessful
build.
def build_it(target = None, source = None, env = None): # build the target from the source return 0 a = Action(build_it)
def build_it(target, source, env): # build the target from the source return 0 def string_it(target, source, env): return "building '%s' from '%s'" % (target[0], source[0]) # Use a positional argument. f = Action(build_it, string_it) s = Action(build_it, "building '$TARGET' from '$SOURCE'") # Alternatively, use a keyword argument. f = Action(build_it, strfunction=string_it) s = Action(build_it, cmdstr="building '$TARGET' from '$SOURCE'") # You can provide a configurable variable. l = Action(build_it, '$STRINGIT')
def build_it(target, source, env): # build the target from the 'XXX' construction variable open(target[0], 'w').write(env['XXX']) return 0 # Use positional arguments. a = Action(build_it, '$STRINGIT', ['XXX']) # Alternatively, use a keyword argument. a = Action(build_it, varlist=['XXX'])
- chdir The chdir keyword argument specifies
that scons will execute the action after changing to the specified
directory. If the chdir argument is a string or a directory Node,
scons will change to the specified directory. If the chdir argument
is not a string or Node and is non-zero, then scons will change to the
target file's directory.
a = Action("build < ${SOURCE.file} > ${TARGET.file}", chdir=1)
- exitstatfunc The Action() global function
also takes an exitstatfunc keyword argument which specifies a
function that is passed the exit status (or return value) from the
specified action and can return an arbitrary or modified value. This can
be used, for example, to specify that an Action object's return value
should be ignored under special conditions and SCons should, therefore,
consider that the action always suceeds:
def always_succeed(s): # Always return 0, which indicates success. return 0 a = Action("build < ${SOURCE.file} > ${TARGET.file}", exitstatfunc=always_succeed)
- batch_key The batch_key keyword argument can
be used to specify that the Action can create multiple target files by
processing multiple independent source files simultaneously. (The
canonical example is "batch compilation" of multiple object
files by passing multiple source files to a single invocation of a
compiler such as Microsoft's Visual C / C++ compiler.) If the
batch_key argument is any non-False, non-callable Python value, the
configured Action object will cause scons to collect all targets
built with the Action object and configured with the same construction
environment into single invocations of the Action object's command line or
function. Command lines will typically want to use the
CHANGED_SOURCES construction variable (and possibly
CHANGED_TARGETS as well) to only pass to the command line those
sources that have actually changed since their targets were built.
a = Action('build $CHANGED_SOURCES', batch_key=True)
- action
- The action object.
- env
- The construction environment configured for the target.
- target
- The list of targets for a particular configured action.
- source
- The list of source for a particular configured action.
def batch_key(action, env, target, source): tdir = target[0].dir if tdir.name == 'special': # Don't batch-build any target # in the special/ subdirectory. return None return (id(action), id(env), tdir) a = Action('build $CHANGED_SOURCES', batch_key=batch_key)
Miscellaneous Action Functions¶
scons supplies a number of functions that arrange for various common file and directory manipulations to be performed. These are similar in concept to "tasks" in the Ant build tool, although the implementation is slightly different. These functions do not actually perform the specified action at the time the function is called, but instead return an Action object that can be executed at the appropriate time. (In Object-Oriented terminology, these are actually Action Factory functions that return Action objects.)Execute(Touch('file'))
env = Environment(TMPBUILD = '/tmp/builddir') env.Command('foo.out', 'foo.in', [Mkdir('$TMPBUILD'), Copy('$TMPBUILD', '${SOURCE.dir}'), "cd $TMPBUILD && make", Delete('$TMPBUILD')])
- Chmod(dest, mode)
- Returns an Action object that changes the permissions on
the specified dest file or directory to the specified mode.
Examples:
Execute(Chmod('file', 0755)) env.Command('foo.out', 'foo.in', [Copy('$TARGET', '$SOURCE'), Chmod('$TARGET', 0755)])
- Copy(dest, src)
- Returns an Action object that will copy the src
source file or directory to the dest destination file or directory.
Examples:
Execute(Copy('foo.output', 'foo.input')) env.Command('bar.out', 'bar.in', Copy('$TARGET', '$SOURCE'))
- Delete(entry, [must_exist])
- Returns an Action that deletes the specified entry,
which may be a file or a directory tree. If a directory is specified, the
entire directory tree will be removed. If the must_exist flag is
set, then a Python error will be thrown if the specified entry does not
exist; the default is must_exist=0, that is, the Action will
silently do nothing if the entry does not exist. Examples:
Execute(Delete('/tmp/buildroot')) env.Command('foo.out', 'foo.in', [Delete('${TARGET.dir}'), MyBuildAction]) Execute(Delete('file_that_must_exist', must_exist=1))
- Mkdir(dir)
- Returns an Action that creates the specified directory
dir . Examples:
Execute(Mkdir('/tmp/outputdir')) env.Command('foo.out', 'foo.in', [Mkdir('/tmp/builddir'), Copy('/tmp/builddir/foo.in', '$SOURCE'), "cd /tmp/builddir && make", Copy('$TARGET', '/tmp/builddir/foo.out')])
- Move(dest, src)
- Returns an Action that moves the specified src file
or directory to the specified dest file or directory. Examples:
Execute(Move('file.destination', 'file.source')) env.Command('output_file', 'input_file', [MyBuildAction, Move('$TARGET', 'file_created_by_MyBuildAction')])
- Touch(file)
- Returns an Action that updates the modification time on the
specified file. Examples:
Execute(Touch('file_to_be_touched')) env.Command('marker', 'input_file', [MyBuildAction, Touch('$TARGET')])
Variable Substitution¶
Before executing a command, scons performs construction variable interpolation on the strings that make up the command line of builders. Variables are introduced by a $ prefix. Besides construction variables, scons provides the following variables for each command execution:- CHANGED_SOURCES
- The file names of all sources of the build command that
have changed since the target was last built.
- CHANGED_TARGETS
- The file names of all targets that would be built from
sources that have changed since the target was last built.
- SOURCE
- The file name of the source of the build command, or the
file name of the first source if multiple sources are being built.
- SOURCES
- The file names of the sources of the build command.
- TARGET
- The file name of the target being built, or the file name
of the first target if multiple targets are being built.
- TARGETS
- The file names of all targets being built.
- UNCHANGED_SOURCES
- The file names of all sources of the build command that
have not changed since the target was last built.
- UNCHANGED_TARGETS
- The file names of all targets that would be built from
sources that have not changed since the target was last built.
action='$CC -c -o $TARGET $SOURCES'
cc -c -o foo foo.c bar.c
${SOURCES[1]}
bar.c
- base
- The base path of the file name, including the directory
path but excluding any suffix.
- dir
- The name of the directory in which the file exists.
- file
- The file name, minus any directory portion.
- filebase
- Just the basename of the file, minus any suffix and minus
the directory.
- suffix
- Just the file suffix.
- abspath
- The absolute path name of the file.
- posix
- The POSIX form of the path, with directories separated by
/ (forward slashes) not backslashes. This is sometimes necessary on
Windows systems when a path references a file on other (POSIX) systems.
- srcpath
- The directory and file name to the source file linked to
this file through VariantDir(). If this file isn't linked, it just
returns the directory and filename unchanged.
- srcdir
- The directory containing the source file linked to this
file through VariantDir(). If this file isn't linked, it just
returns the directory part of the filename.
- rsrcpath
- The directory and file name to the source file linked to
this file through VariantDir(). If the file does not exist locally
but exists in a Repository, the path in the Repository is returned. If
this file isn't linked, it just returns the directory and filename
unchanged.
- rsrcdir
- The Repository directory containing the source file linked
to this file through VariantDir(). If this file isn't linked, it
just returns the directory part of the filename.
$TARGET => sub/dir/file.x ${TARGET.base} => sub/dir/file ${TARGET.dir} => sub/dir ${TARGET.file} => file.x ${TARGET.filebase} => file ${TARGET.suffix} => .x ${TARGET.abspath} => /top/dir/sub/dir/file.x SConscript('src/SConscript', variant_dir='sub/dir') $SOURCE => sub/dir/file.x ${SOURCE.srcpath} => src/file.x ${SOURCE.srcdir} => src Repository('/usr/repository') $SOURCE => sub/dir/file.x ${SOURCE.rsrcpath} => /usr/repository/src/file.x ${SOURCE.rsrcdir} => /usr/repository/src
def foo(target, source, env, for_signature): return "bar" # Will expand $BAR to "bar baz" env=Environment(FOO=foo, BAR="$FOO baz")
class foo(object): def __init__(self, arg): self.arg = arg def __call__(self, target, source, env, for_signature): return self.arg + " bar" # Will expand $BAR to "my argument bar baz" env=Environment(FOO=foo, BAR="${FOO('my argument')} baz")
echo Last build occurred $( $TODAY $). > $TARGET
echo Last build occurred $TODAY. > $TARGET
echo Last build occurred . > $TARGET
Python Code Substitution¶
Any python code within ${-} pairs gets evaluated by python 'eval', with the python globals set to the current environment's set of construction variables. So in the following case:env['COND'] = 0 env.Command('foo.out', 'foo.in', '''echo ${COND==1 and 'FOO' or 'BAR'} > $TARGET''')
echo FOO > foo.out
echo BAR > foo.out
env=Environment() env['COND'] = 0 env['FOO'] = ['foo1', 'foo2'] env['BAR'] = 'barbar' env.Command('foo.out', 'foo.in', 'echo ${COND==1 and FOO or BAR} > $TARGET') # Will execute this: # echo foo1 foo2 > foo.out
- String
- When the value is a string it is interpreted as a space
delimited list of command line arguments.
- List
- When the value is a list it is interpreted as a list of
command line arguments. Each element of the list is converted to a string.
- Other
- Anything that is not a list or string is converted to a
string and interpreted as a single command line argument.
- Newline
- Newline characters (\n) delimit lines. The newline parsing
is done after all other parsing, so it is not possible for arguments (e.g.
file names) to contain embedded newline characters. This limitation will
likely go away in a future version of SCons.
Scanner Objects¶
You can use the Scanner function to define objects to scan new file types for implicit dependencies. The Scanner function accepts the following arguments:- function
- This can be either: 1) a Python function that will process
the Node (file) and return a list of File Nodes representing the implicit
dependencies (file names) found in the contents; or: 2) a dictionary that
maps keys (typically the file suffix, but see below for more discussion)
to other Scanners that should be called.
def scanner_function(node, env, path):
def scanner_function(node, env, path, arg=None):
- name
- The name of the Scanner. This is mainly used to identify
the Scanner internally.
- argument
- An optional argument that, if specified, will be passed to
the scanner function (described above) and the path function (specified
below).
- skeys
- An optional list that can be used to determine which
scanner should be used for a given Node. In the usual case of scanning for
file names, this argument will be a list of suffixes for the different
file types that this Scanner knows how to scan. If the argument is a
string, then it will be expanded into a list by the current environment.
- path_function
- A Python function that takes four or five arguments: a
construction environment, a Node for the directory containing the
SConscript file in which the first target was defined, a list of target
nodes, a list of source nodes, and an optional argument supplied when the
scanner was created. The path_function returns a tuple of
directories that can be searched for files to be returned by this Scanner
object. (Note that the FindPathDirs() function can be used to
return a ready-made path_function for a given construction variable
name, instead of having to write your own function from scratch.)
- node_class
- The class of Node that should be returned by this Scanner
object. Any strings or other objects returned by the scanner function that
are not of this class will be run through the node_factory
function.
- node_factory
- A Python function that will take a string or other object
and turn it into the appropriate class of Node to be returned by this
Scanner object.
- scan_check
- An optional Python function that takes two arguments, a
Node (file) and a construction environment, and returns whether the Node
should, in fact, be scanned for dependencies. This check can be used to
eliminate unnecessary calls to the scanner function when, for example, the
underlying file represented by a Node does not yet exist.
- recursive
- An optional flag that specifies whether this scanner should
be re-invoked on the dependency files returned by the scanner. When this
flag is not set, the Node subsystem will only invoke the scanner on the
file being scanned, and not (for example) also on the files specified by
the #include lines in the file being scanned. recursive may be a
callable function, in which case it will be called with a list of Nodes
found and should return a list of Nodes that should be scanned
recursively; this can be used to select a specific subset of Nodes for
additional scanning.
def xyz_scan(node, env, path): contents = node.get_text_contents() # Scan the contents and return the included files. XYZScanner = Scanner(xyz_scan) SourceFileScanner.add_scanner('.xyz', XYZScanner) env.Program('my_prog', ['file1.c', 'file2.f', 'file3.xyz'])
SYSTEM-SPECIFIC BEHAVIOR¶
SCons and its configuration files are very portable, due largely to its implementation in Python. There are, however, a few portability issues waiting to trap the unwary..C file suffix¶
SCons handles the upper-case .C file suffix differently, depending on the capabilities of the underlying system. On a case-sensitive system such as Linux or UNIX, SCons treats a file with a .C suffix as a C++ source file. On a case-insensitive system such as Windows, SCons treats a file with a .C suffix as a C source file..F file suffix¶
SCons handles the upper-case .F file suffix differently, depending on the capabilities of the underlying system. On a case-sensitive system such as Linux or UNIX, SCons treats a file with a .F suffix as a Fortran source file that is to be first run through the standard C preprocessor. On a case-insensitive system such as Windows, SCons treats a file with a .F suffix as a Fortran source file that should not be run through the C preprocessor.Windows: Cygwin Tools and Cygwin Python vs. Windows Pythons¶
Cygwin supplies a set of tools and utilities that let users work on a Windows system using a more POSIX-like environment. The Cygwin tools, including Cygwin Python, do this, in part, by sharing an ability to interpret UNIX-like path names. For example, the Cygwin tools will internally translate a Cygwin path name like /cygdrive/c/mydir to an equivalent Windows pathname of C:/mydir (equivalent to C:\mydir).Windows: scons.bat file¶
On Windows systems, SCons is executed via a wrapper scons.bat file. This has (at least) two ramifications:scons "FOO=BAR" "BAZ=BLEH"
MinGW¶
The MinGW bin directory must be in your PATH environment variable or the PATH variable under the ENV construction variable for SCons to detect and use the MinGW tools. When running under the native Windows Python interpreter, SCons will prefer the MinGW tools over the Cygwin tools, if they are both installed, regardless of the order of the bin directories in the PATH variable. If you have both MSVC and MinGW installed and you want to use MinGW instead of MSVC, then you must explicitly tell SCons to use MinGW by passingtools=['mingw']
EXAMPLES¶
To help you get started using SCons, this section contains a brief overview of some common tasks.Basic Compilation From a Single Source File¶
env = Environment() env.Program(target = 'foo', source = 'foo.c')
Basic Compilation From Multiple Source Files¶
env = Environment() env.Program(target = 'foo', source = Split('f1.c f2.c f3.c'))
Setting a Compilation Flag¶
env = Environment(CCFLAGS = '-g') env.Program(target = 'foo', source = 'foo.c')
Search The Local Directory For .h Files¶
Note: You do not need to set CCFLAGS to specify -I options by hand. SCons will construct the right -I options from CPPPATH.env = Environment(CPPPATH = ['.']) env.Program(target = 'foo', source = 'foo.c')
Search Multiple Directories For .h Files¶
env = Environment(CPPPATH = ['include1', 'include2']) env.Program(target = 'foo', source = 'foo.c')
Building a Static Library¶
env = Environment() env.StaticLibrary(target = 'foo', source = Split('l1.c l2.c')) env.StaticLibrary(target = 'bar', source = ['l3.c', 'l4.c'])
Building a Shared Library¶
env = Environment() env.SharedLibrary(target = 'foo', source = ['l5.c', 'l6.c']) env.SharedLibrary(target = 'bar', source = Split('l7.c l8.c'))
Linking a Local Library Into a Program¶
env = Environment(LIBS = 'mylib', LIBPATH = ['.']) env.Library(target = 'mylib', source = Split('l1.c l2.c')) env.Program(target = 'prog', source = ['p1.c', 'p2.c'])
Defining Your Own Builder Object¶
Notice that when you invoke the Builder, you can leave off the target file suffix, and SCons will add it automatically.bld = Builder(action = 'pdftex < $SOURCES > $TARGET' suffix = '.pdf', src_suffix = '.tex') env = Environment(BUILDERS = {'PDFBuilder' : bld}) env.PDFBuilder(target = 'foo.pdf', source = 'foo.tex') # The following creates "bar.pdf" from "bar.tex" env.PDFBuilder(target = 'bar', source = 'bar')
Adding Your Own Builder Object to an Environment¶
bld = Builder(action = 'pdftex < $SOURCES > $TARGET' suffix = '.pdf', src_suffix = '.tex') env = Environment() env.Append(BUILDERS = {'PDFBuilder' : bld}) env.PDFBuilder(target = 'foo.pdf', source = 'foo.tex') env.Program(target = 'bar', source = 'bar.c')
env = Environment() env['BUILDERS]['PDFBuilder'] = bld
Defining Your Own Scanner Object¶
The following example shows an extremely simple scanner (the kfile_scan() function) that doesn't use a search path at all and simply returns the file names present on any include lines in the scanned file. This would implicitly assume that all included files live in the top-level directory:import re include_re = re.compile(r'^include\s+(\S+)$', re.M) def kfile_scan(node, env, path, arg): contents = node.get_text_contents() includes = include_re.findall(contents) return env.File(includes) kscan = Scanner(name = 'kfile', function = kfile_scan, argument = None, skeys = ['.k']) scanners = Environment().Dictionary('SCANNERS') env = Environment(SCANNERS = scanners + [kscan]) env.Command('foo', 'foo.k', 'kprocess < $SOURCES > $TARGET') bar_in = File('bar.in') env.Command('bar', bar_in, 'kprocess $SOURCES > $TARGET') bar_in.target_scanner = kscan
import re import os include_re = re.compile(r'^include\s+(\S+)$', re.M) def my_scan(node, env, path, arg): contents = node.get_text_contents() includes = include_re.findall(contents) if includes == []: return [] results = [] for inc in includes: for dir in path: file = str(dir) + os.sep + inc if os.path.exists(file): results.append(file) break return env.File(results) scanner = Scanner(name = 'myscanner', function = my_scan, argument = None, skeys = ['.x'], path_function = FindPathDirs('MYPATH') ) scanners = Environment().Dictionary('SCANNERS') env = Environment(SCANNERS = scanners + [scanner], MYPATH = ['incs']) env.Command('foo', 'foo.x', 'xprocess < $SOURCES > $TARGET')
# MYPATH is a list of directories to search for files in def pf(env, dir, target, source, arg): top_dir = Dir('#').abspath results = [] if 'MYPATH' in env: for p in env['MYPATH']: results.append(top_dir + os.sep + p) return results scanner = Scanner(name = 'myscanner', function = my_scan, argument = None, skeys = ['.x'], path_function = pf )
Creating a Hierarchical Build¶
Notice that the file names specified in a subdirectory's SConscript file are relative to that subdirectory.SConstruct: env = Environment() env.Program(target = 'foo', source = 'foo.c') SConscript('sub/SConscript') sub/SConscript: env = Environment() # Builds sub/foo from sub/foo.c env.Program(target = 'foo', source = 'foo.c') SConscript('dir/SConscript') sub/dir/SConscript: env = Environment() # Builds sub/dir/foo from sub/dir/foo.c env.Program(target = 'foo', source = 'foo.c')
Sharing Variables Between SConscript Files¶
You must explicitly Export() and Import() variables that you want to share between SConscript files.SConstruct: env = Environment() env.Program(target = 'foo', source = 'foo.c') Export("env") SConscript('subdirectory/SConscript') subdirectory/SConscript: Import("env") env.Program(target = 'foo', source = 'foo.c')
Building Multiple Variants From the Same Source¶
Use the variant_dir keyword argument to the SConscript function to establish one or more separate variant build directory trees for a given source directory:SConstruct: cppdefines = ['FOO'] Export("cppdefines") SConscript('src/SConscript', variant_dir='foo') cppdefines = ['BAR'] Export("cppdefines") SConscript('src/SConscript', variant_dir='bar') src/SConscript: Import("cppdefines") env = Environment(CPPDEFINES = cppdefines) env.Program(target = 'src', source = 'src.c')
Hierarchical Build of Two Libraries Linked With a Program¶
SConstruct: env = Environment(LIBPATH = ['#libA', '#libB']) Export('env') SConscript('libA/SConscript') SConscript('libB/SConscript') SConscript('Main/SConscript') libA/SConscript: Import('env') env.Library('a', Split('a1.c a2.c a3.c')) libB/SConscript: Import('env') env.Library('b', Split('b1.c b2.c b3.c')) Main/SConscript: Import('env') e = env.Copy(LIBS = ['a', 'b']) e.Program('foo', Split('m1.c m2.c m3.c'))
Customizing construction variables from the command line.¶
The following would allow the C compiler to be specified on the command line or in the file custom.py.vars = Variables('custom.py') vars.Add('CC', 'The C compiler.') env = Environment(variables=vars) Help(vars.GenerateHelpText(env))
scons "CC=my_cc"
CC = 'my_cc'
$ scons -h CC: The C compiler. default: None actual: cc
Using Microsoft Visual C++ precompiled headers¶
Since windows.h includes everything and the kitchen sink, it can take quite some time to compile it over and over again for a bunch of object files, so Microsoft provides a mechanism to compile a set of headers once and then include the previously compiled headers in any object file. This technology is called precompiled headers. The general recipe is to create a file named "StdAfx.cpp" that includes a single header named "StdAfx.h", and then include every header you want to precompile in "StdAfx.h", and finally include "StdAfx.h" as the first header in all the source files you are compiling to object files. For example:#include <windows.h> #include <my_big_header.h>
#include <StdAfx.h>
#include <StdAfx.h> /* do some stuff */
#include <StdAfx.h> /* do some other stuff */
env=Environment() env['PCHSTOP'] = 'StdAfx.h' env['PCH'] = env.PCH('StdAfx.cpp')[0] env.Program('MyApp', ['Foo.cpp', 'Bar.cpp'])
Using Microsoft Visual C++ external debugging information¶
Since including debugging information in programs and shared libraries can cause their size to increase significantly, Microsoft provides a mechanism for including the debugging information in an external file called a PDB file. SCons supports PDB files through the PDB construction variable.env=Environment() env['PDB'] = 'MyApp.pdb' env.Program('MyApp', ['Foo.cpp', 'Bar.cpp'])
ENVIRONMENT¶
- SCONS_LIB_DIR
- Specifies the directory that contains the SCons Python
module directory (e.g. /home/aroach/scons-src-0.01/src/engine).
- SCONSFLAGS
- A string of options that will be used by scons in addition
to those passed on the command line.
SEE ALSO¶
scons User Manual, scons Design Document, scons source code.AUTHORS¶
Steven Knight <knight@baldmt.com>March 2013 |