Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r59728 - in branches/release/tools/build/v2: . build doc/src kernel tools tools/types
From: ghost_at_[hidden]
Date: 2010-02-17 04:49:11


Author: vladimir_prus
Date: 2010-02-17 04:49:08 EST (Wed, 17 Feb 2010)
New Revision: 59728
URL: http://svn.boost.org/trac/boost/changeset/59728

Log:
Merge from trunk
Properties modified:
   branches/release/tools/build/v2/ (props changed)
Text files modified:
   branches/release/tools/build/v2/build-system.jam | 21 ++++
   branches/release/tools/build/v2/build/feature.jam | 4
   branches/release/tools/build/v2/build/project.jam | 17 ++-
   branches/release/tools/build/v2/build/targets.jam | 41 ++++++++
   branches/release/tools/build/v2/doc/src/reference.xml | 22 ++++
   branches/release/tools/build/v2/kernel/bootstrap.jam | 2
   branches/release/tools/build/v2/tools/builtin.jam | 6 +
   branches/release/tools/build/v2/tools/darwin.jam | 184 +++++++++++++++++++++++----------------
   branches/release/tools/build/v2/tools/docutils.jam | 2
   branches/release/tools/build/v2/tools/doxygen.jam | 167 ++++++++++++++++++++++++++++++++++++
   branches/release/tools/build/v2/tools/gcc.jam | 26 ++++
   branches/release/tools/build/v2/tools/gfortran.jam | 2
   branches/release/tools/build/v2/tools/intel-linux.jam | 15 ++
   branches/release/tools/build/v2/tools/mpi.jam | 17 +++
   branches/release/tools/build/v2/tools/msvc.jam | 5
   branches/release/tools/build/v2/tools/pathscale.jam | 6
   branches/release/tools/build/v2/tools/pgi.jam | 4
   branches/release/tools/build/v2/tools/quickbook.jam | 6
   branches/release/tools/build/v2/tools/stage.jam | 26 +++++
   branches/release/tools/build/v2/tools/types/lib.jam | 1
   branches/release/tools/build/v2/tools/vacpp.jam | 21 ++-
   21 files changed, 473 insertions(+), 122 deletions(-)

Modified: branches/release/tools/build/v2/build-system.jam
==============================================================================
--- branches/release/tools/build/v2/build-system.jam (original)
+++ branches/release/tools/build/v2/build-system.jam 2010-02-17 04:49:08 EST (Wed, 17 Feb 2010)
@@ -238,6 +238,12 @@
                 "$(filename)" "from" $(where) "." ;
         }
 
+ # Set source location so that path-constant in config files
+ # with relative paths work. This is of most importance
+ # for project-config.jam, but may be used in other
+ # config files as well.
+ local attributes = [ project.attributes $(module-name) ] ;
+ $(attributes).set source-location : $(where:D) : exact ;
         modules.load $(module-name) : $(filename) : $(path) ;
         project.load-used-projects $(module-name) ;
     }
@@ -898,6 +904,21 @@
         modules.poke : PARALLELISM : $(j) ;
     }
     
+ local k = [ option.get keep-going : true : true ] ;
+ if $(k) in "on" "yes" "true"
+ {
+ modules.poke : KEEP_GOING : 1 ;
+ }
+ else if $(k) in "off" "no" "false"
+ {
+ modules.poke : KEEP_GOING : 0 ;
+ }
+ else
+ {
+ ECHO "error: Invalid value for the --keep-going option" ;
+ EXIT ;
+ }
+
     # The 'all' pseudo target is not strictly needed expect in the case when we
     # use it below but people often assume they always have this target
     # available and do not declare it themselves before use which may cause

Modified: branches/release/tools/build/v2/build/feature.jam
==============================================================================
--- branches/release/tools/build/v2/build/feature.jam (original)
+++ branches/release/tools/build/v2/build/feature.jam 2010-02-17 04:49:08 EST (Wed, 17 Feb 2010)
@@ -469,7 +469,9 @@
 
         if $($(feature).subfeatures)
         {
- if ! ( $(value-string) in $($(feature).subfeatures) ) {
+ if ! ( $(value-string) in $($(feature).values) )
+ && ! ( $(value-string) in $($(feature).subfeatures) )
+ {
                 values = [ regex.split $(value-string) - ] ;
             }
         }

Modified: branches/release/tools/build/v2/build/project.jam
==============================================================================
--- branches/release/tools/build/v2/build/project.jam (original)
+++ branches/release/tools/build/v2/build/project.jam 2010-02-17 04:49:08 EST (Wed, 17 Feb 2010)
@@ -59,7 +59,7 @@
     # If Jamfile is already loaded, don't try again.
     if ! $(module-name) in $(.jamfile-modules)
     {
- load-jamfile $(jamfile-location) ;
+ load-jamfile $(jamfile-location) : $(module-name) ;
 
         # We want to make sure that child project are loaded only after parent
         # projects. In particular, because parent projects define attributes
@@ -277,6 +277,7 @@
 #
 local rule load-jamfile (
     dir # The directory of the project Jamfile.
+ : jamfile-module
     )
 {
     # See if the Jamfile is where it should be.
@@ -293,10 +294,6 @@
           : "Filenames are: " $(jamfile-to-load:D=) ;
     }
     
- # The module of the Jamfile.
- #
- local jamfile-module = [ module-name [ path.parent $(jamfile-to-load) ] ] ;
-
     # Initialize the Jamfile module before loading.
     #
     initialize $(jamfile-module) : [ path.parent $(jamfile-to-load) ]
@@ -1035,6 +1032,16 @@
         }
     }
 
+ rule always ( target-names * )
+ {
+ import project ;
+ local t = [ project.current ] ;
+ for local n in $(target-names)
+ {
+ $(t).mark-target-as-always $(n) ;
+ }
+ }
+
     rule glob ( wildcards + : excludes * )
     {
         import project ;

Modified: branches/release/tools/build/v2/build/targets.jam
==============================================================================
--- branches/release/tools/build/v2/build/targets.jam (original)
+++ branches/release/tools/build/v2/build/targets.jam 2010-02-17 04:49:08 EST (Wed, 17 Feb 2010)
@@ -303,6 +303,13 @@
         # before main target instances are created.
         self.explicit-targets += $(target-name) ;
     }
+
+ rule mark-target-as-always ( target-name )
+ {
+ # Record the name of the target, not instance, since this rule is called
+ # before main target instances are created.
+ self.always-targets += $(target-name) ;
+ }
 
     # Add new target alternative
     #
@@ -466,6 +473,11 @@
                 self.main-targets += $(t) ;
                 target = $(self.main-target.$(name)) ;
             }
