diff --git a/bootstrap.jam b/bootstrap.jam
index 0017f5cbd..7c903808e 100644
--- a/bootstrap.jam
+++ b/bootstrap.jam
@@ -18,7 +18,7 @@ include
This is version 3.1.3 of BJam and is based on version 2.4 of +
This is version 3.1.4 of BJam and is based on version 2.4 of Jam/MR:
/+\
@@ -753,37 +753,40 @@ rule BACKTRACE ( )
handling
Classic jam treats any non-option element of command line as a name of
target to be updated. This prevented more sophisticated handling of
- command line and was disabled. Instead of it, a new UPDATE
- builtin rule was added:
+ command line. This is now enabled again but with additional changes to
+ the UPDATE> rule to allow for the flexibility of changing the
+ list of targets to update. The UPDATE builtin rule is:
rule UPDATE ( targets * )
- The rule causes the specified targets to be updated. If no target was
- specified with the UPDATE rule, the "all" target will be
- implicitly updated.
-
+ The rule has two effects: 1. it clears the list of targets to update,
+ and 2. causes the specified targets to be updated. If no target was
+ specified with the UPDATE rule, no targets will be updated. To
+ support changing of the update list in more usefull ways, the rule also
+ returns the targets previously in the update list. This makes it possible
+ to add targets as such:
+
+local previous-updates = [ UPDATE ] ;
+UPDATE $(previous-updates) a-new-target ;
+
Semaphores
-
- It is sometimes desirable to disallow parallel execution of
- some actions. For example:
+
It is sometimes desirable to disallow parallel execution of some
+ actions. For example:
Any target can be assigned a semaphore, by setting a variable called SEMAPHORE on that target. The value of the variable is the semaphore name. It must be different from names of any declared - target, but is arbitrary otherwise. - -
The semantic of semaphores is that in a group of targets which - have the same semaphore, only one can be updated at the moment, - regardless of "-j" option. - + target, but is arbitrary otherwise.
+The semantic of semaphores is that in a group of targets which have + the same semaphore, only one can be updated at the moment, regardless of + "-j" option.
This section is derived from the official Jam documentation and from my experience using it and reading the Jambase rules. I repeat the @@ -797,15 +800,15 @@ rule UPDATE ( targets * )
· A Jam target is an abstract entity identified by an arbitrary string. The build-in DEPENDS rule creates a link in the dependency graph between the named targets.
-· Note that the documentation for the built-in INCLUDES - rule is incorrect: INCLUDES targets1 : targets2 - causes everything that depends on a member of targets1 to depend - on all members of targets2. It does this in an odd way, by tacking - targets2 onto a special tail section in the dependency list of - everything in targets1. It seems to be OK to create circular - dependencies this way; in fact, it appears to be the ``right thing to - do'' when a single build action produces both targets1 and - targets2.
+· Note that the documentation for the built-in + INCLUDES rule is incorrect: + INCLUDES targets1 : targets2 causes everything + that depends on a member of targets1 to depend on all members of + targets2. It does this in an odd way, by tacking targets2 + onto a special tail section in the dependency list of everything in + targets1. It seems to be OK to create circular dependencies this + way; in fact, it appears to be the ``right thing to do'' when a single + build action produces both targets1 and targets2.
· When a rule is invoked, if there are actions declared with the same name as the rule, the actions are added to the updating actions for the target identified by the rule's first @@ -836,19 +839,19 @@ rule UPDATE ( targets * ) on the target named by the rule's first argument (the source file being scanned). -
· The ``bound value'' of a variable is the path associated - with the target named by the variable. In build actions, the - first two arguments are automatically replaced with their bound values. - Target-specific variables can be selectively replaced by their bound - values using the bind action - modifier.
-· Note that the term ``binding'' as used in the Jam documentation - indicates a phase of processing that includes three sub-phases: - binding (yes!), update determination, and header file scanning. - The repetition of the term ``binding'' can lead to some confusion. In - particular, the Modifying Binding - section in the Jam documentation should probably be titled ``Modifying - Update Determination''.
+· The ``bound value'' of a variable is the path + associated with the target named by the variable. In build + actions, the first two arguments are automatically replaced with + their bound values. Target-specific variables can be selectively replaced + by their bound values using the bind + action modifier.
+· Note that the term ``binding'' as used in the Jam + documentation indicates a phase of processing that includes three + sub-phases: binding (yes!), update determination, and header file + scanning. The repetition of the term ``binding'' can lead to some + confusion. In particular, the Modifying + Binding section in the Jam documentation should probably be titled + ``Modifying Update Determination''.
· ``Grist'' is just a string prefix of the form <characters>. It is used in Jam to create unique target names based on simpler names. For example, the file name @@ -877,18 +880,18 @@ rule UPDATE ( targets * ) and trailing >s are added if necessary to form an expression of the form <expr2>; <expr2> is then prepended.
-· When Jam is invoked it imports - all environment variable settings into corresponding Jam variables, - followed by all command-line (-s...) variable settings. - Variables whose name ends in PATH, Path, or +
· When Jam is invoked it + imports all environment variable settings into corresponding Jam + variables, followed by all command-line (-s...) variable + settings. Variables whose name ends in PATH, Path, or path are split into string lists on OS-specific path-list separator boundaries (e.g. ":" for UNIX and ";" for Windows). All other variables are split on space (" ") boundaries. Boost Jam modifies that behavior by allowing variables to be quoted.
-· A variable whose value is an empty list or which consists - entirely of empty strings has a negative logical value. Thus, for - example, code like the following allows a sensible non-empty default +
· A variable whose value is an empty list or which + consists entirely of empty strings has a negative logical value. Thus, + for example, code like the following allows a sensible non-empty default which can easily be overridden by the user:
MESSAGE ?= starting jam... ;
@@ -898,6 +901,13 @@ if $(MESSAGE) { ECHO The message is: $(MESSAGE) ; }
"-sMESSAGE=message text". If he wants no
message, he invokes jam with -sMESSAGE= and nothing at all is
printed.
+ · The parsing of command line options in Jam can be rather
+ unintuitive, with regards to how other Unix programs accept options.
+ There are two variants accepted as valid for an option:
+
+ - -xvalue, and
+ - -x value.
+
Please also read The Jam language reference
for the additional details, and the Jam release
notes for a brief description of recent, but fundamental changes
@@ -907,14 +917,14 @@ if $(MESSAGE) { ECHO The message is: $(MESSAGE) ; }
Revised
- 15 November, 2002
+ 5 January, 2003
© Copyright René
- Rivera, David Abrahams 2002. All Rights Reserved. Permission to
- copy, use, modify, sell and distribute this document is granted provided
- this copyright notice appears in all copies. This document is provided
- "as is" without express or implied warranty, and with no claim as to its
- suitability for any purpose.
+ Rivera, David Abrahams, Vladimir Prus 2003. All Rights Reserved.
+ Permission to copy, use, modify, sell and distribute this document is
+ granted provided this copyright notice appears in all copies. This
+ document is provided "as is" without express or implied warranty, and
+ with no claim as to its suitability for any purpose.