fix mistake in RELEASE.txt content
[scons.git] / SCons / Environment.xml
blob97d034364e569ddb8a7a1ac94643bffc1b91d4a2
1 <?xml version="1.0"?>
2 <!--
3 SPDX-FileCopyrightText: Copyright The SCons Foundation (https://scons.org)
4 SPDX-License-Identifier: MIT
5 SPDX-FileType: DOCUMENTATION
7 This file is processed by the bin/SConsDoc.py module.
8 -->
10 <!DOCTYPE sconsdoc [
11 <!ENTITY % scons SYSTEM '../doc/scons.mod'>
12 %scons;
13 <!ENTITY % builders-mod SYSTEM '../doc/generated/builders.mod'>
14 %builders-mod;
15 <!ENTITY % functions-mod SYSTEM '../doc/generated/functions.mod'>
16 %functions-mod;
17 <!ENTITY % tools-mod SYSTEM '../doc/generated/tools.mod'>
18 %tools-mod;
19 <!ENTITY % variables-mod SYSTEM '../doc/generated/variables.mod'>
20 %variables-mod;
23 <sconsdoc xmlns="http://www.scons.org/dbxsd/v1.0"
24           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
25           xsi:schemaLocation="http://www.scons.org/dbxsd/v1.0 http://www.scons.org/dbxsd/v1.0/scons.xsd">
28 <!-- Construction variables -->
30 <cvar name="BUILDERS">
31 <summary>
32 <para>
33 A dictionary mapping the names of the builders
34 available through the &consenv; to underlying Builder objects.
35 Custom builders need to be added to this to make them available.
36 </para>
38 <para>
39 A platform-dependent default list of builders such as
40 &b-link-Program;, &b-link-Library; etc. is used to
41 populate this &consvar; when the &consenv; is initialized
42 via the presence/absence of the tools those builders depend on.
43 &cv-BUILDERS; can be examined to learn which builders will
44 actually be available at run-time.
45 </para>
47 <para>
48 Note that if you initialize this &consvar; through
49 assignment when the &consenv; is created,
50 that value for &cv-BUILDERS; will override any defaults:
51 </para>
53 <example_commands>
54 bld = Builder(action='foobuild &lt; $SOURCE > $TARGET')
55 env = Environment(BUILDERS={'NewBuilder': bld})
56 </example_commands>
58 <para>
59 To instead use a new Builder object in addition to the default Builders,
60 add your new Builder object like this:
61 </para>
63 <example_commands>
64 env = Environment()
65 env.Append(BUILDERS={'NewBuilder': bld})
66 </example_commands>
68 <para>
69 or this:
70 </para>
72 <example_commands>
73 env = Environment()
74 env['BUILDERS']['NewBuilder'] = bld
75 </example_commands>
76 </summary>
77 </cvar>
79 <cvar name="ENV">
80 <summary>
81 <para>
82 The <firstterm>execution environment</firstterm> -
83 a dictionary of environment variables
84 used when &SCons; invokes external commands
85 to build targets defined in this &consenv;.
86 When &cv-ENV; is passed to a command,
87 all list values are assumed to be path lists and
88 are joined using the search path separator.
89 Any other non-string values are coerced to a string.
90 </para>
92 <para>
93 Note that by default
94 &SCons;
95 does
96 <emphasis>not</emphasis>
97 propagate the environment in effect when you execute
98 &scons; (the "shell environment")
99 to the execution environment.
100 This is so that builds will be guaranteed
101 repeatable regardless of the environment
102 variables set at the time
103 &scons;
104 is invoked.
105 If you want to propagate a
106 shell environment variable
107 to the commands executed
108 to build target files,
109 you must do so explicitly.
110 A common example is
111 the system &PATH;
112 environment variable,
113 so that
114 &scons;
115 will find utilities the same way
116 as the invoking shell (or other process):
117 </para>
119 <example_commands>
120 import os
121 env = Environment(ENV={'PATH': os.environ['PATH']})
122 </example_commands>
124 <para>
125 Although it is usually not recommended,
126 you can propagate the entire shell environment
127 in one go:
128 </para>
130 <example_commands>
131 import os
132 env = Environment(ENV=os.environ.copy())
133 </example_commands>
135 </summary>
136 </cvar>
138 <cvar name="SCANNERS">
139 <summary>
140 <para>
141 A list of the available implicit dependency scanners.
142 New file scanners may be added by
143 appending to this list,
144 although the more flexible approach
145 is to associate scanners
146 with a specific Builder.
147 See the manpage sections "Builder Objects"
148 and "Scanner Objects"
149 for more information.
150 </para>
151 </summary>
152 </cvar>
154 <cvar name="CHANGED_SOURCES">
155 <summary>
156 <para>
157 A reserved variable name
158 that may not be set or used in a construction environment.
159 (See the manpage section "Variable Substitution"
160 for more information).
161 </para>
162 </summary>
163 </cvar>
165 <cvar name="CHANGED_TARGETS">
166 <summary>
167 <para>
168 A reserved variable name
169 that may not be set or used in a construction environment.
170 (See the manpage section "Variable Substitution"
171 for more information).
172 </para>
173 </summary>
174 </cvar>
176 <cvar name="SOURCE">
177 <summary>
178 <para>
179 A reserved variable name
180 that may not be set or used in a construction environment.
181 (See the manpage section "Variable Substitution"
182 for more information).
183 </para>
184 </summary>
185 </cvar>
187 <cvar name="SOURCES">
188 <summary>
189 <para>
190 A reserved variable name
191 that may not be set or used in a construction environment.
192 (See the manpage section "Variable Substitution"
193 for more information).
194 </para>
195 </summary>
196 </cvar>
198 <cvar name="TARGET">
199 <summary>
200 <para>
201 A reserved variable name
202 that may not be set or used in a construction environment.
203 (See the manpage section "Variable Substitution"
204 for more information).
205 </para>
206 </summary>
207 </cvar>
209 <cvar name="TARGETS">
210 <summary>
211 <para>
212 A reserved variable name
213 that may not be set or used in a construction environment.
214 (See the manpage section "Variable Substitution"
215 for more information).
216 </para>
217 </summary>
218 </cvar>
220 <cvar name="UNCHANGED_SOURCES">
221 <summary>
222 <para>
223 A reserved variable name
224 that may not be set or used in a construction environment.
225 (See the manpage section "Variable Substitution"
226 for more information).
227 </para>
228 </summary>
229 </cvar>
231 <cvar name="UNCHANGED_TARGETS">
232 <summary>
233 <para>
234 A reserved variable name
235 that may not be set or used in a construction environment.
236 (See the manpage section "Variable Substitution"
237 for more information).
238 </para>
239 </summary>
240 </cvar>
242 <cvar name="TOOLS">
243 <summary>
244 <para>
245 A list of the names of the Tool specification modules
246 that were actually initialized in the current &consenv;.
247 This may be useful as a diagnostic aid
248 to see if a tool did (or did not) run.
249 The value is informative and is not guaranteed to be complete.
250 </para>
251 </summary>
252 </cvar>
254 <cvar name="CACHEDIR_CLASS">
255     <summary>
256         <para>
257 The class type that SCons should use when instantiating a
258 new &f-link-CacheDir; in this &consenv;. Must be
259 a subclass of the <classname>SCons.CacheDir.CacheDir</classname> class.
260         </para>
261     </summary>
262 </cvar>
264 <!-- Functions /  Construction environment methods -->
266 <scons_function name="Action">
267 <arguments>
268 (action, [output, [var, ...]] [key=value, ...])
269 </arguments>
270 <summary>
271 <para>
272 A factory function to create an Action object for
273 the specified
274 <parameter>action</parameter>.
275 See the manpage section "Action Objects"
276 for a complete explanation of the arguments and behavior.
277 </para>
279 <para>
280 Note that the &f-env-Action;
281 form of the invocation will expand
282 construction variables in any argument strings,
283 including the
284 <parameter>action</parameter>
285 argument, at the time it is called
286 using the construction variables in the
287 <replaceable>env</replaceable>
288 construction environment through which
289 &f-env-Action; was called.
290 The &f-Action; global function
291 form delays all variable expansion
292 until the Action object is actually used.
293 </para>
294 </summary>
295 </scons_function>
297 <scons_function name="AddMethod">
298 <arguments signature="global">
299 (object, function, [name])
300 </arguments>
301 <arguments signature="env">
302 (function, [name])
303 </arguments>
304 <summary>
305 <para>
306 Adds <parameter>function</parameter> to an object as a method.
307 <parameter>function</parameter> will be called with an instance
308 object as the first argument as for other methods.
309 If <parameter>name</parameter> is given, it is used as
310 the name of the new method, else the name of
311 <parameter>function</parameter> is used.
312 </para>
313 <para>
314 When the global function &f-AddMethod; is called,
315 the object to add the method to must be passed as the first argument;
316 typically this will be &Environment;,
317 in order to create a method which applies to all &consenvs;
318 subsequently constructed.
319 When called using the &f-env-AddMethod; form,
320 the method is added to the specified &consenv; only.
321 Added methods propagate through &f-env-Clone; calls.
322 </para>
324 <para>
325 More examples:
326 </para>
328 <example_commands>
329 # Function to add must accept an instance argument.
330 # The Python convention is to call this 'self'.
331 def my_method(self, arg):
332     print("my_method() got", arg)
334 # Use the global function to add a method to the Environment class:
335 AddMethod(Environment, my_method)
336 env = Environment()
337 env.my_method('arg')
339 # Use the optional name argument to set the name of the method:
340 env.AddMethod(my_method, 'other_method_name')
341 env.other_method_name('another arg')
342 </example_commands>
343 </summary>
344 </scons_function>
346 <scons_function name="AddPostAction">
347 <arguments>
348 (target, action)
349 </arguments>
350 <summary>
351 <para>
352 Arranges for the specified
353 <parameter>action</parameter>
354 to be performed
355 after the specified
356 <parameter>target</parameter>
357 has been built.
358 <parameter>action</parameter> may be
359 an Action object, or anything that
360 can be converted into an Action object.
361 See the manpage section "Action Objects"
362 for a complete explanation.
363 </para>
365 <para>
366 When multiple targets are supplied,
367 the action may be called multiple times,
368 once after each action that generates
369 one or more targets in the list.
370 </para>
372 <example_commands>
373 foo = Program('foo.c')
374 # remove execute permission from binary:
375 AddPostAction(foo, Chmod('$TARGET', "a-x"))
376 </example_commands>
378 </summary>
379 </scons_function>
381 <scons_function name="AddPreAction">
382 <arguments>
383 (target, action)
384 </arguments>
385 <summary>
386 <para>
387 Arranges for the specified
388 <parameter>action</parameter>
389 to be performed
390 before the specified
391 <parameter>target</parameter>
392 is built.
393 <parameter>action</parameter> may be
394 an Action object, or anything that
395 can be converted into an Action object.
396 See the manpage section "Action Objects"
397 for a complete explanation.
398 </para>
400 <para>
401 When multiple targets are specified,
402 the action(s) may be called multiple times,
403 once before each action that generates
404 one or more targets in the list.
405 </para>
407 <para>
408 Note that if any of the targets are built in multiple steps,
409 the action will be invoked just
410 before the "final" action that specifically
411 generates the specified target(s).
412 For example, when building an executable program
413 from a specified source
414 <filename>.c</filename>
415 file via an intermediate object file:
416 </para>
418 <example_commands>
419 foo = Program('foo.c')
420 AddPreAction(foo, 'pre_action')
421 </example_commands>
423 <para>
424 The specified
425 <literal>pre_action</literal>
426 would be executed before
427 &scons;
428 calls the link command that actually
429 generates the executable program binary
430 <filename>foo</filename>,
431 not before compiling the
432 <filename>foo.c</filename>
433 file into an object file.
434 </para>
435 </summary>
436 </scons_function>
438 <scons_function name="Alias">
439 <arguments>
440 (alias, [source, [action]])
441 </arguments>
442 <summary>
443 <para>
444 Creates an <firstterm>alias</firstterm> target that
445 can be used as a reference to zero or more other targets,
446 specified by the optional <parameter>source</parameter> parameter.
447 Aliases provide a way to give a shorter or more descriptive
448 name to specific targets,
449 and to group multiple targets under a single name.
450 The alias name, or an Alias Node object,
451 may be used as a dependency of any other target,
452 including another alias.
453 </para>
455 <para>
456 <parameter>alias</parameter> and <parameter>source</parameter>
457 may each be a string or Node object,
458 or a list of strings or Node objects;
459 if Nodes are used for
460 <parameter>alias</parameter>
461 they must be Alias nodes.
462 If <parameter>source</parameter> is omitted,
463 the alias is created but has no reference;
464 if selected for building this will result in a
465 <quote>Nothing to be done.</quote> message.
466 An empty alias can be used to define the alias
467 in a visible place in the project;
468 it can later be appended to in a subsidiary SConscript file
469 with the actual target(s) to refer to.
470 The optional
471 <parameter>action</parameter>
472 parameter specifies an action or list of actions
473 that will be executed
474 whenever the any of the alias targets are out-of-date.
475 </para>
477 <para>
478 &f-Alias; can be called for an existing alias,
479 which appends the <parameter>alias</parameter>
480 and/or <parameter>action</parameter> arguments
481 to the existing lists for that alias.
482 </para>
484 <para>
485 Returns a list of Alias Node objects representing the alias(es),
486 which exist outside of any physical file system.
487 The alias name space is separate from the name space for
488 tangible targets; to avoid confusion do not reuse
489 target names as alias names.
490 </para>
492 <para>
493 Examples:
494 </para>
496 <example_commands>
497 Alias('install')
498 Alias('install', '/usr/bin')
499 Alias(['install', 'install-lib'], '/usr/local/lib')
501 env.Alias('install', ['/usr/local/bin', '/usr/local/lib'])
502 env.Alias('install', ['/usr/local/man'])
504 env.Alias('update', ['file1', 'file2'], "update_database $SOURCES")
505 </example_commands>
506 </summary>
507 </scons_function>
509 <scons_function name="AlwaysBuild">
510 <arguments>
511 (target, ...)
512 </arguments>
513 <summary>
514 <para>
515 Marks each given
516 <parameter>target</parameter>
517 so that it is always assumed to be out of date,
518 and will always be rebuilt if needed.
519 Note, however, that
520 &f-AlwaysBuild;
521 does not add its target(s) to the default target list,
522 so the targets will only be built
523 if they are specified on the command line,
524 or are a dependent of a target specified on the command line--but
525 they will
526 <emphasis>always</emphasis>
527 be built if so specified.
528 Multiple targets can be passed in to a single call to
529 &f-AlwaysBuild;.
530 </para>
531 </summary>
532 </scons_function>
534 <scons_function name="Append">
535 <arguments signature="env">
536 (key=val, [...])
537 </arguments>
538 <summary>
539 <para>
540 Appends value(s) intelligently to &consvars; in
541 <varname>env</varname>.
542 The &consvars; and values to add to them are passed as
543 <parameter>key=val</parameter> pairs (&Python; keyword arguments).
544 &f-env-Append; is designed to allow adding values
545 without having to think about the data type of an existing &consvar;.
546 Regular &Python; syntax can also be used to manipulate the &consvar;,
547 but for that you may need to know the types involved,
548 for example pure &Python; lets you directly "add" two lists of strings,
549 but adding a string to a list or a list to a string requires
550 different syntax - things &f-Append; takes care of.
551 Some pre-defined &consvars; do have type expectations
552 based on how &SCons; will use them:
553 for example &cv-link-CPPDEFINES; is often a string or a list of strings,
554 but can also be a list of tuples or a dictionary;
555 while &cv-link-LIBEMITTER;
556 is expected to be a callable or list of callables,
557 and &cv-link-BUILDERS; is expected to be a dictionary.
558 Consult the documentation for the various &consvars; for more details.
559 </para>
561 <para>
562 The following descriptions apply to both the &f-Append;
563 and &f-Prepend; methods, as well as their
564 <emphasis role="bold">Unique</emphasis> variants,
565 with the differences being the insertion point of the added values
566 and whether duplication is allowed.
567 </para>
569 <para>
570 <parameter>val</parameter> can be almost any type.
571 If <varname>env</varname> does not have a &consvar;
572 named <parameter>key</parameter>,
573 then <parameter>key</parameter> is simply
574 stored with a value of <parameter>val</parameter>.
575 Otherwise, <parameter>val</parameter> is
576 combinined with the existing value,
577 possibly converting into an appropriate type
578 which can hold the expanded contents.
579 There are a few special cases to be aware of.
580 Normally, when two strings are combined,
581 the result is a new string containing their concatenation
582 (and you are responsible for supplying any needed separation);
583 however, the contents of &cv-link-CPPDEFINES; will
584 will be postprocessed by adding a prefix and/or suffix
585 to each entry when the command line is produced,
586 so &SCons; keeps them separate -
587 appending a string will result in a separate string entry,
588 not a combined string.
589 For &cv-CPPDEFINES;. as well as
590 &cv-link-LIBS;, and the various <literal>*PATH</literal> variables,
591 &SCons; will amend the variable by supplying the compiler-specific
592 syntax (e.g. prepending a <literal>-D</literal> or <literal>/D</literal>
593 prefix for &cv-CPPDEFINES;), so you should omit this syntax when
594 adding values to these variables.
595 Examples (gcc syntax shown in the expansion of &CPPDEFINES;):
596 </para>
598 <example_commands>
599 env = Environment(CXXFLAGS="-std=c11", CPPDEFINES="RELEASE")
600 print(f"CXXFLAGS = {env['CXXFLAGS']}, CPPDEFINES = {env['CPPDEFINES']}")
601 # notice including a leading space in CXXFLAGS addition
602 env.Append(CXXFLAGS=" -O", CPPDEFINES="EXTRA")
603 print(f"CXXFLAGS = {env['CXXFLAGS']}, CPPDEFINES = {env['CPPDEFINES']}")
604 print("CPPDEFINES will expand to", env.subst('$_CPPDEFFLAGS'))
605 </example_commands>
607 <screen>
608 $ scons -Q
609 CXXFLAGS = -std=c11, CPPDEFINES = RELEASE
610 CXXFLAGS = -std=c11 -O, CPPDEFINES = deque(['RELEASE', 'EXTRA'])
611 CPPDEFINES will expand to -DRELEASE -DEXTRA
612 scons: `.' is up to date.
613 </screen>
615 <para>
616 Because &cv-link-CPPDEFINES; is intended for command-line
617 specification of C/C++ preprocessor macros,
618 additional syntax is accepted when adding to it.
619 The preprocessor accepts arguments to predefine a macro name by itself
620 (<computeroutput>-DFOO</computeroutput> for most compilers,
621 <computeroutput>/DFOO</computeroutput> for Microsoft C++),
622 which gives it an implicit value of <constant>1</constant>,
623 or can be given with a replacement value
624 (<computeroutput>-DBAR=TEXT</computeroutput>).
625 &SCons; follows these rules when adding to &cv-CPPDEFINES;:
626 </para>
627 <itemizedlist>
628 <listitem>
629 <para>A string is split on spaces,
630 giving an easy way to enter multiple macros in one addition.
631 Use an <literal>=</literal> to specify a valued macro.</para>
632 </listitem>
633 <listitem>
634 <para>A tuple is treated as a valued macro.
635 Use the value <constant>None</constant> if the macro should not have a value.
636 It is an error to supply more than two elements in such a tuple.</para>
637 </listitem>
638 <listitem>
639 <para>A list is processed in order,
640 adding each item without further interpretation.
641 In this case, space-separated strings are not split.</para>
642 </listitem>
643 <listitem>
644 <para>A dictionary is processed in order,
645 adding each key-value pair as a valued macro.
646 Use the value <constant>None</constant> if the macro should not have a value.
647 </para>
648 </listitem>
649 </itemizedlist>
651 <para>
652 Examples:
653 </para>
655 <example_commands>
656 env = Environment(CPPDEFINES="FOO")
657 print("CPPDEFINES =", env['CPPDEFINES'])
658 env.Append(CPPDEFINES="BAR=1")
659 print("CPPDEFINES =", env['CPPDEFINES'])
660 env.Append(CPPDEFINES=[("OTHER", 2)])
661 print("CPPDEFINES =", env['CPPDEFINES'])
662 env.Append(CPPDEFINES={"EXTRA": "arg"})
663 print("CPPDEFINES =", env['CPPDEFINES'])
664 print("CPPDEFINES will expand to", env.subst('$_CPPDEFFLAGS'))
665 </example_commands>
667 <screen>
668 $ scons -Q
669 CPPDEFINES = FOO
670 CPPDEFINES = deque(['FOO', 'BAR=1'])
671 CPPDEFINES = deque(['FOO', 'BAR=1', ('OTHER', 2)])
672 CPPDEFINES = deque(['FOO', 'BAR=1', ('OTHER', 2), ('EXTRA', 'arg')])
673 CPPDEFINES will expand to -DFOO -DBAR=1 -DOTHER=2 -DEXTRA=arg
674 scons: `.' is up to date.
675 </screen>
677 <para>
678 Examples of adding multiple macros:
679 </para>
681 <example_commands>
682 env = Environment()
683 env.Append(CPPDEFINES=[("ONE", 1), "TWO", ("THREE", )])
684 print("CPPDEFINES =", env['CPPDEFINES'])
685 env.Append(CPPDEFINES={"FOUR": 4, "FIVE": None})
686 print("CPPDEFINES =", env['CPPDEFINES'])
687 print("CPPDEFINES will expand to", env.subst('$_CPPDEFFLAGS'))
688 </example_commands>
690 <screen>
691 $ scons -Q
692 CPPDEFINES = [('ONE', 1), 'TWO', ('THREE',)]
693 CPPDEFINES = deque([('ONE', 1), 'TWO', ('THREE',), ('FOUR', 4), ('FIVE', None)])
694 CPPDEFINES will expand to -DONE=1 -DTWO -DTHREE -DFOUR=4 -DFIVE
695 scons: `.' is up to date.
696 </screen>
698 <para>
699 <emphasis>Changed in version  4.5</emphasis>:
700 clarifined the use of tuples vs. other types,
701 handling is now consistent across the four functions.
702 </para>
704 <example_commands>
705 env = Environment()
706 env.Append(CPPDEFINES=("MACRO1", "MACRO2"))
707 print("CPPDEFINES =", env['CPPDEFINES'])
708 env.Append(CPPDEFINES=[("MACRO3", "MACRO4")])
709 print("CPPDEFINES =", env['CPPDEFINES'])
710 print("CPPDEFINES will expand to", env.subst('$_CPPDEFFLAGS'))
711 </example_commands>
713 <screen>
714 $ scons -Q
715 CPPDEFINES = ('MACRO1', 'MACRO2')
716 CPPDEFINES = deque(['MACRO1', 'MACRO2', ('MACRO3', 'MACRO4')])
717 CPPDEFINES will expand to -DMACRO1 -DMACRO2 -DMACRO3=MACRO4
718 scons: `.' is up to date.
719 </screen>
721 <para>
722 See &cv-link-CPPDEFINES; for more details.
723 </para>
725 <para>
726 Appending a string <parameter>val</parameter>
727 to a dictonary-typed &consvar; enters
728 <parameter>val</parameter> as the key in the dictionary,
729 and <literal>None</literal> as its value.
730 Using a tuple type to supply a key-value pair
731 only works for the special case of &cv-CPPDEFINES;
732 described above.
733 </para>
735 <para>
736 Although most combinations of types work without
737 needing to know the details, some combinations
738 do not make sense and &Python; raises an exception.
739 </para>
741 <para>
742 When using &f-env-Append; to modify &consvars;
743 which are path specifications (conventionally,
744 the names of such end in <literal>PATH</literal>),
745 it is recommended to add the values as a list of strings,
746 even if you are only adding a single string.
747 The same goes for adding library names to &cv-LIBS;.
748 </para>
750 <example_commands>
751 env.Append(CPPPATH=["#/include"])
752 </example_commands>
754 <para>
755 See also &f-link-env-AppendUnique;,
756 &f-link-env-Prepend; and &f-link-env-PrependUnique;.
757 </para>
759 </summary>
760 </scons_function>
762 <scons_function name="AppendENVPath">
763 <arguments signature="env">
764 (name, newpath, [envname, sep, delete_existing=False])
765 </arguments>
766 <summary>
767 <para>
768 Append path elements specified by <parameter>newpath</parameter>
769 to the given search path string or list <parameter>name</parameter>
770 in mapping <parameter>envname</parameter> in the &consenv;.
771 Supplying <parameter>envname</parameter> is optional:
772 the default is the execution environment &cv-link-ENV;.
773 Optional <parameter>sep</parameter> is used as the search path separator,
774 the default is the platform's separator (<systemitem>os.pathsep</systemitem>).
775 A path element will only appear once.
776 Any duplicates in <parameter>newpath</parameter> are dropped,
777 keeping the last appearing (to preserve path order).
778 If <parameter>delete_existing</parameter>
779 is <constant>False</constant> (the default)
780 any addition duplicating an existing path element is ignored;
781 if <parameter>delete_existing</parameter>
782 is <constant>True</constant> the existing value will
783 be dropped and the path element will be added at the end.
784 To help maintain uniqueness all paths are normalized (using
785 <systemitem>os.path.normpath</systemitem>
787 <systemitem>os.path.normcase</systemitem>).
788 </para>
790 <para>
791 Example:
792 </para>
794 <example_commands>
795 print('before:', env['ENV']['INCLUDE'])
796 include_path = '/foo/bar:/foo'
797 env.AppendENVPath('INCLUDE', include_path)
798 print('after:', env['ENV']['INCLUDE'])
799 </example_commands>
801 <para>Yields:</para>
802 <screen>
803 before: /foo:/biz
804 after: /biz:/foo/bar:/foo
805 </screen>
807 <para>
808 See also &f-link-env-PrependENVPath;.
809 </para>
811 </summary>
812 </scons_function>
814 <scons_function name="AppendUnique">
815 <arguments signature="env">
816 (key=val, [...], [delete_existing=False])
817 </arguments>
818 <summary>
819 <para>
820 Append values to &consvars; in the current &consenv;,
821 maintaining uniqueness.
822 Works like &f-link-env-Append;,
823 except that values that would become duplicates
824 are not added.
825 If <parameter>delete_existing</parameter>
826 is set to a true value, then for any duplicate,
827 the existing instance of <parameter>val</parameter> is first removed,
828 then <parameter>val</parameter> is appended,
829 having the effect of moving it to the end.
830 </para>
832 <para>
833 Example:
834 </para>
836 <example_commands>
837 env.AppendUnique(CCFLAGS='-g', FOO=['foo.yyy'])
838 </example_commands>
840 <para>
841 See also &f-link-env-Append;,
842 &f-link-env-Prepend;
843 and &f-link-env-PrependUnique;.
844 </para>
845 </summary>
846 </scons_function>
848 <scons_function name="Builder">
849 <arguments>
850 (action, [arguments])
851 </arguments>
852 <summary>
853 <para>
854 Creates a Builder object for
855 the specified
856 <parameter>action</parameter>.
857 See the manpage section "Builder Objects"
858 for a complete explanation of the arguments and behavior.
859 </para>
861 <para>
862 Note that the
863 <function>env.Builder</function>()
864 form of the invocation will expand
865 construction variables in any arguments strings,
866 including the
867 <parameter>action</parameter>
868 argument,
869 at the time it is called
870 using the construction variables in the
871 <varname>env</varname>
872 construction environment through which
873 &f-env-Builder; was called.
875 &f-Builder;
876 form delays all variable expansion
877 until after the Builder object is actually called.
878 </para>
879 </summary>
880 </scons_function>
882 <scons_function name="CacheDir">
883 <arguments>
884 (cache_dir, custom_class=None)
885 </arguments>
886 <summary>
887 <para>
888 Direct
889 &scons;
890 to maintain a derived-file cache in
891 <parameter>cache_dir</parameter>.
892 The derived files in the cache will be shared
893 among all the builds specifying the same
894 <parameter>cache_dir</parameter>.
895 Specifying a
896 <parameter>cache_dir</parameter>
898 <constant>None</constant>
899 disables derived file caching.
900 </para>
902 <para>
903 Calling the environment method
904 &f-link-env-CacheDir;
905 limits the effect to targets built
906 through the specified construction environment.
907 Calling the global function
908 &f-link-CacheDir;
909 sets a global default
910 that will be used by all targets built
911 through construction environments
912 that do not set up environment-specific
913 caching by calling &f-env-CacheDir;.
914 </para>
916 <para>
917 Caching behavior can be configured by passing a specialized cache
918 class as the optional <parameter>custom_class</parameter> parameter.
919 This class must be a subclass of
920 <classname>SCons.CacheDir.CacheDir</classname>.
921 &SCons; will internally invoke the custom class for performing
922 caching operations.
923 If the parameter is omitted or set to
924 <constant>None</constant>, &SCons; will use the default
925 <classname>SCons.CacheDir.CacheDir</classname> class.
926 </para>
928 <para>
929 When derived-file caching
930 is being used and
931 &scons;
932 finds a derived file that needs to be rebuilt,
933 it will first look in the cache to see if a
934 file with matching &buildsig; exists
935 (indicating the input file(s) and build action(s)
936 were identical to those for the current target),
937 and if so, will retrieve the file from the cache.
938 &scons;
939 will report
940 <computeroutput>Retrieved `file' from cache</computeroutput>
941 instead of the normal build message.
942 If the derived file is not present in the cache,
943 &scons;
944 will build it and
945 then place a copy of the built file in the cache,
946 identified by its &buildsig;, for future use.
947 </para>
949 <para>
951 <computeroutput>Retrieved `file' from cache</computeroutput>
952 messages are useful for human consumption,
953 but less useful when comparing log files between
954 &scons; runs which will show differences that are
955 noisy and not actually significant.
956 To disable,
957 use the <option>--cache-show</option> option.
958 With this option, &scons; changes printing
959 to always show the action that would
960 have been used to build the file without caching.
961 </para>
963 <para>
964 Derived-file caching
965 may be disabled for any invocation
966 of &scons; by giving the
967 <option>--cache-disable</option>
968 command line option;
969 cache updating may be disabled, leaving cache
970 fetching enabled, by giving the
971 <option>--cache-readonly</option> option.
972 </para>
974 <para>
975 If the
976 <option>--cache-force</option>
977 option is used,
978 &scons;
979 will place a copy of
980 <emphasis>all</emphasis>
981 derived files into the cache,
982 even if they already existed
983 and were not built by this invocation.
984 This is useful to populate a cache
985 the first time a
986 <parameter>cache_dir</parameter>
987 is used for a build,
988 or to bring a cache up to date after
989 a build with cache updating disabled
990 (<option>--cache-disable</option>
991 or <option>--cache-readonly</option>)
992 has been done.
993 </para>
995 <para>
997 &f-link-NoCache;
998 method can be used to disable caching of specific files.  This can be
999 useful if inputs and/or outputs of some tool are impossible to
1000 predict or prohibitively large.
1001 </para>
1003 <para>
1004 Note that (at this time) &SCons; provides no facilities
1005 for managing the derived-file cache. It is up to the developer
1006 to arrange for cache pruning, expiry, access control, etc. if needed.
1007 </para>
1009 </summary>
1010 </scons_function>
1012 <scons_function name="Clean">
1013 <arguments>
1014 (targets, files_or_dirs)
1015 </arguments>
1016 <summary>
1017 <para>
1018 This specifies a list of files or directories which should be removed
1019 whenever the targets are specified with the
1020 <option>-c</option>
1021 command line option.
1022 The specified targets may be a list
1023 or an individual target.
1024 Multiple calls to
1025 &f-Clean;
1026 are legal,
1027 and create new targets or add files and directories to the
1028 clean list for the specified targets.
1029 </para>
1031 <para>
1032 Multiple files or directories should be specified
1033 either as separate arguments to the
1034 &f-Clean;
1035 method, or as a list.
1036 &f-Clean;
1037 will also accept the return value of any of the construction environment
1038 Builder methods.
1039 Examples:
1040 </para>
1042 <para>
1043 The related
1044 &f-link-NoClean;
1045 function overrides calling
1046 &f-Clean;
1047 for the same target,
1048 and any targets passed to both functions will
1049 <emphasis>not</emphasis>
1050 be removed by the
1051 <option>-c</option>
1052 option.
1053 </para>
1055 <para>
1056 Examples:
1057 </para>
1059 <example_commands>
1060 Clean('foo', ['bar', 'baz'])
1061 Clean('dist', env.Program('hello', 'hello.c'))
1062 Clean(['foo', 'bar'], 'something_else_to_clean')
1063 </example_commands>
1065 <para>
1066 In this example,
1067 installing the project creates a subdirectory for the documentation.
1068 This statement causes the subdirectory to be removed
1069 if the project is deinstalled.
1070 </para>
1071 <example_commands>
1072 Clean(docdir, os.path.join(docdir, projectname))
1073 </example_commands>
1074 </summary>
1075 </scons_function>
1077 <scons_function name="Clone">
1078 <arguments signature="env">
1079 ([key=val, ...])
1080 </arguments>
1081 <summary>
1082 <para>
1083 Returns an independent copy of a &consenv;.
1084 If there are any unrecognized keyword arguments specified,
1085 they are added as &consvars; in the copy,
1086 overwriting any existing values
1087 for those keywords.
1088 See the manpage section "Construction Environments" for more details.
1089 </para>
1091 <para>
1092 Example:
1093 </para>
1095 <example_commands>
1096 env2 = env.Clone()
1097 env3 = env.Clone(CCFLAGS='-g')
1098 </example_commands>
1100 <para>
1101 A list of <parameter>tools</parameter>
1102 and a <parameter>toolpath</parameter> may be specified,
1103 as in the &f-link-Environment; constructor:
1104 </para>
1106 <example_commands>
1107 def MyTool(env):
1108     env['FOO'] = 'bar'
1110 env4 = env.Clone(tools=['msvc', MyTool])
1111 </example_commands>
1113 <para>
1115 <parameter>parse_flags</parameter>
1116 keyword argument is also recognized, to allow merging command-line
1117 style arguments into the appropriate construction
1118 variables (see &f-link-env-MergeFlags;).
1119 </para>
1121 <example_commands>
1122 # create an environment for compiling programs that use wxWidgets
1123 wx_env = env.Clone(parse_flags='!wx-config --cflags --cxxflags')
1124 </example_commands>
1126 <para>
1127 The <parameter>variables</parameter>
1128 keyword argument is also recognized, to allow (re)initializing
1129 &consvars; from a <literal>Variables</literal> object.
1130 </para>
1132 <para>
1133 <emphasis>Changed in version 4.8.0:</emphasis>
1134 the <parameter>variables</parameter> parameter was added.
1135 </para>
1136 </summary>
1137 </scons_function>
1139 <builder name="Command">
1140 <summary>
1141 <para>
1142 There is actually no Builder named &Command;,
1143 rather the term "Command Builder" refers to
1144 a function which, on each call, creates and calls
1145 an anonymous Builder.
1146 This is useful for "one-off" builds
1147 where a full Builder is not needed.
1148 Since the anonymous Builder is never hooked
1149 into the standard Builder framework,
1150 an Action must always be specfied.
1151 See the &f-link-Command; function description
1152 for the calling syntax and details.
1153 </para>
1154 </summary>
1155 </builder>
1157 <scons_function name="Command">
1158 <arguments>
1159 (target, source, action, [key=val, ...])
1160 </arguments>
1161 <summary>
1162 <para>
1163 Creates an anonymous builder and calls it,
1164 thus recording <parameter>action</parameter>
1165 to build <parameter>target</parameter>
1166 from <parameter>source</parameter>
1167 into the dependency tree.
1168 This can be more convenient for a single special-case build
1169 than having to define and add a new named Builder.
1170 </para>
1172 <para>
1174 &Command; function accepts the
1175 <parameter>source_scanner</parameter> and
1176 <parameter>target_scanner</parameter>
1177 keyword arguments which are used to specify
1178 custom scanners for the specified sources or targets.
1179 The value must be a Scanner object.
1180 For example, the global
1181 <literal>DirScanner</literal>
1182 object can be used
1183 if any of the sources will be directories
1184 that must be scanned on-disk for
1185 changes to files that aren't
1186 already specified in other Builder or function calls.
1187 </para>
1189 <para>
1191 &Command; function also accepts the
1192 <parameter>source_factory</parameter> and
1193 <parameter>target_factory</parameter>
1194 keyword arguments which are used to specify
1195 factory functions to create &SCons; Nodes
1196 from any sources or targets specified as strings.
1197 If any sources or targets are already Node objects,
1198 they are not further transformed even if
1199 a factory is specified for them.
1200 The default for each is the &Entry; factory.
1201 </para>
1203 <para>
1204 These four arguments, if given, are used
1205 in the creation of the Builder.
1206 Other Builder-specific keyword arguments
1207 are not recognized as such.
1208 See the manpage section "Builder Objects"
1209 for more information about how these
1210 arguments work in a Builder.
1211 </para>
1213 <para>
1214 Any remaining keyword arguments are passed on to the
1215 generated builder when it is called,
1216 and behave as described in the manpage section "Builder Methods",
1217 in short:
1218 recognized arguments have their specified meanings,
1219 while the rest are used to override
1220 any same-named existing &consvars;
1221 from the &consenv;.
1222 </para>
1224 <para>
1225 <parameter>action</parameter> can be an external command,
1226 specified as a string,
1227 or a callable &Python; object;
1228 see the manpage section "Action Objects"
1229 for more complete information.
1230 Also note that a string specifying an external command
1231 may be preceded by an at-sign
1232 (<literal>@</literal>)
1233 to suppress printing the command in question,
1234 or by a hyphen
1235 (<literal>-</literal>)
1236 to ignore the exit status of the external command.
1237 </para>
1239 <para>
1240 Examples:
1241 </para>
1243 <example_commands>
1244 env.Command(
1245     target='foo.out',
1246     source='foo.in',
1247     action="$FOO_BUILD &lt; $SOURCES &gt; $TARGET"
1250 env.Command(
1251     target='bar.out',
1252     source='bar.in',
1253     action=["rm -f $TARGET", "$BAR_BUILD &lt; $SOURCES &gt; $TARGET"],
1254     ENV={'PATH': '/usr/local/bin/'},
1258 import os
1259 def rename(env, target, source):
1260     os.rename('.tmp', str(target[0]))
1263 env.Command(
1264     target='baz.out',
1265     source='baz.in',
1266     action=["$BAZ_BUILD &lt; $SOURCES &gt; .tmp", rename],
1268 </example_commands>
1270 <para>
1271 Note that the
1272 &Command;
1273 function will usually assume, by default,
1274 that the specified targets and/or sources are Files,
1275 if no other part of the configuration
1276 identifies what type of entries they are.
1277 If necessary, you can explicitly specify
1278 that targets or source nodes should
1279 be treated as directories
1280 by using the
1281 &f-link-Dir;
1283 &f-link-env-Dir;
1284 functions.
1285 </para>
1287 <para>
1288 Examples:
1289 </para>
1291 <example_commands>
1292 env.Command('ddd.list', Dir('ddd'), 'ls -l $SOURCE > $TARGET')
1294 env['DISTDIR'] = 'destination/directory'
1295 env.Command(env.Dir('$DISTDIR')), None, make_distdir)
1296 </example_commands>
1298 <para>
1299 Also note that SCons will usually
1300 automatically create any directory necessary to hold a target file,
1301 so you normally don't need to create directories by hand.
1302 </para>
1303 </summary>
1304 </scons_function>
1306 <scons_function name="Configure">
1307 <arguments signature="global">
1308 (env, [custom_tests, conf_dir, log_file, config_h])
1309 </arguments>
1310 <arguments signature="env">
1311 ([custom_tests, conf_dir, log_file, config_h])
1312 </arguments>
1313 <summary>
1314 <para>
1315 Creates a &Configure; object for integrated
1316 functionality similar to GNU <command>autoconf</command>.
1317 See the manpage section "Configure Contexts"
1318 for a complete explanation of the arguments and behavior.
1319 </para>
1320 </summary>
1321 </scons_function>
1323 <scons_function name="Decider">
1324 <arguments>
1325 (function)
1326 </arguments>
1327 <summary>
1328 <para>
1329 Specifies that all up-to-date decisions for
1330 targets built through this construction environment
1331 will be handled by the specified
1332 <parameter>function</parameter>.
1333 <parameter>function</parameter> can be the name of
1334 a function or one of the following strings
1335 that specify the predefined decision function
1336 that will be applied:
1337 </para>
1339 <para>
1340 <variablelist>
1341 <varlistentry>
1342 <term><literal>"content"</literal></term>
1343 <listitem>
1344 <para>
1345 Specifies that a target shall be considered out of date and rebuilt
1346 if the dependency's content has changed since the last time
1347 the target was built,
1348 as determined by performing a checksum
1349 on the dependency's contents using the selected hash function,
1350 and comparing it to the checksum recorded the
1351 last time the target was built.
1352 <literal>content</literal> is the default decider.
1353 </para>
1354 <para>
1355 <emphasis>Changed in version 4.1:</emphasis>
1356 The decider was renamed to <literal>content</literal>
1357 since the hash function is now selectable.
1358 The former name, <literal>MD5</literal>,
1359 can still be used as a synonym, but is deprecated.
1360 </para>
1361 </listitem>
1362 </varlistentry>
1363 <varlistentry>
1364 <term><literal>"content-timestamp"</literal></term>
1365 <listitem>
1366 <para>
1367 Specifies that a target shall be considered out of date and rebuilt
1368 if the dependency's content has changed since the last time
1369 the target was built,
1370 except that dependencies with a timestamp that matches
1371 the last time the target was rebuilt will be
1372 assumed to be up-to-date and
1373 <emphasis>not</emphasis>
1374 rebuilt.
1375 This provides behavior very similar
1376 to the
1377 <literal>content</literal>
1378 behavior of always checksumming file contents,
1379 with an optimization of not checking
1380 the contents of files whose timestamps haven't changed.
1381 The drawback is that SCons will
1382 <emphasis>not</emphasis>
1383 detect if a file's content has changed
1384 but its timestamp is the same,
1385 as might happen in an automated script
1386 that runs a build,
1387 updates a file,
1388 and runs the build again,
1389 all within a single second.
1390 </para>
1391 <para>
1392 <emphasis>Changed in version 4.1:</emphasis>
1393 The decider was renamed to <literal>content-timestamp</literal>
1394 since the hash function is now selectable.
1395 The former name, <literal>MD5-timestamp</literal>,
1396 can still be used as a synonym, but is deprecated.
1397 </para>
1398 </listitem>
1399 </varlistentry>
1400 <varlistentry>
1401 <term><literal>"timestamp-newer"</literal></term>
1402 <listitem>
1403 <para>
1404 Specifies that a target shall be considered out of date and rebuilt
1405 if the dependency's timestamp is newer than the target file's timestamp.
1406 This is the behavior of the classic Make utility,
1408 <literal>make</literal>
1409 can be used a synonym for
1410 <literal>timestamp-newer</literal>.
1411 </para>
1412 </listitem>
1413 </varlistentry>
1414 <varlistentry>
1415 <term><literal>"timestamp-match"</literal></term>
1416 <listitem>
1417 <para>
1418 Specifies that a target shall be considered out of date and rebuilt
1419 if the dependency's timestamp is different than the
1420 timestamp recorded the last time the target was built.
1421 This provides behavior very similar to the classic Make utility
1422 (in particular, files are not opened up so that their
1423 contents can be checksummed)
1424 except that the target will also be rebuilt if a
1425 dependency file has been restored to a version with an
1426 <emphasis>earlier</emphasis>
1427 timestamp, such as can happen when restoring files from backup archives.
1428 </para>
1429 </listitem>
1430 </varlistentry>
1431 </variablelist>
1432 </para>
1434 <para>
1435 Examples:
1436 </para>
1438 <example_commands>
1439 # Use exact timestamp matches by default.
1440 Decider('timestamp-match')
1442 # Use hash content signatures for any targets built
1443 # with the attached construction environment.
1444 env.Decider('content')
1445 </example_commands>
1447 <para>
1448 In addition to the above already-available functions, the
1449 <parameter>function</parameter>
1450 argument may be a &Python; function you supply.
1451 Such a function must accept the following four arguments:
1452 </para>
1454 <para>
1455 <variablelist>
1456 <varlistentry>
1457 <term><parameter>dependency</parameter></term>
1458 <listitem>
1459 <para>
1460 The Node (file) which
1461 should cause the
1462 <parameter>target</parameter>
1463 to be rebuilt
1464 if it has "changed" since the last tme
1465 <parameter>target</parameter>
1466 was built.
1467 </para>
1468 </listitem>
1469 </varlistentry>
1470 <varlistentry>
1471 <term><parameter>target</parameter></term>
1472 <listitem>
1473 <para>
1474 The Node (file) being built.
1475 In the normal case,
1476 this is what should get rebuilt
1477 if the
1478 <parameter>dependency</parameter>
1479 has "changed."
1480 </para>
1481 </listitem>
1482 </varlistentry>
1483 <varlistentry>
1484 <term><parameter>prev_ni</parameter></term>
1485 <listitem>
1486 <para>
1487 Stored information about the state of the
1488 <parameter>dependency</parameter>
1489 the last time the
1490 <parameter>target</parameter>
1491 was built.
1492 This can be consulted to match various
1493 file characteristics
1494 such as the timestamp,
1495 size, or &contentsig;.
1496 </para>
1497 </listitem>
1498 </varlistentry>
1499     <varlistentry>
1500 <term><parameter>repo_node</parameter></term>
1501 <listitem>
1502 <para>
1503 If set, use this Node instead of the one specified by
1504 <parameter>dependency</parameter>
1505 to determine if the dependency has changed.
1506 This argument is optional so should be written
1507 as a default argument (typically it would be
1508 written as <parameter>repo_node=None</parameter>).
1509 A caller will normally only set this if the
1510 target only exists in a Repository.
1511 </para>
1512 </listitem>
1513 </varlistentry>
1515 </variablelist>
1516 </para>
1518 <para>
1520 <parameter>function</parameter>
1521 should return a value which evaluates
1522 <constant>True</constant>
1523 if the
1524 <parameter>dependency</parameter>
1525 has "changed" since the last time
1527 <parameter>target</parameter>
1528 was built
1529 (indicating that the target
1530 <emphasis>should</emphasis>
1531 be rebuilt),
1532 and a value which evaluates
1533 <constant>False</constant>
1534 otherwise
1535 (indicating that the target should
1536 <emphasis>not</emphasis>
1537 be rebuilt).
1538 Note that the decision can be made
1539 using whatever criteria are appopriate.
1540 Ignoring some or all of the function arguments
1541 is perfectly normal.
1542 </para>
1544 <para>
1545 Example:
1546 </para>
1548 <example_commands>
1549 def my_decider(dependency, target, prev_ni, repo_node=None):
1550     return not os.path.exists(str(target))
1552 env.Decider(my_decider)
1553 </example_commands>
1554 </summary>
1555 </scons_function>
1557 <scons_function name="Depends">
1558 <arguments>
1559 (target, dependency)
1560 </arguments>
1561 <summary>
1562 <para>
1563 Specifies an explicit dependency;
1565 <parameter>target</parameter>
1566 will be rebuilt
1567 whenever the
1568 <parameter>dependency</parameter>
1569 has changed.
1570 Both the specified
1571 <parameter>target</parameter>
1573 <parameter>dependency</parameter>
1574 can be a string
1575 (usually the path name of a file or directory)
1576 or Node objects,
1577 or a list of strings or Node objects
1578 (such as returned by a Builder call).
1579 This should only be necessary
1580 for cases where the dependency
1581 is not caught by a Scanner
1582 for the file.
1583 </para>
1585 <para>
1586 Example:
1587 </para>
1589 <example_commands>
1590 env.Depends('foo', 'other-input-file-for-foo')
1592 mylib = env.Library('mylib.c')
1593 installed_lib = env.Install('lib', mylib)
1594 bar = env.Program('bar.c')
1596 # Arrange for the library to be copied into the installation
1597 # directory before trying to build the "bar" program.
1598 # (Note that this is for example only.  A "real" library
1599 # dependency would normally be configured through the $LIBS
1600 # and $LIBPATH variables, not using an env.Depends() call.)
1602 env.Depends(bar, installed_lib)
1603 </example_commands>
1604 </summary>
1605 </scons_function>
1607 <scons_function name="Detect">
1608 <arguments signature="env">
1609 (progs)
1610 </arguments>
1611 <summary>
1612 <para>
1613 Find an executable from one or more choices:
1614 <parameter>progs</parameter> may be a string or a list of strings.
1615 Returns the first value from <parameter>progs</parameter>
1616 that was found, or <constant>None</constant>.
1617 Executable is searched by checking the paths in the execution environment
1618 (<varname>env</varname><literal>['ENV']['PATH']</literal>).
1619 On Windows systems, additionally applies the filename suffixes found in
1620 the execution environment
1621 (<varname>env</varname><literal>['ENV']['PATHEXT']</literal>)
1622 but will not include any such extension in the return value.
1623 &f-env-Detect; is a wrapper around &f-link-env-WhereIs;.
1624 </para>
1625 </summary>
1626 </scons_function>
1628 <scons_function name="Dictionary">
1629 <arguments signature="env">
1630 ([vars])
1631 </arguments>
1632 <summary>
1633 <para>
1634 Returns a dictionary object
1635 containing the &consvars; in the &consenv;.
1636 If there are any arguments specified,
1637 the values of the specified &consvars;
1638 are returned as a string (if one
1639 argument) or as a list of strings.
1640 </para>
1642 <para>
1643 Example:
1644 </para>
1646 <example_commands>
1647 cvars = env.Dictionary()
1648 cc_values = env.Dictionary('CC', 'CCFLAGS', 'CCCOM')
1649 </example_commands>
1651 <note><para>
1652 The object returned by &f-link-env-Dictionary; should be treated
1653 as a read-only view into the &consvars;.
1654 Some &consvars; have special internal handling,
1655 and making changes through the &f-env-Dictionary; object can bypass
1656 that handling and cause data inconsistencies.
1657 The primary use of &f-env-Dictionary; is for diagnostic purposes -
1658 it is used widely by test cases specifically because
1659 it bypasses the special handling so that behavior
1660 can be verified.
1661 </para></note>
1663 </summary>
1664 </scons_function>
1666 <scons_function name="Dir">
1667 <arguments>
1668 (name, [directory])
1669 </arguments>
1670 <summary>
1671 <para>
1672 Returns Directory Node(s).
1673 A Directory Node is an object that represents a directory.
1674 <parameter>name</parameter>
1675 can be a relative or absolute path or a list of such paths.
1676 <parameter>directory</parameter>
1677 is an optional directory that will be used as the parent directory.
1678 If no
1679 <parameter>directory</parameter>
1680 is specified, the current script's directory is used as the parent.
1681 </para>
1683 <para>
1685 <parameter>name</parameter>
1686 is a single pathname, the corresponding node is returned.
1688 <parameter>name</parameter>
1689 is a list, SCons returns a list of nodes.
1690 Construction variables are expanded in
1691 <parameter>name</parameter>.
1692 </para>
1694 <para>
1695 Directory Nodes can be used anywhere you
1696 would supply a string as a directory name
1697 to a Builder method or function.
1698 Directory Nodes have attributes and methods
1699 that are useful in many situations;
1700 see manpage section "Filesystem Nodes"
1701 for more information.
1702 </para>
1703 </summary>
1704 </scons_function>
1706 <scons_function name="Dump">
1707 <arguments signature="env">
1708 ([key, ...], [format=])
1709 </arguments>
1710 <summary>
1711 <para>
1712 Serializes &consvars; from the current &consenv;
1713 to a string.
1714 The method supports the following formats specified by
1715 <parameter>format</parameter>,
1716 which must be used a a keyword argument:
1717 </para>
1718 <variablelist>
1719 <varlistentry>
1720 <term><literal>pretty</literal></term>
1721 <listitem>
1722 <para>
1723 Returns a pretty-printed representation of the variables
1724 (this is the default).
1725 The variables will be presented in &Python; dict form.
1726 </para>
1727 </listitem>
1728 </varlistentry>
1729 <varlistentry>
1730 <term><literal>json</literal></term>
1731 <listitem>
1732 <para>
1733 Returns a JSON-formatted string representation of the variables.
1734 The variables will be presented as a JSON object literal,
1735 the JSON equivalent of a &Python; dict.
1736 </para>
1737 </listitem>
1738 </varlistentry>
1739 </variablelist>
1741 <para>
1742 If no <varname>key</varname> is supplied,
1743 all the &consvars; are serialized.
1744 If one or more keys are supplied,
1745 only those keys and their values are serialized.
1746 </para>
1748 <para>
1749 <emphasis>Changed in NEXT_VERSION</emphasis>:
1750 More than one <parameter>key</parameter> can be specified.
1751 The returned string always looks like a dict (or JSON equivalent);
1752 previously a single key serialized only the value,
1753 not the key with the value.
1754 </para>
1756 <para>
1757 This SConstruct:
1758 </para>
1760 <example_commands>
1761 env = Environment()
1762 print(env.Dump('CCCOM'))
1763 print(env.Dump('CC', 'CCFLAGS', format='json'))
1764 </example_commands>
1766 <para>
1767 will print something like:
1768 </para>
1770 <example_commands>
1771 {'CCCOM': '$CC -o $TARGET -c $CFLAGS $CCFLAGS $_CCCOMCOM $SOURCES'}
1773     "CC": "gcc",
1774     "CCFLAGS": []
1776 </example_commands>
1778 <para>
1779 While this SConstruct:
1780 </para>
1782 <example_commands>
1783 env = Environment()
1784 print(env.Dump())
1785 </example_commands>
1787 <para>
1788 will print something like:
1789 </para>
1790 <example_commands>
1791 { 'AR': 'ar',
1792   'ARCOM': '$AR $ARFLAGS $TARGET $SOURCES\n$RANLIB $RANLIBFLAGS $TARGET',
1793   'ARFLAGS': ['r'],
1794   'AS': 'as',
1795   'ASCOM': '$AS $ASFLAGS -o $TARGET $SOURCES',
1796   'ASFLAGS': [],
1797   ...
1798 </example_commands>
1800 </summary>
1801 </scons_function>
1803 <scons_function name="Environment">
1804 <arguments>
1805 ([key=value, ...])
1806 </arguments>
1807 <summary>
1808 <para>
1809 Return a new &consenv;
1810 initialized with the specified
1811 <parameter>key</parameter>=<replaceable>value</replaceable>
1812 pairs.
1813 The keyword arguments
1814 <parameter>parse_flags</parameter>,
1815 <parameter>platform</parameter>,
1816 <parameter>toolpath</parameter>,
1817 <parameter>tools</parameter>
1818 and <parameter>variables</parameter>
1819 are specially recognized and do not lead to
1820 &consvar; creation.
1821 See the manpage section "Construction Environments" for more details.
1822 </para>
1823 </summary>
1824 </scons_function>
1826 <scons_function name="Execute">
1827 <arguments>
1828 (action, [actionargs ...])
1829 </arguments>
1830 <summary>
1831 <para>
1832 Executes an Action.
1833 <parameter>action</parameter>
1834 may be an Action object
1835 or it may be a command-line string,
1836 list of commands,
1837 or executable &Python; function,
1838 each of which will first be converted
1839 into an Action object
1840 and then executed.
1841 Any additional arguments to &f-Execute;
1842 are passed on to the &f-link-Action; factory function
1843 which actually creates the Action object
1844 (see the manpage section <link linkend="action_objects">Action Objects</link>
1845 for a description). Example:
1846 </para>
1848 <example_commands>
1849 Execute(Copy('file.out', 'file.in'))
1850 </example_commands>
1852 <para>&f-Execute; performs its action immediately,
1853 as part of the SConscript-reading phase.
1854 There are no sources or targets declared in an
1855 &f-Execute; call, so any objects it manipulates
1856 will not be tracked as part of the &SCons; dependency graph.
1857 In the example above, neither
1858 <filename>file.out</filename> nor
1859 <filename>file.in</filename> will be tracked objects.
1860 </para>
1862 <para>
1863 &f-Execute; returns the exit value of the command
1864 or return value of the &Python; function.
1865 &scons;
1866 prints an error message if the executed
1867 <parameter>action</parameter>
1868 fails (exits with or returns a non-zero value),
1869 however it does
1870 <emphasis>not</emphasis>,
1871 automatically terminate the build for such a failure.
1872 If you want the build to stop in response to a failed
1873 &f-Execute;
1874 call,
1875 you must explicitly check for a non-zero return value:
1876 </para>
1878 <example_commands>
1879 if Execute("mkdir sub/dir/ectory"):
1880     # The mkdir failed, don't try to build.
1881     Exit(1)
1882 </example_commands>
1883 </summary>
1884 </scons_function>
1886 <scons_function name="File">
1887 <arguments>
1888 (name, [directory])
1889 </arguments>
1890 <summary>
1891 <para>
1892 Returns File Node(s).
1893 A File Node is an object that represents a file.
1894 <parameter>name</parameter>
1895 can be a relative or absolute path or a list of such paths.
1896 <parameter>directory</parameter>
1897 is an optional directory that will be used as the parent directory.
1898 If no
1899 <parameter>directory</parameter>
1900 is specified, the current script's directory is used as the parent.
1901 </para>
1903 <para>
1905 <parameter>name</parameter>
1906 is a single pathname, the corresponding node is returned.
1908 <parameter>name</parameter>
1909 is a list, SCons returns a list of nodes.
1910 Construction variables are expanded in
1911 <parameter>name</parameter>.
1912 </para>
1914 <para>
1915 File Nodes can be used anywhere you
1916 would supply a string as a file name
1917 to a Builder method or function.
1918 File Nodes have attributes and methods
1919 that are useful in many situations;
1920 see manpage section "Filesystem Nodes"
1921 for more information.
1922 </para>
1923 </summary>
1924 </scons_function>
1926 <scons_function name="FindFile">
1927 <arguments>
1928 (file, dirs)
1929 </arguments>
1930 <summary>
1931 <para>
1932 Search for
1933 <parameter>file</parameter>
1934 in the path specified by
1935 <parameter>dirs</parameter>.
1936 <parameter>dirs</parameter>
1937 may be a list of directory names or a single directory name.
1938 In addition to searching for files that exist in the filesystem,
1939 this function also searches for derived files
1940 that have not yet been built.
1941 </para>
1943 <para>
1944 Example:
1945 </para>
1947 <example_commands>
1948 foo = env.FindFile('foo', ['dir1', 'dir2'])
1949 </example_commands>
1950 </summary>
1951 </scons_function>
1953 <scons_function name="FindInstalledFiles">
1954 <arguments>
1956 </arguments>
1957 <summary>
1958 <para>
1959 Returns the list of targets set up by the
1960 &b-link-Install;
1962 &b-link-InstallAs;
1963 builders.
1964 </para>
1966 <para>
1967 This function serves as a convenient method to select the contents of
1968 a binary package.
1969 </para>
1971 <para>
1972 Example:
1973 </para>
1975 <example_commands>
1976 Install('/bin', ['executable_a', 'executable_b'])
1978 # will return the file node list
1979 # ['/bin/executable_a', '/bin/executable_b']
1980 FindInstalledFiles()
1982 Install('/lib', ['some_library'])
1984 # will return the file node list
1985 # ['/bin/executable_a', '/bin/executable_b', '/lib/some_library']
1986 FindInstalledFiles()
1987 </example_commands>
1988 </summary>
1989 </scons_function>
1991 <scons_function name="FindSourceFiles">
1992 <arguments>
1993 (node='"."')
1994 </arguments>
1995 <summary>
1996 <para>
1997 Returns the list of nodes which serve as the source of the built files.
1998 It does so by inspecting the dependency tree starting at the optional
1999 argument
2000 <parameter>node</parameter>
2001 which defaults to the '"."'-node. It will then return all leaves of
2002 <parameter>node</parameter>.
2003 These are all children which have no further children.
2004 </para>
2006 <para>
2007 This function is a convenient method to select the contents of a Source
2008 Package.
2009 </para>
2011 <para>
2012 Example:
2013 </para>
2015 <example_commands>
2016 Program('src/main_a.c')
2017 Program('src/main_b.c')
2018 Program('main_c.c')
2020 # returns ['main_c.c', 'src/main_a.c', 'SConstruct', 'src/main_b.c']
2021 FindSourceFiles()
2023 # returns ['src/main_b.c', 'src/main_a.c' ]
2024 FindSourceFiles('src')
2025 </example_commands>
2027 <para>
2028 As you can see build support files (SConstruct in the above example)
2029 will also be returned by this function.
2030 </para>
2031 </summary>
2032 </scons_function>
2034 <scons_function name="Flatten">
2035 <arguments>
2036 (sequence)
2037 </arguments>
2038 <summary>
2039 <para>
2040 Takes a sequence (that is, a &Python; list or tuple)
2041 that may contain nested sequences
2042 and returns a flattened list containing
2043 all of the individual elements in any sequence.
2044 This can be helpful for collecting
2045 the lists returned by calls to Builders;
2046 other Builders will automatically
2047 flatten lists specified as input,
2048 but direct &Python; manipulation of
2049 these lists does not.
2050 </para>
2052 <para>
2053 Examples:
2054 </para>
2056 <example_commands>
2057 foo = Object('foo.c')
2058 bar = Object('bar.c')
2060 # Because `foo' and `bar' are lists returned by the Object() Builder,
2061 # `objects' will be a list containing nested lists:
2062 objects = ['f1.o', foo, 'f2.o', bar, 'f3.o']
2064 # Passing such a list to another Builder is all right because
2065 # the Builder will flatten the list automatically:
2066 Program(source = objects)
2068 # If you need to manipulate the list directly using &Python;, you need to
2069 # call Flatten() yourself, or otherwise handle nested lists:
2070 for object in Flatten(objects):
2071     print(str(object))
2072 </example_commands>
2073 </summary>
2074 </scons_function>
2076 <scons_function name="GetBuildPath">
2077 <arguments>
2078 (file, [...])
2079 </arguments>
2080 <summary>
2081 <para>
2082 Returns the
2083 &scons;
2084 path name (or names) for the specified
2085 <parameter>file</parameter>
2086 (or files).
2087 The specified
2088 <parameter>file</parameter>
2089 or files
2090 may be
2091 &scons;
2092 Nodes or strings representing path names.
2093 </para>
2094 </summary>
2095 </scons_function>
2097 <scons_function name="Glob">
2098 <arguments>
2099 (pattern, [ondisk=True, source=False, strings=False, exclude=None])
2100 </arguments>
2101 <summary>
2102 <para>
2103 Returns a possibly empty list of Nodes (or strings) that match
2104 pathname specification <parameter>pattern</parameter>.
2105 <parameter>pattern</parameter> can be absolute,
2106 top-relative,
2107 or (most commonly) relative to the directory of the current
2108 &SConscript; file.
2109 &f-Glob; matches both files stored on disk and Nodes
2110 which &SCons; already knows about, even if any corresponding
2111 file is not currently stored on disk.
2112 The evironment method form (&f-env-Glob;)
2113 performs string substition on
2114 <parameter>pattern</parameter>
2115 and returns whatever matches the resulting expanded pattern.
2116 The results are sorted, unlike for the similar &Python;
2117 <systemitem>glob.glob</systemitem> function,
2118 to ensure build order will be stable.
2119 </para>
2121 <para>
2122 <parameter>pattern</parameter>
2123 can contain POSIX-style shell metacharacters for matching:
2124 </para>
2126 <informaltable rowsep="1" colsep="1" frame="topbot">
2127 <tgroup cols="2">
2128 <thead>
2129   <row>
2130     <entry>Pattern</entry>
2131     <entry>Meaning</entry>
2132   </row>
2133 </thead>
2134 <tbody>
2135   <row>
2136     <entry><literal>*</literal></entry>
2137     <entry>matches everything</entry>
2138   </row>
2139   <row>
2140       <entry><literal>?</literal></entry>
2141       <entry>matches any single character</entry>
2142   </row>
2143   <row>
2144       <entry><literal>[seq]</literal></entry>
2145       <entry>matches any character in <emphasis>seq</emphasis>
2146       (can be a list or a range).</entry>
2147   </row>
2148   <row>
2149       <entry><literal>[!seq]</literal></entry>
2150       <entry>matches any character not in <emphasis>seq</emphasis></entry>
2151   </row>
2152 </tbody>
2153 </tgroup>
2154 </informaltable>
2156 <para>
2157 For a literal match, wrap the metacharacter in brackets to
2158 escape the normal behavior.
2159 For example, <literal>'[?]'</literal> matches the character
2160 <literal>'?'</literal>.
2161 </para>
2163 <para>
2164 Filenames starting with a dot are specially handled -
2165 they can only be matched by patterns that start with a dot
2166 (or have a dot immediately following a pathname separator
2167 character, or slash), they are not not matched by the metacharacters.
2168 Metacharacter matches also do not span directory separators.
2169 </para>
2171 <para>
2172 &f-Glob;
2173 understands repositories
2174 (see the
2175 &f-link-Repository;
2176 function)
2177 and source directories
2178 (see the
2179 &f-link-VariantDir;
2180 function)
2181 and returns a Node (or string, if so configured) match
2182 in the local (SConscript) directory
2183 if a matching Node is found
2184 anywhere in a corresponding
2185 repository or source directory.
2186 </para>
2188 <para>
2189 If the optional
2190 <parameter>ondisk</parameter>
2191 argument evaluates false,
2192 the search for matches on disk is disabled,
2193 and only matches from
2194 already-configured File or Dir Nodes are returned.
2195 The default is to return Nodes for
2196 matches on disk as well.
2197 </para>
2199 <para>
2200 If the optional
2201 <parameter>source</parameter>
2202 argument evaluates true,
2203 and the local directory is a variant directory,
2204 then &f-Glob; returnes Nodes from
2205 the corresponding source directory,
2206 rather than the local directory.
2207 <!-- XXX what about generated files that don't exist in src but will be sources? -->
2208 </para>
2210 <para>
2211 If the optional
2212 <parameter>strings</parameter>
2213 argument evaluates true,
2214 &f-Glob;
2215 returns matches as strings, rather than Nodes.
2216 The returned strings will be relative to
2217 the local (SConscript) directory.
2218 (Note that while this may make it easier to perform
2219 arbitrary manipulation of file names,
2220 it loses the context &SCons; would have in the Node,
2221 so if the returned strings are
2222 passed to a different
2223 &SConscript;
2224 file,
2225 any Node translation there will be relative
2226 to that
2227 &SConscript;
2228 directory,
2229 not to the original
2230 &SConscript;
2231 directory.)
2232 </para>
2234 <para>
2235 The optional
2236 <parameter>exclude</parameter>
2237 argument may be set to a pattern or a list of patterns
2238 descibing files or directories
2239 to filter out of the match list.
2240 Elements matching a least one specified pattern will be excluded.
2241 These patterns use the same syntax as for
2242 <parameter>pattern</parameter>.
2243 </para>
2245 <para>
2246 Examples:
2247 </para>
2249 <example_commands>
2250 Program("foo", Glob("*.c"))
2251 Zip("/tmp/everything", Glob(".??*") + Glob("*"))
2252 sources = Glob("*.cpp", exclude=["os_*_specific_*.cpp"]) \
2253     + Glob("os_%s_specific_*.cpp" % currentOS)
2254 </example_commands>
2256 </summary>
2257 </scons_function>
2259 <!--
2260 <scons_function name="GlobalBuilders">
2261 <arguments signature="global">
2262 (flag)
2263 </arguments>
2264 <summary>
2265 <para>
2266 When
2267 <parameter>flag</parameter>
2268 is non-zero,
2269 adds the names of the default builders
2270 (Program, Library, etc.)
2271 to the global name space
2272 so they can be called without an explicit construction environment.
2273 (This is the default.)
2274 When
2275 <parameter>flag</parameter>
2276 is zero,
2277 the names of the default builders are removed
2278 from the global name space
2279 so that an explicit construction environment is required
2280 to call all builders.
2281 </para>
2282 </summary>
2283 </scons_function>
2286 <scons_function name="Ignore">
2287 <arguments>
2288 (target, dependency)
2289 </arguments>
2290 <summary>
2291 <para>
2292 Ignores <parameter>dependency</parameter>
2293 when deciding if
2294 <parameter>target</parameter> needs to be rebuilt.
2295 <parameter>target</parameter> and
2296 <parameter>dependency</parameter>
2297 can each be a single filename or Node
2298 or a list of filenames or Nodes.
2299 </para>
2301 <para>
2302 &f-Ignore; can also be used to
2303 remove a target from the default build
2304 by specifying the directory the target will be built in as
2305 <parameter>target</parameter>
2306 and the file you want to skip selecting for building as
2307 <parameter>dependency</parameter>.
2308 Note that this only removes the target from
2309 the default target selection algorithm:
2310 if it is a dependency of another object being
2311 built &SCons; still builds it normally.
2312 See the third and forth examples below.
2313 </para>
2315 <para>
2316 Examples:
2317 </para>
2319 <example_commands>
2320 env.Ignore('foo', 'foo.c')
2321 env.Ignore('bar', ['bar1.h', 'bar2.h'])
2322 env.Ignore('.', 'foobar.obj')
2323 env.Ignore('bar', 'bar/foobar.obj')
2324 </example_commands>
2325 </summary>
2326 </scons_function>
2328 <scons_function name="Literal">
2329 <arguments>
2330 (string)
2331 </arguments>
2332 <summary>
2333 <para>
2334 The specified
2335 <parameter>string</parameter>
2336 will be preserved as-is
2337 and not have construction variables expanded.
2338 </para>
2339 </summary>
2340 </scons_function>
2342 <scons_function name="Local">
2343 <arguments>
2344 (targets)
2345 </arguments>
2346 <summary>
2347 <para>
2348 The specified
2349 <parameter>targets</parameter>
2350 will have copies made in the local tree,
2351 even if an already up-to-date copy
2352 exists in a repository.
2353 Returns a list of the target Node or Nodes.
2354 </para>
2355 </summary>
2356 </scons_function>
2358 <!--
2359 <scons_function name="MergeShellPaths">
2360 <arguments signature="env">
2361 ( arg ", [" prepend ])
2362 </arguments>
2363 <summary>
2364 <para>
2365 Merges the elements of the specified
2366 <parameter>arg</parameter>,
2367 which must be a dictionary, to the construction
2368 environment's copy of the shell environment
2369 in env['ENV'].
2370 (This is the environment which is passed
2371 to subshells spawned by SCons.)
2372 Note that
2373 <parameter>arg</parameter>
2374 must be a single value,
2375 so multiple strings must
2376 be passed in as a list,
2377 not as separate arguments to
2378 &f-MergeShellPaths;.
2379 </para>
2381 <para>
2382 New values are prepended to the environment variable by default,
2383 unless prepend=0 is specified.
2384 Duplicate values are always eliminated,
2385 since this function calls
2386 &f-link-AppendENVPath;
2388 &f-link-PrependENVPath;
2389 depending on the
2390 <parameter>prepend</parameter>
2391 argument.  See those functions for more details.
2392 </para>
2394 <para>
2395 Examples:
2396 </para>
2398 <example_commands>
2399 # Prepend a path to the shell PATH.
2400 env.MergeShellPaths({'PATH': '/usr/local/bin'})
2401 # Append two dirs to the shell INCLUDE.
2402 env.MergeShellPaths({'INCLUDE': ['c:/inc1', 'c:/inc2']}, prepend=0)
2403 </example_commands>
2404 </summary>
2405 </scons_function>
2408 <scons_function name="MergeFlags">
2409 <arguments signature="env">
2410 (arg, [unique])
2411 </arguments>
2412 <summary>
2413 <para>
2414 Merges values from
2415 <parameter>arg</parameter>
2416 into &consvars; in <parameter>env</parameter>.
2417 If <parameter>arg</parameter> is a dictionary,
2418 each key-value pair represents a
2419 &consvar; name and the corresponding flags to merge.
2420 If <parameter>arg</parameter>
2421 is not a dictionary,
2422 &MergeFlags; attempts to convert it to one
2423 before the values are merged.
2424 &f-link-env-ParseFlags; is used for this,
2425 so values to be converted are subject to the
2426 same limitations:
2427 &ParseFlags; has knowledge of which &consvars; certain
2428 flags should go to, but not all;
2429 and only for GCC and compatible compiler chains.
2430 <parameter>arg</parameter>
2431 must be a single object,
2432 so to pass multiple strings,
2433 enclose them in a list.
2434 </para>
2436 <para>
2437 If <literal>unique</literal> is true (the default),
2438 duplicate values are not retained.
2439 In case of duplication,
2440 any &consvar; names that end in
2441 <literal>PATH</literal>
2442 keep the left-most value so the
2443 path searcb order is not altered.
2444 All other &consvars; keep
2445 the right-most value.
2446 If <literal>unique</literal> is false,
2447 values are appended even if they are duplicates.
2448 </para>
2450 <para>
2451 Examples:
2452 </para>
2454 <example_commands>
2455 # Add an optimization flag to $CCFLAGS.
2456 env.MergeFlags({'CCFLAGS': '-O3'})
2458 # Combine the flags returned from running pkg-config with an optimization
2459 # flag and merge the result into the construction variables.
2460 env.MergeFlags(['!pkg-config gtk+-2.0 --cflags', '-O3'])
2462 # Combine an optimization flag with the flags returned from running pkg-config
2463 # for two distinct packages and merge into the construction variables.
2464 env.MergeFlags(
2465     [
2466         '-O3',
2467         '!pkg-config gtk+-2.0 --cflags --libs',
2468         '!pkg-config libpng12 --cflags --libs',
2469     ]
2471 </example_commands>
2472 </summary>
2473 </scons_function>
2475 <scons_function name="NoCache">
2476 <arguments>
2477 (target, ...)
2478 </arguments>
2479 <summary>
2480 <para>
2481 Specifies a list of files which should
2482 <emphasis>not</emphasis>
2483 be cached whenever the
2484 &f-link-CacheDir;
2485 method has been activated.
2486 The specified targets may be a list
2487 or an individual target.
2488 </para>
2490 <para>
2491 Multiple files should be specified
2492 either as separate arguments to the
2493 &f-NoCache;
2494 method, or as a list.
2495 &f-NoCache;
2496 will also accept the return value of any of the construction environment
2497 Builder methods.
2498 </para>
2500 <para>
2501 Calling
2502 &f-NoCache;
2503 on directories and other non-File Node types has no effect because
2504 only File Nodes are cached.
2505 </para>
2507 <para>
2508 Examples:
2509 </para>
2511 <example_commands>
2512 NoCache('foo.elf')
2513 NoCache(env.Program('hello', 'hello.c'))
2514 </example_commands>
2515 </summary>
2516 </scons_function>
2518 <scons_function name="NoClean">
2519 <arguments>
2520 (target, ...)
2521 </arguments>
2522 <summary>
2523 <para>
2524 Specifies a list of files or directories which should
2525 <emphasis>not</emphasis>
2526 be removed whenever the targets (or their dependencies)
2527 are specified with the
2528 <option>-c</option>
2529 command line option.
2530 The specified targets may be a list
2531 or an individual target.
2532 Multiple calls to
2533 &f-NoClean;
2534 are legal,
2535 and prevent each specified target
2536 from being removed by calls to the
2537 <option>-c</option>
2538 option.
2539 </para>
2541 <para>
2542 Multiple files or directories should be specified
2543 either as separate arguments to the
2544 &f-NoClean;
2545 method, or as a list.
2546 &f-NoClean;
2547 will also accept the return value of any of the construction environment
2548 Builder methods.
2549 </para>
2551 <para>
2552 Calling
2553 &f-NoClean;
2554 for a target overrides calling
2555 &f-link-Clean;
2556 for the same target,
2557 and any targets passed to both functions will
2558 <emphasis>not</emphasis>
2559 be removed by the
2560 <option>-c</option>
2561 option.
2562 </para>
2564 <para>
2565 Examples:
2566 </para>
2568 <example_commands>
2569 NoClean('foo.elf')
2570 NoClean(env.Program('hello', 'hello.c'))
2571 </example_commands>
2572 </summary>
2573 </scons_function>
2575 <scons_function name="ParseConfig">
2576 <arguments signature="env">
2577 (command, [function, unique])
2578 </arguments>
2579 <summary>
2580 <para>
2581 Updates the current &consenv; with the values extracted
2582 from the output of running external <parameter>command</parameter>,
2583 by passing it to a helper <parameter>function</parameter>.
2584 <parameter>command</parameter> may be a string
2585 or a list of strings representing the command and
2586 its arguments.
2587 If <parameter>function</parameter>
2588 is omitted or <constant>None</constant>,
2589 &f-link-env-MergeFlags; is used.
2590 By default,
2591 duplicate values are not
2592 added to any construction variables;
2593 you can specify
2594 <parameter>unique=False</parameter>
2595 to allow duplicate values to be added.
2596 </para>
2598 <para>
2599 <parameter>command</parameter> is executed using the
2600 SCons execution environment (that is, the &consvar;
2601 &cv-link-ENV; in the current &consenv;).
2602 If <parameter>command</parameter> needs additional information
2603 to operate properly, that needs to be set in the execution environment.
2604 For example, <command>pkg-config</command>
2605 may need a custom value set in the <envar>PKG_CONFIG_PATH</envar>
2606 environment variable.
2607 </para>
2609 <para>
2610 &f-env-MergeFlags; needs to understand
2611 the output produced by <parameter>command</parameter>
2612 in order to distribute it to appropriate &consvars;.
2613 &f-env-MergeFlags; uses a separate function to
2614 do that processing -
2615 see &f-link-env-ParseFlags; for the details, including a
2616 a table of options and corresponding construction variables.
2617 To provide alternative processing of the output of
2618 <parameter>command</parameter>,
2619 you can suppply a custom
2620 <parameter>function</parameter>,
2621 which must accept three arguments:
2622 the &consenv; to modify,
2623 a string argument containing the output from running
2624 <parameter>command</parameter>,
2625 and the optional
2626 <parameter>unique</parameter> flag.
2627 </para>
2628 </summary>
2629 </scons_function>
2631 <scons_function name="ParseDepends">
2632 <arguments>
2633 (filename, [must_exist, only_one])
2634 </arguments>
2635 <summary>
2636 <para>
2637 Parses the contents of <parameter>filename</parameter>
2638 as a list of dependencies in the style of
2639 &Make;
2641 <application>mkdep</application>,
2642 and explicitly establishes all of the listed dependencies.
2643 </para>
2645 <para>
2646 By default,
2647 it is not an error
2648 if <parameter>filename</parameter>
2649 does not exist.
2650 The optional
2651 <parameter>must_exist</parameter>
2652 argument may be set to <constant>True</constant>
2653 to have &SCons;
2654 raise an exception if the file does not exist,
2655 or is otherwise inaccessible.
2656 </para>
2658 <para>
2659 The optional
2660 <parameter>only_one</parameter>
2661 argument may be set to <constant>True</constant>
2662 to have &SCons; raise an exception
2663 if the file contains dependency
2664 information for more than one target.
2665 This can provide a small sanity check
2666 for files intended to be generated
2667 by, for example, the
2668 <literal>gcc -M</literal>
2669 flag,
2670 which should typically only
2671 write dependency information for
2672 one output file into a corresponding
2673 <filename>.d</filename>
2674 file.
2675 </para>
2677 <para>
2678 <parameter>filename</parameter>
2679 and all of the files listed therein
2680 will be interpreted relative to
2681 the directory of the
2682 &SConscript;
2683 file which calls the
2684 &f-ParseDepends;
2685 function.
2686 </para>
2687 </summary>
2688 </scons_function>
2690 <scons_function name="ParseFlags">
2691 <arguments signature="env">
2692 (flags, ...)
2693 </arguments>
2694 <summary>
2695 <para>
2696 Parses one or more strings containing
2697 typical command-line flags for GCC-style tool chains
2698 and returns a dictionary with the flag values
2699 separated into the appropriate SCons construction variables.
2700 Intended as a companion to the
2701 &f-link-env-MergeFlags;
2702 method, but allows for the values in the returned dictionary
2703 to be modified, if necessary,
2704 before merging them into the construction environment.
2705 (Note that
2706 &f-env-MergeFlags;
2707 will call this method if its argument is not a dictionary,
2708 so it is usually not necessary to call
2709 &f-env-ParseFlags;
2710 directly unless you want to manipulate the values.)
2711 </para>
2713 <para>
2714 If the first character in any string is
2715 an exclamation mark (<literal>!</literal>),
2716 the rest of the string is executed as a command,
2717 and the output from the command is
2718 parsed as GCC tool chain command-line flags
2719 and added to the resulting dictionary.
2720 This can be used to call a <filename>*-config</filename>
2721 command typical of the POSIX programming environment
2722 (for example,
2723 <command>pkg-config</command>).
2724 Note that such a command is executed using the
2725 SCons execution environment;
2726 if the command needs additional information,
2727 that information needs to be explicitly provided.
2728 See &f-link-ParseConfig; for more details.
2729 </para>
2731 <para>
2732 Flag values are translated according to the prefix found,
2733 and added to the following construction variables:
2734 </para>
2736 <example_commands>
2737 -arch                   CCFLAGS, LINKFLAGS
2738 -D                      CPPDEFINES
2739 -framework              FRAMEWORKS
2740 -frameworkdir=          FRAMEWORKPATH
2741 -fmerge-all-constants   CCFLAGS, LINKFLAGS
2742 -fopenmp                CCFLAGS, LINKFLAGS
2743 -fsanitize              CCFLAGS, LINKFLAGS
2744 -include                CCFLAGS
2745 -imacros                CCFLAGS
2746 -isysroot               CCFLAGS, LINKFLAGS
2747 -isystem                CCFLAGS
2748 -iquote                 CCFLAGS
2749 -idirafter              CCFLAGS
2750 -I                      CPPPATH
2751 -l                      LIBS
2752 -L                      LIBPATH
2753 -mno-cygwin             CCFLAGS, LINKFLAGS
2754 -mwindows               LINKFLAGS
2755 -openmp                 CCFLAGS, LINKFLAGS
2756 -pthread                CCFLAGS, LINKFLAGS
2757 -std=                   CFLAGS
2758 -stdlib=                CXXFLAGS
2759 -Wa,                    ASFLAGS, CCFLAGS
2760 -Wl,-rpath=             RPATH
2761 -Wl,-R,                 RPATH
2762 -Wl,-R                  RPATH
2763 -Wl,                    LINKFLAGS
2764 -Wp,                    CPPFLAGS
2765 -                       CCFLAGS
2766 +                       CCFLAGS, LINKFLAGS
2767 </example_commands>
2769 <para>
2770 Any other strings not associated with options
2771 are assumed to be the names of libraries
2772 and added to the
2773 &cv-LIBS;
2774 construction variable.
2775 </para>
2777 <para>
2778 Examples (all of which produce the same result):
2779 </para>
2781 <example_commands>
2782 dict = env.ParseFlags('-O2 -Dfoo -Dbar=1')
2783 dict = env.ParseFlags('-O2', '-Dfoo', '-Dbar=1')
2784 dict = env.ParseFlags(['-O2', '-Dfoo -Dbar=1'])
2785 dict = env.ParseFlags('-O2', '!echo -Dfoo -Dbar=1')
2786 </example_commands>
2787 </summary>
2788 </scons_function>
2790 <scons_function name="Platform">
2791 <arguments signature="global">
2792 (plat)
2793 </arguments>
2794 <arguments signature="env">
2795 (plat)
2796 </arguments>
2797 <summary>
2798 <para>
2799 When called as a global function,
2800 returns a callable platform object
2801 selected by <parameter>plat</parameter>
2802 (defaults to the detected platform for the
2803 current system)
2804 that can be used to initialize
2805 a construction environment by passing it as the
2806 <parameter>platform</parameter> keyword argument to the
2807 &f-link-Environment; function.
2808 </para>
2810 <para>
2811 Example:
2812 </para>
2814 <example_commands>
2815 env = Environment(platform=Platform('win32'))
2816 </example_commands>
2818 <para>
2819 When called as a method of an environment,
2820 calls the platform object indicated by
2821 <parameter>plat</parameter>
2822 to update that environment.
2823 </para>
2825 <example_commands>
2826 env.Platform('posix')
2827 </example_commands>
2829 <para>
2830 See the manpage section "Construction Environments" for more details.
2831 </para>
2832 </summary>
2833 </scons_function>
2835 <scons_function name="Prepend">
2836 <arguments signature="env">
2837 (key=val, [...])
2838 </arguments>
2839 <summary>
2840 <para>
2841 Prepend values to &consvars; in the current &consenv;,
2842 Works like &f-link-env-Append; (see for details),
2843 except that values are added to the front,
2844 rather than the end, of any existing value of the &consvar;
2845 </para>
2847 <para>
2848 Example:
2849 </para>
2851 <example_commands>
2852 env.Prepend(CCFLAGS='-g ', FOO=['foo.yyy'])
2853 </example_commands>
2855 <para>
2856 See also &f-link-env-Append;,
2857 &f-link-env-AppendUnique;
2858 and &f-link-env-PrependUnique;.
2859 </para>
2860 </summary>
2861 </scons_function>
2863 <scons_function name="PrependENVPath">
2864 <arguments signature="env">
2865 (name, newpath, [envname, sep, delete_existing=True])
2866 </arguments>
2867 <summary>
2868 <para>
2869 Prepend path elements specified by <parameter>newpath</parameter>
2870 to the given search path string or list <parameter>name</parameter>
2871 in mapping <parameter>envname</parameter> in the &consenv;.
2872 Supplying <parameter>envname</parameter> is optional:
2873 the default is the execution environment &cv-link-ENV;.
2874 Optional <parameter>sep</parameter> is used as the search path separator,
2875 the default is the platform's separator (<systemitem>os.pathsep</systemitem>).
2876 A path element will only appear once.
2877 Any duplicates in <parameter>newpath</parameter> are dropped,
2878 keeping the first appearing (to preserve path order).
2879 If <parameter>delete_existing</parameter>
2880 is <constant>False</constant>
2881 any addition duplicating an existing path element is ignored;
2882 if <parameter>delete_existing</parameter>
2883 is <constant>True</constant> (the default) the existing value will
2884 be dropped and the path element will be inserted at the beginning.
2885 To help maintain uniqueness all paths are normalized (using
2886 <systemitem>os.path.normpath</systemitem>
2888 <systemitem>os.path.normcase</systemitem>).
2889 </para>
2891 <para>
2892 Example:
2893 </para>
2895 <example_commands>
2896 print('before:', env['ENV']['INCLUDE'])
2897 include_path = '/foo/bar:/foo'
2898 env.PrependENVPath('INCLUDE', include_path)
2899 print('after:', env['ENV']['INCLUDE'])
2900 </example_commands>
2902 <para>Yields:</para>
2904 <screen>
2905 before: /biz:/foo
2906 after: /foo/bar:/foo:/biz
2907 </screen>
2909 <para>
2910 See also &f-link-env-AppendENVPath;.
2911 </para>
2913 </summary>
2914 </scons_function>
2916 <scons_function name="PrependUnique">
2917 <arguments signature="env">
2918 (key=val, [...], [delete_existing=False])
2919 </arguments>
2920 <summary>
2921 <para>
2922 Prepend values to &consvars; in the current &consenv;,
2923 maintaining uniqueness.
2924 Works like &f-link-env-Append;,
2925 except that values are added to the front,
2926 rather than the end, of the &consvar;,
2927 and values that would become duplicates
2928 are not added.
2929 If <parameter>delete_existing</parameter>
2930 is set to a true value, then for any duplicate,
2931 the existing instance of <parameter>val</parameter> is first removed,
2932 then <parameter>val</parameter> is inserted,
2933 having the effect of moving it to the front.
2934 </para>
2936 <para>
2937 Example:
2938 </para>
2940 <example_commands>
2941 env.PrependUnique(CCFLAGS='-g', FOO=['foo.yyy'])
2942 </example_commands>
2944 <para>
2945 See also &f-link-env-Append;,
2946 &f-link-env-AppendUnique;
2947 and &f-link-env-Prepend;.
2948 </para>
2949 </summary>
2950 </scons_function>
2952 <scons_function name="PyPackageDir">
2953 <arguments>
2954 (modulename)
2955 </arguments>
2956 <summary>
2957 <para>
2958 Finds the location of <parameter>modulename</parameter>,
2959 which can be a string or a sequence of strings,
2960 each representing the name of a &Python; module.
2961 Construction variables are expanded in
2962 <parameter>modulename</parameter>.
2963 Returns a Directory Node (see &f-link-Dir;),
2964 or a list of Directory Nodes if
2965 <parameter>modulename</parameter> is a sequence.
2966 <literal>None</literal> is returned for any module not found.
2967 </para>
2969 <para>
2970 When a Tool module which is installed as a
2971 &Python; module is used, you need
2972 to specify a <parameter>toolpath</parameter> argument to
2973 &f-link-Tool;,
2974 &f-link-Environment;
2975 or &f-link-Clone;,
2976 as tools outside the standard project locations
2977 (<filename>site_scons/site_tools</filename>)
2978 will not be found otherwise.
2979 Using &f-PyPackageDir; allows this path to be
2980 discovered at runtime instead of hardcoding the path.
2981 </para>
2983 <para>
2984 Example:
2985 </para>
2987 <example_commands>
2988 env = Environment(
2989     tools=["default", "ExampleTool"],
2990     toolpath=[PyPackageDir("example_tool")]
2992 </example_commands>
2993 </summary>
2994 </scons_function>
2996 <scons_function name="Replace">
2997 <arguments signature="env">
2998 (key=val, [...])
2999 </arguments>
3000 <summary>
3001 <para>
3002 Replaces construction variables in the Environment
3003 with the specified keyword arguments.
3004 </para>
3006 <para>
3007 Example:
3008 </para>
3010 <example_commands>
3011 env.Replace(CCFLAGS='-g', FOO='foo.xxx')
3012 </example_commands>
3013 </summary>
3014 </scons_function>
3016 <scons_function name="Repository">
3017 <arguments>
3018 (directory)
3019 </arguments>
3020 <summary>
3021 <para>
3022 Specifies that
3023 <parameter>directory</parameter>
3024 is a repository to be searched for files.
3025 Multiple calls to
3026 &f-Repository;
3027 are legal,
3028 and each one adds to the list of
3029 repositories that will be searched.
3030 </para>
3032 <para>
3034 &scons;,
3035 a repository is a copy of the source tree,
3036 from the top-level directory on down,
3037 which may contain
3038 both source files and derived files
3039 that can be used to build targets in
3040 the local source tree.
3041 The canonical example would be an
3042 official source tree maintained by an integrator.
3043 If the repository contains derived files,
3044 then the derived files should have been built using
3045 &scons;,
3046 so that the repository contains the necessary
3047 signature information to allow
3048 &scons;
3049 to figure out when it is appropriate to
3050 use the repository copy of a derived file,
3051 instead of building one locally.
3052 </para>
3054 <para>
3055 Note that if an up-to-date derived file
3056 already exists in a repository,
3057 &scons;
3058 will
3059 <emphasis>not</emphasis>
3060 make a copy in the local directory tree.
3061 In order to guarantee that a local copy
3062 will be made,
3063 use the
3064 &f-link-Local;
3065 method.
3066 </para>
3067 </summary>
3068 </scons_function>
3070 <scons_function name="Requires">
3071 <arguments>
3072 (target, prerequisite)
3073 </arguments>
3074 <summary>
3075 <para>
3076 Specifies an order-only relationship
3077 between <parameter>target</parameter>
3078 and <parameter>prerequisite</parameter>.
3079 The prerequisites
3080 will be (re)built, if necessary,
3081 <emphasis>before</emphasis>
3082 the target file(s),
3083 but the target file(s) do not actually
3084 depend on the prerequisites
3085 and will not be rebuilt simply because
3086 the prerequisite file(s) change.
3087 <parameter>target</parameter> and
3088 <parameter>prerequisite</parameter> may each
3089 be a string or Node, or a list of strings or Nodes.
3090 If there are multiple
3091 <parameter>target</parameter> values,
3092 the prerequisite(s) are added to each one.
3093 Returns a list of the affected target nodes.
3094 </para>
3096 <para>
3097 Example:
3098 </para>
3100 <example_commands>
3101 env.Requires('foo', 'file-that-must-be-built-before-foo')
3102 </example_commands>
3103 </summary>
3104 </scons_function>
3106 <scons_function name="Scanner">
3107 <arguments>
3108 (function, [name, argument, skeys, path_function, node_class, node_factory, scan_check, recursive])
3109 </arguments>
3110 <summary>
3111 <para>
3112 Creates a Scanner object for
3113 the specified
3114 <parameter>function</parameter>.
3115 See manpage section "Scanner Objects"
3116 for a complete explanation of the arguments and behavior.
3117 </para>
3118 </summary>
3119 </scons_function>
3121 <scons_function name="SConscriptChdir">
3122 <arguments signature="global">
3123 (value)
3124 </arguments>
3125 <summary>
3126 <para>
3127 By default,
3128 &scons;
3129 changes its working directory
3130 to the directory in which each
3131 subsidiary SConscript file lives
3132 while reading and processing that script.
3133 This behavior may be disabled
3134 by specifying an argument which
3135 evaluates false, in which case
3136 &scons;
3137 will stay in the top-level directory
3138 while reading all SConscript files.
3139 (This may be necessary when building from repositories,
3140 when all the directories in which SConscript files may be found
3141 don't necessarily exist locally.)
3142 You may enable and disable
3143 this ability by calling
3144 &f-SConscriptChdir;
3145 multiple times.
3146 </para>
3148 <para>
3149 Example:
3150 </para>
3152 <example_commands>
3153 SConscriptChdir(False)
3154 SConscript('foo/SConscript')    # will not chdir to foo
3155 SConscriptChdir(True)
3156 SConscript('bar/SConscript')    # will chdir to bar
3157 </example_commands>
3158 </summary>
3159 </scons_function>
3161 <scons_function name="SConsignFile">
3162 <arguments>
3163 ([name, dbm_module])
3164 </arguments>
3165 <summary>
3166 <para>
3167 Specify where to store the &SCons; file signature database,
3168 and which database format to use.
3169 This may be useful to specify alternate
3170 database files and/or file locations for different types of builds.
3171 </para>
3172 <para>
3173 The optional <parameter>name</parameter> argument
3174 is the base name of the database file(s).
3175 If not an absolute path name,
3176 these are placed relative to the directory containing the
3177 top-level &SConstruct; file.
3178 The default is
3179 <filename>.sconsign</filename>.
3180 The actual database file(s) stored on disk
3181 may have an appropriate suffix appended
3182 by the chosen
3183 <parameter>dbm_module</parameter>
3184 </para>
3185 <para>
3186 The optional <parameter>dbm_module</parameter>
3187 argument specifies which
3188 &Python; database module to use
3189 for reading/writing the file.
3190 The module must be imported first;
3191 then the imported module name
3192 is passed as the argument.
3193 The default is a custom
3194 <systemitem>SCons.dblite</systemitem>
3195 module that uses pickled
3196 &Python; data structures,
3197 which works on all &Python; versions.
3198 See documentation of the &Python;
3199 <systemitem>dbm</systemitem> module
3200 for other available types.
3201 </para>
3202 <para>
3203 If called with no arguments,
3204 the database will default to
3205 <filename>.sconsign.dblite</filename>
3206 in the top directory of the project,
3207 which is also the default if
3208 if &f-SConsignFile; is not called.
3209 </para>
3210 <para>
3211 The setting is global, so the only difference
3212 between the global function and the environment method form
3213 is variable expansion on <parameter>name</parameter>.
3214 There should only be one active call to this
3215 function/method in a given build setup.
3216 </para>
3217 <para>
3219 <parameter>name</parameter>
3220 is set to
3221 <constant>None</constant>,
3222 &scons;
3223 will store file signatures
3224 in a separate
3225 <filename>.sconsign</filename>
3226 file in each directory,
3227 not in a single combined database file.
3228 This is a backwards-compatibility meaure to support
3229 what was the default behavior
3230 prior to &SCons; 0.97 (i.e. before 2008).
3231 Use of this mode is discouraged and may be
3232 deprecated in a future &SCons; release.
3233 </para>
3235 <para>
3236 Examples:
3237 </para>
3239 <example_commands>
3240 # Explicitly stores signatures in ".sconsign.dblite"
3241 # in the top-level SConstruct directory (the default behavior).
3242 SConsignFile()
3244 # Stores signatures in the file "etc/scons-signatures"
3245 # relative to the top-level SConstruct directory.
3246 # SCons will add a database suffix to this name.
3247 SConsignFile("etc/scons-signatures")
3249 # Stores signatures in the specified absolute file name.
3250 # SCons will add a database suffix to this name.
3251 SConsignFile("/home/me/SCons/signatures")
3253 # Stores signatures in a separate .sconsign file
3254 # in each directory.
3255 SConsignFile(None)
3257 # Stores signatures in a GNU dbm format .sconsign file
3258 import dbm.gnu
3259 SConsignFile(dbm_module=dbm.gnu)
3260 </example_commands>
3261 </summary>
3262 </scons_function>
3264 <scons_function name="SetDefault">
3265 <arguments signature="env">
3266 (key=val, [...])
3267 </arguments>
3268 <summary>
3269 <para>
3270 Sets construction variables to default values specified with the keyword
3271 arguments if (and only if) the variables are not already set.
3272 The following statements are equivalent:
3273 </para>
3275 <example_commands>
3276 env.SetDefault(FOO='foo')
3277 if 'FOO' not in env:
3278     env['FOO'] = 'foo'
3279 </example_commands>
3280 </summary>
3281 </scons_function>
3283 <scons_function name="SideEffect">
3284 <arguments>
3285 (side_effect, target)
3286 </arguments>
3287 <summary>
3288 <para>
3289 Declares
3290 <parameter>side_effect</parameter>
3291 as a side effect of building
3292 <parameter>target</parameter>.
3293 Both
3294 <parameter>side_effect</parameter>
3296 <parameter>target</parameter>
3297 can be a list, a file name, or a node.
3298 A side effect is a target file that is created or updated
3299 as a side effect of building other targets.
3300 For example, a Windows PDB
3301 file is created as a side effect of building the .obj
3302 files for a static library,
3303 and various log files are created updated
3304 as side effects of various TeX commands.
3305 If a target is a side effect of multiple build commands,
3306 &scons;
3307 will ensure that only one set of commands
3308 is executed at a time.
3309 Consequently, you only need to use this method
3310 for side-effect targets that are built as a result of
3311 multiple build commands.
3312 </para>
3314 <para>
3315 Because multiple build commands may update
3316 the same side effect file,
3317 by default the
3318 <parameter>side_effect</parameter>
3319 target is
3320 <emphasis>not</emphasis>
3321 automatically removed
3322 when the
3323 <parameter>target</parameter>
3324 is removed by the
3325 <option>-c</option>
3326 option.
3327 (Note, however, that the
3328 <parameter>side_effect</parameter>
3329 might be removed as part of
3330 cleaning the directory in which it lives.)
3331 If you want to make sure the
3332 <parameter>side_effect</parameter>
3333 is cleaned whenever a specific
3334 <parameter>target</parameter>
3335 is cleaned,
3336 you must specify this explicitly
3337 with the
3338 &f-link-Clean;
3340 &f-env-Clean;
3341 function.
3342 </para>
3344 <para>
3345 This function returns the list of side effect Node objects that were successfully added.
3346 If the list of side effects contained any side effects that had already been added,
3347 they are not added and included in the returned list.
3348 </para>
3349 </summary>
3350 </scons_function>
3352 <scons_function name="Split">
3353 <arguments>(arg)</arguments>
3354 <summary>
3355 <para>
3356 If <parameter>arg</parameter> is a string,
3357 splits on whitespace and returns a list of
3358 strings without whitespace.
3359 This mode is the most common case,
3360 and can be used to split a list of filenames
3361 (for example) rather than having to type them as a
3362 list of individually quoted words.
3363 If <parameter>arg</parameter> is a list or tuple
3364 returns the list or tuple unchanged.
3365 If <parameter>arg</parameter> is any other type of object,
3366 returns a list containing just the object.
3367 These non-string cases do not actually do any spliting,
3368 but allow an argument variable to be passed to
3369 &f-Split; without having to first check its type.
3370 </para>
3372 <para>
3373 Example:
3374 </para>
3376 <example_commands>
3377 files = Split("f1.c f2.c f3.c")
3378 files = env.Split("f4.c f5.c f6.c")
3379 files = Split("""
3380     f7.c
3381     f8.c
3382     f9.c
3383 """)
3384 </example_commands>
3385 </summary>
3386 </scons_function>
3388 <scons_function name="subst">
3389 <arguments signature="env">
3390 (input, [raw, target, source, conv])
3391 </arguments>
3392 <summary>
3393 <para>
3394 Performs &consvar; interpolation
3395 (<firstterm>substitution</firstterm>)
3396 on <parameter>input</parameter>,
3397 which can be a string or a sequence.
3398 Substitutable elements take the form
3399 <literal>${<replaceable>expression</replaceable>}</literal>,
3400 although if there is no ambiguity in recognizing the element,
3401 the braces can be omitted.
3402 A literal <emphasis role="bold">$</emphasis> can be entered by
3403 using <emphasis role="bold">$$</emphasis>.
3404 </para>
3406 <para>
3407 By default,
3408 leading or trailing white space will
3409 be removed from the result,
3410 and all sequences of white space
3411 will be compressed to a single space character.
3412 Additionally, any
3413 <literal>$(</literal>
3415 <literal>$)</literal>
3416 character sequences will be stripped from the returned string,
3417 The optional
3418 <parameter>raw</parameter>
3419 argument may be set to
3420 <literal>1</literal>
3421 if you want to preserve white space and
3422 <literal>$(</literal>-<literal>$)</literal>
3423 sequences.
3425 <parameter>raw</parameter>
3426 argument may be set to
3427 <literal>2</literal>
3428 if you want to additionally discard
3429 all characters between any
3430 <literal>$(</literal>
3432 <literal>$)</literal>
3433 pairs
3434 (as is done for signature calculation).
3435 </para>
3437 <para>
3438 If <parameter>input</parameter> is a sequence
3439 (list or tuple),
3440 the individual elements of
3441 the sequence will be expanded,
3442 and the results will be returned as a list.
3443 </para>
3445 <para>
3446 The optional
3447 <parameter>target</parameter>
3449 <parameter>source</parameter>
3450 keyword arguments
3451 must be set to lists of
3452 target and source nodes, respectively,
3453 if you want the
3454 &cv-TARGET;,
3455 &cv-TARGETS;,
3456 &cv-SOURCE;
3458 &cv-SOURCES;
3459 to be available for expansion.
3460 This is usually necessary if you are
3461 calling
3462 &f-env-subst;
3463 from within a &Python; function used
3464 as an SCons action.
3465 </para>
3467 <para>
3468 Returned string values or sequence elements
3469 are converted to their string representation by default.
3470 The optional
3471 <parameter>conv</parameter>
3472 argument
3473 may specify a conversion function
3474 that will be used in place of
3475 the default.
3476 For example, if you want &Python; objects
3477 (including SCons Nodes)
3478 to be returned as &Python; objects,
3479 you can use a &Python;
3480 lambda expression to pass in an unnamed function
3481 that simply returns its unconverted argument.
3482 </para>
3484 <para>
3485 Example:
3486 </para>
3488 <example_commands>
3489 print(env.subst("The C compiler is: $CC"))
3491 def compile(target, source, env):
3492     sourceDir = env.subst(
3493         "${SOURCE.srcdir}",
3494         target=target,
3495         source=source
3496     )
3498 source_nodes = env.subst('$EXPAND_TO_NODELIST', conv=lambda x: x)
3499 </example_commands>
3500 </summary>
3501 </scons_function>
3503 <scons_function name="Tool">
3504 <arguments>
3505 (name, [toolpath, key=value, ...])
3506 </arguments>
3507 <summary>
3509 <para>
3510 Locates the tool specification module <parameter>name</parameter>
3511 and returns a callable tool object for that tool.
3512 When the environment method (&f-env-Tool;) form is used,
3513 the tool object is automatically called before the method returns
3514 to update <varname>env</varname>,
3515 and <parameter>name</parameter> is
3516 appended to the &cv-link-TOOLS;
3517 &consvar; in that environment.
3518 When the global function &f-Tool; form is used,
3519 the tool object is constructed but not called,
3520 as it lacks the context of an environment to update,
3521 and the returned object needs to be used to arrange for the call.
3522 </para>
3524 <para>
3525 The tool module is searched for in the tool search paths (see the
3526 <emphasis role="bold">Tools</emphasis> section in the manual page
3527 for details)
3528 and in any paths specified by the optional
3529 <parameter>toolpath</parameter> parameter,
3530 which must be a list of strings.
3531 If <parameter>toolpath</parameter> is omitted,
3532 the <parameter>toolpath</parameter>
3533 supplied when the environment was created,
3534 if any, is used.
3535 </para>
3537 <para>
3538 Any remaining keyword arguments are saved in
3539 the tool object,
3540 and will be passed to the tool module's
3541 <function>generate</function> function
3542 when the tool object is actually called.
3543 The <function>generate</function> function
3544 can update the &consenv; with &consvars; and arrange
3545 any other initialization
3546 needed to use the mechanisms that tool describes,
3547 and can use these extra arguments to help
3548 guide its actions.
3549 </para>
3551 <para>
3552 <emphasis>Changed in version  4.2:</emphasis>
3553 &f-env-Tool; now returns the tool object,
3554 previously it did not return (i.e. returned <constant>None</constant>).
3555 </para>
3557 <para>
3558 Examples:
3559 </para>
3561 <example_commands>
3562 env.Tool('gcc')
3563 env.Tool('opengl', toolpath=['build/tools'])
3564 </example_commands>
3566 <para>
3567 The returned tool object can be passed to an
3568 &f-link-Environment; or &f-link-Clone; call
3569 as part of the <parameter>tools</parameter> keyword argument,
3570 in which case the tool is applied to the environment being constructed,
3571 or it can be called directly,
3572 in which case a &consenv; to update must be
3573 passed as the argument.
3574 Either approach will also update the
3575 &cv-TOOLS; &consvar;.
3576 </para>
3578 <para>
3579 Examples:
3580 </para>
3582 <example_commands>
3583 env = Environment(tools=[Tool('msvc')])
3585 env = Environment()
3586 msvctool = Tool('msvc')
3587 msvctool(env)  # adds 'msvc' to the TOOLS variable
3588 gltool = Tool('opengl', toolpath = ['tools'])
3589 gltool(env)  # adds 'opengl' to the TOOLS variable
3590 </example_commands>
3591 </summary>
3592 </scons_function>
3594 <scons_function name="Value">
3595 <arguments>
3596 (value, [built_value], [name])
3597 </arguments>
3598 <summary>
3599 <para>
3600 Returns a Node object representing the specified &Python;
3601 <parameter>value</parameter>.
3602 Value Nodes can be used as dependencies of targets.
3603 If the string representation of the Value Node
3604 changes between &SCons; runs, it is considered
3605 out of date and any targets depending it will be rebuilt.
3606 Since Value Nodes have no filesystem representation,
3607 timestamps are not used; the timestamp deciders
3608 perform the same content-based up to date check.
3609 </para>
3610 <para>
3611 The optional
3612 <parameter>built_value</parameter>
3613 argument can be specified
3614 when the Value Node is created
3615 to indicate the Node should already be considered "built."
3616 </para>
3618 <para>
3619 The optional <parameter>name</parameter> parameter can be provided as an
3620 alternative name for the resulting <literal>Value</literal> node;
3621 this is advised if the <parameter>value</parameter> parameter
3622 cannot be converted to a string.
3623 </para>
3625 <para>
3626 Value Nodes have a
3627 <methodname>write</methodname>
3628 method that can be used to "build" a Value Node
3629 by setting a new value.
3630 The corresponding
3631 <methodname>read</methodname>
3632 method returns the built value of the Node.
3633 </para>
3635 <para>
3636 <emphasis>Changed in version 4.0:</emphasis>
3637 the <parameter>name</parameter> parameter was added.
3638 </para>
3640 <para>
3641 Examples:
3642 </para>
3644 <!-- TODO fix second example or replace - still doesn't work -->
3645 <example_commands>
3646 env = Environment()
3648 def create(target, source, env):
3649     """Action function to create a file from a Value.
3651     Writes 'prefix=$SOURCE' into the file name given as $TARGET.
3652     """
3653     with open(str(target[0]), 'wb') as f:
3654         f.write(b'prefix=' + source[0].get_contents() + b'\n')
3656 # Fetch the prefix= argument, if any, from the command line.
3657 # Use /usr/local as the default.
3658 prefix = ARGUMENTS.get('prefix', '/usr/local')
3660 # Attach builder named Config to the construction environment
3661 # using the 'create' action function above.
3662 env['BUILDERS']['Config'] = Builder(action=create)
3663 env.Config(target='package-config', source=Value(prefix))
3665 def build_value(target, source, env):
3666     """Action function to "build" a Value.
3668     Writes contents of $SOURCE into $TARGET, thus updating if it existed.
3669     """
3670     target[0].write(source[0].get_contents())
3672 output = env.Value('before')
3673 input = env.Value('after')
3675 # Attach a builder named UpdateValue to the construction environment
3676 # using the 'build_value' action function above.
3677 env['BUILDERS']['UpdateValue'] = Builder(action=build_value)
3678 env.UpdateValue(target=Value(output), source=Value(input))
3679 </example_commands>
3680 </summary>
3681 </scons_function>
3683 <scons_function name="VariantDir">
3684 <arguments>
3685 (variant_dir, src_dir, [duplicate])
3686 </arguments>
3687 <summary>
3688 <para>
3689 Sets up a mapping to define a variant build directory in
3690 <parameter>variant_dir</parameter>.
3691 <parameter>src_dir</parameter> must not be underneath
3692 <parameter>variant_dir</parameter>.
3693 A &f-VariantDir; mapping is global, even if called using the
3694 &f-env-VariantDir; form.
3695 &f-VariantDir;
3696 can be called multiple times with the same
3697 <parameter>src_dir</parameter>
3698 to set up multiple variant builds with different options.
3699 </para>
3701 <para>
3702 Note if <parameter>variant_dir</parameter>
3703 is not under the project top directory,
3704 target selection rules will not pick targets in the
3705 variant directory unless they are explicitly specified.
3706 </para>
3708 <para>
3709 When files in <parameter>variant_dir</parameter> are referenced,
3710 &SCons; backfills as needed with files from <parameter>src_dir</parameter>
3711 to create a complete build directory.
3712 By default, &SCons;
3713 physically duplicates the source files, SConscript files,
3714 and directory structure as needed into the variant directory.
3715 Thus, a build performed in the variant directory is guaranteed to be identical
3716 to a build performed in the source directory even if
3717 intermediate source files are generated during the build,
3718 or if preprocessors or other scanners search for included files
3719 using paths relative to the source file,
3720 or if individual compilers or other invoked tools are hard-coded
3721 to put derived files in the same directory as source files.
3722 Only the files &SCons; calculates are needed for the build are
3723 duplicated into <parameter>variant_dir</parameter>.
3724 If possible on the platform,
3725 the duplication is performed by linking rather than copying.
3726 This behavior is affected by the
3727 <option>--duplicate</option>
3728 command-line option.
3729 </para>
3731 <para>
3732 Duplicating the source files may be disabled by setting the
3733 <parameter>duplicate</parameter>
3734 argument to
3735 <constant>False</constant>.
3736 This will cause
3737 &SCons;
3738 to invoke Builders using the path names of source files in
3739 <parameter>src_dir</parameter>
3740 and the path names of derived files within
3741 <parameter>variant_dir</parameter>.
3742 This is more efficient than duplicating,
3743 and is safe for most builds;
3744 revert to <literal>duplicate=True</literal>
3745 if it causes problems.
3746 </para>
3748 <para>
3749 &f-VariantDir;
3750 works most naturally when used with a subsidiary SConscript file.
3751 The subsidiary SConscript file must be called as if it were in
3752 <parameter>variant_dir</parameter>,
3753 regardless of the value of
3754 <parameter>duplicate</parameter>.
3755 When calling an SConscript file, you can use the
3756 <parameter>exports</parameter> keyword argument
3757 to pass parameters (individually or as an appropriately set up environment)
3758 so the SConscript can pick up the right settings for that variant build.
3759 The SConscript must &f-link-Import; these to use them. Example:
3760 </para>
3762 <example_commands>
3763 env1 = Environment(...settings for variant1...)
3764 env2 = Environment(...settings for variant2...)
3766 # run src/SConscript in two variant directories
3767 VariantDir('build/variant1', 'src')
3768 SConscript('build/variant1/SConscript', exports={"env": env1})
3769 VariantDir('build/variant2', 'src')
3770 SConscript('build/variant2/SConscript', exports={"env": env2})
3771 </example_commands>
3773 <para>
3774 See also the
3775 &f-link-SConscript; function
3776 for another way to specify a variant directory
3777 in conjunction with calling a subsidiary SConscript file.
3778 </para>
3780 <para>
3781 More examples:
3782 </para>
3784 <example_commands>
3785 # use names in the build directory, not the source directory
3786 VariantDir('build', 'src', duplicate=0)
3787 Program('build/prog', 'build/source.c')
3789 # this builds both the source and docs in a separate subtree
3790 VariantDir('build', '.', duplicate=0)
3791 SConscript(dirs=['build/src','build/doc'])
3793 # same as previous example, but only uses SConscript
3794 SConscript(dirs='src', variant_dir='build/src', duplicate=0)
3795 SConscript(dirs='doc', variant_dir='build/doc', duplicate=0)
3796 </example_commands>
3797 </summary>
3798 </scons_function>
3800 <scons_function name="WhereIs">
3801 <arguments>
3802 (program, [path, pathext, reject])
3803 </arguments>
3804 <summary>
3805 <para>
3806 Searches for the specified executable
3807 <parameter>program</parameter>,
3808 returning the full path to the program
3809 or <constant>None</constant>.
3810 </para>
3811 <para>
3812 When called as a &consenv; method,
3813 searches the paths in the
3814 <parameter>path</parameter> keyword argument,
3815 or if <constant>None</constant> (the default)
3816 the paths listed in the &consenv;
3817 (<varname>env</varname><literal>['ENV']['PATH']</literal>).
3818 The external environment's path list
3819 (<literal>os.environ['PATH']</literal>)
3820 is used as a fallback if the key
3821 <varname>env</varname><literal>['ENV']['PATH']</literal>
3822 does not exist.
3823 </para>
3824 <para>
3825 On Windows systems, searches for executable
3826 programs with any of the file extensions listed in the
3827 <parameter>pathext</parameter> keyword argument,
3828 or if <constant>None</constant> (the default)
3829 the pathname extensions listed in the &consenv;
3830 (<varname>env</varname><literal>['ENV']['PATHEXT']</literal>).
3831 The external environment's pathname extensions list
3832 (<literal>os.environ['PATHEXT']</literal>)
3833 is used as a fallback if the key
3834 <varname>env</varname><literal>['ENV']['PATHEXT']</literal>
3835 does not exist.
3836 </para>
3837 <para>
3838 When called as a global function, uses the external
3839 environment's path
3840 <literal>os.environ['PATH']</literal>
3841 and path extensions
3842 <literal>os.environ['PATHEXT']</literal>,
3843 respectively, if
3844 <parameter>path</parameter> and
3845 <parameter>pathext</parameter> are
3846 <constant>None</constant>.
3847 </para>
3848 <para>
3849 Will not select any
3850 path name or names
3851 in the optional
3852 <parameter>reject</parameter>
3853 list.
3854 </para>
3856 </summary>
3857 </scons_function>
3859 </sconsdoc>