+
+ if $(name) in $(self.always-targets)
+ {
+ $(a).always ;
+ }
 
             $(target).add-alternative $(a) ;
         }
@@ -485,7 +497,17 @@
               local r ;
               for local v in $(value)
               {
- v = [ path.root [ path.make $(v) ] $(self.location) ] ;
+ local l = $(self.location) ;
+ if ! $(l)
+ {
+ # Project corresponding to config files do not have
+ # 'location' attribute, but do have source location.
+ # It might be more reasonable to make every project have
+ # a location and use some other approach to prevent buildable
+ # targets in config files, but that's for later.
+ l = [ get source-location ] ;
+ }
+ v = [ path.root [ path.make $(v) ] $(l) ] ;
                 # Now make the value absolute path.
                 v = [ path.root $(v) [ path.pwd ] ] ;
                 # Constants should be in platform-native form.
@@ -1090,7 +1112,12 @@
                 [ full-name ] ;
         }
     }
-
+
+ rule always ( )
+ {
+ self.always = 1 ;
+ }
+
     # Returns the list of abstract-targets which are used as sources. The extra
     # properties specified for sources are not represented. The only user for
     # this rule at the moment is the "--dump-tests" feature of the test system.
@@ -1257,7 +1284,15 @@
                 {
                     local gur = $(result[1]) ;
                     result = $(result[2-]) ;
-
+
+ if $(self.always)
+ {
+ for local t in $(result)
+ {
+ $(t).always ;
+ }
+ }
+
                     local s = [ create-subvariant $(result)
                         : [ virtual-target.recent-targets ]
                         : $(property-set) : $(source-targets)

Modified: branches/release/tools/build/v2/doc/src/reference.xml
==============================================================================
--- branches/release/tools/build/v2/doc/src/reference.xml (original)
+++ branches/release/tools/build/v2/doc/src/reference.xml 2010-02-17 04:49:08 EST (Wed, 17 Feb 2010)
@@ -182,6 +182,26 @@
       </varlistentry>
 
       <varlistentry>
+ <term><literal>always</literal></term>
+ <indexterm><primary>always building a metatarget</primary></indexterm>
+
+ <listitem><para>The <literal>always</literal> funciton takes a single
+ parameter&#x2014;a list of metatarget names. The top-level targets produced
+ by the named metatargets will be always considered out of date. Consider this example:
+ </para>
+<programlisting>
+exe hello : hello.cpp ;
+exe bye : bye.cpp ;
+always hello ;
+</programlisting>
+ <para>If a build of <filename>hello</filename> is requested, then the binary will
+ always be relinked. The object files will not be recompiled, though. Note that if
+ a build of <filename>hello</filename> is not requested, for example you specify just
+ <filename>bye</filename> on the command line, <filename>hello</filename> will not
+ be relinked.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
         <term><literal>constant</literal></term>
 
         <listitem><para>Sets project-wide constant. Takes two
@@ -1723,7 +1743,7 @@
           <listitem>
             <para><emphasis>dependency</emphasis></para>
 
- <para>The value of dependency feature if a target reference.
+ <para>The value of a dependency feature is a target reference.
               When used for building of a main target, the value of
               dependency feature is treated as additional dependency.</para>
 

Modified: branches/release/tools/build/v2/kernel/bootstrap.jam
==============================================================================
--- branches/release/tools/build/v2/kernel/bootstrap.jam (original)
+++ branches/release/tools/build/v2/kernel/bootstrap.jam 2010-02-17 04:49:08 EST (Wed, 17 Feb 2010)
@@ -131,7 +131,7 @@
 #
 if ! $(dont-build)
 {
- if ! [ MATCH (--python) : $(ARGV) ]
+ if ! --python in $(ARGV)
     {
         # Allow users to override the build system file from the
         # command-line (mostly for testing)

Modified: branches/release/tools/build/v2/tools/builtin.jam
==============================================================================
--- branches/release/tools/build/v2/tools/builtin.jam (original)
+++ branches/release/tools/build/v2/tools/builtin.jam 2010-02-17 04:49:08 EST (Wed, 17 Feb 2010)
@@ -121,6 +121,12 @@
 feature.feature extern-c-nothrow : off on : propagated ;
 
 feature.feature debug-symbols : on off : propagated ;
+# Controls whether the binary should be stripped -- that is have
+# everything not necessary to running removed. This option should
+# not be very often needed. Also, this feature will show up in
+# target paths of everything, not just binaries. Should fix that
+# when impelementing feature relevance.
+feature.feature strip : off on : propagated ;
 feature.feature define : : free ;
 feature.feature undef : : free ;
 feature.feature "include" : : free path ; #order-sensitive ;

Modified: branches/release/tools/build/v2/tools/darwin.jam
==============================================================================
--- branches/release/tools/build/v2/tools/darwin.jam (original)
+++ branches/release/tools/build/v2/tools/darwin.jam 2010-02-17 04:49:08 EST (Wed, 17 Feb 2010)
@@ -24,29 +24,11 @@
 ## Use a framework.
 feature framework : : free ;
 
-## The MacOSX versions we can target.
-.macosx-versions =
- 10.6 10.5 10.4 10.3 10.2 10.1
- iphone-3.2 iphonesim-3.2
- iphone-3.1.2 iphonesim-3.1.2
- iphone-3.1 iphonesim-3.1
- iphone-3.0 iphonesim-3.0
- iphone-2.2.1 iphonesim-2.2.1
- iphone-2.2 iphonesim-2.2
- iphone-2.1 iphonesim-2.1
- iphone-2.0 iphonesim-2.0
- iphone-1.x
- ;
-
 ## The MacOSX version to compile for, which maps to the SDK to use (sysroot).
-feature macosx-version
- : $(.macosx-versions)
- : propagated link-incompatible symmetric optional ;
+feature macosx-version : : propagated link-incompatible symmetric optional ;
 
 ## The minimal MacOSX version to target.
-feature macosx-version-min
- : $(.macosx-versions)
- : propagated optional ;
+feature macosx-version-min : : propagated optional ;
 
 #############################################################################
 
@@ -170,27 +152,27 @@
         # We can turn off strip by specifying it as empty. In which
         # case we switch to using the linker to do the strip.
         flags darwin.link.dll OPTIONS
- $(condition)/<main-target-type>LIB/<link>shared/<address-model>32/<debug-symbols>off : -Wl,-x ;
+ $(condition)/<main-target-type>LIB/<link>shared/<address-model>32/<strip>on : -Wl,-x ;
         flags darwin.link.dll OPTIONS
- $(condition)/<main-target-type>LIB/<link>shared/<address-model>/<debug-symbols>off : -Wl,-x ;
+ $(condition)/<main-target-type>LIB/<link>shared/<address-model>/<strip>on : -Wl,-x ;
         flags darwin.link OPTIONS
- $(condition)/<main-target-type>EXE/<address-model>32/<debug-symbols>off : -s ;
+ $(condition)/<main-target-type>EXE/<address-model>32/<strip>on : -s ;
         flags darwin.link OPTIONS
- $(condition)/<main-target-type>EXE/<address-model>/<debug-symbols>off : -s ;
+ $(condition)/<main-target-type>EXE/<address-model>/<strip>on : -s ;
     }
     else
     {
         # Otherwise we need to find a strip program to use. And hence
         # also tell the link action that we need to use a strip
         # post-process.
- flags darwin.link NEED_STRIP $(condition)/<debug-symbols>off : "" ;
+ flags darwin.link NEED_STRIP $(condition)/<strip>on : "" ;
         strip =
             [ common.get-invocation-command darwin
                 : strip : [ feature.get-values <striper> : $(options) ] : $(bin) : search-path ] ;
         flags darwin.link .STRIP $(condition) : $(strip[1]) ;
         if $(.debug-configuration)
         {
- ECHO notice: using strip :: $(condition) :: $(strip[1]) ;
+ ECHO notice: using strip for $(condition) at $(strip[1]) ;
         }
     }
 
@@ -202,7 +184,7 @@
     flags darwin.archive .LIBTOOL $(condition) : $(archiver[1]) ;
     if $(.debug-configuration)
     {
- ECHO notice: using archiver :: $(condition) :: $(archiver[1]) ;
+ ECHO notice: using archiver for $(condition) at $(archiver[1]) ;
     }
     
     # - Initialize the SDKs available in the root for this tool.
@@ -220,6 +202,94 @@
     #~ EXIT ;
 }
 
+# Add and set options for a discovered SDK version.
+local rule init-sdk ( condition * : root ? : version + : version-feature ? )
+{
+ local rule version-to-feature ( version + )
+ {
+ switch $(version[1])
+ {
+ case iphone* :
+ {
+ return $(version[1])-$(version[2-]:J=.) ;
+ }
+ case mac* :
+ {
+ return $(version[2-]:J=.) ;
+ }
+ case * :
+ {
+ return $(version:J=.) ;
+ }
+ }
+ }
+
+ if $(version-feature)
+ {
+ if $(.debug-configuration)
+ {
+ ECHO notice: available sdk for $(condition)/<macosx-version>$(version-feature) at $(sdk) ;
+ }
+
+ # Add the version to the features for specifying them.
+ if ! $(version-feature) in [ feature.values macosx-version ]
+ {
+ feature.extend macosx-version : $(version-feature) ;
+ }
+ if ! $(version-feature) in [ feature.values macosx-version-min ]
+ {
+ feature.extend macosx-version-min : $(version-feature) ;
+ }
+
+ # Set the flags the version needs to compile with, first
+ # generic options.
+ flags darwin.compile OPTIONS $(condition)/<macosx-version>$(version-feature)
+ : -isysroot $(sdk) ;
+ flags darwin.link OPTIONS $(condition)/<macosx-version>$(version-feature)
+ : -isysroot $(sdk) ;
+
+ # Then device variation options.
+ switch $(version[1])
+ {
+ case iphone* :
+ {
+ flags darwin.compile OPTIONS <macosx-version-min>$(version-feature)
+ : -miphoneos-version-min=$(version[2-]:J=.) ;
+ flags darwin.link OPTIONS <macosx-version-min>$(version-feature)
+ : -miphoneos-version-min=$(version[2-]:J=.) ;
+ }
+
+ case mac* :
+ {
+ flags darwin.compile OPTIONS <macosx-version-min>$(version-feature)
+ : -miphoneos-version-min=$(version[2-]:J=.) ;
+ flags darwin.link OPTIONS <macosx-version-min>$(version-feature)
+ : -miphoneos-version-min=$(version[2-]:J=.) ;
+ }
+ }
+
+ return $(version-feature) ;
+ }
+ else if $(version[4])
+ {
+ # We have a patch version of an SDK. We want to set up
+ # both the specific patch version, and the minor version.
+ # So we recurse to set up the minor version. Plus the minor version.
+ return
+ [ init-sdk $(condition) : $(root)
+ : $(version[1-3]) : [ version-to-feature $(version[1-3]) ] ]
+ [ init-sdk $(condition) : $(root)
+ : $(version) : [ version-to-feature $(version) ] ] ;
+ }
+ else
+ {
+ # Yes, this is intentionally recursive.
+ return
+ [ init-sdk $(condition) : $(root)
+ : $(version) : [ version-to-feature $(version) ] ] ;
+ }
+}
+
 # Determine the MacOSX SDK versions installed and their locations.
 local rule init-available-sdk-versions ( condition * : root ? )
 {
@@ -231,45 +301,29 @@
     {
         local sdk-match = [ MATCH ([^0-9]+)([0-9]+)[.]([0-9x]+)[.]?([0-9x]+)? : $(sdk:D=) ] ;
         local sdk-platform = $(sdk-match[1]:L) ;
- local sdk-version = $(sdk-match[2]).$(sdk-match[3]) ;
+ local sdk-version = $(sdk-match[2-]) ;
         if $(sdk-version)
         {
             switch $(sdk-platform)
             {
                 case macosx :
                 {
- sdk-version = $(sdk-version) ;
+ sdk-version = mac $(sdk-version) ;
                 }
                 case iphoneos :
                 {
- if $(sdk-match[4])
- {
- sdk-version = $(sdk-version).$(sdk-match[4]) ;
- }
- sdk-version = iphone-$(sdk-version) ;
+ sdk-version = iphone $(sdk-version) ;
                 }
                 case iphonesimulator :
                 {
- if $(sdk-match[4])
- {
- sdk-version = $(sdk-version).$(sdk-match[4]) ;
- }
- sdk-version = iphonesim-$(sdk-version) ;
+ sdk-version = iphonesim $(sdk-version) ;
                 }
                 case * :
                 {
                     sdk-version = $(sdk-version:J=-) ;
                 }
             }
- result += $(sdk-version) ;
- flags darwin.compile OPTIONS $(condition)/<macosx-version>$(sdk-version)
- : -isysroot $(sdk) ;
- flags darwin.link OPTIONS $(condition)/<macosx-version>$(sdk-version)
- : -isysroot $(sdk) ;
- if $(.debug-configuration)
- {
- ECHO notice: available sdk :: $(condition)/<macosx-version>$(sdk-version) :: $(sdk) ;
- }
+ result += [ init-sdk $(condition) : $(sdk) : $(sdk-version) ] ;
         }
     }
     return $(result) ;
@@ -278,31 +332,6 @@
 # Generic options.
 flags darwin.compile OPTIONS <flags> ;
 
-# Minimal OSX target option. Note that the default is for the min-version
-# option to not be included to let the compiler default take hold.
-for local macosx-version in $(.macosx-versions)
-{
- switch $(macosx-version)
- {
- case iphone* :
- {
- local version-match = [ MATCH ([^0-9]+)([0-9.]+) : $(macosx-version) ] ;
- flags darwin.compile OPTIONS <macosx-version-min>$(macosx-version)
- : -miphoneos-version-min=$(version-match[2]) ;
- flags darwin.link OPTIONS <macosx-version-min>$(macosx-version)
- : -miphoneos-version-min=$(version-match[2]) ;
- }
-
- case * :
- {
- flags darwin.compile OPTIONS <macosx-version-min>$(macosx-version)
- : -mmacosx-version-min=$(macosx-version) ;
- flags darwin.link OPTIONS <macosx-version-min>$(macosx-version)
- : -mmacosx-version-min=$(macosx-version) ;
- }
- }
-}
-
 # The following adds objective-c support to darwin.
 # Thanks to http://thread.gmane.org/gmane.comp.lib.boost.build/13759
 
@@ -468,12 +497,15 @@
     # The -F option specifies the directories where a framework
     # is searched for. So, if we find <framework> feature
     # with some path, we need to generate property -F option.
- local framework-path = [ on $(target) return $(FRAMEWORK:D) ] ;
+ local framework-paths = [ on $(target) return $(FRAMEWORK:D) ] ;
 
     # Be sure to generate no -F if there's no path.
- if $(framework-path) != ""
+ for local framework-path in $(framework-paths)
     {
- FRAMEWORK_PATH on $(target) += -F$(framework-path) ;
+ if $(framework-path) != ""
+ {
+ FRAMEWORK_PATH on $(target) += -F$(framework-path) ;
+ }
     }
 }
 

Modified: branches/release/tools/build/v2/tools/docutils.jam
==============================================================================
--- branches/release/tools/build/v2/tools/docutils.jam (original)
+++ branches/release/tools/build/v2/tools/docutils.jam 2010-02-17 04:49:08 EST (Wed, 17 Feb 2010)
@@ -44,9 +44,7 @@
 
 rule init ( docutils-dir ? : tools-dir ? )
 {
- ECHO docutils-dir= $(docutils-dir) ;
     docutils-dir ?= [ modules.peek : DOCUTILS_DIR ] ;
- ECHO tools-dir= $(tools-dir) ;
     tools-dir ?= $(docutils-dir)/tools ;
 
     if ! $(.initialized)

Modified: branches/release/tools/build/v2/tools/doxygen.jam
==============================================================================
--- branches/release/tools/build/v2/tools/doxygen.jam (original)
+++ branches/release/tools/build/v2/tools/doxygen.jam 2010-02-17 04:49:08 EST (Wed, 17 Feb 2010)
@@ -36,6 +36,7 @@
 import alias ;
 import common ;
 import modules ;
+import project ;
 
 
 # Use to specify extra configuration paramters. These get translated
@@ -60,6 +61,9 @@
 # The title for the resulting BoostBook reference section.
 feature.feature doxygen.doxproc.title : : free ;
 
+# Location for images when generating XML
+feature.feature doxygen:xml-imagedir : : free ;
+
 # Doxygen configuration input file.
 type.register DOXYFILE : doxyfile ;
 
@@ -75,6 +79,7 @@
 # Redirection HTML file to HTML multifile directory.
 type.register DOXYGEN_HTML : : HTML ;
 
+type.register DOXYGEN_XML_IMAGES : doxygen-xml-images ;
 
 # Initialize the Doxygen module. Parameters are:
 # name: the name of the 'doxygen' executable. If not specified, the name
@@ -152,6 +157,8 @@
             : DOXYFILE : DOXYGEN_HTML_MULTIFILE ;
         generators.register-standard doxygen.html-redirect
             : DOXYGEN_HTML_MULTIFILE : DOXYGEN_HTML ;
+ generators.register-standard doxygen.copy-latex-pngs
+ : DOXYGEN_HTML : DOXYGEN_XML_IMAGES ;
 
         IMPORT $(__name__) : doxygen : : doxygen ;
     }
@@ -343,6 +350,129 @@
         : true ;
 }
 
+rule copy-latex-pngs ( target : source : requirements * )
+{
+ local directory = [ path.native
+ [ feature.get-values <doxygen:xml-imagedir> :
+ $(requirements) ] ] ;
+ if [ os.name ] = NT
+ {
+ CP on $(target) = copy /y ;
+ MKDIR on $(target) = mkdir ;
+ FROM on $(target) = \\*.png ;
+ TOHTML on $(target) = .\\html\\$(directory) ;
+ TOPDF on $(target) = \\$(directory) ;
+ }
+ else
+ {
+ CP on $(target) = cp ;
+ MKDIR on $(target) = mkdir -p ;
+ FROM on $(target) = /*.png ;
+ TOHTML on $(target) = ./html/$(directory) ;
+ TOPDF on $(target) = $(target:D)/$(directory) ;
+ }
+}
+
+actions copy-latex-pngs
+{
+ $(MKDIR) $(TOHTML)
+ $(MKDIR) $(<:D)$(TOPDF)
+ $(CP) $(>:S=)$(FROM) $(TOHTML)
+ $(CP) $(>:S=)$(FROM) $(<:D)$(TOPDF)
+ echo "Stamped" > "$(<)"
+}
+
+# building latex images for doxygen XML depends
+# on latex, dvips, and ps being in your PATH.
+# This is true for most Unix installs, but
+# not on Win32, where you will need to install
+# MkTex and Ghostscript and add these tools
+# to your path.
+
+actions check-latex
+{
+ latex -version >$(<)
+}
+
+actions check-dvips
+{
+ dvips -version >$(<)
+}
+
+if [ os.name ] = "NT"
+{
+ actions check-gs
+ {
+ gswin32c -version >$(<)
+ }
+}
+else
+{
+ actions check-gs
+ {
+ gs -version >$(<)
+ }
+}
+
+rule check-tools ( )
+{
+ if ! $(.check-tools-targets)
+ {
+ # Find the root project.
+ local root-project = [ project.current ] ;
+ root-project = [ $(root-project).project-module ] ;
+ while
+ [ project.attribute $(root-project) parent-module ] &&
+ [ project.attribute $(root-project) parent-module ] != user-config
+ {
+ root-project =
+ [ project.attribute $(root-project) parent-module ] ;
+ }
+
+ .latex.check = [ new file-target latex.check
+ :
+ : [ project.target $(root-project) ]
+ : [ new action : doxygen.check-latex ]
+ :
+ ] ;
+ .dvips.check = [ new file-target dvips.check
+ :
+ : [ project.target $(root-project) ]
+ : [ new action : doxygen.check-dvips ]
+ :
+ ] ;
+ .gs.check = [ new file-target gs.check
+ :
+ : [ project.target $(root-project) ]
+ : [ new action : doxygen.check-gs ]
+ :
+ ] ;
+ .check-tools-targets = $(.latex.check) $(.dvips.check) $(.gs.check) ;
+ }
+ return $(.check-tools-targets) ;
+}
+
+project.initialize $(__name__) ;
+project doxygen ;
+
+class doxygen-check-tools-target-class : basic-target
+{
+ import doxygen ;
+ rule construct ( name : sources * : property-set )
+ {
+ return [ property-set.empty ] [ doxygen.check-tools ] ;
+ }
+}
+
+local project = [ project.current ] ;
+
+targets.main-target-alternative
+ [ new doxygen-check-tools-target-class check-tools : $(project)
+ : [ targets.main-target-sources : check-tools : no-renaming ]
+ : [ targets.main-target-requirements : $(project) ]
+ : [ targets.main-target-default-build : $(project) ]
+ : [ targets.main-target-usage-requirements : $(project) ]
+ ] ;
 
 # User-level rule to generate BoostBook XML from a set of headers via Doxygen.
 #
@@ -412,6 +542,43 @@
         requirements = [ property.change $(requirements) : <location> ] ;
         local target-xml = $(target:B=$(target:B)-xml) ;
 
+ # Check whether we need to build images
+ local images-location =
+ [ feature.get-values <doxygen:xml-imagedir> : $(requirements) ] ;
+ if $(images-location)
+ {
+ doxygen $(target).doxygen-xml-images.html : $(sources)
+ : $(requirements)
+ <doxygen:param>QUIET=YES
+ <doxygen:param>WARNINGS=NO
+ <doxygen:param>WARN_IF_UNDOCUMENTED=NO
+ <dependency>/doxygen//check-tools ;
+ $(project).mark-target-as-explicit
+ $(target).doxygen-xml-images.html ;
+
+ targets.main-target-alternative
+ [ new typed-target $(target).doxygen-xml-images
+ : $(project) : DOXYGEN_XML_IMAGES
+ : $(target).doxygen-xml-images.html
+ : [ targets.main-target-requirements $(requirements)
+ : $(project) ]
+ : [ targets.main-target-default-build $(default-build)
+ : $(project) ]
+ ] ;
+
+ $(project).mark-target-as-explicit
+ $(target).doxygen-xml-images ;
+
+ if ! [ regex.match "^(.*/)$" : $(images-location) ]
+ {
+ images-location = $(images-location)/ ;
+ }
+
+ requirements +=
+ <dependency>$(target).doxygen-xml-images
+ <xsl:param>boost.doxygen.formuladir=$(images-location) ;
+ }
+
         ## The doxygen configuration file.
         targets.main-target-alternative
             [ new typed-target $(target-xml:S=.tag) : $(project) : DOXYFILE

Modified: branches/release/tools/build/v2/tools/gcc.jam
==============================================================================
--- branches/release/tools/build/v2/tools/gcc.jam (original)
+++ branches/release/tools/build/v2/tools/gcc.jam 2010-02-17 04:49:08 EST (Wed, 17 Feb 2010)
@@ -25,6 +25,7 @@
 import regex ;
 import set ;
 import unix ;
+import fortran ;
 
 
 if [ MATCH (--debug-configuration) : [ modules.peek : ARGV ] ]
@@ -224,6 +225,7 @@
 generators.register-c-compiler gcc.compile.c++ : CPP : OBJ : <toolset>gcc ;
 generators.register-c-compiler gcc.compile.c : C : OBJ : <toolset>gcc ;
 generators.register-c-compiler gcc.compile.asm : ASM : OBJ : <toolset>gcc ;
+generators.register-fortran-compiler gcc.compile.fortran : FORTRAN FORTRAN90 : OBJ : <toolset>gcc ;
 
 # pch support
 
@@ -394,12 +396,19 @@
     SONAME_OPTION = -h ;
 }
 
+# HPUX, for some reason, seem to use '+h', not '-h'.
+if [ os.name ] = HPUX
+{
+ HAVE_SONAME = "" ;
+ SONAME_OPTION = +h ;
+}
 
 toolset.flags gcc.compile USER_OPTIONS <cflags> ;
 toolset.flags gcc.compile.c++ USER_OPTIONS <cxxflags> ;
 toolset.flags gcc.compile DEFINES <define> ;
 toolset.flags gcc.compile INCLUDES <include> ;
 toolset.flags gcc.compile.c++ TEMPLATE_DEPTH <c++-template-depth> ;
+toolset.flags gcc.compile.fortran USER_OPTIONS <fflags> ;
 
 rule compile.c++.pch ( targets * : sources * : properties * )
 {
@@ -471,6 +480,10 @@
     DEPENDS $(<) : [ on $(<) return $(PCH_FILE) ] ;
 }
 
+rule compile.fortran
+{
+}
+
 actions compile.c++ bind PCH_FILE
 {
     "$(CONFIG_COMMAND)" $(LANG) -ftemplate-depth-$(TEMPLATE_DEPTH) $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(PCH_FILE:D)" -I"$(INCLUDES)" -c -o "$(<:W)" "$(>:W)"
@@ -481,6 +494,11 @@
     "$(CONFIG_COMMAND)" $(LANG) $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(PCH_FILE:D)" -I"$(INCLUDES)" -c -o "$(<)" "$(>)"
 }
 
+actions compile.fortran
+{
+ "$(CONFIG_COMMAND)" $(LANG) $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(PCH_FILE:D)" -I"$(INCLUDES)" -c -o "$(<)" "$(>)"
+}
+
 rule compile.asm
 {
     LANG on $(<) = "-x assembler-with-cpp" ;
@@ -676,7 +694,7 @@
         # as opposed to -s since icc (intel's compiler) is generally
         # option-compatible with and inherits from the gcc toolset, but does not
         # support -s.
- toolset.flags $(toolset).link OPTIONS $(condition)/<debug-symbols>off : -Wl,--strip-all : unchecked ;
+ toolset.flags $(toolset).link OPTIONS $(condition)/<strip>on : -Wl,--strip-all : unchecked ;
         toolset.flags $(toolset).link RPATH $(condition) : <dll-path> : unchecked ;
         toolset.flags $(toolset).link RPATH_LINK $(condition) : <xdll-path> : unchecked ;
         toolset.flags $(toolset).link START-GROUP $(condition) : -Wl,--start-group : unchecked ;
@@ -731,7 +749,7 @@
 
     case hpux :
         {
- toolset.flags $(toolset).link OPTIONS $(condition)/<debug-symbols>off
+ toolset.flags $(toolset).link OPTIONS $(condition)/<strip>on
             : -Wl,-s : unchecked ;
         toolset.flags $(toolset).link OPTIONS $(condition)/<link>shared
             : -fPIC : unchecked ;
@@ -740,7 +758,7 @@
     case osf :
         {
         # No --strip-all, just -s.
- toolset.flags $(toolset).link OPTIONS $(condition)/<debug-symbols>off
+ toolset.flags $(toolset).link OPTIONS $(condition)/<strip>on
             : -Wl,-s : unchecked ;
         toolset.flags $(toolset).link RPATH $(condition) : <dll-path>
             : unchecked ;
@@ -752,7 +770,7 @@
 
     case sun :
         {
- toolset.flags $(toolset).link OPTIONS $(condition)/<debug-symbols>off
+ toolset.flags $(toolset).link OPTIONS $(condition)/<strip>on
             : -Wl,-s : unchecked ;
         toolset.flags $(toolset).link RPATH $(condition) : <dll-path>
             : unchecked ;

Modified: branches/release/tools/build/v2/tools/gfortran.jam
==============================================================================
--- branches/release/tools/build/v2/tools/gfortran.jam (original)
+++ branches/release/tools/build/v2/tools/gfortran.jam 2010-02-17 04:49:08 EST (Wed, 17 Feb 2010)
@@ -36,4 +36,4 @@
   gcc -Wall $(OPTIONS) -D$(DEFINES) -I$(INCLUDES) -c -o "$(<)" "$(>)"
 }
 
-generators.register-fortran-compiler gfortran.compile.fortran : FORTRAN : OBJ ;
+generators.register-fortran-compiler gfortran.compile.fortran : FORTRAN FORTRAN90 : OBJ ;

Modified: branches/release/tools/build/v2/tools/intel-linux.jam
==============================================================================
--- branches/release/tools/build/v2/tools/intel-linux.jam (original)
+++ branches/release/tools/build/v2/tools/intel-linux.jam 2010-02-17 04:49:08 EST (Wed, 17 Feb 2010)
@@ -32,7 +32,8 @@
 
 toolset.inherit-rules intel-linux : gcc ;
 toolset.inherit-flags intel-linux : gcc
- : <inlining>off <inlining>on <inlining>full <optimization>space
+ : <inlining>off <inlining>on <inlining>full
+ <optimization>space <optimization>speed
           <warnings>off <warnings>all <warnings>on
         ;
         
@@ -103,6 +104,7 @@
 SPACE = " " ;
 
 flags intel-linux.compile OPTIONS <optimization>space : "-O1" ; # no specific space optimization flag in icc
+flags intel-linux.compile OPTIONS <optimization>speed : "-O3 -ip" ; # no specific space optimization flag in icc
 
 flags intel-linux.compile OPTIONS <warnings>off : -w0 ;
 flags intel-linux.compile OPTIONS <warnings>on : -w1 ;
@@ -147,7 +149,12 @@
 #
 actions compile.c++.pch
 {
- rm -f "$(<)" && "$(CONFIG_COMMAND)" -x c++-header $(OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -c -pch-create "$(<)" "$(>)"
+ rm -f "$(<)" && "$(CONFIG_COMMAND)" -x c++-header $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -c -pch-create "$(<)" "$(>)"
+}
+
+actions compile.fortran
+{
+ "ifort" -c $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -c -o "$(<)" "$(>)"
 }
 
 rule compile.c.pch ( targets * : sources * : properties * )
@@ -159,7 +166,7 @@
 
 actions compile.c.pch
 {
- rm -f "$(<)" && "$(CONFIG_COMMAND)" -x c-header $(OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -c -pch-create "$(<)" "$(>)"
+ rm -f "$(<)" && "$(CONFIG_COMMAND)" -x c-header $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -c -pch-create "$(<)" "$(>)"
 }
 
 rule link ( targets * : sources * : properties * )
@@ -186,7 +193,7 @@
 # Differ from 'link' above only by -shared.
 actions link.dll bind LIBRARIES
 {
- "$(CONFIG_COMMAND)" -L"$(LINKPATH)" -Wl,-R$(SPACE)-Wl,"$(RPATH)" -o "$(<)" -Wl,-soname$(SPACE)-Wl,$(<[1]:D=) -shared "$(>)" "$(LIBRARIES)" -l$(FINDLIBS-SA) -l$(FINDLIBS-ST) $(OPTIONS)
+ "$(CONFIG_COMMAND)" -L"$(LINKPATH)" -Wl,-R$(SPACE)-Wl,"$(RPATH)" -o "$(<)" -Wl,-soname$(SPACE)-Wl,$(<[1]:D=) -shared "$(>)" "$(LIBRARIES)" -l$(FINDLIBS-SA) -l$(FINDLIBS-ST) $(OPTIONS) $(USER_OPTIONS)
 }
 
 

Modified: branches/release/tools/build/v2/tools/mpi.jam
==============================================================================
--- branches/release/tools/build/v2/tools/mpi.jam (original)
+++ branches/release/tools/build/v2/tools/mpi.jam 2010-02-17 04:49:08 EST (Wed, 17 Feb 2010)
@@ -163,7 +163,20 @@
                local add = [ add_feature $(prefix) $(name) $(cmdline) ] ;
 
                if $(add) {
- result += $(add[1]) ;
+
+ if $(add[1]) = <find-shared-library>pthread
+ {
+ # Uhm. It's not really nice that this MPI implementation
+ # uses -lpthread as opposed to -pthread. We do want to
+ # set <threading>multi, instead of -lpthread.
+ result += "<threading>multi" ;
+ MPI_EXTRA_REQUIREMENTS += "<threading>multi" ;
+ }
+ else
+ {
+ result += $(add[1]) ;
+ }
+
                   cmdline = $(add[2]) ;
                   matched = yes ;
                }
@@ -205,7 +218,7 @@
     if $(otherflags) {
        for unknown in $(unknown-features)
        {
- result += "$(unknown)$(otherflags)" ;
+ result += "$(unknown)$(otherflags:J= )" ;
        }
     }
 

Modified: branches/release/tools/build/v2/tools/msvc.jam
==============================================================================
--- branches/release/tools/build/v2/tools/msvc.jam (original)
+++ branches/release/tools/build/v2/tools/msvc.jam 2010-02-17 04:49:08 EST (Wed, 17 Feb 2010)
@@ -378,7 +378,7 @@
 # syntax highlighting in the messy N-quoted code below.
 actions compile-c-c++-pch
 {
- $(.CC) @"@($(<[1]:W).rsp:E="$(>[2]:W)" -Fo"$(<[2]:W)" -Yc"$(>[1]:D=)" $(YLOPTION)"__bjam_pch_symbol_$(>[1]:D=)" -Fp"$(<[1]:W)" $(CC_RSPLINE))" "@($(<[1]:W).cpp:E=#include $(.escaped-double-quote)$(>[1]:D=)$(.escaped-double-quote))" $(.CC.FILTER)
+ $(.CC) @"@($(<[1]:W).rsp:E="$(>[2]:W)" -Fo"$(<[2]:W)" -Yc"$(>[1]:D=)" $(YLOPTION)"__bjam_pch_symbol_$(>[1]:D=)" -Fp"$(<[1]:W)" $(CC_RSPLINE))" "@($(<[1]:W).cpp:E=#include $(.escaped-double-quote)$(>[1]:D=)$(.escaped-double-quote)$(.nl))" $(.CC.FILTER)
 }
 
 
@@ -1322,7 +1322,7 @@
 
 
 # Known toolset versions, in order of preference.
-.known-versions = 10.0 9.0 9.0express 8.0 8.0express 7.1 7.1toolkit 7.0 6.0 ;
+.known-versions = 10.0 10.0express 9.0 9.0express 8.0 8.0express 7.1 7.1toolkit 7.0 6.0 ;
 
 # Version aliases.
 .version-alias-6 = 6.0 ;
@@ -1342,6 +1342,7 @@
 .version-9.0-reg = "VisualStudio\\9.0\\Setup\\VC" ;
 .version-9.0express-reg = "VCExpress\\9.0\\Setup\\VC" ;
 .version-10.0-reg = "VisualStudio\\10.0\\Setup\\VC" ;
+.version-10.0express-reg = "VCExpress\\10.0\\Setup\\VC" ;
 
 # Visual C++ Toolkit 2003 does not store its installation path in the registry.
 # The environment variable 'VCToolkitInstallDir' and the default installation

Modified: branches/release/tools/build/v2/tools/pathscale.jam
==============================================================================
--- branches/release/tools/build/v2/tools/pathscale.jam (original)
+++ branches/release/tools/build/v2/tools/pathscale.jam 2010-02-17 04:49:08 EST (Wed, 17 Feb 2010)
@@ -30,13 +30,13 @@
   toolset.flags pathscale.compile.fortran90 OPTIONS $(condition) :
     [ feature.get-values <fflags> : $(options) ] : unchecked ;
 
- command_c = $(command_c[1--2]) $(command[-1]:B=pathCC) ;
+ command_c = $(command_c[1--2]) $(command[-1]:B=pathcc) ;
 
   toolset.flags pathscale CONFIG_C_COMMAND $(condition) : $(command_c) ;
 
   # fortran support
   local f-command = [ common.get-invocation-command pathscale : pathf90 : $(command) ] ;
- local command_f = $(command_f[1--2]) $(f-command[-1]:B=pathf77) ;
+ local command_f = $(command_f[1--2]) $(f-command[-1]:B=pathf90) ;
   local command_f90 = $(command_f[1--2]) $(f-command[-1]:B=pathf90) ;
 
   toolset.flags pathscale CONFIG_F_COMMAND $(condition) : $(command_f) ;
@@ -87,7 +87,7 @@
 
 actions compile.fortran
 {
- "$(CONFIG_F_COMMAND)" -f77 $(OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -c -o "$(<)" "$(>)"
+ "$(CONFIG_F_COMMAND)" $(OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -c -o "$(<)" "$(>)"
 }
 
 rule compile.fortran90 ( targets * : sources * : properties * )

Modified: branches/release/tools/build/v2/tools/pgi.jam
==============================================================================
--- branches/release/tools/build/v2/tools/pgi.jam (original)
+++ branches/release/tools/build/v2/tools/pgi.jam 2010-02-17 04:49:08 EST (Wed, 17 Feb 2010)
@@ -58,7 +58,7 @@
 # Declare flags and actions for compilation
 flags pgi.compile OPTIONS : -Kieee ;
 flags pgi.compile OPTIONS <link>shared : -fpic ;
-flags pgi.compile OPTIONS <debug-symbols>on : -g ;
+flags pgi.compile OPTIONS <debug-symbols>on : -gopt ;
 flags pgi.compile OPTIONS <profiling>on : -xprofile=tcov ;
 flags pgi.compile OPTIONS <optimization>speed : -fast -Mx,8,0x10000000 ;
 flags pgi.compile OPTIONS <optimization>space : -xO2 -xspace ;
@@ -92,7 +92,7 @@
 }
 
 # Declare flags and actions for linking
-flags pgi.link OPTIONS <debug-symbols>on : -g ;
+flags pgi.link OPTIONS <debug-symbols>on : -gopt ;
 # Strip the binary when no debugging is needed
 flags pgi.link OPTIONS <debug-symbols>off : -s ;
 flags pgi.link OPTIONS <profiling>on : -xprofile=tcov ;

Modified: branches/release/tools/build/v2/tools/quickbook.jam
==============================================================================
--- branches/release/tools/build/v2/tools/quickbook.jam (original)
+++ branches/release/tools/build/v2/tools/quickbook.jam 2010-02-17 04:49:08 EST (Wed, 17 Feb 2010)
@@ -256,9 +256,9 @@
 {
     rule pattern ( )
     {
- return "\\[[ \t]*include[ \t]+([^]]+)\\]"
- "\\[[ \t]*include:[a-zA-Z0-9_]+[ \t]+([^]]+)\\]"
- "\\[[ \t]*import[ \t]+([^]]+)\\]" ;
+ return "\\[[ ]*include[ ]+([^]]+)\\]"
+ "\\[[ ]*include:[a-zA-Z0-9_]+[ ]+([^]]+)\\]"
+ "\\[[ ]*import[ ]+([^]]+)\\]" ;
     }
 }
 

Modified: branches/release/tools/build/v2/tools/stage.jam
==============================================================================
--- branches/release/tools/build/v2/tools/stage.jam (original)
+++ branches/release/tools/build/v2/tools/stage.jam 2010-02-17 04:49:08 EST (Wed, 17 Feb 2010)
@@ -354,18 +354,38 @@
 
     rule run ( project name ? : property-set : source : multiple ? )
     {
+ local need-relink ;
+
         if [ $(property-set).get <os> ] in NT CYGWIN ||
             [ $(property-set).get <target-os> ] in windows cygwin
         {
- # Relinking is never needed on NT.
- return [ stage.copy-file $(project)
- : $(source) : $(property-set) ] ;
         }
         else
         {
+ # See if the dll-path properties are not changed during
+ # install. If so, copy, don't relink.
+ local a = [ $(source).action ] ;
+ local p = [ $(a).properties ] ;
+ local original = [ $(p).get <dll-path> ] ;
+ local current = [ $(property-set).get <dll-path> ] ;
+
+ if $(current) != $(original)
+ {
+ need-relink = true ;
+ }
+ }
+
+
+ if $(need-relink)
+ {
             return [ stage.relink-file $(project)
               : $(source) : $(property-set) ] ;
         }
+ else
+ {
+ return [ stage.copy-file $(project)
+ : $(source) : $(property-set) ] ;
+ }
     }
 }
 

Modified: branches/release/tools/build/v2/tools/types/lib.jam
==============================================================================
--- branches/release/tools/build/v2/tools/types/lib.jam (original)
+++ branches/release/tools/build/v2/tools/types/lib.jam 2010-02-17 04:49:08 EST (Wed, 17 Feb 2010)
@@ -16,6 +16,7 @@
 type.register STATIC_LIB : a lib : LIB ;
 
 type.set-generated-target-suffix STATIC_LIB : <target-os>windows : lib ;
+type.set-generated-target-suffix STATIC_LIB : <toolset>gcc <target-os>windows : a ;
 type.set-generated-target-suffix STATIC_LIB : <target-os>cygwin : lib ;
 type.set-generated-target-prefix STATIC_LIB : : lib ;
 

Modified: branches/release/tools/build/v2/tools/vacpp.jam
==============================================================================
--- branches/release/tools/build/v2/tools/vacpp.jam (original)
+++ branches/release/tools/build/v2/tools/vacpp.jam 2010-02-17 04:49:08 EST (Wed, 17 Feb 2010)
@@ -27,7 +27,7 @@
               
     command = [ common.get-invocation-command vacpp : xlC
         : $(command) : "/usr/vacpp/bin/xlC" ] ;
-
+
     common.handle-options vacpp : $(condition) : $(command) : $(options) ;
 }
 
@@ -92,7 +92,7 @@
 else
 {
     # Linux PPC
- flags vacpp.compile CFLAGS <link>shared : -qpic ;
+ flags vacpp.compile CFLAGS <link>shared : -qpic=large ;
     flags vacpp FINDLIBS : rt ;
 }
 
@@ -100,13 +100,13 @@
 flags vacpp CFLAGS <profiling>on : -pg ;
 flags vacpp LINKFLAGS <profiling>on : -pg ;
 
-flags vacpp CFLAGS <cflags> ;
-flags vacpp C++FLAGS <cxxflags> ;
+flags vacpp.compile OPTIONS <cflags> ;
+flags vacpp.compile.c++ OPTIONS <cxxflags> ;
 flags vacpp DEFINES <define> ;
 flags vacpp UNDEFS <undef> ;
 flags vacpp HDRS <include> ;
 flags vacpp STDHDRS <sysinclude> ;
-flags vacpp LINKFLAGS <linkflags> ;
+flags vacpp.link OPTIONS <linkflags> ;
 flags vacpp ARFLAGS <arflags> ;
 
 flags vacpp LIBPATH <library-path> ;
@@ -120,25 +120,28 @@
 flags vacpp VA_CXX_COMPILER <threading>single : xlC ;
 flags vacpp VA_CXX_COMPILER <threading>multi : xlC_r ;
 
+SPACE = " " ;
+
+flags vacpp.link.dll HAVE_SONAME <target-os>linux : "" ;
 
 actions vacpp.link bind NEEDLIBS
 {
- $(VA_CXX_COMPILER) $(EXE-LINKFLAGS) $(LINKFLAGS) -o "$(<[1])" -L$(LIBPATH) -L$(STDLIBPATH) "$(>)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS)
+ $(VA_CXX_COMPILER) $(EXE-LINKFLAGS) $(LINKFLAGS) -o "$(<[1])" -L$(LIBPATH) -L$(STDLIBPATH) "$(>)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS) $(OPTIONS) $(USER_OPTIONS)
 }
 
 actions vacpp.link.dll bind NEEDLIBS
 {
- xlC_r -G $(LINKFLAGS) -o "$(<[1])" -L$(LIBPATH) -L$(STDLIBPATH) "$(>)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS)
+ xlC_r -G $(LINKFLAGS) -o "$(<[1])" $(HAVE_SONAME)-Wl,-soname$(SPACE)-Wl,$(<[-1]:D=) -L$(LIBPATH) -L$(STDLIBPATH) "$(>)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS) $(OPTIONS) $(USER_OPTIONS)
 }
 
 actions vacpp.compile.c
 {
- $(VA_C_COMPILER) -c -I$(BOOST_ROOT) -U$(UNDEFS) -D$(DEFINES) $(CFLAGS) -I"$(HDRS)" -I"$(STDHDRS)" -o "$(<)" "$(>)"
+ $(VA_C_COMPILER) -c $(OPTIONS) $(USER_OPTIONS) -I$(BOOST_ROOT) -U$(UNDEFS) -D$(DEFINES) $(CFLAGS) -I"$(HDRS)" -I"$(STDHDRS)" -o "$(<)" "$(>)"
 }
 
 actions vacpp.compile.c++
 {
- $(VA_CXX_COMPILER) -c -I$(BOOST_ROOT) -U$(UNDEFS) -D$(DEFINES) $(CFLAGS) $(C++FLAGS) -I"$(HDRS)" -I"$(STDHDRS)" -o "$(<)" "$(>)"
+ $(VA_CXX_COMPILER) -c $(OPTIONS) $(USER_OPTIONS) -I$(BOOST_ROOT) -U$(UNDEFS) -D$(DEFINES) $(CFLAGS) $(C++FLAGS) -I"$(HDRS)" -I"$(STDHDRS)" -o "$(<)" "$(>)"
 }
 
 actions updated together piecemeal vacpp.archive


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk