mirror of
https://github.com/Relintai/scons_gd.git
synced 2025-02-06 16:25:59 +01:00
4689 lines
136 KiB
Plaintext
4689 lines
136 KiB
Plaintext
<!DOCTYPE sconsdoc [
|
|
<!ENTITY % scons SYSTEM "../scons.mod">
|
|
%scons;
|
|
<!ENTITY % builders-mod SYSTEM "builders.mod">
|
|
%builders-mod;
|
|
<!ENTITY % functions-mod SYSTEM "functions.mod">
|
|
%functions-mod;
|
|
<!ENTITY % tools-mod SYSTEM "tools.mod">
|
|
%tools-mod;
|
|
<!ENTITY % variables-mod SYSTEM "variables.mod">
|
|
%variables-mod;
|
|
]>
|
|
|
|
<variablelist xmlns="http://www.scons.org/dbxsd/v1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.scons.org/dbxsd/v1.0 http://www.scons.org/dbxsd/v1.0/scons.xsd">
|
|
<varlistentry id="f-Action">
|
|
<term><function>Action</function>(<parameter>action, [output, [var, ...]] [key=value, ...]</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>Action</methodname>(<parameter>action, [output, [var, ...]] [key=value, ...]</parameter>)</term>
|
|
<listitem><para>
|
|
A factory function to create an Action object for
|
|
the specified
|
|
<parameter>action</parameter>.
|
|
See the manpage section "Action Objects"
|
|
for a complete explanation of the arguments and behavior.
|
|
</para>
|
|
|
|
<para>
|
|
Note that the &f-env-Action;
|
|
form of the invocation will expand
|
|
construction variables in any argument strings,
|
|
including the
|
|
<parameter>action</parameter>
|
|
argument, at the time it is called
|
|
using the construction variables in the
|
|
<replaceable>env</replaceable>
|
|
construction environment through which
|
|
&f-env-Action; was called.
|
|
The &f-Action; global function
|
|
form delays all variable expansion
|
|
until the Action object is actually used.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-AddMethod">
|
|
<term><function>AddMethod</function>(<parameter>object, function, [name]</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>AddMethod</methodname>(<parameter>function, [name]</parameter>)</term>
|
|
<listitem><para>
|
|
Adds <parameter>function</parameter> to an object as a method.
|
|
<parameter>function</parameter> will be called with an instance
|
|
object as the first argument as for other methods.
|
|
If <parameter>name</parameter> is given, it is used as
|
|
the name of the new method, else the name of
|
|
<parameter>function</parameter> is used.
|
|
</para>
|
|
<para>
|
|
When the global function &f-AddMethod; is called,
|
|
the object to add the method to must be passed as the first argument;
|
|
typically this will be &Environment;,
|
|
in order to create a method which applies to all &consenvs;
|
|
subsequently constructed.
|
|
When called using the &f-env-AddMethod; form,
|
|
the method is added to the specified &consenv; only.
|
|
Added methods propagate through &f-env-Clone; calls.
|
|
</para>
|
|
|
|
<para>
|
|
More examples:
|
|
</para>
|
|
|
|
<example_commands>
|
|
# Function to add must accept an instance argument.
|
|
# The Python convention is to call this 'self'.
|
|
def my_method(self, arg):
|
|
print("my_method() got", arg)
|
|
|
|
# Use the global function to add a method to the Environment class:
|
|
AddMethod(Environment, my_method)
|
|
env = Environment()
|
|
env.my_method('arg')
|
|
|
|
# Use the optional name argument to set the name of the method:
|
|
env.AddMethod(my_method, 'other_method_name')
|
|
env.other_method_name('another arg')
|
|
</example_commands>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-AddOption">
|
|
<term><function>AddOption</function>(<parameter>arguments</parameter>)</term>
|
|
<listitem><para>
|
|
Adds a local (project-specific) command-line option.
|
|
<parameter>arguments</parameter>
|
|
are the same as those supported by the <function>add_option</function>
|
|
method in the standard Python library module <systemitem>optparse</systemitem>,
|
|
with a few additional capabilities noted below.
|
|
See the documentation for
|
|
<systemitem>optparse</systemitem>
|
|
for a thorough discussion of its option-processing capabities.
|
|
</para>
|
|
|
|
<para>
|
|
In addition to the arguments and values supported by the
|
|
<systemitem>optparse</systemitem>
|
|
<function>add_option</function>
|
|
method, &f-AddOption;
|
|
allows setting the
|
|
<parameter>nargs</parameter>
|
|
keyword value to
|
|
a string consisting of a question mark
|
|
(<literal>'?'</literal>)
|
|
to indicate that the option argument for
|
|
that option string is optional.
|
|
If the option string is present on the
|
|
command line but has no matching option
|
|
argument, the value of the
|
|
<parameter>const</parameter>
|
|
keyword argument is produced as the value
|
|
of the option.
|
|
If the option string is omitted from
|
|
the command line, the value of the
|
|
<parameter>default</parameter>
|
|
keyword argument is produced, as usual;
|
|
if there is no
|
|
<parameter>default</parameter>
|
|
keyword argument in the &f-AddOption; call,
|
|
<constant>None</constant> is produced.
|
|
</para>
|
|
|
|
<para>
|
|
<systemitem>optparse</systemitem> recognizes
|
|
abbreviations of long option names,
|
|
as long as they can be unambiguously resolved.
|
|
For example, if
|
|
<function>add_option</function> is called to
|
|
define a <option>--devicename</option> option,
|
|
it will recognize <option>--device</option>,
|
|
<option>--dev</option>
|
|
and so forth as long as there is no other option
|
|
which could also match to the same abbreviation.
|
|
Options added via
|
|
&f-AddOption; do not support
|
|
the automatic recognition of abbreviations.
|
|
Instead, to allow specific abbreviations,
|
|
include them as synonyms in the &f-AddOption; call itself.
|
|
</para>
|
|
|
|
<para>
|
|
Once a new command-line option has been added with
|
|
&f-AddOption;,
|
|
the option value may be accessed using
|
|
&f-link-GetOption;
|
|
or
|
|
&f-link-env-GetOption;.
|
|
&f-link-SetOption; is not currently supported for
|
|
options added with &f-AddOption;.
|
|
<!-- was:
|
|
The value may also be set using
|
|
&f-SetOption;
|
|
or
|
|
&f-env.SetOption;,
|
|
if conditions in a
|
|
&SConscript;
|
|
require overriding any default value.
|
|
Note however that a
|
|
value specified on the command line will
|
|
<emphasis>always</emphasis>
|
|
override a value set by any SConscript file.
|
|
-->
|
|
</para>
|
|
|
|
<para>
|
|
Help text for an option is a combination
|
|
of the string supplied in the
|
|
<parameter>help</parameter> keyword
|
|
argument to &f-AddOption; and information
|
|
collected from the other keyword arguments.
|
|
Such help is displayed if the
|
|
<option>-h</option> command line option
|
|
is used (but not with <option>-H</option>).
|
|
Help for all local options is displayed
|
|
under the separate heading
|
|
<emphasis role="bold">Local Options</emphasis>.
|
|
The options are unsorted - they will appear
|
|
in the help text in the order in which the
|
|
&f-AddOption;
|
|
calls occur.
|
|
</para>
|
|
|
|
<para>
|
|
Example:
|
|
</para>
|
|
|
|
<example_commands>
|
|
AddOption(
|
|
'--prefix',
|
|
dest='prefix',
|
|
nargs=1,
|
|
type='string',
|
|
action='store',
|
|
metavar='DIR',
|
|
help='installation prefix',
|
|
)
|
|
env = Environment(PREFIX=GetOption('prefix'))
|
|
</example_commands>
|
|
|
|
<para>For that example,
|
|
the following help text would be produced:</para>
|
|
|
|
<screen>
|
|
Local Options:
|
|
--prefix=DIR installation prefix
|
|
</screen>
|
|
|
|
<para>
|
|
Help text for local options may be unavailable if
|
|
the &f-link-Help; function has been called,
|
|
see the &f-Help; documentation for details.
|
|
</para>
|
|
|
|
<note>
|
|
<para>
|
|
As an artifact of the internal implementation,
|
|
the behavior of options added by &AddOption;
|
|
which take option arguments is undefined
|
|
<emphasis>if</emphasis> whitespace
|
|
(rather than an <literal>=</literal> sign) is used as
|
|
the separator on the command line.
|
|
Users should avoid such usage; it is recommended
|
|
to add a note to this effect to project documentation
|
|
if the situation is likely to arise.
|
|
In addition, if the <parameter>nargs</parameter>
|
|
keyword is used to specify more than one following
|
|
option argument (that is, with a value of <constant>2</constant>
|
|
or greater), such arguments would necessarily
|
|
be whitespace separated, triggering the issue.
|
|
Developers should not use &AddOption; this way.
|
|
Future versions of &SCons; will likely forbid such usage.
|
|
</para>
|
|
</note>
|
|
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-AddPostAction">
|
|
<term><function>AddPostAction</function>(<parameter>target, action</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>AddPostAction</methodname>(<parameter>target, action</parameter>)</term>
|
|
<listitem><para>
|
|
Arranges for the specified
|
|
<parameter>action</parameter>
|
|
to be performed
|
|
after the specified
|
|
<parameter>target</parameter>
|
|
has been built.
|
|
The specified action(s) may be
|
|
an Action object, or anything that
|
|
can be converted into an Action object
|
|
See the manpage section "Action Objects"
|
|
for a complete explanation.
|
|
</para>
|
|
|
|
<para>
|
|
When multiple targets are supplied,
|
|
the action may be called multiple times,
|
|
once after each action that generates
|
|
one or more targets in the list.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-AddPreAction">
|
|
<term><function>AddPreAction</function>(<parameter>target, action</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>AddPreAction</methodname>(<parameter>target, action</parameter>)</term>
|
|
<listitem><para>
|
|
Arranges for the specified
|
|
<parameter>action</parameter>
|
|
to be performed
|
|
before the specified
|
|
<parameter>target</parameter>
|
|
is built.
|
|
The specified action(s) may be
|
|
an Action object, or anything that
|
|
can be converted into an Action object
|
|
See the manpage section "Action Objects"
|
|
for a complete explanation.
|
|
</para>
|
|
|
|
<para>
|
|
When multiple targets are specified,
|
|
the action(s) may be called multiple times,
|
|
once before each action that generates
|
|
one or more targets in the list.
|
|
</para>
|
|
|
|
<para>
|
|
Note that if any of the targets are built in multiple steps,
|
|
the action will be invoked just
|
|
before the "final" action that specifically
|
|
generates the specified target(s).
|
|
For example, when building an executable program
|
|
from a specified source
|
|
<filename>.c</filename>
|
|
file via an intermediate object file:
|
|
</para>
|
|
|
|
<example_commands>
|
|
foo = Program('foo.c')
|
|
AddPreAction(foo, 'pre_action')
|
|
</example_commands>
|
|
|
|
<para>
|
|
The specified
|
|
<literal>pre_action</literal>
|
|
would be executed before
|
|
&scons;
|
|
calls the link command that actually
|
|
generates the executable program binary
|
|
<filename>foo</filename>,
|
|
not before compiling the
|
|
<filename>foo.c</filename>
|
|
file into an object file.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Alias">
|
|
<term><function>Alias</function>(<parameter>alias, [targets, [action]]</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>Alias</methodname>(<parameter>alias, [targets, [action]]</parameter>)</term>
|
|
<listitem><para>
|
|
Creates one or more phony targets that
|
|
expand to one or more other targets.
|
|
An optional
|
|
<parameter>action</parameter>
|
|
(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.
|
|
&f-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.
|
|
Aliases are global even if set through
|
|
the construction environment method.
|
|
</para>
|
|
|
|
<para>
|
|
Examples:
|
|
</para>
|
|
|
|
<example_commands>
|
|
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")
|
|
</example_commands>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-AllowSubstExceptions">
|
|
<term><function>AllowSubstExceptions</function>(<parameter>[exception, ...]</parameter>)</term>
|
|
<listitem><para>
|
|
Specifies the exceptions that will be allowed
|
|
when expanding construction variables.
|
|
By default,
|
|
any construction variable expansions that generate a
|
|
<literal>NameError</literal>
|
|
or
|
|
<literal>IndexError</literal>
|
|
exception will expand to a
|
|
<literal>''</literal>
|
|
(an empty string) and not cause scons to fail.
|
|
All exceptions not in the specified list
|
|
will generate an error message
|
|
and terminate processing.
|
|
</para>
|
|
|
|
<para>
|
|
If
|
|
&f-AllowSubstExceptions;
|
|
is called multiple times,
|
|
each call completely overwrites the previous list
|
|
of allowed exceptions.
|
|
</para>
|
|
|
|
<para>
|
|
Example:
|
|
</para>
|
|
|
|
<example_commands>
|
|
# 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)
|
|
</example_commands>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-AlwaysBuild">
|
|
<term><function>AlwaysBuild</function>(<parameter>target, ...</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>AlwaysBuild</methodname>(<parameter>target, ...</parameter>)</term>
|
|
<listitem><para>
|
|
Marks each given
|
|
<parameter>target</parameter>
|
|
so that it is always assumed to be out of date,
|
|
and will always be rebuilt if needed.
|
|
Note, however, that
|
|
&f-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
|
|
<emphasis>always</emphasis>
|
|
be built if so specified.
|
|
Multiple targets can be passed in to a single call to
|
|
&f-AlwaysBuild;.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Append">
|
|
<term><replaceable>env</replaceable>.<methodname>Append</methodname>(<parameter>key=val, [...]</parameter>)</term>
|
|
<listitem><para>
|
|
Intelligently append values to &consvars; in the &consenv;
|
|
named by <varname>env</varname>.
|
|
The &consvars; and values to add to them are passed as
|
|
<parameter>key=val</parameter> pairs (&Python; keyword arguments).
|
|
&f-env-Append; is designed to allow adding values
|
|
without normally having to know the data type of an existing &consvar;.
|
|
Regular &Python; syntax can also be used to manipulate the &consvar;,
|
|
but for that you must know the type of the &consvar;:
|
|
for example, different &Python; syntax is needed to combine
|
|
a list of values with a single string value, or vice versa.
|
|
Some pre-defined &consvars; do have type expectations
|
|
based on how &SCons; will use them,
|
|
for example &cv-link-CPPDEFINES; is normally a string or a list of strings,
|
|
but can be a string,
|
|
a list of strings,
|
|
a list of tuples,
|
|
or a dictionary, while &cv-link-LIBEMITTER;
|
|
would expect a callable or list of callables,
|
|
and &cv-link-BUILDERS; would expect a mapping type.
|
|
Consult the documentation for the various &consvars; for more details.
|
|
</para>
|
|
|
|
<para>
|
|
The following descriptions apply to both the append
|
|
and prepend functions, the only difference being
|
|
the insertion point of the added values.
|
|
</para>
|
|
<para>
|
|
If <varname>env</varname>. does not have a &consvar;
|
|
indicated by <parameter>key</parameter>,
|
|
<parameter>val</parameter>
|
|
is added to the environment under that key as-is.
|
|
</para>
|
|
|
|
<para>
|
|
<parameter>val</parameter> can be almost any type,
|
|
and &SCons; will combine it with an existing value into an appropriate type,
|
|
but there are a few special cases to be aware of.
|
|
When two strings are combined,
|
|
the result is normally a new string,
|
|
with the caller responsible for supplying any needed separation.
|
|
The exception to this is the &consvar; &cv-link-CPPDEFINES;,
|
|
in which each item will be postprocessed by adding a prefix
|
|
and/or suffix,
|
|
so the contents are treated as a list of strings, that is,
|
|
adding a string will result in a separate string entry,
|
|
not a combined string. For &cv-CPPDEFINES; as well as
|
|
for &cv-link-LIBS;, and the various <literal>*PATH</literal>;
|
|
variables, &SCons; will supply the compiler-specific
|
|
syntax (e.g. adding a <literal>-D</literal> or <literal>/D</literal>
|
|
prefix for &cv-CPPDEFINES;), so this syntax should be omitted when
|
|
adding values to these variables.
|
|
Example (gcc syntax shown in the expansion of &CPPDEFINES;):
|
|
</para>
|
|
|
|
<example_commands>
|
|
env = Environment(CXXFLAGS="-std=c11", CPPDEFINES="RELEASE")
|
|
print("CXXFLAGS={}, CPPDEFINES={}".format(env['CXXFLAGS'], env['CPPDEFINES']))
|
|
# notice including a leading space in CXXFLAGS value
|
|
env.Append(CXXFLAGS=" -O", CPPDEFINES="EXTRA")
|
|
print("CXXFLAGS={}, CPPDEFINES={}".format(env['CXXFLAGS'], env['CPPDEFINES']))
|
|
print("CPPDEFINES will expand to {}".format(env.subst("$_CPPDEFFLAGS")))
|
|
</example_commands>
|
|
|
|
<screen>
|
|
$ scons -Q
|
|
CXXFLAGS=-std=c11, CPPDEFINES=RELEASE
|
|
CXXFLAGS=-std=c11 -O, CPPDEFINES=['RELEASE', 'EXTRA']
|
|
CPPDEFINES will expand to -DRELEASE -DEXTRA
|
|
scons: `.' is up to date.
|
|
</screen>
|
|
|
|
<para>
|
|
Because &cv-link-CPPDEFINES; is intended to
|
|
describe C/C++ pre-processor macro definitions,
|
|
it accepts additional syntax.
|
|
Preprocessor macros can be valued, or un-valued, as in
|
|
<computeroutput>-DBAR=1</computeroutput> or
|
|
<computeroutput>-DFOO</computeroutput>.
|
|
The macro can be be supplied as a complete string including the value,
|
|
or as a tuple (or list) of macro, value, or as a dictionary.
|
|
Example (again gcc syntax in the expanded defines):
|
|
</para>
|
|
|
|
<example_commands>
|
|
env = Environment(CPPDEFINES="FOO")
|
|
print("CPPDEFINES={}".format(env['CPPDEFINES']))
|
|
env.Append(CPPDEFINES="BAR=1")
|
|
print("CPPDEFINES={}".format(env['CPPDEFINES']))
|
|
env.Append(CPPDEFINES=("OTHER", 2))
|
|
print("CPPDEFINES={}".format(env['CPPDEFINES']))
|
|
env.Append(CPPDEFINES={"EXTRA": "arg"})
|
|
print("CPPDEFINES={}".format(env['CPPDEFINES']))
|
|
print("CPPDEFINES will expand to {}".format(env.subst("$_CPPDEFFLAGS")))
|
|
</example_commands>
|
|
|
|
<screen>
|
|
$ scons -Q
|
|
CPPDEFINES=FOO
|
|
CPPDEFINES=['FOO', 'BAR=1']
|
|
CPPDEFINES=['FOO', 'BAR=1', ('OTHER', 2)]
|
|
CPPDEFINES=['FOO', 'BAR=1', ('OTHER', 2), {'EXTRA': 'arg'}]
|
|
CPPDEFINES will expand to -DFOO -DBAR=1 -DOTHER=2 -DEXTRA=arg
|
|
scons: `.' is up to date.
|
|
</screen>
|
|
|
|
<para>
|
|
Adding a string <parameter>val</parameter>
|
|
to a dictonary &consvar; will enter
|
|
<parameter>val</parameter> as the key in the dict,
|
|
and <literal>None</literal> as its value.
|
|
Using a tuple type to supply a key + value only works
|
|
for the special case of &cv-link-CPPDEFINES;
|
|
described above.
|
|
</para>
|
|
|
|
<para>
|
|
Although most combinations of types work without
|
|
needing to know the details, some combinations
|
|
do not make sense and a &Python; exception will be raised.
|
|
</para>
|
|
|
|
<para>
|
|
When using &f-env-Append; to modify &consvars;
|
|
which are path specifications (conventionally,
|
|
the names of such end in <literal>PATH</literal>),
|
|
it is recommended to add the values as a list of strings,
|
|
even if there is only a single string to add.
|
|
The same goes for adding library names to &cv-LIBS;.
|
|
</para>
|
|
|
|
<example_commands>
|
|
env.Append(CPPPATH=["#/include"])
|
|
</example_commands>
|
|
|
|
<para>
|
|
See also &f-link-env-AppendUnique;,
|
|
&f-link-env-Prepend; and &f-link-env-PrependUnique;.
|
|
</para>
|
|
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-AppendENVPath">
|
|
<term><replaceable>env</replaceable>.<methodname>AppendENVPath</methodname>(<parameter>name, newpath, [envname, sep, delete_existing=False]</parameter>)</term>
|
|
<listitem><para>
|
|
Append path elements specified by <parameter>newpath</parameter>
|
|
to the given search path string or list <parameter>name</parameter>
|
|
in mapping <parameter>envname</parameter> in the &consenv;.
|
|
Supplying <parameter>envname</parameter> is optional:
|
|
the default is the execution environment &cv-link-ENV;.
|
|
Optional <parameter>sep</parameter> is used as the search path separator,
|
|
the default is the platform's separator (<systemitem>os.pathsep</systemitem>).
|
|
A path element will only appear once.
|
|
Any duplicates in <parameter>newpath</parameter> are dropped,
|
|
keeping the last appearing (to preserve path order).
|
|
If <parameter>delete_existing</parameter>
|
|
is <constant>False</constant> (the default)
|
|
any addition duplicating an existing path element is ignored;
|
|
if <parameter>delete_existing</parameter>
|
|
is <constant>True</constant> the existing value will
|
|
be dropped and the path element will be added at the end.
|
|
To help maintain uniqueness all paths are normalized (using
|
|
<systemitem>os.path.normpath</systemitem>
|
|
and
|
|
<systemitem>os.path.normcase</systemitem>).
|
|
</para>
|
|
|
|
<para>
|
|
Example:
|
|
</para>
|
|
|
|
<example_commands>
|
|
print('before:', env['ENV']['INCLUDE'])
|
|
include_path = '/foo/bar:/foo'
|
|
env.AppendENVPath('INCLUDE', include_path)
|
|
print('after:', env['ENV']['INCLUDE'])
|
|
</example_commands>
|
|
|
|
<para>Yields:</para>
|
|
<screen>
|
|
before: /foo:/biz
|
|
after: /biz:/foo/bar:/foo
|
|
</screen>
|
|
|
|
<para>
|
|
See also &f-link-env-PrependENVPath;.
|
|
</para>
|
|
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-AppendUnique">
|
|
<term><replaceable>env</replaceable>.<methodname>AppendUnique</methodname>(<parameter>key=val, [...], delete_existing=False</parameter>)</term>
|
|
<listitem><para>
|
|
Append values to &consvars; in the current &consenv;,
|
|
maintaining uniqueness.
|
|
Works like &f-link-env-Append; (see for details),
|
|
except that values already present in the &consvar;
|
|
will not be added again.
|
|
If <parameter>delete_existing</parameter>
|
|
is <constant>True</constant>,
|
|
the existing matching value is first removed,
|
|
and the requested value is added,
|
|
having the effect of moving such values to the end.
|
|
</para>
|
|
|
|
<para>
|
|
Example:
|
|
</para>
|
|
|
|
<example_commands>
|
|
env.AppendUnique(CCFLAGS='-g', FOO=['foo.yyy'])
|
|
</example_commands>
|
|
|
|
<para>
|
|
See also &f-link-env-Append;,
|
|
&f-link-env-Prepend;
|
|
and &f-link-env-PrependUnique;.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Builder">
|
|
<term><function>Builder</function>(<parameter>action, [arguments]</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>Builder</methodname>(<parameter>action, [arguments]</parameter>)</term>
|
|
<listitem><para>
|
|
Creates a Builder object for
|
|
the specified
|
|
<parameter>action</parameter>.
|
|
See the manpage section "Builder Objects"
|
|
for a complete explanation of the arguments and behavior.
|
|
</para>
|
|
|
|
<para>
|
|
Note that the
|
|
<function>env.Builder</function>()
|
|
form of the invocation will expand
|
|
construction variables in any arguments strings,
|
|
including the
|
|
<parameter>action</parameter>
|
|
argument,
|
|
at the time it is called
|
|
using the construction variables in the
|
|
<varname>env</varname>
|
|
construction environment through which
|
|
&f-env-Builder; was called.
|
|
The
|
|
&f-Builder;
|
|
form delays all variable expansion
|
|
until after the Builder object is actually called.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-CacheDir">
|
|
<term><function>CacheDir</function>(<parameter>cache_dir, custom_class=None</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>CacheDir</methodname>(<parameter>cache_dir, custom_class=None</parameter>)</term>
|
|
<listitem><para>
|
|
Direct
|
|
&scons;
|
|
to maintain a derived-file cache in
|
|
<parameter>cache_dir</parameter>.
|
|
The derived files in the cache will be shared
|
|
among all the builds specifying the same
|
|
<parameter>cache_dir</parameter>.
|
|
Specifying a
|
|
<parameter>cache_dir</parameter>
|
|
of
|
|
<constant>None</constant>
|
|
disables derived file caching.
|
|
</para>
|
|
|
|
<para>
|
|
When specifying a
|
|
<parameter>custom_class</parameter> which should be a class type which is a subclass of
|
|
<classname>SCons.CacheDir.CacheDir</classname>, SCons will
|
|
internally invoke this class to use for performing caching operations.
|
|
This argument is optional and if left to default <constant>None</constant>, will use the
|
|
default <classname>SCons.CacheDir.CacheDir</classname> class.
|
|
</para>
|
|
|
|
<para>
|
|
Calling the environment method
|
|
&f-link-env-CacheDir;
|
|
limits the effect to targets built
|
|
through the specified construction environment.
|
|
Calling the global function
|
|
&f-link-CacheDir;
|
|
sets a global default
|
|
that will be used by all targets built
|
|
through construction environments
|
|
that do not set up environment-specific
|
|
caching by calling &f-env-CacheDir;.
|
|
</para>
|
|
|
|
<para>
|
|
When derived-file caching
|
|
is being used and
|
|
&scons;
|
|
finds a derived file that needs to be rebuilt,
|
|
it will first look in the cache to see if a
|
|
file with matching &buildsig; exists
|
|
(indicating the input file(s) and build action(s)
|
|
were identical to those for the current target),
|
|
and if so, will retrieve the file from the cache.
|
|
&scons;
|
|
will report
|
|
<computeroutput>Retrieved `file' from cache</computeroutput>
|
|
instead of the normal build message.
|
|
If the derived file is not present in the cache,
|
|
&scons;
|
|
will build it and
|
|
then place a copy of the built file in the cache,
|
|
identified by its &buildsig;, for future use.
|
|
</para>
|
|
|
|
<para>
|
|
The
|
|
<computeroutput>Retrieved `file' from cache</computeroutput>
|
|
messages are useful for human consumption,
|
|
but less so when comparing log files between
|
|
&scons; runs which will show differences that are
|
|
noisy and not actually significant.
|
|
To disable,
|
|
use the <option>--cache-show</option> option.
|
|
With this option, &scons;
|
|
will print the action that would
|
|
have been used to build the file without
|
|
considering cache retrieval.
|
|
</para>
|
|
|
|
<para>
|
|
Derived-file caching
|
|
may be disabled for any invocation
|
|
of &scons; by giving the
|
|
<option>--cache-disable</option>
|
|
command line option.
|
|
Cache updating may be disabled, leaving cache
|
|
fetching enabled, by giving the
|
|
<option>--cache-readonly</option>.
|
|
</para>
|
|
|
|
<para>
|
|
If the
|
|
<option>--cache-force</option>
|
|
option is used,
|
|
&scons;
|
|
will place a copy of
|
|
<emphasis>all</emphasis>
|
|
derived files in the cache,
|
|
even if they already existed
|
|
and were not built by this invocation.
|
|
This is useful to populate a cache
|
|
the first time a
|
|
<parameter>cache_dir</parameter>
|
|
is used for a build,
|
|
or to bring a cache up to date after
|
|
a build with cache updating disabled
|
|
(<option>--cache-disable</option>
|
|
or <option>--cache-readonly</option>)
|
|
has been done.
|
|
</para>
|
|
|
|
<para>
|
|
The
|
|
&f-link-NoCache;
|
|
method can be used to disable caching of specific files. This can be
|
|
useful if inputs and/or outputs of some tool are impossible to
|
|
predict or prohibitively large.
|
|
</para>
|
|
|
|
<para>
|
|
Note that (at this time) &SCons; provides no facilities
|
|
for managing the derived-file cache. It is up to the developer
|
|
to arrange for cache pruning, expiry, etc. if needed.
|
|
</para>
|
|
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Clean">
|
|
<term><function>Clean</function>(<parameter>targets, files_or_dirs</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>Clean</methodname>(<parameter>targets, files_or_dirs</parameter>)</term>
|
|
<listitem><para>
|
|
This specifies a list of files or directories which should be removed
|
|
whenever the targets are specified with the
|
|
<option>-c</option>
|
|
command line option.
|
|
The specified targets may be a list
|
|
or an individual target.
|
|
Multiple calls to
|
|
&f-Clean;
|
|
are legal,
|
|
and create new targets or add files and directories to the
|
|
clean list for the specified targets.
|
|
</para>
|
|
|
|
<para>
|
|
Multiple files or directories should be specified
|
|
either as separate arguments to the
|
|
&f-Clean;
|
|
method, or as a list.
|
|
&f-Clean;
|
|
will also accept the return value of any of the construction environment
|
|
Builder methods.
|
|
Examples:
|
|
</para>
|
|
|
|
<para>
|
|
The related
|
|
&f-link-NoClean;
|
|
function overrides calling
|
|
&f-Clean;
|
|
for the same target,
|
|
and any targets passed to both functions will
|
|
<emphasis>not</emphasis>
|
|
be removed by the
|
|
<option>-c</option>
|
|
option.
|
|
</para>
|
|
|
|
<para>
|
|
Examples:
|
|
</para>
|
|
|
|
<example_commands>
|
|
Clean('foo', ['bar', 'baz'])
|
|
Clean('dist', env.Program('hello', 'hello.c'))
|
|
Clean(['foo', 'bar'], 'something_else_to_clean')
|
|
</example_commands>
|
|
|
|
<para>
|
|
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.
|
|
</para>
|
|
<example_commands>
|
|
Clean(docdir, os.path.join(docdir, projectname))
|
|
</example_commands>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Clone">
|
|
<term><replaceable>env</replaceable>.<methodname>Clone</methodname>(<parameter>[key=val, ...]</parameter>)</term>
|
|
<listitem><para>
|
|
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.
|
|
</para>
|
|
|
|
<para>
|
|
Example:
|
|
</para>
|
|
|
|
<example_commands>
|
|
env2 = env.Clone()
|
|
env3 = env.Clone(CCFLAGS='-g')
|
|
</example_commands>
|
|
|
|
<para>
|
|
Additionally, a list of tools and a toolpath may be specified, as in
|
|
the &f-link-Environment; constructor:
|
|
</para>
|
|
|
|
<example_commands>
|
|
def MyTool(env):
|
|
env['FOO'] = 'bar'
|
|
|
|
env4 = env.Clone(tools=['msvc', MyTool])
|
|
</example_commands>
|
|
|
|
<para>
|
|
The
|
|
<parameter>parse_flags</parameter>
|
|
keyword argument is also recognized to allow merging command-line
|
|
style arguments into the appropriate construction
|
|
variables (see &f-link-env-MergeFlags;).
|
|
</para>
|
|
|
|
<example_commands>
|
|
# create an environment for compiling programs that use wxWidgets
|
|
wx_env = env.Clone(parse_flags='!wx-config --cflags --cxxflags')
|
|
</example_commands>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Command">
|
|
<term><function>Command</function>(<parameter>target, source, action, [key=val, ...]</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>Command</methodname>(<parameter>target, source, action, [key=val, ...]</parameter>)</term>
|
|
<listitem><para>
|
|
Executes a specific <parameter>action</parameter>
|
|
(or list of actions)
|
|
to build a <parameter>target</parameter> file or files
|
|
from a <parameter>source</parameter> file or files.
|
|
This is more convenient
|
|
than defining a separate Builder object
|
|
for a single special-case build.
|
|
</para>
|
|
|
|
<para>
|
|
The
|
|
&Command; function accepts
|
|
<parameter>source_scanner</parameter>,
|
|
<parameter>target_scanner</parameter>,
|
|
<parameter>source_factory</parameter>, and
|
|
<parameter>target_factory</parameter>
|
|
keyword arguments. These arguments can
|
|
be used to specify
|
|
a Scanner object
|
|
that will be used to apply a custom
|
|
scanner for a source or target.
|
|
For example, the global
|
|
<literal>DirScanner</literal>
|
|
object can be used
|
|
if any of the sources will be directories
|
|
that must be scanned on-disk for
|
|
changes to files that aren't
|
|
already specified in other Builder of function calls.
|
|
The <parameter>*_factory</parameter> arguments take a factory function that
|
|
&Command; will use to turn any sources or targets
|
|
specified as strings into SCons Nodes.
|
|
See the manpage section "Builder Objects"
|
|
for more information about how these
|
|
arguments work in a Builder.
|
|
</para>
|
|
|
|
<para>
|
|
Any other keyword arguments specified override any
|
|
same-named existing construction variables.
|
|
</para>
|
|
|
|
<para>
|
|
An action can be an external command,
|
|
specified as a string,
|
|
or a callable &Python; object;
|
|
see the manpage section "Action Objects"
|
|
for more complete information.
|
|
Also note that a string specifying an external command
|
|
may be preceded by an at-sign
|
|
(<literal>@</literal>)
|
|
to suppress printing the command in question,
|
|
or by a hyphen
|
|
(<literal>-</literal>)
|
|
to ignore the exit status of the external command.
|
|
</para>
|
|
|
|
<para>
|
|
Examples:
|
|
</para>
|
|
|
|
<example_commands>
|
|
env.Command(
|
|
target='foo.out',
|
|
source='foo.in',
|
|
action="$FOO_BUILD < $SOURCES > $TARGET"
|
|
)
|
|
|
|
env.Command(
|
|
target='bar.out',
|
|
source='bar.in',
|
|
action=["rm -f $TARGET", "$BAR_BUILD < $SOURCES > $TARGET"],
|
|
ENV={'PATH': '/usr/local/bin/'},
|
|
)
|
|
|
|
|
|
import os
|
|
def rename(env, target, source):
|
|
os.rename('.tmp', str(target[0]))
|
|
|
|
|
|
env.Command(
|
|
target='baz.out',
|
|
source='baz.in',
|
|
action=["$BAZ_BUILD < $SOURCES > .tmp", rename],
|
|
)
|
|
</example_commands>
|
|
|
|
<para>
|
|
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 entries they are.
|
|
If necessary, you can explicitly specify
|
|
that targets or source nodes should
|
|
be treated as directories
|
|
by using the
|
|
&f-link-Dir;
|
|
or
|
|
&f-link-env-Dir;
|
|
functions.
|
|
</para>
|
|
|
|
<para>
|
|
Examples:
|
|
</para>
|
|
|
|
<example_commands>
|
|
env.Command('ddd.list', Dir('ddd'), 'ls -l $SOURCE > $TARGET')
|
|
|
|
env['DISTDIR'] = 'destination/directory'
|
|
env.Command(env.Dir('$DISTDIR')), None, make_distdir)
|
|
</example_commands>
|
|
|
|
<para>
|
|
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.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Configure">
|
|
<term><function>Configure</function>(<parameter>env, [custom_tests, conf_dir, log_file, config_h]</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>Configure</methodname>(<parameter>[custom_tests, conf_dir, log_file, config_h]</parameter>)</term>
|
|
<listitem><para>
|
|
Creates a Configure object for integrated
|
|
functionality similar to GNU autoconf.
|
|
See the manpage section "Configure Contexts"
|
|
for a complete explanation of the arguments and behavior.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Decider">
|
|
<term><function>Decider</function>(<parameter>function</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>Decider</methodname>(<parameter>function</parameter>)</term>
|
|
<listitem><para>
|
|
Specifies that all up-to-date decisions for
|
|
targets built through this construction environment
|
|
will be handled by the specified
|
|
<parameter>function</parameter>.
|
|
<parameter>function</parameter> can be the name of
|
|
a function or one of the following strings
|
|
that specify the predefined decision function
|
|
that will be applied:
|
|
</para>
|
|
|
|
<para>
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><literal>"timestamp-newer"</literal></term>
|
|
<listitem>
|
|
<para>
|
|
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
|
|
<literal>make</literal>
|
|
can be used a synonym for
|
|
<literal>timestamp-newer</literal>.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry>
|
|
<term><literal>"timestamp-match"</literal></term>
|
|
<listitem>
|
|
<para>
|
|
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
|
|
<emphasis>earlier</emphasis>
|
|
timestamp, such as can happen when restoring files from backup archives.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry>
|
|
<term><literal>"content"</literal></term>
|
|
<listitem>
|
|
<para>
|
|
Specifies that a target shall be considered out of date and rebuilt
|
|
if the dependency's content has changed since the last time
|
|
the target was built,
|
|
as determined be performing an checksum
|
|
on the dependency's contents
|
|
and comparing it to the checksum recorded the
|
|
last time the target was built.
|
|
<literal>MD5</literal>
|
|
can be used as a synonym for
|
|
<literal>content</literal>, but it is deprecated.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry>
|
|
<term><literal>"content-timestamp"</literal></term>
|
|
<listitem>
|
|
<para>
|
|
Specifies that a target shall be considered out of date and rebuilt
|
|
if the dependency's content has changed since 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
|
|
<emphasis>not</emphasis>
|
|
rebuilt.
|
|
This provides behavior very similar
|
|
to the
|
|
<literal>content</literal>
|
|
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
|
|
<emphasis>not</emphasis>
|
|
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.
|
|
<literal>MD5-timestamp</literal>
|
|
can be used as a synonym for
|
|
<literal>content-timestamp</literal>, but it is deprecated.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
</para>
|
|
|
|
<para>
|
|
Examples:
|
|
</para>
|
|
|
|
<example_commands>
|
|
# Use exact timestamp matches by default.
|
|
Decider('timestamp-match')
|
|
|
|
# Use hash content signatures for any targets built
|
|
# with the attached construction environment.
|
|
env.Decider('content')
|
|
</example_commands>
|
|
|
|
<para>
|
|
In addition to the above already-available functions, the
|
|
<parameter>function</parameter>
|
|
argument may be a &Python; function you supply.
|
|
Such a function must accept the following four arguments:
|
|
</para>
|
|
|
|
<para>
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><parameter>dependency</parameter></term>
|
|
<listitem>
|
|
<para>
|
|
The Node (file) which
|
|
should cause the
|
|
<parameter>target</parameter>
|
|
to be rebuilt
|
|
if it has "changed" since the last tme
|
|
<parameter>target</parameter>
|
|
was built.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry>
|
|
<term><parameter>target</parameter></term>
|
|
<listitem>
|
|
<para>
|
|
The Node (file) being built.
|
|
In the normal case,
|
|
this is what should get rebuilt
|
|
if the
|
|
<parameter>dependency</parameter>
|
|
has "changed."
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry>
|
|
<term><parameter>prev_ni</parameter></term>
|
|
<listitem>
|
|
<para>
|
|
Stored information about the state of the
|
|
<parameter>dependency</parameter>
|
|
the last time the
|
|
<parameter>target</parameter>
|
|
was built.
|
|
This can be consulted to match various
|
|
file characteristics
|
|
such as the timestamp,
|
|
size, or &contentsig;.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry>
|
|
<term><parameter>repo_node</parameter></term>
|
|
<listitem>
|
|
<para>
|
|
If set, use this Node instead of the one specified by
|
|
<parameter>dependency</parameter>
|
|
to determine if the dependency has changed.
|
|
This argument is optional so should be written
|
|
as a default argument (typically it would be
|
|
written as <parameter>repo_node=None</parameter>).
|
|
A caller will normally only set this if the
|
|
target only exists in a Repository.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
</variablelist>
|
|
</para>
|
|
|
|
<para>
|
|
The
|
|
<parameter>function</parameter>
|
|
should return a value which evaluates
|
|
<constant>True</constant>
|
|
if the
|
|
<parameter>dependency</parameter>
|
|
has "changed" since the last time
|
|
the
|
|
<parameter>target</parameter>
|
|
was built
|
|
(indicating that the target
|
|
<emphasis>should</emphasis>
|
|
be rebuilt),
|
|
and a value which evaluates
|
|
<constant>False</constant>
|
|
otherwise
|
|
(indicating that the target should
|
|
<emphasis>not</emphasis>
|
|
be rebuilt).
|
|
Note that the decision can be made
|
|
using whatever criteria are appopriate.
|
|
Ignoring some or all of the function arguments
|
|
is perfectly normal.
|
|
</para>
|
|
|
|
<para>
|
|
Example:
|
|
</para>
|
|
|
|
<example_commands>
|
|
def my_decider(dependency, target, prev_ni, repo_node=None):
|
|
return not os.path.exists(str(target))
|
|
|
|
env.Decider(my_decider)
|
|
</example_commands>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Default">
|
|
<term><function>Default</function>(<parameter>target[, ...]</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>Default</methodname>(<parameter>target[, ...]</parameter>)</term>
|
|
<listitem><para>
|
|
Specify default targets to the &SCons; target selection mechanism.
|
|
Any call to &f-Default; will cause &SCons; to use the
|
|
defined default target list instead of
|
|
its built-in algorithm for determining default targets
|
|
(see the manpage section "Target Selection").
|
|
</para>
|
|
|
|
<para>
|
|
<parameter>target</parameter> may be one or more strings,
|
|
a list of strings,
|
|
a <classname>NodeList</classname> as returned by a Builder,
|
|
or <constant>None</constant>.
|
|
A string <parameter>target</parameter> may be the name of
|
|
a file or directory, or a target previously defined by a call to
|
|
&f-link-Alias; (defining the alias later will still create
|
|
the alias, but it will not be recognized as a default).
|
|
Calls to &f-Default; are additive.
|
|
A <parameter>target</parameter> of
|
|
<literal>None</literal>
|
|
will clear any existing default target list;
|
|
subsequent calls to
|
|
&f-Default;
|
|
will add to the (now empty) default target list
|
|
like normal.
|
|
</para>
|
|
|
|
<para>
|
|
Both forms of this call affect the
|
|
same global list of default targets; the
|
|
construction environment method applies
|
|
construction variable expansion to the targets.
|
|
</para>
|
|
|
|
<para>
|
|
The current list of targets added using
|
|
&f-Default; is available in the
|
|
&DEFAULT_TARGETS; list (see below).
|
|
</para>
|
|
|
|
<para>
|
|
Examples:
|
|
</para>
|
|
|
|
<example_commands>
|
|
Default('foo', 'bar', 'baz')
|
|
env.Default(['a', 'b', 'c'])
|
|
hello = env.Program('hello', 'hello.c')
|
|
env.Default(hello)
|
|
</example_commands>
|
|
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-DefaultEnvironment">
|
|
<term><function>DefaultEnvironment</function>(<parameter>[**kwargs]</parameter>)</term>
|
|
<listitem><para>
|
|
Instantiates and returns the default &consenv; object.
|
|
The &defenv; is used internally by SCons
|
|
in order to execute many of the global functions in this list
|
|
(that is, those not called as methods of a specific &consenv;).
|
|
It is not mandatory to call &f-DefaultEnvironment;:
|
|
the &defenv; will be instantiated automatically when the
|
|
build phase begins if the function has not been called,
|
|
however calling it explicitly gives the opportunity to
|
|
affect and examine the contents of the &defenv;.
|
|
</para>
|
|
<para>
|
|
The &defenv; is a singleton, so the keyword
|
|
arguments affect it only on the first call, on subsequent
|
|
calls the already-constructed object is returned and
|
|
any keyword arguments are silently ignored.
|
|
The &defenv; can be modified after instantiation
|
|
in the same way as any &consenv;.
|
|
Modifying the &defenv; has no effect on the &consenv;
|
|
constructed by an &f-link-Environment; or &f-link-Clone; call.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Depends">
|
|
<term><function>Depends</function>(<parameter>target, dependency</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>Depends</methodname>(<parameter>target, dependency</parameter>)</term>
|
|
<listitem><para>
|
|
Specifies an explicit dependency;
|
|
the
|
|
<parameter>target</parameter>
|
|
will be rebuilt
|
|
whenever the
|
|
<parameter>dependency</parameter>
|
|
has changed.
|
|
Both the specified
|
|
<parameter>target</parameter>
|
|
and
|
|
<parameter>dependency</parameter>
|
|
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.
|
|
</para>
|
|
|
|
<para>
|
|
Example:
|
|
</para>
|
|
|
|
<example_commands>
|
|
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)
|
|
</example_commands>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Detect">
|
|
<term><replaceable>env</replaceable>.<methodname>Detect</methodname>(<parameter>progs</parameter>)</term>
|
|
<listitem><para>
|
|
Find an executable from one or more choices:
|
|
<parameter>progs</parameter> may be a string or a list of strings.
|
|
Returns the first value from <parameter>progs</parameter>
|
|
that was found, or <constant>None</constant>.
|
|
Executable is searched by checking the paths in the execution environment
|
|
(<varname>env</varname><literal>['ENV']['PATH']</literal>).
|
|
On Windows systems, additionally applies the filename suffixes found in
|
|
the execution environment
|
|
(<varname>env</varname><literal>['ENV']['PATHEXT']</literal>)
|
|
but will not include any such extension in the return value.
|
|
&f-env-Detect; is a wrapper around &f-link-env-WhereIs;.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Dictionary">
|
|
<term><replaceable>env</replaceable>.<methodname>Dictionary</methodname>(<parameter>[vars]</parameter>)</term>
|
|
<listitem><para>
|
|
Returns a dictionary object
|
|
containing the &consvars; in the &consenv;.
|
|
If there are any arguments specified,
|
|
the values of the specified &consvars;
|
|
are returned as a string (if one
|
|
argument) or as a list of strings.
|
|
</para>
|
|
|
|
<para>
|
|
Example:
|
|
</para>
|
|
|
|
<example_commands>
|
|
cvars = env.Dictionary()
|
|
cc_values = env.Dictionary('CC', 'CCFLAGS', 'CCCOM')
|
|
</example_commands>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Dir">
|
|
<term><function>Dir</function>(<parameter>name, [directory]</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>Dir</methodname>(<parameter>name, [directory]</parameter>)</term>
|
|
<listitem><para>
|
|
Returns Directory Node(s).
|
|
A Directory Node is an object that represents a directory.
|
|
<parameter>name</parameter>
|
|
can be a relative or absolute path or a list of such paths.
|
|
<parameter>directory</parameter>
|
|
is an optional directory that will be used as the parent directory.
|
|
If no
|
|
<parameter>directory</parameter>
|
|
is specified, the current script's directory is used as the parent.
|
|
</para>
|
|
|
|
<para>
|
|
If
|
|
<parameter>name</parameter>
|
|
is a single pathname, the corresponding node is returned.
|
|
If
|
|
<parameter>name</parameter>
|
|
is a list, SCons returns a list of nodes.
|
|
Construction variables are expanded in
|
|
<parameter>name</parameter>.
|
|
</para>
|
|
|
|
<para>
|
|
Directory Nodes can be used anywhere you
|
|
would supply a string as a directory name
|
|
to a Builder method or function.
|
|
Directory Nodes have attributes and methods
|
|
that are useful in many situations;
|
|
see manpage section "File and Directory Nodes"
|
|
for more information.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Dump">
|
|
<term><replaceable>env</replaceable>.<methodname>Dump</methodname>(<parameter>[key], [format]</parameter>)</term>
|
|
<listitem><para>
|
|
Serializes &consvars; to a string.
|
|
The method supports the following formats specified by
|
|
<parameter>format</parameter>:
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><literal>pretty</literal></term>
|
|
<listitem>
|
|
<para>
|
|
Returns a pretty printed representation of the environment (if
|
|
<parameter>format</parameter>
|
|
is not specified, this is the default).
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry>
|
|
<term><literal>json</literal></term>
|
|
<listitem>
|
|
<para>
|
|
Returns a JSON-formatted string representation of the environment.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
|
|
If <varname>key</varname> is
|
|
<constant>None</constant> (the default) the entire
|
|
dictionary of &consvars; is serialized.
|
|
If supplied, it is taken as the name of a &consvar;
|
|
whose value is serialized.
|
|
</para>
|
|
|
|
<para>
|
|
This SConstruct:
|
|
</para>
|
|
|
|
<example_commands>
|
|
env=Environment()
|
|
print(env.Dump('CCCOM'))
|
|
</example_commands>
|
|
|
|
<para>
|
|
will print:
|
|
</para>
|
|
|
|
<example_commands>
|
|
'$CC -c -o $TARGET $CCFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS $SOURCES'
|
|
</example_commands>
|
|
|
|
<para>
|
|
While this SConstruct:
|
|
</para>
|
|
|
|
<example_commands>
|
|
env = Environment()
|
|
print(env.Dump())
|
|
</example_commands>
|
|
|
|
<para>
|
|
will print:
|
|
</para>
|
|
<example_commands>
|
|
{ 'AR': 'ar',
|
|
'ARCOM': '$AR $ARFLAGS $TARGET $SOURCES\n$RANLIB $RANLIBFLAGS $TARGET',
|
|
'ARFLAGS': ['r'],
|
|
'AS': 'as',
|
|
'ASCOM': '$AS $ASFLAGS -o $TARGET $SOURCES',
|
|
'ASFLAGS': [],
|
|
...
|
|
</example_commands>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-EnsurePythonVersion">
|
|
<term><function>EnsurePythonVersion</function>(<parameter>major, minor</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>EnsurePythonVersion</methodname>(<parameter>major, minor</parameter>)</term>
|
|
<listitem><para>
|
|
Ensure that the Python version is at least
|
|
<varname>major</varname>.<varname>minor</varname>.
|
|
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.
|
|
</para>
|
|
|
|
<para>
|
|
Example:
|
|
</para>
|
|
|
|
<example_commands>
|
|
EnsurePythonVersion(2,2)
|
|
</example_commands>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-EnsureSConsVersion">
|
|
<term><function>EnsureSConsVersion</function>(<parameter>major, minor, [revision]</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>EnsureSConsVersion</methodname>(<parameter>major, minor, [revision]</parameter>)</term>
|
|
<listitem><para>
|
|
Ensure that the SCons version is at least
|
|
<varname>major.minor</varname>,
|
|
or
|
|
<varname>major.minor.revision</varname>.
|
|
if
|
|
<varname>revision</varname>
|
|
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.
|
|
</para>
|
|
|
|
<para>
|
|
Examples:
|
|
</para>
|
|
|
|
<example_commands>
|
|
EnsureSConsVersion(0,14)
|
|
|
|
EnsureSConsVersion(0,96,90)
|
|
</example_commands>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Environment">
|
|
<term><function>Environment</function>(<parameter>[key=value, ...]</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>Environment</methodname>(<parameter>[key=value, ...]</parameter>)</term>
|
|
<listitem><para>
|
|
Return a new construction environment
|
|
initialized with the specified
|
|
<parameter>key</parameter>=<replaceable>value</replaceable>
|
|
pairs.
|
|
The keyword arguments
|
|
<parameter>parse_flags</parameter>,
|
|
<parameter>platform</parameter>,
|
|
<parameter>toolpath</parameter>,
|
|
<parameter>tools</parameter>
|
|
and <parameter>variables</parameter>
|
|
are also specially recognized.
|
|
See the manpage section "Construction Environments" for more details.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Execute">
|
|
<term><function>Execute</function>(<parameter>action, [actionargs ...]</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>Execute</methodname>(<parameter>action, [actionargs ...]</parameter>)</term>
|
|
<listitem><para>
|
|
Executes an Action.
|
|
<parameter>action</parameter>
|
|
may be an Action object
|
|
or it may be a command-line string,
|
|
list of commands,
|
|
or executable &Python; function,
|
|
each of which will first be converted
|
|
into an Action object
|
|
and then executed.
|
|
Any additional arguments to &f-Execute;
|
|
are passed on to the &f-link-Action; factory function
|
|
which actually creates the Action object
|
|
(see the manpage section <link linkend="action_objects">Action Objects</link>
|
|
for a description). Example:
|
|
</para>
|
|
|
|
<example_commands>
|
|
Execute(Copy('file.out', 'file.in'))
|
|
</example_commands>
|
|
|
|
<para>&f-Execute; performs its action immediately,
|
|
as part of the SConscript-reading phase.
|
|
There are no sources or targets declared in an
|
|
&f-Execute; call, so any objects it manipulates
|
|
will not be tracked as part of the &SCons; dependency graph.
|
|
In the example above, neither
|
|
<filename>file.out</filename> nor
|
|
<filename>file.in</filename> will be tracked objects.
|
|
</para>
|
|
|
|
<para>
|
|
&f-Execute; returns the exit value of the command
|
|
or return value of the &Python; function.
|
|
&scons;
|
|
prints an error message if the executed
|
|
<parameter>action</parameter>
|
|
fails (exits with or returns a non-zero value),
|
|
however it does
|
|
<emphasis>not</emphasis>,
|
|
automatically terminate the build for such a failure.
|
|
If you want the build to stop in response to a failed
|
|
&f-Execute;
|
|
call,
|
|
you must explicitly check for a non-zero return value:
|
|
</para>
|
|
|
|
<example_commands>
|
|
if Execute("mkdir sub/dir/ectory"):
|
|
# The mkdir failed, don't try to build.
|
|
Exit(1)
|
|
</example_commands>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Exit">
|
|
<term><function>Exit</function>(<parameter>[value]</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>Exit</methodname>(<parameter>[value]</parameter>)</term>
|
|
<listitem><para>
|
|
This tells
|
|
&scons;
|
|
to exit immediately
|
|
with the specified
|
|
<varname>value</varname>.
|
|
A default exit value of
|
|
<literal>0</literal>
|
|
(zero)
|
|
is used if no value is specified.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Export">
|
|
<term><function>Export</function>(<parameter>[vars...], [key=value...]</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>Export</methodname>(<parameter>[vars...], [key=value...]</parameter>)</term>
|
|
<listitem><para>
|
|
Exports variables from the current
|
|
SConscript file to a global collection where they can be
|
|
imported by other SConscript files.
|
|
<parameter>vars</parameter> may be one or more
|
|
strings representing variable names to be exported.
|
|
If a string contains whitespace, it is split into
|
|
separate strings, as if multiple string arguments
|
|
had been given. A <parameter>vars</parameter> argument
|
|
may also be a dictionary, which can be used to map variables
|
|
to different names when exported.
|
|
Keyword arguments can be used to provide names and their values.
|
|
</para>
|
|
|
|
<para>
|
|
&f-Export; calls are cumulative. Specifying a previously
|
|
exported variable will overwrite the earlier value.
|
|
Both local variables and global variables can be exported.
|
|
</para>
|
|
|
|
<para>
|
|
Examples:
|
|
</para>
|
|
|
|
<example_commands>
|
|
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})
|
|
</example_commands>
|
|
|
|
<para>
|
|
Note that the
|
|
&f-link-SConscript;
|
|
function supports an &exports;
|
|
argument that allows exporting a variable or
|
|
set of variables to a specific SConscript file or files.
|
|
See the description below.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-File">
|
|
<term><function>File</function>(<parameter>name, [directory]</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>File</methodname>(<parameter>name, [directory]</parameter>)</term>
|
|
<listitem><para>
|
|
Returns File Node(s).
|
|
A File Node is an object that represents a file.
|
|
<parameter>name</parameter>
|
|
can be a relative or absolute path or a list of such paths.
|
|
<parameter>directory</parameter>
|
|
is an optional directory that will be used as the parent directory.
|
|
If no
|
|
<parameter>directory</parameter>
|
|
is specified, the current script's directory is used as the parent.
|
|
</para>
|
|
|
|
<para>
|
|
If
|
|
<parameter>name</parameter>
|
|
is a single pathname, the corresponding node is returned.
|
|
If
|
|
<parameter>name</parameter>
|
|
is a list, SCons returns a list of nodes.
|
|
Construction variables are expanded in
|
|
<parameter>name</parameter>.
|
|
</para>
|
|
|
|
<para>
|
|
File Nodes can be used anywhere you
|
|
would supply a string as a file name
|
|
to a Builder method or function.
|
|
File Nodes have attributes and methods
|
|
that are useful in many situations;
|
|
see manpage section "File and Directory Nodes"
|
|
for more information.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-FindFile">
|
|
<term><function>FindFile</function>(<parameter>file, dirs</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>FindFile</methodname>(<parameter>file, dirs</parameter>)</term>
|
|
<listitem><para>
|
|
Search for
|
|
<parameter>file</parameter>
|
|
in the path specified by
|
|
<parameter>dirs</parameter>.
|
|
<parameter>dirs</parameter>
|
|
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.
|
|
</para>
|
|
|
|
<para>
|
|
Example:
|
|
</para>
|
|
|
|
<example_commands>
|
|
foo = env.FindFile('foo', ['dir1', 'dir2'])
|
|
</example_commands>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-FindInstalledFiles">
|
|
<term><function>FindInstalledFiles</function>()</term>
|
|
<term><replaceable>env</replaceable>.<methodname>FindInstalledFiles</methodname>()</term>
|
|
<listitem><para>
|
|
Returns the list of targets set up by the
|
|
&b-link-Install;
|
|
or
|
|
&b-link-InstallAs;
|
|
builders.
|
|
</para>
|
|
|
|
<para>
|
|
This function serves as a convenient method to select the contents of
|
|
a binary package.
|
|
</para>
|
|
|
|
<para>
|
|
Example:
|
|
</para>
|
|
|
|
<example_commands>
|
|
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()
|
|
</example_commands>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-FindPathDirs">
|
|
<term><function>FindPathDirs</function>(<parameter>variable</parameter>)</term>
|
|
<listitem><para>
|
|
Returns a function
|
|
(actually a callable Python object)
|
|
intended to be used as the
|
|
<varname>path_function</varname>
|
|
of a Scanner object.
|
|
The returned object will look up the specified
|
|
<varname>variable</varname>
|
|
in a construction environment
|
|
and treat the construction variable's value as a list of
|
|
directory paths that should be searched
|
|
(like
|
|
&cv-link-CPPPATH;,
|
|
&cv-link-LIBPATH;,
|
|
etc.).
|
|
</para>
|
|
|
|
<para>
|
|
Note that use of
|
|
&f-FindPathDirs;
|
|
is generally preferable to
|
|
writing your own
|
|
<varname>path_function</varname>
|
|
for the following reasons:
|
|
1) The returned list will contain all appropriate directories
|
|
found in source trees
|
|
(when
|
|
&f-link-VariantDir;
|
|
is used)
|
|
or in code repositories
|
|
(when
|
|
&f-Repository;
|
|
or the
|
|
<option>-Y</option>
|
|
option are used).
|
|
2) scons will identify expansions of
|
|
<varname>variable</varname>
|
|
that evaluate to the same list of directories as,
|
|
in fact, the same list,
|
|
and avoid re-scanning the directories for files,
|
|
when possible.
|
|
</para>
|
|
|
|
<para>
|
|
Example:
|
|
</para>
|
|
|
|
<example_commands>
|
|
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'))
|
|
</example_commands>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-FindSourceFiles">
|
|
<term><function>FindSourceFiles</function>(<parameter>node='"."'</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>FindSourceFiles</methodname>(<parameter>node='"."'</parameter>)</term>
|
|
<listitem><para>
|
|
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
|
|
<parameter>node</parameter>
|
|
which defaults to the '"."'-node. It will then return all leaves of
|
|
<parameter>node</parameter>.
|
|
These are all children which have no further children.
|
|
</para>
|
|
|
|
<para>
|
|
This function is a convenient method to select the contents of a Source
|
|
Package.
|
|
</para>
|
|
|
|
<para>
|
|
Example:
|
|
</para>
|
|
|
|
<example_commands>
|
|
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')
|
|
</example_commands>
|
|
|
|
<para>
|
|
As you can see build support files (SConstruct in the above example)
|
|
will also be returned by this function.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Flatten">
|
|
<term><function>Flatten</function>(<parameter>sequence</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>Flatten</methodname>(<parameter>sequence</parameter>)</term>
|
|
<listitem><para>
|
|
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.
|
|
</para>
|
|
|
|
<para>
|
|
Examples:
|
|
</para>
|
|
|
|
<example_commands>
|
|
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))
|
|
</example_commands>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-GetBuildFailures">
|
|
<term><function>GetBuildFailures</function>()</term>
|
|
<listitem><para>
|
|
Returns a list of exceptions for the
|
|
actions that failed while
|
|
attempting to build targets.
|
|
Each element in the returned list is a
|
|
<classname>BuildError</classname>
|
|
object
|
|
with the following attributes
|
|
that record various aspects
|
|
of the build failure:
|
|
</para>
|
|
|
|
<para>
|
|
<literal>.node</literal>
|
|
The node that was being built
|
|
when the build failure occurred.
|
|
</para>
|
|
|
|
<para>
|
|
<literal>.status</literal>
|
|
The numeric exit status
|
|
returned by the command or Python function
|
|
that failed when trying to build the
|
|
specified Node.
|
|
</para>
|
|
|
|
<para>
|
|
<literal>.errstr</literal>
|
|
The SCons error string
|
|
describing the build failure.
|
|
(This is often a generic
|
|
message like "Error 2"
|
|
to indicate that an executed
|
|
command exited with a status of 2.)
|
|
</para>
|
|
|
|
<para>
|
|
<literal>.filename</literal>
|
|
The name of the file or
|
|
directory that actually caused the failure.
|
|
This may be different from the
|
|
<literal>.node</literal>
|
|
attribute.
|
|
For example,
|
|
if an attempt to build a target named
|
|
<filename>sub/dir/target</filename>
|
|
fails because the
|
|
<filename>sub/dir</filename>
|
|
directory could not be created,
|
|
then the
|
|
<literal>.node</literal>
|
|
attribute will be
|
|
<filename>sub/dir/target</filename>
|
|
but the
|
|
<literal>.filename</literal>
|
|
attribute will be
|
|
<filename>sub/dir</filename>.
|
|
</para>
|
|
|
|
<para>
|
|
<literal>.executor</literal>
|
|
The SCons Executor object
|
|
for the target Node
|
|
being built.
|
|
This can be used to retrieve
|
|
the construction environment used
|
|
for the failed action.
|
|
</para>
|
|
|
|
<para>
|
|
<literal>.action</literal>
|
|
The actual SCons Action object that failed.
|
|
This will be one specific action
|
|
out of the possible list of
|
|
actions that would have been
|
|
executed to build the target.
|
|
</para>
|
|
|
|
<para>
|
|
<literal>.command</literal>
|
|
The actual expanded command that was executed and failed,
|
|
after expansion of
|
|
&cv-link-TARGET;,
|
|
&cv-link-SOURCE;,
|
|
and other construction variables.
|
|
</para>
|
|
|
|
<para>
|
|
Note that the
|
|
&f-GetBuildFailures;
|
|
function
|
|
will always return an empty list
|
|
until any build failure has occurred,
|
|
which means that
|
|
&f-GetBuildFailures;
|
|
will always return an empty list
|
|
while the
|
|
&SConscript;
|
|
files are being read.
|
|
Its primary intended use is
|
|
for functions that will be
|
|
executed before SCons exits
|
|
by passing them to the
|
|
standard Python
|
|
<function>atexit.register</function>()
|
|
function.
|
|
Example:
|
|
</para>
|
|
|
|
<example_commands>
|
|
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)
|
|
</example_commands>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-GetBuildPath">
|
|
<term><function>GetBuildPath</function>(<parameter>file, [...]</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>GetBuildPath</methodname>(<parameter>file, [...]</parameter>)</term>
|
|
<listitem><para>
|
|
Returns the
|
|
&scons;
|
|
path name (or names) for the specified
|
|
<parameter>file</parameter>
|
|
(or files).
|
|
The specified
|
|
<parameter>file</parameter>
|
|
or files
|
|
may be
|
|
&scons;
|
|
Nodes or strings representing path names.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-GetLaunchDir">
|
|
<term><function>GetLaunchDir</function>()</term>
|
|
<term><replaceable>env</replaceable>.<methodname>GetLaunchDir</methodname>()</term>
|
|
<listitem><para>
|
|
Returns the absolute path name of the directory from which
|
|
&scons;
|
|
was initially invoked.
|
|
This can be useful when using the
|
|
<option>-u</option>,
|
|
<option>-U</option>
|
|
or
|
|
<option>-D</option>
|
|
options, which internally
|
|
change to the directory in which the
|
|
&SConstruct;
|
|
file is found.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-GetOption">
|
|
<term><function>GetOption</function>(<parameter>name</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>GetOption</methodname>(<parameter>name</parameter>)</term>
|
|
<listitem><para>
|
|
This function provides a way to query the value of
|
|
options which can be set via the command line or using the
|
|
&f-link-SetOption; function.
|
|
</para>
|
|
<para>
|
|
<parameter>name</parameter> can be an entry from the following table,
|
|
which shows the corresponding command line arguments
|
|
that could affect the value.
|
|
<parameter>name</parameter> can be also be the destination
|
|
variable name from a project-specific option added using the
|
|
&f-link-AddOption; function, as long as the addition
|
|
happens prior to the &f-GetOption; call in the SConscript files.
|
|
</para>
|
|
|
|
<informaltable rowsep="1" colsep="1" frame="topbot">
|
|
<tgroup cols="3">
|
|
<thead>
|
|
<row>
|
|
<entry align="left">Query name</entry>
|
|
<entry align="left">Command-line options</entry>
|
|
<entry align="left">Notes</entry>
|
|
</row>
|
|
</thead>
|
|
|
|
<tbody>
|
|
<row>
|
|
<entry><varname>cache_debug</varname></entry>
|
|
<entry><option>--cache-debug</option></entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>cache_disable</varname></entry>
|
|
<entry>
|
|
<option>--cache-disable</option>,
|
|
<option>--no-cache</option>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>cache_force</varname></entry>
|
|
<entry>
|
|
<option>--cache-force</option>,
|
|
<option>--cache-populate</option>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>cache_readonly</varname></entry>
|
|
<entry><option>--cache-readonly</option></entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>cache_show</varname></entry>
|
|
<entry><option>--cache-show</option></entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>clean</varname></entry>
|
|
<entry>
|
|
<option>-c</option>,
|
|
<option>--clean</option>,
|
|
<option>--remove</option>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>climb_up</varname></entry>
|
|
<entry>
|
|
<option>-D</option>
|
|
<option>-U</option>
|
|
<option>-u</option>
|
|
<option>--up</option>
|
|
<option>--search_up</option>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>config</varname></entry>
|
|
<entry><option>--config</option></entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>debug</varname></entry>
|
|
<entry><option>--debug</option></entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>directory</varname></entry>
|
|
<entry><option>-C</option>, <option>--directory</option></entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>diskcheck</varname></entry>
|
|
<entry><option>--diskcheck</option></entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>duplicate</varname></entry>
|
|
<entry><option>--duplicate</option></entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>enable_virtualenv</varname></entry>
|
|
<entry><option>--enable-virtualenv</option></entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>experimental</varname></entry>
|
|
<entry><option>--experimental</option></entry>
|
|
<entry><emphasis>since 4.2</emphasis></entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>file</varname></entry>
|
|
<entry>
|
|
<option>-f</option>,
|
|
<option>--file</option>,
|
|
<option>--makefile</option>,
|
|
<option>--sconstruct</option>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>hash_format</varname></entry>
|
|
<entry><option>--hash-format</option></entry>
|
|
<entry><emphasis>since 4.2</emphasis></entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>help</varname></entry>
|
|
<entry><option>-h</option>, <option>--help</option></entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>ignore_errors</varname></entry>
|
|
<entry><option>-i</option>, <option>--ignore-errors</option></entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>ignore_virtualenv</varname></entry>
|
|
<entry><option>--ignore-virtualenv</option></entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>implicit_cache</varname></entry>
|
|
<entry><option>--implicit-cache</option></entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>implicit_deps_changed</varname></entry>
|
|
<entry><option>--implicit-deps-changed</option></entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>implicit_deps_unchanged</varname></entry>
|
|
<entry><option>--implicit-deps-unchanged</option></entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>include_dir</varname></entry>
|
|
<entry><option>-I</option>, <option>--include-dir</option></entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>install_sandbox</varname></entry>
|
|
<entry><option>--install-sandbox</option></entry>
|
|
<entry>Available only if the &t-link-install; tool has been called</entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>keep_going</varname></entry>
|
|
<entry><option>-k</option>, <option>--keep-going</option></entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>max_drift</varname></entry>
|
|
<entry><option>--max-drift</option></entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>md5_chunksize</varname></entry>
|
|
<entry>
|
|
<option>--hash-chunksize</option>,
|
|
<option>--md5-chunksize</option>
|
|
</entry>
|
|
<entry><emphasis><option>--hash-chunksize</option> since 4.2</emphasis></entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>no_exec</varname></entry>
|
|
<entry>
|
|
<option>-n</option>,
|
|
<option>--no-exec</option>,
|
|
<option>--just-print</option>,
|
|
<option>--dry-run</option>,
|
|
<option>--recon</option>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>no_progress</varname></entry>
|
|
<entry><option>-Q</option></entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>num_jobs</varname></entry>
|
|
<entry><option>-j</option>, <option>--jobs</option></entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>package_type</varname></entry>
|
|
<entry><option>--package-type</option></entry>
|
|
<entry>Available only if the &t-link-packaging; tool has been called</entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>profile_file</varname></entry>
|
|
<entry><option>--profile</option></entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>question</varname></entry>
|
|
<entry><option>-q</option>, <option>--question</option></entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>random</varname></entry>
|
|
<entry><option>--random</option></entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>repository</varname></entry>
|
|
<entry>
|
|
<option>-Y</option>,
|
|
<option>--repository</option>,
|
|
<option>--srcdir</option>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>silent</varname></entry>
|
|
<entry>
|
|
<option>-s</option>,
|
|
<option>--silent</option>,
|
|
<option>--quiet</option>
|
|
</entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>site_dir</varname></entry>
|
|
<entry><option>--site-dir</option>, <option>--no-site-dir</option></entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>stack_size</varname></entry>
|
|
<entry><option>--stack-size</option></entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>taskmastertrace_file</varname></entry>
|
|
<entry><option>--taskmastertrace</option></entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>tree_printers</varname></entry>
|
|
<entry><option>--tree</option></entry>
|
|
</row>
|
|
<row>
|
|
<entry><varname>warn</varname></entry>
|
|
<entry><option>--warn</option>, <option>--warning</option></entry>
|
|
</row>
|
|
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
|
|
<para>
|
|
See the documentation for the
|
|
corresponding command line option for information about each specific
|
|
option.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Glob">
|
|
<term><function>Glob</function>(<parameter>pattern, [ondisk, source, strings, exclude]</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>Glob</methodname>(<parameter>pattern, [ondisk, source, strings, exclude]</parameter>)</term>
|
|
<listitem><para>
|
|
Returns Nodes (or strings) that match the specified
|
|
<parameter>pattern</parameter>,
|
|
relative to the directory of the current
|
|
&SConscript;
|
|
file.
|
|
The evironment method form (&f-env-Glob;)
|
|
performs string substition on
|
|
<parameter>pattern</parameter>
|
|
and returns whatever matches
|
|
the resulting expanded pattern.
|
|
</para>
|
|
|
|
<para>
|
|
The specified
|
|
<parameter>pattern</parameter>
|
|
uses Unix shell style metacharacters for matching:
|
|
</para>
|
|
|
|
<example_commands>
|
|
* matches everything
|
|
? matches any single character
|
|
[seq] matches any character in seq
|
|
[!seq] matches any char not in seq
|
|
</example_commands>
|
|
|
|
<para>
|
|
If the first character of a filename is a dot,
|
|
it must be matched explicitly.
|
|
Character matches do
|
|
<emphasis>not</emphasis>
|
|
span directory separators.
|
|
</para>
|
|
|
|
<para>
|
|
The
|
|
&f-Glob;
|
|
knows about
|
|
repositories
|
|
(see the
|
|
&f-link-Repository;
|
|
function)
|
|
and source directories
|
|
(see the
|
|
&f-link-VariantDir;
|
|
function)
|
|
and
|
|
returns a Node (or string, if so configured)
|
|
in the local (SConscript) directory
|
|
if a matching Node is found
|
|
anywhere in a corresponding
|
|
repository or source directory.
|
|
</para>
|
|
|
|
<para>
|
|
The
|
|
<parameter>ondisk</parameter>
|
|
argument may be set to a value which evaluates
|
|
<constant>False</constant>
|
|
to disable the search for matches on disk,
|
|
thereby only returning matches among
|
|
already-configured File or Dir Nodes.
|
|
The default behavior is to
|
|
return corresponding Nodes
|
|
for any on-disk matches found.
|
|
</para>
|
|
|
|
<para>
|
|
The
|
|
<parameter>source</parameter>
|
|
argument may be set to a value which evaluates
|
|
<constant>True</constant>
|
|
to specify that,
|
|
when the local directory is a
|
|
&f-VariantDir;,
|
|
the returned Nodes should be from the
|
|
corresponding source directory,
|
|
not the local directory.
|
|
</para>
|
|
|
|
<para>
|
|
The
|
|
<parameter>strings</parameter>
|
|
argument may be set to a value which evaluates
|
|
<constant>True</constant>
|
|
to have the
|
|
&f-Glob;
|
|
function return strings, not Nodes,
|
|
that represent the matched files or directories.
|
|
The returned strings will be relative to
|
|
the local (SConscript) directory.
|
|
(Note that This may make it easier to perform
|
|
arbitrary manipulation of file names,
|
|
but if the returned strings are
|
|
passed to a different
|
|
&SConscript;
|
|
file,
|
|
any Node translation will be relative
|
|
to the other
|
|
&SConscript;
|
|
directory,
|
|
not the original
|
|
&SConscript;
|
|
directory.)
|
|
</para>
|
|
|
|
<para>
|
|
The
|
|
<parameter>exclude</parameter>
|
|
argument may be set to a pattern or a list of patterns
|
|
(following the same Unix shell semantics)
|
|
which must be filtered out of returned elements.
|
|
Elements matching a least one pattern of
|
|
this list will be excluded.
|
|
</para>
|
|
|
|
<para>
|
|
Examples:
|
|
</para>
|
|
|
|
<example_commands>
|
|
Program("foo", Glob("*.c"))
|
|
Zip("/tmp/everything", Glob(".??*") + Glob("*"))
|
|
sources = Glob("*.cpp", exclude=["os_*_specific_*.cpp"]) + \
|
|
Glob( "os_%s_specific_*.cpp" % currentOS)
|
|
</example_commands>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Help">
|
|
<term><function>Help</function>(<parameter>text, append=False</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>Help</methodname>(<parameter>text, append=False</parameter>)</term>
|
|
<listitem><para>
|
|
Specifies a local help message to be printed if the
|
|
<option>-h</option>
|
|
argument is given to
|
|
&scons;.
|
|
Subsequent calls to
|
|
&f-Help;
|
|
append <parameter>text</parameter> to the previously
|
|
defined local help text.
|
|
</para>
|
|
<para>
|
|
For the first call to &f-Help; only,
|
|
if <parameter>append</parameter> is <constant>False</constant>
|
|
(the default)
|
|
any local help message generated through
|
|
&f-link-AddOption; calls is replaced.
|
|
If <parameter>append</parameter> is <constant>True</constant>,
|
|
<parameter>text</parameter> is appended to
|
|
the existing help text.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Ignore">
|
|
<term><function>Ignore</function>(<parameter>target, dependency</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>Ignore</methodname>(<parameter>target, dependency</parameter>)</term>
|
|
<listitem><para>
|
|
The specified dependency file(s)
|
|
will be ignored when deciding if
|
|
the target file(s) need to be rebuilt.
|
|
</para>
|
|
|
|
<para>
|
|
You can also use
|
|
&f-Ignore;
|
|
to remove a target from the default build.
|
|
In order to do this you must specify the directory the target will
|
|
be built in as the target, and the file you want to skip building
|
|
as the dependency.
|
|
</para>
|
|
|
|
<para>
|
|
Note that this will only remove the dependencies listed from
|
|
the files built by default. It will still be built if that
|
|
dependency is needed by another object being built.
|
|
See the third and forth examples below.
|
|
</para>
|
|
|
|
<para>
|
|
Examples:
|
|
</para>
|
|
|
|
<example_commands>
|
|
env.Ignore('foo', 'foo.c')
|
|
env.Ignore('bar', ['bar1.h', 'bar2.h'])
|
|
env.Ignore('.', 'foobar.obj')
|
|
env.Ignore('bar', 'bar/foobar.obj')
|
|
</example_commands>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Import">
|
|
<term><function>Import</function>(<parameter>vars...</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>Import</methodname>(<parameter>vars...</parameter>)</term>
|
|
<listitem><para>
|
|
Imports variables into the current SConscript file.
|
|
<parameter>vars</parameter>
|
|
must be strings representing names of variables
|
|
which have been previously exported either by the
|
|
&f-link-Export; function or by the
|
|
&exports; argument to
|
|
&f-link-SConscript;.
|
|
Variables exported by
|
|
&f-SConscript;
|
|
take precedence.
|
|
Multiple variable names can be passed to
|
|
&f-Import;
|
|
as separate arguments or as words in a space-separated string.
|
|
The wildcard <literal>"*"</literal> can be used to import all
|
|
available variables.
|
|
</para>
|
|
|
|
<para>
|
|
Examples:
|
|
</para>
|
|
|
|
<example_commands>
|
|
Import("env")
|
|
Import("env", "variable")
|
|
Import(["env", "variable"])
|
|
Import("*")
|
|
</example_commands>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Literal">
|
|
<term><function>Literal</function>(<parameter>string</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>Literal</methodname>(<parameter>string</parameter>)</term>
|
|
<listitem><para>
|
|
The specified
|
|
<parameter>string</parameter>
|
|
will be preserved as-is
|
|
and not have construction variables expanded.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Local">
|
|
<term><function>Local</function>(<parameter>targets</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>Local</methodname>(<parameter>targets</parameter>)</term>
|
|
<listitem><para>
|
|
The specified
|
|
<parameter>targets</parameter>
|
|
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.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-MergeFlags">
|
|
<term><replaceable>env</replaceable>.<methodname>MergeFlags</methodname>(<parameter>arg, [unique]</parameter>)</term>
|
|
<listitem><para>
|
|
Merges values from
|
|
<parameter>arg</parameter>
|
|
into &consvars; in the current &consenv;.
|
|
If
|
|
<parameter>arg</parameter>
|
|
is not a dictionary,
|
|
it is converted to one by calling
|
|
&f-link-env-ParseFlags;
|
|
on the argument
|
|
before the values are merged.
|
|
Note that
|
|
<parameter>arg</parameter>
|
|
must be a single value,
|
|
so multiple strings must
|
|
be passed in as a list,
|
|
not as separate arguments to
|
|
&f-env-MergeFlags;.
|
|
</para>
|
|
|
|
<para>
|
|
If <literal>unique</literal> is true (the default),
|
|
duplicate values are not stored.
|
|
When eliminating duplicate values,
|
|
any &consvars; that end with
|
|
the string
|
|
<literal>PATH</literal>
|
|
keep the left-most unique value.
|
|
All other &consvars; keep
|
|
the right-most unique value.
|
|
If <literal>unique</literal> is false,
|
|
values are added even if they are duplicates.
|
|
</para>
|
|
|
|
<para>
|
|
Examples:
|
|
</para>
|
|
|
|
<example_commands>
|
|
# 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',
|
|
]
|
|
)
|
|
</example_commands>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-NoCache">
|
|
<term><function>NoCache</function>(<parameter>target, ...</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>NoCache</methodname>(<parameter>target, ...</parameter>)</term>
|
|
<listitem><para>
|
|
Specifies a list of files which should
|
|
<emphasis>not</emphasis>
|
|
be cached whenever the
|
|
&f-link-CacheDir;
|
|
method has been activated.
|
|
The specified targets may be a list
|
|
or an individual target.
|
|
</para>
|
|
|
|
<para>
|
|
Multiple files should be specified
|
|
either as separate arguments to the
|
|
&f-NoCache;
|
|
method, or as a list.
|
|
&f-NoCache;
|
|
will also accept the return value of any of the construction environment
|
|
Builder methods.
|
|
</para>
|
|
|
|
<para>
|
|
Calling
|
|
&f-NoCache;
|
|
on directories and other non-File Node types has no effect because
|
|
only File Nodes are cached.
|
|
</para>
|
|
|
|
<para>
|
|
Examples:
|
|
</para>
|
|
|
|
<example_commands>
|
|
NoCache('foo.elf')
|
|
NoCache(env.Program('hello', 'hello.c'))
|
|
</example_commands>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-NoClean">
|
|
<term><function>NoClean</function>(<parameter>target, ...</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>NoClean</methodname>(<parameter>target, ...</parameter>)</term>
|
|
<listitem><para>
|
|
Specifies a list of files or directories which should
|
|
<emphasis>not</emphasis>
|
|
be removed whenever the targets (or their dependencies)
|
|
are specified with the
|
|
<option>-c</option>
|
|
command line option.
|
|
The specified targets may be a list
|
|
or an individual target.
|
|
Multiple calls to
|
|
&f-NoClean;
|
|
are legal,
|
|
and prevent each specified target
|
|
from being removed by calls to the
|
|
<option>-c</option>
|
|
option.
|
|
</para>
|
|
|
|
<para>
|
|
Multiple files or directories should be specified
|
|
either as separate arguments to the
|
|
&f-NoClean;
|
|
method, or as a list.
|
|
&f-NoClean;
|
|
will also accept the return value of any of the construction environment
|
|
Builder methods.
|
|
</para>
|
|
|
|
<para>
|
|
Calling
|
|
&f-NoClean;
|
|
for a target overrides calling
|
|
&f-link-Clean;
|
|
for the same target,
|
|
and any targets passed to both functions will
|
|
<emphasis>not</emphasis>
|
|
be removed by the
|
|
<option>-c</option>
|
|
option.
|
|
</para>
|
|
|
|
<para>
|
|
Examples:
|
|
</para>
|
|
|
|
<example_commands>
|
|
NoClean('foo.elf')
|
|
NoClean(env.Program('hello', 'hello.c'))
|
|
</example_commands>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-ParseConfig">
|
|
<term><replaceable>env</replaceable>.<methodname>ParseConfig</methodname>(<parameter>command, [function, unique]</parameter>)</term>
|
|
<listitem><para>
|
|
Updates the current &consenv; with the values extracted
|
|
from the output of running external <parameter>command</parameter>,
|
|
by passing it to a helper <parameter>function</parameter>.
|
|
<parameter>command</parameter> may be a string
|
|
or a list of strings representing the command and
|
|
its arguments.
|
|
If <parameter>function</parameter>
|
|
is omitted or <constant>None</constant>,
|
|
&f-link-env-MergeFlags; is used.
|
|
By default,
|
|
duplicate values are not
|
|
added to any construction variables;
|
|
you can specify
|
|
<parameter>unique=False</parameter>
|
|
to allow duplicate values to be added.
|
|
</para>
|
|
|
|
<para>
|
|
<parameter>command</parameter> is executed using the
|
|
SCons execution environment (that is, the &consvar;
|
|
&cv-link-ENV; in the current &consenv;).
|
|
If <parameter>command</parameter> needs additional information
|
|
to operate properly, that needs to be set in the execution environment.
|
|
For example, <command>pkg-config</command>
|
|
may need a custom value set in the <envar>PKG_CONFIG_PATH</envar>
|
|
environment variable.
|
|
</para>
|
|
|
|
<para>
|
|
&f-env-MergeFlags; needs to understand
|
|
the output produced by <parameter>command</parameter>
|
|
in order to distribute it to appropriate &consvars;.
|
|
&f-env-MergeFlags; uses a separate function to
|
|
do that processing -
|
|
see &f-link-env-ParseFlags; for the details, including a
|
|
a table of options and corresponding construction variables.
|
|
To provide alternative processing of the output of
|
|
<parameter>command</parameter>,
|
|
you can suppply a custom
|
|
<parameter>function</parameter>,
|
|
which must accept three arguments:
|
|
the &consenv; to modify,
|
|
a string argument containing the output from running
|
|
<parameter>command</parameter>,
|
|
and the optional
|
|
<parameter>unique</parameter> flag.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-ParseDepends">
|
|
<term><function>ParseDepends</function>(<parameter>filename, [must_exist, only_one]</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>ParseDepends</methodname>(<parameter>filename, [must_exist, only_one]</parameter>)</term>
|
|
<listitem><para>
|
|
Parses the contents of <parameter>filename</parameter>
|
|
as a list of dependencies in the style of
|
|
&Make;
|
|
or
|
|
<application>mkdep</application>,
|
|
and explicitly establishes all of the listed dependencies.
|
|
</para>
|
|
|
|
<para>
|
|
By default,
|
|
it is not an error
|
|
if <parameter>filename</parameter>
|
|
does not exist.
|
|
The optional
|
|
<parameter>must_exist</parameter>
|
|
argument may be set to <constant>True</constant>
|
|
to have &SCons;
|
|
raise an exception if the file does not exist,
|
|
or is otherwise inaccessible.
|
|
</para>
|
|
|
|
<para>
|
|
The optional
|
|
<parameter>only_one</parameter>
|
|
argument may be set to <constant>True</constant>
|
|
to have &SCons; raise an exception
|
|
if the file contains dependency
|
|
information for more than one target.
|
|
This can provide a small sanity check
|
|
for files intended to be generated
|
|
by, for example, the
|
|
<literal>gcc -M</literal>
|
|
flag,
|
|
which should typically only
|
|
write dependency information for
|
|
one output file into a corresponding
|
|
<filename>.d</filename>
|
|
file.
|
|
</para>
|
|
|
|
<para>
|
|
<parameter>filename</parameter>
|
|
and all of the files listed therein
|
|
will be interpreted relative to
|
|
the directory of the
|
|
&SConscript;
|
|
file which calls the
|
|
&f-ParseDepends;
|
|
function.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-ParseFlags">
|
|
<term><replaceable>env</replaceable>.<methodname>ParseFlags</methodname>(<parameter>flags, ...</parameter>)</term>
|
|
<listitem><para>
|
|
Parses one or more strings containing
|
|
typical command-line flags for GCC-style tool chains
|
|
and returns a dictionary with the flag values
|
|
separated into the appropriate SCons construction variables.
|
|
Intended as a companion to the
|
|
&f-link-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
|
|
&f-env-MergeFlags;
|
|
will call this method if its argument is not a dictionary,
|
|
so it is usually not necessary to call
|
|
&f-env-ParseFlags;
|
|
directly unless you want to manipulate the values.)
|
|
</para>
|
|
|
|
<para>
|
|
If the first character in any string is
|
|
an exclamation mark (<literal>!</literal>),
|
|
the rest of the string is executed as a command,
|
|
and the output from the command is
|
|
parsed as GCC tool chain command-line flags
|
|
and added to the resulting dictionary.
|
|
This can be used to call a <filename>*-config</filename>
|
|
command typical of the POSIX programming environment
|
|
(for example,
|
|
<command>pkg-config</command>).
|
|
Note that such a command is executed using the
|
|
SCons execution environment;
|
|
if the command needs additional information,
|
|
that information needs to be explicitly provided.
|
|
See &f-link-ParseConfig; for more details.
|
|
</para>
|
|
|
|
<para>
|
|
Flag values are translated according to the prefix found,
|
|
and added to the following construction variables:
|
|
</para>
|
|
|
|
<example_commands>
|
|
-arch CCFLAGS, LINKFLAGS
|
|
-D CPPDEFINES
|
|
-framework FRAMEWORKS
|
|
-frameworkdir= FRAMEWORKPATH
|
|
-fmerge-all-constants CCFLAGS, LINKFLAGS
|
|
-fopenmp CCFLAGS, LINKFLAGS
|
|
-fsanitize CCFLAGS, LINKFLAGS
|
|
-include CCFLAGS
|
|
-imacros CCFLAGS
|
|
-isysroot CCFLAGS, LINKFLAGS
|
|
-isystem CCFLAGS
|
|
-iquote CCFLAGS
|
|
-idirafter CCFLAGS
|
|
-I CPPPATH
|
|
-l LIBS
|
|
-L LIBPATH
|
|
-mno-cygwin CCFLAGS, LINKFLAGS
|
|
-mwindows LINKFLAGS
|
|
-openmp CCFLAGS, 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
|
|
</example_commands>
|
|
|
|
<para>
|
|
Any other strings not associated with options
|
|
are assumed to be the names of libraries
|
|
and added to the
|
|
&cv-LIBS;
|
|
construction variable.
|
|
</para>
|
|
|
|
<para>
|
|
Examples (all of which produce the same result):
|
|
</para>
|
|
|
|
<example_commands>
|
|
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')
|
|
</example_commands>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Platform">
|
|
<term><function>Platform</function>(<parameter>plat</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>Platform</methodname>(<parameter>plat</parameter>)</term>
|
|
<listitem><para>
|
|
When called as a global function,
|
|
returns a callable platform object
|
|
selected by <parameter>plat</parameter>
|
|
(defaults to the detected platform for the
|
|
current system)
|
|
that can be used to initialize
|
|
a construction environment by passing it as the
|
|
<parameter>platform</parameter> keyword argument to the
|
|
&f-link-Environment; function.
|
|
</para>
|
|
|
|
<para>
|
|
Example:
|
|
</para>
|
|
|
|
<example_commands>
|
|
env = Environment(platform=Platform('win32'))
|
|
</example_commands>
|
|
|
|
<para>
|
|
When called as a method of an environment,
|
|
calls the platform object indicated by
|
|
<parameter>plat</parameter>
|
|
to update that environment.
|
|
</para>
|
|
|
|
<example_commands>
|
|
env.Platform('posix')
|
|
</example_commands>
|
|
|
|
<para>
|
|
See the manpage section "Construction Environments" for more details.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Precious">
|
|
<term><function>Precious</function>(<parameter>target, ...</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>Precious</methodname>(<parameter>target, ...</parameter>)</term>
|
|
<listitem><para>
|
|
Marks each given
|
|
<varname>target</varname>
|
|
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
|
|
&f-Precious;.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Prepend">
|
|
<term><replaceable>env</replaceable>.<methodname>Prepend</methodname>(<parameter>key=val, [...]</parameter>)</term>
|
|
<listitem><para>
|
|
Prepend values to &consvars; in the current &consenv;,
|
|
Works like &f-link-env-Append; (see for details),
|
|
except that values are added to the front,
|
|
rather than the end, of any existing value of the &consvar;
|
|
</para>
|
|
|
|
<para>
|
|
Example:
|
|
</para>
|
|
|
|
<example_commands>
|
|
env.Prepend(CCFLAGS='-g ', FOO=['foo.yyy'])
|
|
</example_commands>
|
|
|
|
<para>
|
|
See also &f-link-env-Append;,
|
|
&f-link-env-AppendUnique;
|
|
and &f-link-env-PrependUnique;.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-PrependENVPath">
|
|
<term><replaceable>env</replaceable>.<methodname>PrependENVPath</methodname>(<parameter>name, newpath, [envname, sep, delete_existing=True]</parameter>)</term>
|
|
<listitem><para>
|
|
Prepend path elements specified by <parameter>newpath</parameter>
|
|
to the given search path string or list <parameter>name</parameter>
|
|
in mapping <parameter>envname</parameter> in the &consenv;.
|
|
Supplying <parameter>envname</parameter> is optional:
|
|
the default is the execution environment &cv-link-ENV;.
|
|
Optional <parameter>sep</parameter> is used as the search path separator,
|
|
the default is the platform's separator (<systemitem>os.pathsep</systemitem>).
|
|
A path element will only appear once.
|
|
Any duplicates in <parameter>newpath</parameter> are dropped,
|
|
keeping the first appearing (to preserve path order).
|
|
If <parameter>delete_existing</parameter>
|
|
is <constant>False</constant>
|
|
any addition duplicating an existing path element is ignored;
|
|
if <parameter>delete_existing</parameter>
|
|
is <constant>True</constant> (the default) the existing value will
|
|
be dropped and the path element will be inserted at the beginning.
|
|
To help maintain uniqueness all paths are normalized (using
|
|
<systemitem>os.path.normpath</systemitem>
|
|
and
|
|
<systemitem>os.path.normcase</systemitem>).
|
|
</para>
|
|
|
|
<para>
|
|
Example:
|
|
</para>
|
|
|
|
<example_commands>
|
|
print('before:', env['ENV']['INCLUDE'])
|
|
include_path = '/foo/bar:/foo'
|
|
env.PrependENVPath('INCLUDE', include_path)
|
|
print('after:', env['ENV']['INCLUDE'])
|
|
</example_commands>
|
|
|
|
<para>Yields:</para>
|
|
|
|
<screen>
|
|
before: /biz:/foo
|
|
after: /foo/bar:/foo:/biz
|
|
</screen>
|
|
|
|
<para>
|
|
See also &f-link-env-AppendENVPath;.
|
|
</para>
|
|
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-PrependUnique">
|
|
<term><replaceable>env</replaceable>.<methodname>PrependUnique</methodname>(<parameter>key=val, delete_existing=False, [...]</parameter>)</term>
|
|
<listitem><para>
|
|
Prepend values to &consvars; in the current &consenv;,
|
|
maintaining uniqueness.
|
|
Works like &f-link-env-Append; (see for details),
|
|
except that values are added to the front,
|
|
rather than the end, of any existing value of the &consvar;,
|
|
and values already present in the &consvar;
|
|
will not be added again.
|
|
If <parameter>delete_existing</parameter>
|
|
is <constant>True</constant>,
|
|
the existing matching value is first removed,
|
|
and the requested value is inserted,
|
|
having the effect of moving such values to the front.
|
|
</para>
|
|
|
|
<para>
|
|
Example:
|
|
</para>
|
|
|
|
<example_commands>
|
|
env.PrependUnique(CCFLAGS='-g', FOO=['foo.yyy'])
|
|
</example_commands>
|
|
|
|
<para>
|
|
See also &f-link-env-Append;,
|
|
&f-link-env-AppendUnique;
|
|
and &f-link-env-Prepend;.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Progress">
|
|
<term><function>Progress</function>(<parameter>callable, [interval]</parameter>)</term>
|
|
<term><function>Progress</function>(<parameter>string, [interval, file, overwrite]</parameter>)</term>
|
|
<term><function>Progress</function>(<parameter>list_of_strings, [interval, file, overwrite]</parameter>)</term>
|
|
<listitem><para>
|
|
Allows SCons to show progress made during the build
|
|
by displaying a string or calling a function while
|
|
evaluating Nodes (e.g. files).
|
|
</para>
|
|
|
|
<para>
|
|
If the first specified argument is a Python callable
|
|
(a function or an object that has a
|
|
<methodname>__call__</methodname> method),
|
|
the function will be called
|
|
once every
|
|
<varname>interval</varname>
|
|
times a Node is evaluated (default <constant>1</constant>).
|
|
The callable will be passed the evaluated Node
|
|
as its only argument.
|
|
(For future compatibility,
|
|
it's a good idea to also add
|
|
<parameter>*args</parameter>
|
|
and
|
|
<parameter>**kwargs</parameter>
|
|
as arguments to your function or method signatures.
|
|
This will prevent the code from breaking
|
|
if &SCons; ever changes the interface
|
|
to call the function with additional arguments in the future.)
|
|
</para>
|
|
|
|
<para>
|
|
An example of a simple custom progress function
|
|
that prints a string containing the Node name
|
|
every 10 Nodes:
|
|
</para>
|
|
|
|
<example_commands>
|
|
def my_progress_function(node, *args, **kwargs):
|
|
print('Evaluating node %s!' % node)
|
|
Progress(my_progress_function, interval=10)
|
|
</example_commands>
|
|
|
|
<para>
|
|
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
|
|
<literal>\r</literal>
|
|
(a carriage return)
|
|
at the end so that the string
|
|
will overwrite itself on a display:
|
|
</para>
|
|
|
|
<example_commands>
|
|
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)
|
|
</example_commands>
|
|
|
|
<para>
|
|
If the first argument to
|
|
&f-Progress; is a string or list of strings,
|
|
it is taken as text to be displayed every
|
|
<varname>interval</varname>
|
|
evaluated Nodes.
|
|
If the first argument is a list of strings,
|
|
then each string in the list will be displayed
|
|
in rotating fashion every
|
|
<varname>interval</varname>
|
|
evaluated Nodes.
|
|
</para>
|
|
|
|
<para>
|
|
The default is to print the string on standard output.
|
|
An alternate output stream
|
|
may be specified with the
|
|
<parameter>file</parameter>
|
|
keyword argument, which the
|
|
caller must pass already opened.
|
|
</para>
|
|
|
|
<para>
|
|
The following will print a series of dots
|
|
on the error output,
|
|
one dot for every 100 evaluated Nodes:
|
|
</para>
|
|
|
|
<example_commands>
|
|
import sys
|
|
Progress('.', interval=100, file=sys.stderr)
|
|
</example_commands>
|
|
|
|
<para>
|
|
If the string contains the verbatim substring
|
|
<literal>$TARGET;</literal>,
|
|
it will be replaced with the Node.
|
|
Note that, for performance reasons, this is
|
|
<emphasis>not</emphasis>
|
|
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 carriage return)
|
|
(<literal>\r</literal>)
|
|
to cause each line to overwritten by the next line,
|
|
and the
|
|
<parameter>overwrite</parameter>
|
|
keyword argument (default <literal>False</literal>)
|
|
to make sure the previously-printed
|
|
file name is overwritten with blank spaces:
|
|
</para>
|
|
|
|
<example_commands>
|
|
import sys
|
|
Progress('$TARGET\r', overwrite=True)
|
|
</example_commands>
|
|
|
|
<para>
|
|
A list of strings can be used to implement a "spinner"
|
|
on the user's screen as follows, changing every
|
|
five evaluated Nodes:
|
|
</para>
|
|
|
|
<example_commands>
|
|
Progress(['-\r', '\\\r', '|\r', '/\r'], interval=5)
|
|
</example_commands>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Pseudo">
|
|
<term><function>Pseudo</function>(<parameter>target, ...</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>Pseudo</methodname>(<parameter>target, ...</parameter>)</term>
|
|
<listitem><para>
|
|
This indicates that each given
|
|
<varname>target</varname>
|
|
should not be created by the build rule, and if the target is created,
|
|
an error will be generated. This is similar to the gnu make .PHONY
|
|
target. However, in the vast majority of cases, an
|
|
&f-Alias;
|
|
is more appropriate.
|
|
|
|
Multiple targets can be passed in to a single call to
|
|
&f-Pseudo;.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-PyPackageDir">
|
|
<term><function>PyPackageDir</function>(<parameter>modulename</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>PyPackageDir</methodname>(<parameter>modulename</parameter>)</term>
|
|
<listitem><para>
|
|
This returns a Directory Node similar to Dir.
|
|
The python module / package is looked up and if located
|
|
the directory is returned for the location.
|
|
<parameter>modulename</parameter>
|
|
Is a named python package / module to
|
|
lookup the directory for it's location.
|
|
</para>
|
|
<para>
|
|
If
|
|
<parameter>modulename</parameter>
|
|
is a list, SCons returns a list of Dir nodes.
|
|
Construction variables are expanded in
|
|
<parameter>modulename</parameter>.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Replace">
|
|
<term><replaceable>env</replaceable>.<methodname>Replace</methodname>(<parameter>key=val, [...]</parameter>)</term>
|
|
<listitem><para>
|
|
Replaces construction variables in the Environment
|
|
with the specified keyword arguments.
|
|
</para>
|
|
|
|
<para>
|
|
Example:
|
|
</para>
|
|
|
|
<example_commands>
|
|
env.Replace(CCFLAGS='-g', FOO='foo.xxx')
|
|
</example_commands>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Repository">
|
|
<term><function>Repository</function>(<parameter>directory</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>Repository</methodname>(<parameter>directory</parameter>)</term>
|
|
<listitem><para>
|
|
Specifies that
|
|
<parameter>directory</parameter>
|
|
is a repository to be searched for files.
|
|
Multiple calls to
|
|
&f-Repository;
|
|
are legal,
|
|
and each one adds to the list of
|
|
repositories that will be searched.
|
|
</para>
|
|
|
|
<para>
|
|
To
|
|
&scons;,
|
|
a repository is a copy of the source tree,
|
|
from the top-level directory on down,
|
|
which may contain
|
|
both source files and derived files
|
|
that can be used to build targets in
|
|
the local source tree.
|
|
The canonical example would be an
|
|
official source tree maintained by an integrator.
|
|
If the repository contains derived files,
|
|
then the derived files should have been built using
|
|
&scons;,
|
|
so that the repository contains the necessary
|
|
signature information to allow
|
|
&scons;
|
|
to figure out when it is appropriate to
|
|
use the repository copy of a derived file,
|
|
instead of building one locally.
|
|
</para>
|
|
|
|
<para>
|
|
Note that if an up-to-date derived file
|
|
already exists in a repository,
|
|
&scons;
|
|
will
|
|
<emphasis>not</emphasis>
|
|
make a copy in the local directory tree.
|
|
In order to guarantee that a local copy
|
|
will be made,
|
|
use the
|
|
&f-link-Local;
|
|
method.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Requires">
|
|
<term><function>Requires</function>(<parameter>target, prerequisite</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>Requires</methodname>(<parameter>target, prerequisite</parameter>)</term>
|
|
<listitem><para>
|
|
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,
|
|
<emphasis>before</emphasis>
|
|
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.
|
|
</para>
|
|
|
|
<para>
|
|
Example:
|
|
</para>
|
|
|
|
<example_commands>
|
|
env.Requires('foo', 'file-that-must-be-built-before-foo')
|
|
</example_commands>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Return">
|
|
<term><function>Return</function>(<parameter>[vars..., stop=True]</parameter>)</term>
|
|
<listitem><para>
|
|
Return to the calling SConscript, optionally
|
|
returning the values of variables named in
|
|
<varname>vars</varname>.
|
|
Multiple strings contaning variable names may be passed to
|
|
&f-Return;. A string containing white space
|
|
is split into individual variable names.
|
|
Returns the value if one variable is specified,
|
|
else returns a tuple of values.
|
|
Returns an empty tuple if <parameter>vars</parameter>
|
|
is omitted.
|
|
</para>
|
|
|
|
<para>
|
|
By default &Return; stops processing the current SConscript
|
|
and returns immediately.
|
|
The optional
|
|
<literal>stop</literal>
|
|
keyword argument
|
|
may be set to a false value
|
|
to continue processing the rest of the SConscript
|
|
file after the
|
|
&f-Return;
|
|
call (this was the default behavior prior to SCons 0.98.)
|
|
However, the values returned
|
|
are still the values of the variables in the named
|
|
<varname>vars</varname>
|
|
at the point
|
|
&f-Return;
|
|
was called.
|
|
</para>
|
|
|
|
<para>
|
|
Examples:
|
|
</para>
|
|
|
|
<example_commands>
|
|
# Returns no values (evaluates False)
|
|
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')
|
|
</example_commands>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Scanner">
|
|
<term><function>Scanner</function>(<parameter>function, [name, argument, skeys, path_function, node_class, node_factory, scan_check, recursive]</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>Scanner</methodname>(<parameter>function, [name, argument, skeys, path_function, node_class, node_factory, scan_check, recursive]</parameter>)</term>
|
|
<listitem><para>
|
|
Creates a Scanner object for
|
|
the specified
|
|
<parameter>function</parameter>.
|
|
See manpage section "Scanner Objects"
|
|
for a complete explanation of the arguments and behavior.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-SConscript">
|
|
<term><function>SConscript</function>(<parameter>scripts, [exports, variant_dir, duplicate, must_exist]</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>SConscript</methodname>(<parameter>scripts, [exports, variant_dir, duplicate, must_exist]</parameter>)</term>
|
|
<term><function>SConscript</function>(<parameter>dirs=subdirs, [name=scriptname, exports, variant_dir, duplicate, must_exist]</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>SConscript</methodname>(<parameter>dirs=subdirs, [name=scriptname, exports, variant_dir, duplicate, must_exist]</parameter>)</term>
|
|
<listitem><para>
|
|
Executes one or more subsidiary SConscript (configuration) files.
|
|
There are two ways to call the
|
|
&f-SConscript; function.
|
|
</para>
|
|
|
|
<para>
|
|
The first calling style is to supply
|
|
one or more SConscript file names
|
|
as the first (positional) argument.
|
|
A single script may be specified as a string;
|
|
multiple scripts must be specified as a list of strings
|
|
(either explicitly or as created by
|
|
a function like
|
|
&f-link-Split;).
|
|
Examples:
|
|
</para>
|
|
<example_commands>
|
|
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')
|
|
</example_commands>
|
|
|
|
<para>
|
|
The other calling style is to omit the positional argument naming
|
|
scripts and instead specify a list of directory names using the
|
|
<varname>dirs</varname> keyword argument.
|
|
In this case,
|
|
&scons;
|
|
will
|
|
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
|
|
<varname>name</varname>=<replaceable>scriptname</replaceable>
|
|
keyword argument.
|
|
The first three examples below have the same effect
|
|
as the first three examples above:
|
|
</para>
|
|
<example_commands>
|
|
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')
|
|
</example_commands>
|
|
|
|
<para>
|
|
The optional
|
|
<varname>exports</varname>
|
|
keyword argument provides a string or list of strings representing
|
|
variable names, or a dictionary of named values, to export.
|
|
For the first calling style only, a second positional argument
|
|
will be interpreted as <varname>exports</varname>; the
|
|
second calling style must use the keyword argument form
|
|
for <varname>exports</varname>.
|
|
These variables are locally exported only to the called
|
|
SConscript file(s)
|
|
and do not affect the global pool of variables managed by the
|
|
&f-link-Export;
|
|
function.
|
|
<!-- If multiple dirs are provided, each script gets a fresh export. -->
|
|
The subsidiary SConscript files
|
|
must use the
|
|
&f-link-Import;
|
|
function to import the variables.
|
|
Examples:
|
|
</para>
|
|
<example_commands>
|
|
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')
|
|
</example_commands>
|
|
|
|
<para>
|
|
If the optional
|
|
<varname>variant_dir</varname>
|
|
argument is present, it causes an effect equivalent to the
|
|
&f-link-VariantDir; function,
|
|
but in effect only within the scope of the &f-SConscript; call.
|
|
The <varname>variant_dir</varname>
|
|
argument is interpreted relative to the directory of the
|
|
<emphasis>calling</emphasis> SConscript file.
|
|
The source directory is the directory in which the
|
|
<emphasis>called</emphasis> SConscript
|
|
file resides and the SConscript
|
|
file is evaluated as if it were in the
|
|
<varname>variant_dir</varname>
|
|
directory. Thus:
|
|
</para>
|
|
<example_commands>
|
|
SConscript('src/SConscript', variant_dir='build')
|
|
</example_commands>
|
|
|
|
<para>
|
|
is equivalent to:
|
|
</para>
|
|
|
|
<example_commands>
|
|
VariantDir('build', 'src')
|
|
SConscript('build/SConscript')
|
|
</example_commands>
|
|
|
|
<para>
|
|
If the sources are in the same directory as the
|
|
&SConstruct;,
|
|
</para>
|
|
|
|
<example_commands>
|
|
SConscript('SConscript', variant_dir='build')
|
|
</example_commands>
|
|
|
|
<para>
|
|
is equivalent to:
|
|
</para>
|
|
|
|
<example_commands>
|
|
VariantDir('build', '.')
|
|
SConscript('build/SConscript')
|
|
</example_commands>
|
|
|
|
<para>
|
|
The optional
|
|
<varname>duplicate</varname> argument is
|
|
interpreted as for &f-link-VariantDir;.
|
|
If the <varname>variant_dir</varname> argument
|
|
is omitted, the <varname>duplicate</varname> argument is ignored.
|
|
See the description of
|
|
&f-link-VariantDir;
|
|
for additional details and restrictions.
|
|
</para>
|
|
|
|
<para>
|
|
<!--
|
|
If
|
|
<varname>variant_dir</varname>
|
|
and"
|
|
<varname>src_dir</varname>
|
|
are both present,
|
|
xxxxx everything is in a state of confusion.
|
|
</para>
|
|
<example_commands>
|
|
SConscript(dirs = 'src', variant_dir = 'build', src_dir = '.')
|
|
runs src/SConscript in build/src, but
|
|
SConscript(dirs = 'lib', variant_dir = 'build', src_dir = 'src')
|
|
runs lib/SConscript (in lib!). However,
|
|
SConscript(dirs = 'src', variant_dir = 'build', src_dir = 'src')
|
|
runs src/SConscript in build. Moreover,
|
|
SConscript(dirs = 'src/lib', variant_dir = 'build', src_dir = 'src')
|
|
runs src/lib/SConscript in build/lib. Moreover,
|
|
SConscript(dirs = 'build/src/lib', variant_dir = 'build', src_dir = 'src')
|
|
can't find build/src/lib/SConscript, even though it ought to exist.
|
|
</example_commands>
|
|
<para>
|
|
is equivalent to
|
|
</para>
|
|
<example_commands>
|
|
????????????????
|
|
</example_commands>
|
|
<para>
|
|
and what about this alternative?
|
|
TODO??? SConscript('build/SConscript', src_dir='src')
|
|
-->
|
|
</para>
|
|
|
|
<para>
|
|
If the optional
|
|
<varname>must_exist</varname>
|
|
is <constant>True</constant>,
|
|
causes an exception to be raised if a requested
|
|
SConscript file is not found. The current default is
|
|
<constant>False</constant>,
|
|
causing only a warning to be emitted, but this default is deprecated
|
|
(<emphasis>since 3.1</emphasis>).
|
|
For scripts which truly intend to be optional, transition to
|
|
explicitly supplying
|
|
<literal>must_exist=False</literal> to the &f-SConscript; call.
|
|
</para>
|
|
|
|
<para>
|
|
Here are some composite examples:
|
|
</para>
|
|
|
|
<example_commands>
|
|
# 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')
|
|
</example_commands>
|
|
|
|
<example_commands>
|
|
# 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)
|
|
</example_commands>
|
|
|
|
<example_commands>
|
|
# 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)
|
|
</example_commands>
|
|
|
|
<example_commands>
|
|
# 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)
|
|
</example_commands>
|
|
|
|
<para>
|
|
&f-SConscript; returns the values of any variables
|
|
named by the executed SConscript file(s) in arguments
|
|
to the &f-link-Return; function.
|
|
If a single &f-SConscript; call causes multiple scripts to
|
|
be executed, the return value is a tuple containing
|
|
the returns of each of the scripts. If an executed
|
|
script does not explicitly call &Return;, it returns
|
|
<constant>None</constant>.
|
|
</para>
|
|
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-SConscriptChdir">
|
|
<term><function>SConscriptChdir</function>(<parameter>value</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>SConscriptChdir</methodname>(<parameter>value</parameter>)</term>
|
|
<listitem><para>
|
|
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:
|
|
</para>
|
|
|
|
<example_commands>
|
|
SConscriptChdir(0)
|
|
env.SConscriptChdir(0)
|
|
</example_commands>
|
|
|
|
<para>
|
|
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
|
|
&f-SConscriptChdir;
|
|
multiple times.
|
|
</para>
|
|
|
|
<para>
|
|
Example:
|
|
</para>
|
|
|
|
<example_commands>
|
|
env = Environment()
|
|
SConscriptChdir(0)
|
|
SConscript('foo/SConscript') # will not chdir to foo
|
|
env.SConscriptChdir(1)
|
|
SConscript('bar/SConscript') # will chdir to bar
|
|
</example_commands>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-SConsignFile">
|
|
<term><function>SConsignFile</function>(<parameter>[name, dbm_module]</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>SConsignFile</methodname>(<parameter>[name, dbm_module]</parameter>)</term>
|
|
<listitem><para>
|
|
Specify where to store the &SCons; file signature database,
|
|
and which database format to use.
|
|
This may be useful to specify alternate
|
|
database files and/or file locations for different types of builds.
|
|
</para>
|
|
<para>
|
|
The optional <parameter>name</parameter> argument
|
|
is the base name of the database file(s).
|
|
If not an absolute path name,
|
|
these are placed relative to the directory containing the
|
|
top-level &SConstruct; file.
|
|
The default is
|
|
<filename>.sconsign</filename>.
|
|
The actual database file(s) stored on disk
|
|
may have an appropriate suffix appended
|
|
by the chosen
|
|
<parameter>dbm_module</parameter>
|
|
</para>
|
|
<para>
|
|
The optional <parameter>dbm_module</parameter>
|
|
argument specifies which
|
|
&Python; database module to use
|
|
for reading/writing the file.
|
|
The module must be imported first;
|
|
then the imported module name
|
|
is passed as the argument.
|
|
The default is a custom
|
|
<systemitem>SCons.dblite</systemitem>
|
|
module that uses pickled
|
|
&Python; data structures,
|
|
which works on all &Python; versions.
|
|
See documentation of the &Python;
|
|
<systemitem>dbm</systemitem> module
|
|
for other available types.
|
|
</para>
|
|
<para>
|
|
If called with no arguments,
|
|
the database will default to
|
|
<filename>.sconsign.dblite</filename>
|
|
in the top directory of the project,
|
|
which is also the default if
|
|
if &f-SConsignFile; is not called.
|
|
</para>
|
|
<para>
|
|
The setting is global, so the only difference
|
|
between the global function and the environment method form
|
|
is variable expansion on <parameter>name</parameter>.
|
|
There should only be one active call to this
|
|
function/method in a given build setup.
|
|
</para>
|
|
<para>
|
|
If
|
|
<parameter>name</parameter>
|
|
is set to
|
|
<constant>None</constant>,
|
|
&scons;
|
|
will store file signatures
|
|
in a separate
|
|
<filename>.sconsign</filename>
|
|
file in each directory,
|
|
not in a single combined database file.
|
|
This is a backwards-compatibility meaure to support
|
|
what was the default behavior
|
|
prior to &SCons; 0.97 (i.e. before 2008).
|
|
Use of this mode is discouraged and may be
|
|
deprecated in a future &SCons; release.
|
|
</para>
|
|
|
|
<para>
|
|
Examples:
|
|
</para>
|
|
|
|
<example_commands>
|
|
# 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.
|
|
# SCons will add a database suffix to this name.
|
|
SConsignFile("etc/scons-signatures")
|
|
|
|
# Stores signatures in the specified absolute file name.
|
|
# SCons will add a database suffix to this name.
|
|
SConsignFile("/home/me/SCons/signatures")
|
|
|
|
# Stores signatures in a separate .sconsign file
|
|
# in each directory.
|
|
SConsignFile(None)
|
|
|
|
# Stores signatures in a GNU dbm format .sconsign file
|
|
import dbm.gnu
|
|
SConsignFile(dbm_module=dbm.gnu)
|
|
</example_commands>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-SetDefault">
|
|
<term><replaceable>env</replaceable>.<methodname>SetDefault</methodname>(<parameter>key=val, [...]</parameter>)</term>
|
|
<listitem><para>
|
|
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:
|
|
</para>
|
|
|
|
<example_commands>
|
|
env.SetDefault(FOO='foo')
|
|
if 'FOO' not in env:
|
|
env['FOO'] = 'foo'
|
|
</example_commands>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-SetOption">
|
|
<term><function>SetOption</function>(<parameter>name, value</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>SetOption</methodname>(<parameter>name, value</parameter>)</term>
|
|
<listitem><para>
|
|
Sets &scons; option variable <parameter>name</parameter>
|
|
to <parameter>value</parameter>.
|
|
These options are all also settable via
|
|
command-line options but the variable name
|
|
may differ from the command-line option name -
|
|
see the table for correspondences.
|
|
A value set via command-line option will take
|
|
precedence over one set with &f-SetOption;, which
|
|
allows setting a project default in the scripts and
|
|
temporarily overriding it via command line.
|
|
&f-SetOption; calls can also be placed in the
|
|
<filename>site_init.py</filename> file.
|
|
</para>
|
|
|
|
<para>
|
|
See the documentation in the manpage for the
|
|
corresponding command line option for information about each specific option.
|
|
The <parameter>value</parameter> parameter is mandatory,
|
|
for option values which are boolean in nature
|
|
(that is, the command line option does not take an argument)
|
|
use a <parameter>value</parameter>
|
|
which evaluates to true (e.g. <constant>True</constant>,
|
|
<constant>1</constant>) or false (e.g. <constant>False</constant>,
|
|
<constant>0</constant>).
|
|
</para>
|
|
|
|
<para>
|
|
Options which affect the reading and processing of SConscript files
|
|
are not settable using &f-SetOption; since those files must
|
|
be read in order to find the &f-SetOption; call in the first place.
|
|
</para>
|
|
|
|
<para>
|
|
The settable variables with their associated command-line options are:
|
|
</para>
|
|
|
|
<informaltable rowsep="1" colsep="1" frame="topbot">
|
|
<tgroup cols="3">
|
|
<thead>
|
|
<row>
|
|
<entry align="left">Settable name</entry>
|
|
<entry align="left">Command-line options</entry>
|
|
<entry align="left">Notes</entry>
|
|
</row>
|
|
</thead>
|
|
|
|
<tbody>
|
|
<row>
|
|
<entry><varname>clean</varname></entry>
|
|
<entry>
|
|
<option>-c</option>,
|
|
<option>--clean</option>,
|
|
<option>--remove</option>
|
|
</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><varname>diskcheck</varname></entry>
|
|
<entry><option>--diskcheck</option></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><varname>duplicate</varname></entry>
|
|
<entry><option>--duplicate</option></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><varname>experimental</varname></entry>
|
|
<entry><option>--experimental</option></entry>
|
|
<entry><emphasis>since 4.2</emphasis></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><varname>hash_chunksize</varname></entry>
|
|
<entry><option>--hash-chunksize</option></entry>
|
|
<entry>
|
|
Actually sets <varname>md5_chunksize</varname>.
|
|
<emphasis>since 4.2</emphasis>
|
|
</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><varname>hash_format</varname></entry>
|
|
<entry><option>--hash-format</option></entry>
|
|
<entry><emphasis>since 4.2</emphasis></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><varname>help</varname></entry>
|
|
<entry><option>-h</option>, <option>--help</option></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><varname>implicit_cache</varname></entry>
|
|
<entry><option>--implicit-cache</option></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><varname>implicit_deps_changed</varname></entry>
|
|
<entry><option>--implicit-deps-changed</option></entry>
|
|
<entry>
|
|
Also sets <varname>implicit_cache</varname>.
|
|
<emphasis>(settable since 4.2)</emphasis>
|
|
</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><varname>implicit_deps_unchanged</varname></entry>
|
|
<entry><option>--implicit-deps-unchanged</option></entry>
|
|
<entry>
|
|
Also sets <varname>implicit_cache</varname>.
|
|
<emphasis>(settable since 4.2)</emphasis>
|
|
</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><varname>max_drift</varname></entry>
|
|
<entry><option>--max-drift</option></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><varname>md5_chunksize</varname></entry>
|
|
<entry><option>--md5-chunksize</option></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><varname>no_exec</varname></entry>
|
|
<entry>
|
|
<option>-n</option>,
|
|
<option>--no-exec</option>,
|
|
<option>--just-print</option>,
|
|
<option>--dry-run</option>,
|
|
<option>--recon</option>
|
|
</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><varname>no_progress</varname></entry>
|
|
<entry><option>-Q</option></entry>
|
|
<entry>See
|
|
<footnote>
|
|
<para>If <varname>no_progress</varname> is set via &f-SetOption;
|
|
in an SConscript file
|
|
(but not if set in a <filename>site_init.py</filename> file)
|
|
there will still be an initial status message about
|
|
reading SConscript files since &SCons; has
|
|
to start reading them before it can see the
|
|
&f-SetOption;.
|
|
</para>
|
|
</footnote>
|
|
</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><varname>num_jobs</varname></entry>
|
|
<entry><option>-j</option>, <option>--jobs</option></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><varname>random</varname></entry>
|
|
<entry><option>--random</option></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><varname>silent</varname></entry>
|
|
<entry>
|
|
<option>-s</option>,
|
|
<option>--silent</option>,
|
|
<option>--quiet</option>
|
|
</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><varname>stack_size</varname></entry>
|
|
<entry><option>--stack-size</option></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><varname>warn</varname></entry>
|
|
<entry><option>--warn</option></entry>
|
|
</row>
|
|
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
|
|
<para>
|
|
Example:
|
|
</para>
|
|
|
|
<example_commands>
|
|
SetOption('max_drift', 0)
|
|
</example_commands>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-SideEffect">
|
|
<term><function>SideEffect</function>(<parameter>side_effect, target</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>SideEffect</methodname>(<parameter>side_effect, target</parameter>)</term>
|
|
<listitem><para>
|
|
Declares
|
|
<parameter>side_effect</parameter>
|
|
as a side effect of building
|
|
<parameter>target</parameter>.
|
|
Both
|
|
<parameter>side_effect</parameter>
|
|
and
|
|
<parameter>target</parameter>
|
|
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.
|
|
</para>
|
|
|
|
<para>
|
|
Because multiple build commands may update
|
|
the same side effect file,
|
|
by default the
|
|
<parameter>side_effect</parameter>
|
|
target is
|
|
<emphasis>not</emphasis>
|
|
automatically removed
|
|
when the
|
|
<parameter>target</parameter>
|
|
is removed by the
|
|
<option>-c</option>
|
|
option.
|
|
(Note, however, that the
|
|
<parameter>side_effect</parameter>
|
|
might be removed as part of
|
|
cleaning the directory in which it lives.)
|
|
If you want to make sure the
|
|
<parameter>side_effect</parameter>
|
|
is cleaned whenever a specific
|
|
<parameter>target</parameter>
|
|
is cleaned,
|
|
you must specify this explicitly
|
|
with the
|
|
&f-link-Clean;
|
|
or
|
|
&f-env-Clean;
|
|
function.
|
|
</para>
|
|
|
|
<para>
|
|
This function returns the list of side effect Node objects that were successfully added.
|
|
If the list of side effects contained any side effects that had already been added,
|
|
they are not added and included in the returned list.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Split">
|
|
<term><function>Split</function>(<parameter>arg</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>Split</methodname>(<parameter>arg</parameter>)</term>
|
|
<listitem><para>
|
|
If <parameter>arg</parameter> is a string,
|
|
splits on whitespace and returns a list of
|
|
strings without whitespace.
|
|
This mode is the most common case,
|
|
and can be used to split a list of filenames
|
|
(for example) rather than having to type them as a
|
|
list of individually quoted words.
|
|
If <parameter>arg</parameter> is a list or tuple
|
|
returns the list or tuple unchanged.
|
|
If <parameter>arg</parameter> is any other type of object,
|
|
returns a list containing just the object.
|
|
These non-string cases do not actually do any spliting,
|
|
but allow an argument variable to be passed to
|
|
&f-Split; without having to first check its type.
|
|
</para>
|
|
|
|
<para>
|
|
Example:
|
|
</para>
|
|
|
|
<example_commands>
|
|
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
|
|
""")
|
|
</example_commands>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-subst">
|
|
<term><replaceable>env</replaceable>.<methodname>subst</methodname>(<parameter>input, [raw, target, source, conv]</parameter>)</term>
|
|
<listitem><para>
|
|
Performs &consvar; interpolation
|
|
(<firstterm>substitution</firstterm>)
|
|
on <parameter>input</parameter>,
|
|
which can be a string or a sequence.
|
|
Substitutable elements take the form
|
|
<literal>${<replaceable>expression</replaceable>}</literal>,
|
|
although if there is no ambiguity in recognizing the element,
|
|
the braces can be omitted.
|
|
A literal <emphasis role="bold">$</emphasis> can be entered by
|
|
using <emphasis role="bold">$$</emphasis>.
|
|
</para>
|
|
|
|
<para>
|
|
By default,
|
|
leading or trailing white space will
|
|
be removed from the result,
|
|
and all sequences of white space
|
|
will be compressed to a single space character.
|
|
Additionally, any
|
|
<literal>$(</literal>
|
|
and
|
|
<literal>$)</literal>
|
|
character sequences will be stripped from the returned string,
|
|
The optional
|
|
<parameter>raw</parameter>
|
|
argument may be set to
|
|
<literal>1</literal>
|
|
if you want to preserve white space and
|
|
<literal>$(</literal>-<literal>$)</literal>
|
|
sequences.
|
|
The
|
|
<parameter>raw</parameter>
|
|
argument may be set to
|
|
<literal>2</literal>
|
|
if you want to additionally discard
|
|
all characters between any
|
|
<literal>$(</literal>
|
|
and
|
|
<literal>$)</literal>
|
|
pairs
|
|
(as is done for signature calculation).
|
|
</para>
|
|
|
|
<para>
|
|
If <parameter>input</parameter> is a sequence
|
|
(list or tuple),
|
|
the individual elements of
|
|
the sequence will be expanded,
|
|
and the results will be returned as a list.
|
|
</para>
|
|
|
|
<para>
|
|
The optional
|
|
<parameter>target</parameter>
|
|
and
|
|
<parameter>source</parameter>
|
|
keyword arguments
|
|
must be set to lists of
|
|
target and source nodes, respectively,
|
|
if you want the
|
|
&cv-TARGET;,
|
|
&cv-TARGETS;,
|
|
&cv-SOURCE;
|
|
and
|
|
&cv-SOURCES;
|
|
to be available for expansion.
|
|
This is usually necessary if you are
|
|
calling
|
|
&f-env-subst;
|
|
from within a &Python; function used
|
|
as an SCons action.
|
|
</para>
|
|
|
|
<para>
|
|
Returned string values or sequence elements
|
|
are converted to their string representation by default.
|
|
The optional
|
|
<parameter>conv</parameter>
|
|
argument
|
|
may specify a conversion function
|
|
that will be used in place of
|
|
the default.
|
|
For example, if you want &Python; objects
|
|
(including SCons Nodes)
|
|
to be returned as &Python; objects,
|
|
you can use a &Python;
|
|
lambda expression to pass in an unnamed function
|
|
that simply returns its unconverted argument.
|
|
</para>
|
|
|
|
<para>
|
|
Example:
|
|
</para>
|
|
|
|
<example_commands>
|
|
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)
|
|
</example_commands>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Tag">
|
|
<term><function>Tag</function>(<parameter>node, tags</parameter>)</term>
|
|
<listitem><para>
|
|
Annotates file or directory Nodes with
|
|
information about how the
|
|
&b-link-Package;
|
|
Builder should package those files or directories.
|
|
All Node-level tags are optional.
|
|
</para>
|
|
|
|
<para>
|
|
Examples:
|
|
</para>
|
|
|
|
<example_commands>
|
|
# makes sure the built library will be installed with 644 file access mode
|
|
Tag(Library('lib.c'), UNIX_ATTR="0o644")
|
|
|
|
# marks file2.txt to be a documentation file
|
|
Tag('file2.txt', DOC)
|
|
</example_commands>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Tool">
|
|
<term><function>Tool</function>(<parameter>name, [toolpath, **kwargs]</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>Tool</methodname>(<parameter>name, [toolpath, **kwargs]</parameter>)</term>
|
|
<listitem><para>
|
|
Locates the tool specification module <parameter>name</parameter>
|
|
and returns a callable tool object for that tool.
|
|
The tool module is searched for in standard locations
|
|
and in any paths specified by the optional
|
|
<parameter>toolpath</parameter> parameter.
|
|
The standard locations are &SCons;' own internal
|
|
path for tools plus the toolpath, if any (see the
|
|
<emphasis role="bold">Tools</emphasis> section in the manual page
|
|
for more details).
|
|
Any additional keyword arguments
|
|
<parameter>kwargs</parameter> are passed
|
|
to the tool module's <function>generate</function> function
|
|
during tool object construction.
|
|
</para>
|
|
|
|
<para>
|
|
When called, the tool object
|
|
updates a &consenv; with &consvars; and arranges
|
|
any other initialization
|
|
needed to use the mechanisms that tool describes.
|
|
</para>
|
|
|
|
<para>
|
|
When the &f-env-Tool; form is used,
|
|
the tool object is automatically called to update <varname>env</varname>
|
|
and the value of <parameter>tool</parameter> is
|
|
appended to the &cv-link-TOOLS;
|
|
&consvar; in that environment.
|
|
</para>
|
|
|
|
<para>
|
|
Examples:
|
|
</para>
|
|
|
|
<example_commands>
|
|
env.Tool('gcc')
|
|
env.Tool('opengl', toolpath=['build/tools'])
|
|
</example_commands>
|
|
|
|
<para>
|
|
When the global function &f-Tool; form is used,
|
|
the tool object is constructed but not called,
|
|
as it lacks the context of an environment to update.
|
|
The tool object can be passed to an
|
|
&f-link-Environment; or &f-link-Clone; call
|
|
as part of the <parameter>tools</parameter> keyword argument,
|
|
in which case the tool is applied to the environment being constructed,
|
|
or it can be called directly,
|
|
in which case a &consenv; to update must be
|
|
passed as the argument.
|
|
Either approach will also update the
|
|
&cv-TOOLS; &consvar;.
|
|
</para>
|
|
|
|
<para>
|
|
Examples:
|
|
</para>
|
|
|
|
<example_commands>
|
|
env = Environment(tools=[Tool('msvc')])
|
|
|
|
env = Environment()
|
|
msvctool = Tool('msvc')
|
|
msvctool(env) # adds 'msvc' to the TOOLS variable
|
|
gltool = Tool('opengl', toolpath = ['tools'])
|
|
gltool(env) # adds 'opengl' to the TOOLS variable
|
|
</example_commands>
|
|
|
|
<para>
|
|
<emphasis>Changed in &SCons; 4.2: &f-env-Tool; now returns
|
|
the tool object, previously it did not return
|
|
(i.e. returned <constant>None</constant>).</emphasis>
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-ValidateOptions">
|
|
<term><function>ValidateOptions</function>(<parameter>[throw_exception=False]</parameter>)</term>
|
|
<listitem><para>
|
|
Check that all the options specified on the command line are either defined by SCons itself
|
|
or defined by calls to &f-link-AddOption;.
|
|
</para>
|
|
<para>
|
|
This function should only be called after the last &f-link-AddOption; call in your &SConscript;
|
|
logic.
|
|
</para>
|
|
<para>
|
|
Be aware that some tools call &f-link-AddOption;, if you are getting error messages for arguments
|
|
that they add, you will need to ensure that you load those tools before you call &f-ValidateOptions;.
|
|
</para>
|
|
<para>
|
|
If there are any command line options not defined, calling this function will cause SCons to issue an
|
|
error message and then exit with an error exit
|
|
status.</para>
|
|
<para>If the optional <parameter>throw_exception</parameter> is <literal>True</literal>, &f-ValidateOptions; will raise a
|
|
<exceptionname>SConsBadOptionError</exceptionname>
|
|
exception. This would allow the calling
|
|
&SConscript; logic can catch that exception and handle invalid options itself.
|
|
</para>
|
|
|
|
<para>
|
|
Example:
|
|
</para>
|
|
|
|
<example_commands>
|
|
try:
|
|
ValidateOptions(throw_exception=True)
|
|
except SConsBadOptionError as e:
|
|
print("Parser is SConsOptionParser:%s" % (isinstance(e.parser, SConsOptionParser)))
|
|
print("Message is :%s" % e.opt_str)
|
|
Exit(3)
|
|
</example_commands>
|
|
|
|
<para>
|
|
This function is useful to force SCons to fail fast before you execute any expensive logic later in your
|
|
build logic.
|
|
For example if you specify build options via any flags, a simple typo could yield the incorrect build
|
|
option throughout your entire build.
|
|
</para>
|
|
<example_commands>
|
|
scons --compilers=mingw (the correct flag is --compiler)
|
|
</example_commands>
|
|
<para>
|
|
Could cause SCons to run configure steps with the incorrect compiler. Costing developer time trying to
|
|
track down why the configure logic failed with a compiler which should work.
|
|
</para>
|
|
|
|
|
|
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-Value">
|
|
<term><function>Value</function>(<parameter>value, [built_value], [name]</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>Value</methodname>(<parameter>value, [built_value], [name]</parameter>)</term>
|
|
<listitem><para>
|
|
Returns a Node object representing the specified &Python; value. Value
|
|
Nodes can be used as dependencies of targets. If the result of
|
|
calling
|
|
<function>str</function>(<parameter>value</parameter>)
|
|
changes between SCons runs, any targets depending on
|
|
<function>Value</function>(<parameter>value</parameter>)
|
|
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.
|
|
<parameter>name</parameter> can be provided as an alternative name
|
|
for the resulting <literal>Value</literal> node; this is advised
|
|
if the <parameter>value</parameter> parameter can't be converted to
|
|
a string.
|
|
</para>
|
|
|
|
<para>
|
|
The returned Value Node object has a
|
|
<function>write</function>()
|
|
method that can be used to "build" a Value Node
|
|
by setting a new value.
|
|
The optional
|
|
<parameter>built_value</parameter>
|
|
argument can be specified
|
|
when the Value Node is created
|
|
to indicate the Node should already be considered
|
|
"built."
|
|
There is a corresponding
|
|
<function>read</function>()
|
|
method that will return the built value of the Node.
|
|
</para>
|
|
|
|
<para>
|
|
Examples:
|
|
</para>
|
|
|
|
<example_commands>
|
|
env = Environment()
|
|
|
|
def create(target, source, env):
|
|
# A function that will write a 'prefix=$SOURCE'
|
|
# string into the file name specified as the
|
|
# $TARGET.
|
|
with open(str(target[0]), 'wb') as f:
|
|
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 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))
|
|
</example_commands>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-VariantDir">
|
|
<term><function>VariantDir</function>(<parameter>variant_dir, src_dir, [duplicate]</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>VariantDir</methodname>(<parameter>variant_dir, src_dir, [duplicate]</parameter>)</term>
|
|
<listitem><para>
|
|
Sets up a mapping to define a variant build directory in
|
|
<parameter>variant_dir</parameter>.
|
|
<parameter>src_dir</parameter> may not be underneath
|
|
<parameter>variant_dir</parameter>.
|
|
A &f-VariantDir; mapping is global, even if called using the
|
|
&f-env-VariantDir; form.
|
|
&f-VariantDir;
|
|
can be called multiple times with the same
|
|
<parameter>src_dir</parameter>
|
|
to set up multiple variant builds with different options.
|
|
</para>
|
|
|
|
<para>
|
|
Note if <parameter>variant_dir</parameter>
|
|
is not under the project top directory,
|
|
target selection rules will not pick targets in the
|
|
variant directory unless they are explicitly specified.
|
|
</para>
|
|
|
|
<para>
|
|
When files in <parameter>variant_dir</parameter> are referenced,
|
|
&SCons; backfills as needed with files from <parameter>src_dir</parameter>
|
|
to create a complete build directory.
|
|
By default, &SCons;
|
|
physically duplicates the source files, SConscript files,
|
|
and directory structure as needed into the variant directory.
|
|
Thus, a build performed in the variant directory is guaranteed to be identical
|
|
to a build performed in the source directory even if
|
|
intermediate source files are generated during the build,
|
|
or if preprocessors or other scanners search for included files
|
|
using paths relative to the source file,
|
|
or if individual compilers or other invoked tools are hard-coded
|
|
to put derived files in the same directory as source files.
|
|
Only the files &SCons; calculates are needed for the build are
|
|
duplicated into <parameter>variant_dir</parameter>.
|
|
If possible on the platform,
|
|
the duplication is performed by linking rather than copying.
|
|
This behavior is affected by the
|
|
<option>--duplicate</option>
|
|
command-line option.
|
|
</para>
|
|
|
|
<para>
|
|
Duplicating the source files may be disabled by setting the
|
|
<parameter>duplicate</parameter>
|
|
argument to
|
|
<constant>False</constant>.
|
|
This will cause
|
|
&SCons;
|
|
to invoke Builders using the path names of source files in
|
|
<parameter>src_dir</parameter>
|
|
and the path names of derived files within
|
|
<parameter>variant_dir</parameter>.
|
|
This is more efficient than duplicating,
|
|
and is safe for most builds;
|
|
revert to <literal>duplicate=True</literal>
|
|
if it causes problems.
|
|
</para>
|
|
|
|
<para>
|
|
&f-VariantDir;
|
|
works most naturally when used with a subsidiary SConscript file.
|
|
The subsidiary SConscript file must be called as if it were in
|
|
<parameter>variant_dir</parameter>,
|
|
regardless of the value of
|
|
<parameter>duplicate</parameter>.
|
|
When calling an SConscript file, you can use the
|
|
<parameter>exports</parameter> keyword argument
|
|
to pass parameters (individually or as an appropriately set up environment)
|
|
so the SConscript can pick up the right settings for that variant build.
|
|
The SConscript must &f-link-Import; these to use them. Example:
|
|
</para>
|
|
|
|
<example_commands>
|
|
env1 = Environment(...settings for variant1...)
|
|
env2 = Environment(...settings for variant2...)
|
|
|
|
# run src/SConscript in two variant directories
|
|
VariantDir('build/variant1', 'src')
|
|
SConscript('build/variant1/SConscript', exports={"env": env1})
|
|
VariantDir('build/variant2', 'src')
|
|
SConscript('build/variant2/SConscript', exports={"env": env2})
|
|
</example_commands>
|
|
|
|
<para>
|
|
See also the
|
|
&f-link-SConscript; function
|
|
for another way to specify a variant directory
|
|
in conjunction with calling a subsidiary SConscript file.
|
|
</para>
|
|
|
|
<para>
|
|
More examples:
|
|
</para>
|
|
|
|
<example_commands>
|
|
# 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)
|
|
</example_commands>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry id="f-WhereIs">
|
|
<term><function>WhereIs</function>(<parameter>program, [path, pathext, reject]</parameter>)</term>
|
|
<term><replaceable>env</replaceable>.<methodname>WhereIs</methodname>(<parameter>program, [path, pathext, reject]</parameter>)</term>
|
|
<listitem><para>
|
|
Searches for the specified executable
|
|
<parameter>program</parameter>,
|
|
returning the full path to the program
|
|
or <constant>None</constant>.
|
|
</para>
|
|
<para>
|
|
When called as a &consenv; method,
|
|
searches the paths in the
|
|
<parameter>path</parameter> keyword argument,
|
|
or if <constant>None</constant> (the default)
|
|
the paths listed in the &consenv;
|
|
(<varname>env</varname><literal>['ENV']['PATH']</literal>).
|
|
The external environment's path list
|
|
(<literal>os.environ['PATH']</literal>)
|
|
is used as a fallback if the key
|
|
<varname>env</varname><literal>['ENV']['PATH']</literal>
|
|
does not exist.
|
|
</para>
|
|
<para>
|
|
On Windows systems, searches for executable
|
|
programs with any of the file extensions listed in the
|
|
<parameter>pathext</parameter> keyword argument,
|
|
or if <constant>None</constant> (the default)
|
|
the pathname extensions listed in the &consenv;
|
|
(<varname>env</varname><literal>['ENV']['PATHEXT']</literal>).
|
|
The external environment's pathname extensions list
|
|
(<literal>os.environ['PATHEXT']</literal>)
|
|
is used as a fallback if the key
|
|
<varname>env</varname><literal>['ENV']['PATHEXT']</literal>
|
|
does not exist.
|
|
</para>
|
|
<para>
|
|
When called as a global function, uses the external
|
|
environment's path
|
|
<literal>os.environ['PATH']</literal>
|
|
and path extensions
|
|
<literal>os.environ['PATHEXT']</literal>,
|
|
respectively, if
|
|
<parameter>path</parameter> and
|
|
<parameter>pathext</parameter> are
|
|
<constant>None</constant>.
|
|
</para>
|
|
<para>
|
|
Will not select any
|
|
path name or names
|
|
in the optional
|
|
<parameter>reject</parameter>
|
|
list.
|
|
</para>
|
|
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|