mirror of
https://github.com/Relintai/scons_gd.git
synced 2025-02-04 16:16:00 +01:00
3615 lines
90 KiB
XML
3615 lines
90 KiB
XML
<?xml version="1.0"?>
|
|
<!--
|
|
Copyright The SCons Foundation
|
|
|
|
This file is processed by the bin/SConsDoc.py module.
|
|
See its __doc__ string for a discussion of the format.
|
|
-->
|
|
|
|
<!DOCTYPE sconsdoc [
|
|
<!ENTITY % scons SYSTEM '../doc/scons.mod'>
|
|
%scons;
|
|
<!ENTITY % builders-mod SYSTEM '../doc/generated/builders.mod'>
|
|
%builders-mod;
|
|
<!ENTITY % functions-mod SYSTEM '../doc/generated/functions.mod'>
|
|
%functions-mod;
|
|
<!ENTITY % tools-mod SYSTEM '../doc/generated/tools.mod'>
|
|
%tools-mod;
|
|
<!ENTITY % variables-mod SYSTEM '../doc/generated/variables.mod'>
|
|
%variables-mod;
|
|
]>
|
|
|
|
<sconsdoc 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">
|
|
|
|
|
|
<!-- Construction variables -->
|
|
|
|
<cvar name="BUILDERS">
|
|
<summary>
|
|
<para>
|
|
A dictionary mapping the names of the builders
|
|
available through the &consenv; to underlying Builder objects.
|
|
Custom builders need to be added to this to make them available.
|
|
</para>
|
|
|
|
<para>
|
|
A platform-dependent default list of builders such as
|
|
&b-link-Program;, &b-link-Library; etc. is used to
|
|
populate this &consvar; when the &consenv; is initialized
|
|
via the presence/absence of the tools those builders depend on.
|
|
&cv-BUILDERS; can be examined to learn which builders will
|
|
actually be available at run-time.
|
|
</para>
|
|
|
|
<para>
|
|
Note that if you initialize this &consvar; through
|
|
assignment when the &consenv; is created,
|
|
that value for &cv-BUILDERS; will override any defaults:
|
|
</para>
|
|
|
|
<example_commands>
|
|
bld = Builder(action='foobuild < $SOURCE > $TARGET')
|
|
env = Environment(BUILDERS={'NewBuilder': bld})
|
|
</example_commands>
|
|
|
|
<para>
|
|
To instead use a new Builder object in addition to the default Builders,
|
|
add your new Builder object like this:
|
|
</para>
|
|
|
|
<example_commands>
|
|
env = Environment()
|
|
env.Append(BUILDERS={'NewBuilder': bld})
|
|
</example_commands>
|
|
|
|
<para>
|
|
or this:
|
|
</para>
|
|
|
|
<example_commands>
|
|
env = Environment()
|
|
env['BUILDERS']['NewBuilder'] = bld
|
|
</example_commands>
|
|
</summary>
|
|
</cvar>
|
|
|
|
<cvar name="ENV">
|
|
<summary>
|
|
<para>
|
|
The <firstterm>execution environment</firstterm> -
|
|
a dictionary of environment variables
|
|
used when &SCons; invokes external commands
|
|
to build targets defined in this &consenv;.
|
|
When &cv-ENV; is passed to a command,
|
|
all list values are assumed to be path lists and
|
|
are joined using the search path separator.
|
|
Any other non-string values are coerced to a string.
|
|
</para>
|
|
|
|
<para>
|
|
Note that by default
|
|
&SCons;
|
|
does
|
|
<emphasis>not</emphasis>
|
|
propagate the environment in effect when you execute
|
|
&scons; (the "shell environment")
|
|
to the execution environment.
|
|
This is so that builds will be guaranteed
|
|
repeatable regardless of the environment
|
|
variables set at the time
|
|
&scons;
|
|
is invoked.
|
|
If you want to propagate a
|
|
shell environment variable
|
|
to the commands executed
|
|
to build target files,
|
|
you must do so explicitly.
|
|
A common example is
|
|
the system &PATH;
|
|
environment variable,
|
|
so that
|
|
&scons;
|
|
will find utilities the same way
|
|
as the invoking shell (or other process):
|
|
</para>
|
|
|
|
<example_commands>
|
|
import os
|
|
env = Environment(ENV={'PATH': os.environ['PATH']})
|
|
</example_commands>
|
|
|
|
<para>
|
|
Although it is usually not recommended,
|
|
you can propagate the entire shell environment
|
|
in one go:
|
|
</para>
|
|
|
|
<example_commands>
|
|
import os
|
|
env = Environment(ENV=os.environ.copy())
|
|
</example_commands>
|
|
|
|
</summary>
|
|
</cvar>
|
|
|
|
<cvar name="SCANNERS">
|
|
<summary>
|
|
<para>
|
|
A list of the available implicit dependency scanners.
|
|
New file scanners may be added by
|
|
appending to this list,
|
|
although the more flexible approach
|
|
is to associate scanners
|
|
with a specific Builder.
|
|
See the manpage sections "Builder Objects"
|
|
and "Scanner Objects"
|
|
for more information.
|
|
</para>
|
|
</summary>
|
|
</cvar>
|
|
|
|
<cvar name="CHANGED_SOURCES">
|
|
<summary>
|
|
<para>
|
|
A reserved variable name
|
|
that may not be set or used in a construction environment.
|
|
(See the manpage section "Variable Substitution"
|
|
for more information).
|
|
</para>
|
|
</summary>
|
|
</cvar>
|
|
|
|
<cvar name="CHANGED_TARGETS">
|
|
<summary>
|
|
<para>
|
|
A reserved variable name
|
|
that may not be set or used in a construction environment.
|
|
(See the manpage section "Variable Substitution"
|
|
for more information).
|
|
</para>
|
|
</summary>
|
|
</cvar>
|
|
|
|
<cvar name="SOURCE">
|
|
<summary>
|
|
<para>
|
|
A reserved variable name
|
|
that may not be set or used in a construction environment.
|
|
(See the manpage section "Variable Substitution"
|
|
for more information).
|
|
</para>
|
|
</summary>
|
|
</cvar>
|
|
|
|
<cvar name="SOURCES">
|
|
<summary>
|
|
<para>
|
|
A reserved variable name
|
|
that may not be set or used in a construction environment.
|
|
(See the manpage section "Variable Substitution"
|
|
for more information).
|
|
</para>
|
|
</summary>
|
|
</cvar>
|
|
|
|
<cvar name="TARGET">
|
|
<summary>
|
|
<para>
|
|
A reserved variable name
|
|
that may not be set or used in a construction environment.
|
|
(See the manpage section "Variable Substitution"
|
|
for more information).
|
|
</para>
|
|
</summary>
|
|
</cvar>
|
|
|
|
<cvar name="TARGETS">
|
|
<summary>
|
|
<para>
|
|
A reserved variable name
|
|
that may not be set or used in a construction environment.
|
|
(See the manpage section "Variable Substitution"
|
|
for more information).
|
|
</para>
|
|
</summary>
|
|
</cvar>
|
|
|
|
<cvar name="UNCHANGED_SOURCES">
|
|
<summary>
|
|
<para>
|
|
A reserved variable name
|
|
that may not be set or used in a construction environment.
|
|
(See the manpage section "Variable Substitution"
|
|
for more information).
|
|
</para>
|
|
</summary>
|
|
</cvar>
|
|
|
|
<cvar name="UNCHANGED_TARGETS">
|
|
<summary>
|
|
<para>
|
|
A reserved variable name
|
|
that may not be set or used in a construction environment.
|
|
(See the manpage section "Variable Substitution"
|
|
for more information).
|
|
</para>
|
|
</summary>
|
|
</cvar>
|
|
|
|
<cvar name="TOOLS">
|
|
<summary>
|
|
<para>
|
|
A list of the names of the Tool specifications
|
|
that are part of this construction environment.
|
|
</para>
|
|
</summary>
|
|
</cvar>
|
|
|
|
<cvar name="CACHEDIR_CLASS">
|
|
<summary>
|
|
<para>
|
|
The class type that SCons should use when instantiating a
|
|
new &f-link-CacheDir; for the given environment. It must be
|
|
a subclass of the SCons.CacheDir.CacheDir class.
|
|
</para>
|
|
</summary>
|
|
</cvar>
|
|
|
|
<!-- Functions / Construction environment methods -->
|
|
|
|
<scons_function name="Action">
|
|
<arguments>
|
|
(action, [output, [var, ...]] [key=value, ...])
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="AddMethod">
|
|
<arguments signature="global">
|
|
(object, function, [name])
|
|
</arguments>
|
|
<arguments signature="env">
|
|
(function, [name])
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="AddPostAction">
|
|
<arguments>
|
|
(target, action)
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="AddPreAction">
|
|
<arguments>
|
|
(target, action)
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="Alias">
|
|
<arguments>
|
|
(alias, [targets, [action]])
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="AlwaysBuild">
|
|
<arguments>
|
|
(target, ...)
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="Append">
|
|
<arguments signature="env">
|
|
(key=val, [...])
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="AppendENVPath">
|
|
<arguments signature="env">
|
|
(name, newpath, [envname, sep, delete_existing=False])
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="AppendUnique">
|
|
<arguments signature="env">
|
|
(key=val, [...], delete_existing=False)
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="Builder">
|
|
<arguments>
|
|
(action, [arguments])
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="CacheDir">
|
|
<arguments>
|
|
(cache_dir, custom_class=None)
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="Clean">
|
|
<arguments>
|
|
(targets, files_or_dirs)
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="Clone">
|
|
<arguments signature="env">
|
|
([key=val, ...])
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<builder name="Command">
|
|
<summary>
|
|
<para>
|
|
The &b-Command; "Builder" is actually
|
|
a function that looks like a Builder,
|
|
but takes a required third argument, which is the
|
|
action to take to construct the target
|
|
from the source, used for "one-off" builds
|
|
where a full builder is not needed.
|
|
Thus it does not follow the builder
|
|
calling rules described at the start of this section.
|
|
See instead the &f-link-Command; function description
|
|
for the calling syntax and details.
|
|
</para>
|
|
</summary>
|
|
</builder>
|
|
|
|
<scons_function name="Command">
|
|
<arguments>
|
|
(target, source, action, [key=val, ...])
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="Configure">
|
|
<arguments signature="global">
|
|
(env, [custom_tests, conf_dir, log_file, config_h])
|
|
</arguments>
|
|
<arguments signature="env">
|
|
([custom_tests, conf_dir, log_file, config_h])
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="Decider">
|
|
<arguments>
|
|
(function)
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="Depends">
|
|
<arguments>
|
|
(target, dependency)
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="Detect">
|
|
<arguments signature="env">
|
|
(progs)
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="Dictionary">
|
|
<arguments signature="env">
|
|
([vars])
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="Dir">
|
|
<arguments>
|
|
(name, [directory])
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="Dump">
|
|
<arguments signature="env">
|
|
([key], [format])
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="Environment">
|
|
<arguments>
|
|
([key=value, ...])
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="Execute">
|
|
<arguments>
|
|
(action, [actionargs ...])
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="File">
|
|
<arguments>
|
|
(name, [directory])
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="FindFile">
|
|
<arguments>
|
|
(file, dirs)
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="FindInstalledFiles">
|
|
<arguments>
|
|
()
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="FindSourceFiles">
|
|
<arguments>
|
|
(node='"."')
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="Flatten">
|
|
<arguments>
|
|
(sequence)
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="GetBuildPath">
|
|
<arguments>
|
|
(file, [...])
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="Glob">
|
|
<arguments>
|
|
(pattern, [ondisk=True, source=False, strings=False, exclude=None])
|
|
</arguments>
|
|
<summary>
|
|
<para>
|
|
Returns a possibly empty list of Nodes (or strings) that match
|
|
pathname specification <parameter>pattern</parameter>.
|
|
<parameter>pattern</parameter> can be absolute,
|
|
top-relative,
|
|
or (most commonly) relative to the directory of the current
|
|
&SConscript; file.
|
|
&f-Glob; matches both files stored on disk and Nodes
|
|
which &SCons; already knows about, even if any corresponding
|
|
file is not currently stored on disk.
|
|
The evironment method form (&f-env-Glob;)
|
|
performs string substition on
|
|
<parameter>pattern</parameter>
|
|
and returns whatever matches the resulting expanded pattern.
|
|
The results are sorted, unlike for the similar &Python;
|
|
<systemitem>glob.glob</systemitem> function,
|
|
to ensure build order will be stable.
|
|
</para>
|
|
|
|
<para>
|
|
<parameter>pattern</parameter>
|
|
can contain POSIX-style shell metacharacters for matching:
|
|
</para>
|
|
|
|
<informaltable rowsep="1" colsep="1" frame="topbot">
|
|
<tgroup cols="2">
|
|
<thead>
|
|
<row>
|
|
<entry>Pattern</entry>
|
|
<entry>Meaning</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry><literal>*</literal></entry>
|
|
<entry>matches everything</entry>
|
|
</row>
|
|
<row>
|
|
<entry><literal>?</literal></entry>
|
|
<entry>matches any single character</entry>
|
|
</row>
|
|
<row>
|
|
<entry><literal>[seq]</literal></entry>
|
|
<entry>matches any character in <emphasis>seq</emphasis>
|
|
(can be a list or a range).</entry>
|
|
</row>
|
|
<row>
|
|
<entry><literal>[!seq]</literal></entry>
|
|
<entry>matches any character not in <emphasis>seq</emphasis></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
|
|
<para>
|
|
For a literal match, wrap the metacharacter in brackets to
|
|
escape the normal behavior.
|
|
For example, <literal>'[?]'</literal> matches the character
|
|
<literal>'?'</literal>.
|
|
</para>
|
|
|
|
<para>
|
|
Filenames starting with a dot are specially handled -
|
|
they can only be matched by patterns that start with a dot
|
|
(or have a dot immediately following a pathname separator
|
|
character, or slash), they are not not matched by the metacharacters.
|
|
Metacharacter matches also do not span directory separators.
|
|
</para>
|
|
|
|
<para>
|
|
&f-Glob;
|
|
understands 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) match
|
|
in the local (SConscript) directory
|
|
if a matching Node is found
|
|
anywhere in a corresponding
|
|
repository or source directory.
|
|
</para>
|
|
|
|
<para>
|
|
If the optional
|
|
<parameter>ondisk</parameter>
|
|
argument evaluates false,
|
|
the search for matches on disk is disabled,
|
|
and only matches from
|
|
already-configured File or Dir Nodes are returned.
|
|
The default is to return Nodes for
|
|
matches on disk as well.
|
|
</para>
|
|
|
|
<para>
|
|
If the optional
|
|
<parameter>source</parameter>
|
|
argument evaluates true,
|
|
and the local directory is a variant directory,
|
|
then &f-Glob; returnes Nodes from
|
|
the corresponding source directory,
|
|
rather than the local directory.
|
|
<!-- XXX what about generated files that don't exist in src but will be sources? -->
|
|
</para>
|
|
|
|
<para>
|
|
If the optional
|
|
<parameter>strings</parameter>
|
|
argument evaluates true,
|
|
&f-Glob;
|
|
returns matches as strings, rather than Nodes.
|
|
The returned strings will be relative to
|
|
the local (SConscript) directory.
|
|
(Note that while this may make it easier to perform
|
|
arbitrary manipulation of file names,
|
|
it loses the context &SCons; would have in the Node,
|
|
so if the returned strings are
|
|
passed to a different
|
|
&SConscript;
|
|
file,
|
|
any Node translation there will be relative
|
|
to that
|
|
&SConscript;
|
|
directory,
|
|
not to the original
|
|
&SConscript;
|
|
directory.)
|
|
</para>
|
|
|
|
<para>
|
|
The optional
|
|
<parameter>exclude</parameter>
|
|
argument may be set to a pattern or a list of patterns
|
|
descibing files or directories
|
|
to filter out of the match list.
|
|
Elements matching a least one specified pattern will be excluded.
|
|
These patterns use the same syntax as for
|
|
<parameter>pattern</parameter>.
|
|
</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>
|
|
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<!--
|
|
<scons_function name="GlobalBuilders">
|
|
<arguments signature="global">
|
|
(flag)
|
|
</arguments>
|
|
<summary>
|
|
<para>
|
|
When
|
|
<parameter>flag</parameter>
|
|
is non-zero,
|
|
adds the names of the default builders
|
|
(Program, Library, etc.)
|
|
to the global name space
|
|
so they can be called without an explicit construction environment.
|
|
(This is the default.)
|
|
When
|
|
<parameter>flag</parameter>
|
|
is zero,
|
|
the names of the default builders are removed
|
|
from the global name space
|
|
so that an explicit construction environment is required
|
|
to call all builders.
|
|
</para>
|
|
</summary>
|
|
</scons_function>
|
|
-->
|
|
|
|
<scons_function name="Ignore">
|
|
<arguments>
|
|
(target, dependency)
|
|
</arguments>
|
|
<summary>
|
|
<para>
|
|
Ignores <parameter>dependency</parameter>
|
|
when deciding if
|
|
<parameter>target</parameter> needs to be rebuilt.
|
|
<parameter>target</parameter> and
|
|
<parameter>dependency</parameter>
|
|
can each be a single filename or Node
|
|
or a list of filenames or Nodes.
|
|
</para>
|
|
|
|
<para>
|
|
&f-Ignore; can also be used to
|
|
remove a target from the default build
|
|
by specifying the directory the target will be built in as
|
|
<parameter>target</parameter>
|
|
and the file you want to skip selecting for building as
|
|
<parameter>dependency</parameter>.
|
|
Note that this only removes the target from
|
|
the default target selection algorithm:
|
|
if it is a dependency of another object being
|
|
built &SCons; still builds it normally.
|
|
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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="Literal">
|
|
<arguments>
|
|
(string)
|
|
</arguments>
|
|
<summary>
|
|
<para>
|
|
The specified
|
|
<parameter>string</parameter>
|
|
will be preserved as-is
|
|
and not have construction variables expanded.
|
|
</para>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="Local">
|
|
<arguments>
|
|
(targets)
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<!--
|
|
<scons_function name="MergeShellPaths">
|
|
<arguments signature="env">
|
|
( arg ", [" prepend ])
|
|
</arguments>
|
|
<summary>
|
|
<para>
|
|
Merges the elements of the specified
|
|
<parameter>arg</parameter>,
|
|
which must be a dictionary, to the construction
|
|
environment's copy of the shell environment
|
|
in env['ENV'].
|
|
(This is the environment which is passed
|
|
to subshells spawned by SCons.)
|
|
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-MergeShellPaths;.
|
|
</para>
|
|
|
|
<para>
|
|
New values are prepended to the environment variable by default,
|
|
unless prepend=0 is specified.
|
|
Duplicate values are always eliminated,
|
|
since this function calls
|
|
&f-link-AppendENVPath;
|
|
or
|
|
&f-link-PrependENVPath;
|
|
depending on the
|
|
<parameter>prepend</parameter>
|
|
argument. See those functions for more details.
|
|
</para>
|
|
|
|
<para>
|
|
Examples:
|
|
</para>
|
|
|
|
<example_commands>
|
|
# Prepend a path to the shell PATH.
|
|
env.MergeShellPaths({'PATH': '/usr/local/bin'})
|
|
# Append two dirs to the shell INCLUDE.
|
|
env.MergeShellPaths({'INCLUDE': ['c:/inc1', 'c:/inc2']}, prepend=0)
|
|
</example_commands>
|
|
</summary>
|
|
</scons_function>
|
|
-->
|
|
|
|
<scons_function name="MergeFlags">
|
|
<arguments signature="env">
|
|
(arg, [unique])
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="NoCache">
|
|
<arguments>
|
|
(target, ...)
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="NoClean">
|
|
<arguments>
|
|
(target, ...)
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="ParseConfig">
|
|
<arguments signature="env">
|
|
(command, [function, unique])
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="ParseDepends">
|
|
<arguments>
|
|
(filename, [must_exist, only_one])
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="ParseFlags">
|
|
<arguments signature="env">
|
|
(flags, ...)
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="Platform">
|
|
<arguments signature="global">
|
|
(plat)
|
|
</arguments>
|
|
<arguments signature="env">
|
|
(plat)
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="Prepend">
|
|
<arguments signature="env">
|
|
(key=val, [...])
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="PrependENVPath">
|
|
<arguments signature="env">
|
|
(name, newpath, [envname, sep, delete_existing=True])
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="PrependUnique">
|
|
<arguments signature="env">
|
|
(key=val, delete_existing=False, [...])
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="PyPackageDir">
|
|
<arguments>
|
|
(modulename)
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="Replace">
|
|
<arguments signature="env">
|
|
(key=val, [...])
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="Repository">
|
|
<arguments>
|
|
(directory)
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="Requires">
|
|
<arguments>
|
|
(target, prerequisite)
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="Scanner">
|
|
<arguments>
|
|
(function, [name, argument, skeys, path_function, node_class, node_factory, scan_check, recursive])
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="SConscriptChdir">
|
|
<arguments signature="global">
|
|
(value)
|
|
</arguments>
|
|
<summary>
|
|
<para>
|
|
By default,
|
|
&scons;
|
|
changes its working directory
|
|
to the directory in which each
|
|
subsidiary SConscript file lives
|
|
while reading and processing that script.
|
|
This behavior may be disabled
|
|
by specifying an argument which
|
|
evaluates false, 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>
|
|
SConscriptChdir(False)
|
|
SConscript('foo/SConscript') # will not chdir to foo
|
|
SConscriptChdir(True)
|
|
SConscript('bar/SConscript') # will chdir to bar
|
|
</example_commands>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="SConsignFile">
|
|
<arguments>
|
|
([name, dbm_module])
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="SetDefault">
|
|
<arguments signature="env">
|
|
(key=val, [...])
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="SideEffect">
|
|
<arguments>
|
|
(side_effect, target)
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="Split">
|
|
<arguments>(arg)</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="subst">
|
|
<arguments signature="env">
|
|
(input, [raw, target, source, conv])
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="Tool">
|
|
<arguments>
|
|
(name, [toolpath, **kwargs])
|
|
</arguments>
|
|
<summary>
|
|
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="Value">
|
|
<arguments>
|
|
(value, [built_value], [name])
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="VariantDir">
|
|
<arguments>
|
|
(variant_dir, src_dir, [duplicate])
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
</summary>
|
|
</scons_function>
|
|
|
|
<scons_function name="WhereIs">
|
|
<arguments>
|
|
(program, [path, pathext, reject])
|
|
</arguments>
|
|
<summary>
|
|
<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>
|
|
|
|
</summary>
|
|
</scons_function>
|
|
|
|
</sconsdoc>
|