diff --git a/bootstrap.jam b/bootstrap.jam index 0017f5cbd..7c903808e 100644 --- a/bootstrap.jam +++ b/bootstrap.jam @@ -18,7 +18,7 @@ include boost-base.jam ; # # Cause the targets specified in the command line to be updated # -if $(JAM_VERSION) && $(JAM_VERSION:J="") >= 030101 +if $(JAM_VERSION) && $(JAM_VERSION:J="") >= 030101 && $(JAM_VERSION:J="") < 030104 { for local e in $(ARGV[2-]) { diff --git a/historic/jam/src/Jambase b/historic/jam/src/Jambase index 1e6cb8b09..2c447468e 100644 --- a/historic/jam/src/Jambase +++ b/historic/jam/src/Jambase @@ -155,19 +155,6 @@ if [ MATCH .*(bjam).* : $(ARGV[1]:BL) ] } else { -# -# First, cause the targets specified in the command line to be updated, as -# Perforce Jam does. -# -for local e in $(ARGV[2-]) -{ - if ! [ MATCH "^(-).*" : $(e) ] - { - # This is not an option, so it is a target name. - UPDATE $(e) ; - } -} - # # JAMBASE - jam 2.3 ruleset providing make(1)-like functionality diff --git a/historic/jam/src/boost-jam.spec b/historic/jam/src/boost-jam.spec index e83088aa1..708161b89 100644 --- a/historic/jam/src/boost-jam.spec +++ b/historic/jam/src/boost-jam.spec @@ -1,5 +1,5 @@ Name: boost-jam -Version: 3.1.3 +Version: 3.1.4 Summary: Build tool Release: 1 Source: %{name}-%{version}.tgz @@ -18,8 +18,8 @@ with Perforce Jam. Authors: Perforce Jam : Cristopher Seiwald - FT Jam : David Turner - Boost Jam : David Abrahams + FT Jam : David Turner + Boost Jam : David Abrahams Copyright: /+\ diff --git a/historic/jam/src/build.jam b/historic/jam/src/build.jam index 42b057ab9..2fe065859 100644 --- a/historic/jam/src/build.jam +++ b/historic/jam/src/build.jam @@ -6,7 +6,7 @@ # Info about what we are building. NAME = boost-jam ; -VERSION = 3.1.3 ; +VERSION = 3.1.4 ; RELEASE = 1 ; # Generate development debug binaries? @@ -467,16 +467,3 @@ if $(rpm-tool) { .rpm $(NAME)-$(VERSION)-$(RELEASE) : $(NAME)-$(VERSION).tgz ; } - - -# Update any targets in the specified commandline. -local e-- = ; -for local e in $(ARGV[2-]) -{ - if ! [ MATCH "^(-).*" : $(e) ] && $(e--) != "-f" - { - # This is not an option, so it is a target name. - UPDATE $(e) ; - } - e-- = $(e) ; -} diff --git a/historic/jam/src/builtins.c b/historic/jam/src/builtins.c index 02a0b1423..27ecae3a4 100644 --- a/historic/jam/src/builtins.c +++ b/historic/jam/src/builtins.c @@ -18,6 +18,7 @@ # include "strings.h" # include "pwd.h" # include "pathsys.h" +# include "make.h" /* * builtins.c - builtin jam rules @@ -682,10 +683,12 @@ builtin_pwd( PARSE *parse, FRAME *frame ) LIST* builtin_update( PARSE *parse, FRAME *frame) { + LIST* result = list_copy( L0, targets_to_update() ); LIST* arg1 = lol_get( frame->args, 0 ); + clear_targets_to_update(); for ( ; arg1; arg1 = list_next( arg1 ) ) mark_target_for_updating( newstr(arg1->string) ); - return L0; + return result; } LIST* diff --git a/historic/jam/src/jam.c b/historic/jam/src/jam.c index 371c3e74f..1a5a2e394 100644 --- a/historic/jam/src/jam.c +++ b/historic/jam/src/jam.c @@ -376,6 +376,13 @@ int main( int argc, char **argv, char **arg_environ ) load_builtins(); + /* Add the targets in the command line to update list */ + + for ( n = 0; n < argc; ++n ) + { + mark_target_for_updating(argv[n]); + } + /* Parse ruleset */ { diff --git a/historic/jam/src/jambase.c b/historic/jam/src/jambase.c index e630ef2a2..fdfa319d2 100644 --- a/historic/jam/src/jambase.c +++ b/historic/jam/src/jambase.c @@ -87,13 +87,6 @@ char *jambase[] = { "}\n", "else\n", "{\n", -"for local e in $(ARGV[2-]) \n", -"{\n", -"if ! [ MATCH \"^(-).*\" : $(e) ] \n", -"{\n", -"UPDATE $(e) ;\n", -"}\n", -"}\n", "if $(NT)\n", "{\n", "local SUPPORTED_TOOLSETS = \"BORLANDC\" \"VC7\" \"VISUALC\" \"VISUALC16\" \"INTELC\" \"WATCOM\"\n", diff --git a/historic/jam/src/make.c b/historic/jam/src/make.c index 94a740167..7ee9c6b17 100644 --- a/historic/jam/src/make.c +++ b/historic/jam/src/make.c @@ -753,3 +753,9 @@ LIST *targets_to_update() { return targets_to_update_; } + +void clear_targets_to_update() +{ + list_free(targets_to_update_); + targets_to_update_ = 0; +} diff --git a/historic/jam/src/make.h b/historic/jam/src/make.h index 7781a7fed..cfedda10a 100644 --- a/historic/jam/src/make.h +++ b/historic/jam/src/make.h @@ -21,3 +21,7 @@ void mark_target_for_updating(char *target); * Returns the list of all the target previously passed to 'mark_target_for_updating'. */ LIST *targets_to_update(); +/* + * Cleasr/unmarks all targets that are currently marked for update. + */ +void clear_targets_to_update(); diff --git a/historic/jam/src/patchlevel.h b/historic/jam/src/patchlevel.h index eb8c42e13..142c618b1 100644 --- a/historic/jam/src/patchlevel.h +++ b/historic/jam/src/patchlevel.h @@ -1,5 +1,5 @@ /* Keep JAMVERSYM in sync with VERSION. */ /* It can be accessed as $(JAMVERSION) in the Jamfile. */ -#define VERSION "3.1.3" +#define VERSION "3.1.4" #define JAMVERSYM "JAMVERSION=3.1" diff --git a/historic/jam/src/readme.html b/historic/jam/src/readme.html index 5649f4cb8..532f4bfc7 100644 --- a/historic/jam/src/readme.html +++ b/historic/jam/src/readme.html @@ -86,7 +86,7 @@ is based on Perforce Jam. It contains significant improvements made to facilitate its use in the Boost Build System, but should be backward compatible with Perforce Jam.

-

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:

- Craig McPeeters has extended Perforce Jam to solve such problems, and that - extension was integrated in Boost.Jam. - + Craig McPeeters has extended Perforce Jam to solve such problems, and + that extension was integrated in Boost.Jam.

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.

Jam Fundamentals

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:

+
    +
  1. -xvalue, and
  2. +
  3. -x value.
  4. +

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.

diff --git a/jam_src/Jambase b/jam_src/Jambase index 1e6cb8b09..2c447468e 100644 --- a/jam_src/Jambase +++ b/jam_src/Jambase @@ -155,19 +155,6 @@ if [ MATCH .*(bjam).* : $(ARGV[1]:BL) ] } else { -# -# First, cause the targets specified in the command line to be updated, as -# Perforce Jam does. -# -for local e in $(ARGV[2-]) -{ - if ! [ MATCH "^(-).*" : $(e) ] - { - # This is not an option, so it is a target name. - UPDATE $(e) ; - } -} - # # JAMBASE - jam 2.3 ruleset providing make(1)-like functionality diff --git a/jam_src/boost-jam.spec b/jam_src/boost-jam.spec index e83088aa1..708161b89 100644 --- a/jam_src/boost-jam.spec +++ b/jam_src/boost-jam.spec @@ -1,5 +1,5 @@ Name: boost-jam -Version: 3.1.3 +Version: 3.1.4 Summary: Build tool Release: 1 Source: %{name}-%{version}.tgz @@ -18,8 +18,8 @@ with Perforce Jam. Authors: Perforce Jam : Cristopher Seiwald - FT Jam : David Turner - Boost Jam : David Abrahams + FT Jam : David Turner + Boost Jam : David Abrahams Copyright: /+\ diff --git a/jam_src/build.jam b/jam_src/build.jam index 42b057ab9..2fe065859 100644 --- a/jam_src/build.jam +++ b/jam_src/build.jam @@ -6,7 +6,7 @@ # Info about what we are building. NAME = boost-jam ; -VERSION = 3.1.3 ; +VERSION = 3.1.4 ; RELEASE = 1 ; # Generate development debug binaries? @@ -467,16 +467,3 @@ if $(rpm-tool) { .rpm $(NAME)-$(VERSION)-$(RELEASE) : $(NAME)-$(VERSION).tgz ; } - - -# Update any targets in the specified commandline. -local e-- = ; -for local e in $(ARGV[2-]) -{ - if ! [ MATCH "^(-).*" : $(e) ] && $(e--) != "-f" - { - # This is not an option, so it is a target name. - UPDATE $(e) ; - } - e-- = $(e) ; -} diff --git a/jam_src/builtins.c b/jam_src/builtins.c index 02a0b1423..27ecae3a4 100644 --- a/jam_src/builtins.c +++ b/jam_src/builtins.c @@ -18,6 +18,7 @@ # include "strings.h" # include "pwd.h" # include "pathsys.h" +# include "make.h" /* * builtins.c - builtin jam rules @@ -682,10 +683,12 @@ builtin_pwd( PARSE *parse, FRAME *frame ) LIST* builtin_update( PARSE *parse, FRAME *frame) { + LIST* result = list_copy( L0, targets_to_update() ); LIST* arg1 = lol_get( frame->args, 0 ); + clear_targets_to_update(); for ( ; arg1; arg1 = list_next( arg1 ) ) mark_target_for_updating( newstr(arg1->string) ); - return L0; + return result; } LIST* diff --git a/jam_src/jam.c b/jam_src/jam.c index 371c3e74f..1a5a2e394 100644 --- a/jam_src/jam.c +++ b/jam_src/jam.c @@ -376,6 +376,13 @@ int main( int argc, char **argv, char **arg_environ ) load_builtins(); + /* Add the targets in the command line to update list */ + + for ( n = 0; n < argc; ++n ) + { + mark_target_for_updating(argv[n]); + } + /* Parse ruleset */ { diff --git a/jam_src/jambase.c b/jam_src/jambase.c index e630ef2a2..fdfa319d2 100644 --- a/jam_src/jambase.c +++ b/jam_src/jambase.c @@ -87,13 +87,6 @@ char *jambase[] = { "}\n", "else\n", "{\n", -"for local e in $(ARGV[2-]) \n", -"{\n", -"if ! [ MATCH \"^(-).*\" : $(e) ] \n", -"{\n", -"UPDATE $(e) ;\n", -"}\n", -"}\n", "if $(NT)\n", "{\n", "local SUPPORTED_TOOLSETS = \"BORLANDC\" \"VC7\" \"VISUALC\" \"VISUALC16\" \"INTELC\" \"WATCOM\"\n", diff --git a/jam_src/make.c b/jam_src/make.c index 94a740167..7ee9c6b17 100644 --- a/jam_src/make.c +++ b/jam_src/make.c @@ -753,3 +753,9 @@ LIST *targets_to_update() { return targets_to_update_; } + +void clear_targets_to_update() +{ + list_free(targets_to_update_); + targets_to_update_ = 0; +} diff --git a/jam_src/make.h b/jam_src/make.h index 7781a7fed..cfedda10a 100644 --- a/jam_src/make.h +++ b/jam_src/make.h @@ -21,3 +21,7 @@ void mark_target_for_updating(char *target); * Returns the list of all the target previously passed to 'mark_target_for_updating'. */ LIST *targets_to_update(); +/* + * Cleasr/unmarks all targets that are currently marked for update. + */ +void clear_targets_to_update(); diff --git a/jam_src/patchlevel.h b/jam_src/patchlevel.h index eb8c42e13..142c618b1 100644 --- a/jam_src/patchlevel.h +++ b/jam_src/patchlevel.h @@ -1,5 +1,5 @@ /* Keep JAMVERSYM in sync with VERSION. */ /* It can be accessed as $(JAMVERSION) in the Jamfile. */ -#define VERSION "3.1.3" +#define VERSION "3.1.4" #define JAMVERSYM "JAMVERSION=3.1" diff --git a/jam_src/readme.html b/jam_src/readme.html index 5649f4cb8..532f4bfc7 100644 --- a/jam_src/readme.html +++ b/jam_src/readme.html @@ -86,7 +86,7 @@ is based on Perforce Jam. It contains significant improvements made to facilitate its use in the Boost Build System, but should be backward compatible with Perforce Jam.

-

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:

    -
  • Old versions of yacc use files with fixed names. So, - running two yacc actions is dangerous. -
  • One might want to perform parallel compiling, but not do parallel - linking, because linking is i/o bound and only gets slower. +
  • Old versions of yacc use files with fixed names. So, + running two yacc actions is dangerous.
  • +
  • One might want to perform parallel compiling, but not do parallel + linking, because linking is i/o bound and only gets slower.
- Craig McPeeters has extended Perforce Jam to solve such problems, and that - extension was integrated in Boost.Jam. - + Craig McPeeters has extended Perforce Jam to solve such problems, and + that extension was integrated in Boost.Jam.

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.

Jam Fundamentals

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:

+
    +
  1. -xvalue, and
  2. +
  3. -x value.
  4. +

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.

diff --git a/v1/bootstrap.jam b/v1/bootstrap.jam index 0017f5cbd..7c903808e 100644 --- a/v1/bootstrap.jam +++ b/v1/bootstrap.jam @@ -18,7 +18,7 @@ include boost-base.jam ; # # Cause the targets specified in the command line to be updated # -if $(JAM_VERSION) && $(JAM_VERSION:J="") >= 030101 +if $(JAM_VERSION) && $(JAM_VERSION:J="") >= 030101 && $(JAM_VERSION:J="") < 030104 { for local e in $(ARGV[2-]) {