diff -pruN boost-jam-3.1.17.orig/build.jam boost-jam-3.1.17/build.jam
--- boost-jam-3.1.17.orig/build.jam	2008-11-30 01:32:38.693291036 +1100
+++ boost-jam-3.1.17/build.jam	2008-11-30 01:32:54.482291035 +1100
@@ -190,7 +190,7 @@ toolset darwin cc :  "-o " : -D
 ## GCC 2.x, 3.x, 4.x
 toolset gcc gcc : "-o " : -D
     : -pedantic -fno-strict-aliasing
-    [ opt --release : [ opt --symbols : -g : -s ] -O3 ]
+    [ opt --release : [ opt --symbols : -g : -s ] $(CFLAGS) -fno-strict-aliasing ]
     [ opt --debug : -g -O0 -fno-inline ]
     -I$(--python-include) -I$(--extra-include) -Wno-long-long
     : -L$(--python-lib[1]) -l$(--python-lib[2]) ;
diff -pruN boost-jam-3.1.17.orig/build.jam.orig boost-jam-3.1.17/build.jam.orig
--- boost-jam-3.1.17.orig/build.jam.orig	1970-01-01 10:00:00.000000000 +1000
+++ boost-jam-3.1.17/build.jam.orig	2008-11-29 14:28:30.000000000 +1100
@@ -0,0 +1,1021 @@
+#~ Copyright 2002-2007 Rene Rivera.
+#~ Distributed under the Boost Software License, Version 1.0.
+#~ (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+
+# Platform related specifics.
+if $(NT) { rule .path { return "$(<:J=\\)" ; } ./ = "/" ; }
+else if $(OS2) { rule .path { return "$(<:J=\\)" ; } ./ = "/" ; }
+else if $(VMS) { rule .path { return "[.$(<:J=/)]" ; } }
+else if $(MAC) { rule .path { return ":$(<:J=\:)" ; } }
+else { rule .path { return "$(<:J=/)" ; } }
+if $(VMS) { . = "_" ; }
+else { . = "." ; }
+./ ?= "" ;
+
+# Info about what we are building.
+_VERSION_ = 3 1 17 ;
+NAME = boost-jam ;
+VERSION = $(_VERSION_:J=$(.)) ;
+RELEASE = 1 ;
+LICENSE = LICENSE_1_0 ;
+
+# Generate development debug binaries?
+if --debug in $(ARGV)
+{
+    debug = true ;
+}
+
+if --profile in $(ARGV)
+{
+    profile = true ;
+}
+
+# Attempt to generate and/or build the grammar?
+if --grammar in $(ARGV)
+{
+    grammar = true ;
+}
+
+# Do we need to add a default build type argument?
+if ! ( --release in $(ARGV) ) &&
+   ! ( --debug in $(ARGV) ) &&
+   ! ( --profile in $(ARGV) )
+{
+    ARGV += --release ;
+}
+
+# Enable, and configure, Python hooks.
+with-python = ;
+python-location = [ MATCH --with-python=(.*) : $(ARGV) ] ;
+if $(python-location)
+{
+    with-python = true ;
+}
+if $(with-python)
+{
+    if $(NT)
+    {
+        --python-include = [ .path $(python-location) include ] ;
+        --python-lib = ;
+        for local v in 25 24 23 22
+        {
+            --python-lib ?=
+                [ GLOB [ .path $(python-location) libs ] : "python$(v).lib" ]
+                [ GLOB $(python-location) [ .path $(python-location) libs ]
+                    $(Path) $(PATH) $(path) : "python$(v).dll" ]
+                ;
+            if ! $(--python-lib[2])
+            {
+                --python-lib = ;
+            }
+        }
+        --python-lib = $(--python-lib[1]) ;
+    }
+    else if $(OS) = MACOSX
+    {
+        --python-include = [ .path $(python-location) Headers ] ;
+        --python-lib = $(python-location) Python ;
+    }
+    else
+    {
+        --python-include = ;
+        --python-lib = ;
+        for local v in 2.5 2.4 2.3 2.2
+        {
+            local inc = [ GLOB [ .path $(python-location) include ] : python$(v) ] ;
+            local lib = [ GLOB [ .path $(python-location) lib ] : libpython$(v)* ] ;
+            if $(inc) && $(lib)
+            {
+                --python-include ?= $(inc) ;
+                --python-lib ?= $(lib[1]:D) python$(v) ;
+            }
+        }
+    }
+}
+
+# Boehm GC?
+if --gc in $(ARGV)
+{
+    --boehm-gc = true ;
+}
+if $(--boehm-gc)
+{
+    --extra-include += [ .path [ PWD ] "boehm_gc" "include" ] ;
+}
+
+# Duma?
+if --duma in $(ARGV)
+{
+    --duma = true ;
+}
+if $(--duma)
+{
+    --extra-include += [ .path [ PWD ] "duma" ] ;
+}
+
+# An explicit root for the toolset? (trim spaces)
+toolset-root = [ MATCH --toolset-root=(.*) : $(ARGV) ] ;
+{
+    local t = [ MATCH "[ ]*(.*)" : $(toolset-root:J=" ") ] ;
+    toolset-root = ;
+    while $(t)
+    {
+        t = [ MATCH "([^ ]+)([ ]*)(.*)" : $(t) ] ;
+        toolset-root += $(t[1]) ;
+        if $(t[3]) { toolset-root += $(t[2]) ; }
+        t = $(t[3]) ;
+    }
+    toolset-root = $(toolset-root:J="") ;
+}
+
+# Configure the implemented toolsets. These are minimal
+# commands and options to compile the full Jam. When
+# adding new toolsets make sure to add them to the
+# "known" list also.
+
+rule toolset ( name command .type ? : opt.out + : opt.define * : flags * : linklibs * )
+{
+    .type ?= "" ;
+    tool.$(name)$(.type).cc ?= $(command) ;
+    tool.$(name)$(.type).opt.out ?= $(opt.out) ;
+    tool.$(name)$(.type).opt.define ?= $(opt.define) ;
+    tool.$(name)$(.type).flags ?= $(flags) ;
+    tool.$(name)$(.type).linklibs ?= $(linklibs) ;
+    if ! $(name) in $(toolsets) { toolsets += $(name) ; }
+}
+
+rule if-os ( os + : yes-opt * : no-opt * )
+    { if $(os) in $(OS) { return $(yes-opt) ; } else { return $(no-opt) ; } }
+
+rule opt ( type : yes-opt * : no-opt * )
+    { if $(type) in $(ARGV) { return $(yes-opt) ; } else { return $(no-opt) ; } }
+
+## HP-UX aCC compiler
+toolset acc cc : "-o " : -D
+    : -Ae
+    [ opt --release : -s -O3 ]
+    [ opt --debug : -g -pg ]
+    -I$(--python-include) -I$(--extra-include)
+    : -L$(--python-lib[1]) -l$(--python-lib[2]) ;
+## Borland C++ 5.5.x
+toolset borland bcc32 : -e -n : /D
+    : -WC -w- -q "-I$(toolset-root)Include" "-L$(toolset-root)Lib"
+    [ opt --release : -O2 -vi -w-inl ]
+    [ opt --debug : -v -Od -vi- ]
+    -I$(--python-include) -I$(--extra-include)
+    : $(--python-lib[1]) ;
+## Generic Unix cc
+if ! $(CC) { CC = cc ; }
+toolset cc $(CC) : "-o " : -D
+    : $(CFLAGS)
+    [ opt --release : -s -O ]
+    [ opt --debug : -g ]
+    -I$(--python-include) -I$(--extra-include)
+    : $(LIBS) -L$(--python-lib[1]) -l$(--python-lib[2]) ;
+## Comeau C/C++ 4.x
+toolset como como : "-o " : -D
+    : --c
+    [ opt --release : --inlining ]
+    [ opt --debug : --no_inlining ]
+    -I$(--python-include) -I$(--extra-include)
+    : -L$(--python-lib[1]) -l$(--python-lib[2]) ;
+## MacOSX Darwin, using GCC 2.9.x, 3.x
+toolset darwin cc :  "-o " : -D
+    :
+    [ opt --release : -Wl,-x -O3 -finline-functions ]
+    [ opt --debug : -g -O0 -fno-inline -pg ]
+    [ opt --profile : -Wl,-x -O3 -finline-functions -g -pg ]
+    -I$(--python-include) -I$(--extra-include)
+    : -L$(--python-lib[1]) -l$(--python-lib[2]) ;
+## GCC 2.x, 3.x, 4.x
+toolset gcc gcc : "-o " : -D
+    : -pedantic -fno-strict-aliasing
+    [ opt --release : [ opt --symbols : -g : -s ] -O3 ]
+    [ opt --debug : -g -O0 -fno-inline ]
+    -I$(--python-include) -I$(--extra-include) -Wno-long-long
+    : -L$(--python-lib[1]) -l$(--python-lib[2]) ;
+## GCC 2.x, 3.x on CYGWIN but without cygwin1.dll
+toolset gcc-nocygwin gcc : "-o " : -D
+    : -s -O3 -mno-cygwin
+    [ opt --release : -finline-functions ]
+    [ opt --debug : -s -O3 -fno-inline -pg ]
+    -I$(--python-include) -I$(--extra-include)
+    : -L$(--python-lib[1]) -l$(--python-lib[2]) ;
+## Intel C/C++ for Linux
+toolset intel-linux icc : "-o " : -D
+    :
+    [ opt --release : -Xlinker -s -O3 ]
+    [ opt --debug : -g -O0 -p ]
+    -I$(--python-include) -I$(--extra-include)
+    : -L$(--python-lib[1]) -l$(--python-lib[2]) ;
+## Intel C/C++ for Win32
+toolset intel-win32 icl : /Fe : -D
+    : /nologo
+    [ opt --release : /MT /O2 /Ob2 /Gy /GF /GA /GB ]
+    [ opt --debug : /MTd /DEBUG /Z7 /Od /Ob0 ]
+    -I$(--python-include) -I$(--extra-include)
+    : kernel32.lib advapi32.lib user32.lib $(--python-lib[1]) ;
+## KCC ?
+toolset kcc KCC : "-o " : -D
+    :
+    [ opt --release : -s +K2 ]
+    [ opt --debug : -g +K0 ]
+    -I$(--python-include) -I$(--extra-include)
+    : -L$(--python-lib[1]) -l$(--python-lib[2]) ;
+## Borland Kylix
+toolset kylix bc++ : -o : -D
+    : -tC -q
+    [ opt --release : -O2 -vi -w-inl ]
+    [ opt --debug : -v -Od -vi- ]
+    -I$(--python-include) -I$(--extra-include)
+    : -L$(--python-lib[1]) -l$(--python-lib[2]) ;
+## Metrowerks CodeWarrior 8.x
+{
+    # Even though CW can compile all files at once, it crashes if it tries in the bjam case.
+    local mwcc = ; if $(NT) { mwcc = mwcc ; } else { mwcc = mwc$(OSPLAT:L) ; }
+    mwcc ?= mwcc ;
+    toolset metrowerks $(mwcc) : "-o " : -D
+        : -c -lang c -subsystem console -cwd include
+        [ opt --release : -runtime ss -opt full -inline all ]
+        [ opt --debug : -runtime ssd -opt none -inline off ]
+        -I$(--python-include) -I$(--extra-include) ;
+    toolset metrowerks $(mwcc) .link : "-o " :
+        : -subsystem console -lkernel32.lib -ladvapi32.lib -luser32.lib
+        [ opt --release : -runtime ss ]
+        [ opt --debug : -runtime ssd ]
+        : $(--python-lib[1]) ;
+}
+## MINGW GCC
+toolset mingw gcc : "-o " : -D
+    :
+    [ opt --release : -s -O3 -finline-functions ]
+    [ opt --debug : -g -O0 -fno-inline -pg ]
+    -I$(--python-include) -I$(--extra-include)
+    : $(--python-lib[2]) ;
+## MIPS Pro
+toolset mipspro cc : "-o " : -D
+    :
+    [ opt --release : -s -O3 -g0 -INLINE:none ]
+    [ opt --debug : -g -O0 -INLINE ]
+    -I$(--python-include) -I$(--extra-include)
+    : -L$(--python-lib[1]) -l$(--python-lib[2]) ;
+## Microsoft Visual Studio C++ 6.x
+toolset msvc cl : /Fe /Fe /Fd /Fo : -D
+    : /nologo
+    [ opt --release : /ML /O2 /Ob2 /Gy /GF /GA /GB ]
+    [ opt --debug : /MLd /DEBUG /Z7 /Od /Ob0 ]
+    -I$(--python-include) -I$(--extra-include)
+    : kernel32.lib advapi32.lib user32.lib $(--python-lib[1]) ;
+## QNX 6.x GCC 3.x/2.95.3
+toolset qcc qcc : "-o " : -D
+    : -Wc,-pedantic -Wc,-fno-strict-aliasing
+    [ opt --release : [ opt --symbols : -g ] -O3 -Wc,-finline-functions ]
+    [ opt --debug : -g -O0 -Wc,-fno-inline ]
+    -I$(--python-include) -I$(--extra-include)
+    : -L$(--python-lib[1]) -l$(--python-lib[2]) ;
+## Qlogic Pathscale 2.4
+toolset pathscale pathcc : "-o " : -D
+    :
+    [ opt --release : -s -Ofast -O3 ]
+    [ opt --debug : -g ]
+    -I$(--python-include) -I$(--extra-include)
+    : -L$(--python-lib[1]) -l$(--python-lib[2]) ;
+## Portland Group Pgi 6.2
+toolset pgi pgcc : "-o " : -D
+    :
+    [ opt --release : -s -O3 ]
+    [ opt --debug : -g ]
+    -I$(--python-include) -I$(--extra-include)
+    : -L$(--python-lib[1]) -l$(--python-lib[2]) ;
+## Sun Workshop 6 C++
+toolset sun cc : "-o " : -D
+    :
+    [ opt --release : -s -fast -xO4 ]
+    [ opt --debug : -g ]
+    -I$(--python-include) -I$(--extra-include)
+    : -L$(--python-lib[1]) -l$(--python-lib[2]) ;
+## Sun Workshop 6 C++ (old alias)
+toolset sunpro cc : "-o " : -D
+    :
+    [ opt --release : -s -fast -xO4 ]
+    [ opt --debug : -g ]
+    -I$(--python-include) -I$(--extra-include)
+    : -L$(--python-lib[1]) -l$(--python-lib[2]) ;
+## Compaq Alpha CXX
+toolset tru64cxx cc : "-o " : -D
+    :
+    [ opt --release : -s -O5 -inline speed ]
+    [ opt --debug : -g -O0 -pg ]
+    -I$(--python-include) -I$(--extra-include)
+    : -L$(--python-lib[1]) -l$(--python-lib[2]) ;
+## IBM VisualAge C++
+toolset vacpp xlc : "-o " : -D
+    :
+    [ opt --release : -s -O3 -qstrict -qinline ]
+    [ opt --debug : -g -qNOOPTimize -qnoinline -pg ]
+    -I$(--python-include) -I$(--extra-include)
+    : -L$(--python-lib[1]) -l$(--python-lib[2]) [ if-os AIX : -bmaxdata:0x40000000 ] ;
+## Microsoft Visual C++ .NET 7.x
+toolset vc7 cl : /Fe /Fe /Fd /Fo : -D
+    : /nologo
+    [ opt --release : /ML /O2 /Ob2 /Gy /GF /GA /GB ]
+    [ opt --debug : /MLd /DEBUG /Z7 /Od /Ob0 ]
+    -I$(--python-include) -I$(--extra-include)
+    : kernel32.lib advapi32.lib user32.lib $(--python-lib[1]) ;
+## Microsoft Visual C++ 2005
+toolset vc8 cl : /Fe /Fe /Fd /Fo : -D
+    : /nologo
+    [ opt --release : /MT /O2 /Ob2 /Gy /GF /GA /wd4996 ]
+    [ opt --debug : /MTd /DEBUG /Z7 /Od /Ob0 /wd4996 ]
+    -I$(--python-include) -I$(--extra-include)
+    : kernel32.lib advapi32.lib user32.lib $(--python-lib[1]) ;
+## Microsoft Visual C++ 2008
+toolset vc9 cl : /Fe /Fe /Fd /Fo : -D
+    : /nologo
+    [ opt --release : /MT /O2 /Ob2 /Gy /GF /GA /wd4996 ]
+    [ opt --debug : /MTd /DEBUG /Z7 /Od /Ob0 /wd4996 ]
+    -I$(--python-include) -I$(--extra-include)
+    : kernel32.lib advapi32.lib user32.lib $(--python-lib[1]) ;
+## VMS/OpenVMS DEC C
+toolset vmsdecc cc : /OBJECT= : "/DEFINES=(" "," ")"
+    : /STANDARD=VAXC /PREFIX_LIBRARY_ENTRIES=ALL_ENTRIES
+    [ opt --release : /OPTIMIZE /NODEBUG ]
+    [ opt --debug : /NOOPTIMIZE /DEBUG ]
+    ;
+toolset vmsdecc link .link : /EXECUTABLE= :
+    : /NOMAP
+    [ opt --release : /NODEBUG ]
+    [ opt --debug : /DEBUG ]
+    ;
+
+# First set the build commands and options according to the
+# preset toolset.
+toolset = [ MATCH --toolset=(.*) : $(ARGV) ] ;
+if ! $(toolset)
+{
+    # For some reason, the following test does not catch empty toolset.
+    ECHO "###" ;
+    ECHO "###" No toolset specified. Please use --toolset option. ;
+    ECHO "###" ;
+    ECHO "###" Known toolsets are: $(toolsets:J=", ") ;
+    EXIT "###" ;
+}
+if ! $(toolset) in $(toolsets)
+{
+    ECHO "###" ;
+    ECHO "###" Unknown toolset: $(toolset) ;
+    ECHO "###" ;
+    ECHO "###" Known toolsets are: $(toolsets:J=", ") ;
+    EXIT "###" ;
+}
+--cc = $(tool.$(toolset).cc) ;
+if $(tool.$(toolset).opt.out[2])
+{
+    if $(tool.$(toolset).opt.out[1]) = $(tool.$(toolset).opt.out[2])
+    {
+        --out = $(tool.$(toolset).opt.out[1]) ;
+        --dir = $(tool.$(toolset).opt.out[3-]) ;
+    }
+    else
+    {
+        --bin = $(tool.$(toolset).opt.out[1]) ;
+        --dir = $(tool.$(toolset).opt.out[2-]) ;
+    }
+}
+else
+{
+    --out = $(tool.$(toolset).opt.out) ;
+}
+--def = $(tool.$(toolset).opt.define) ;
+--flags = $(tool.$(toolset).flags) ;
+--defs = $(tool.$(toolset).defines) ;
+--libs = $(tool.$(toolset).linklibs) ;
+if $(tool.$(toolset).link.cc)
+{
+    --link = $(tool.$(toolset).link.cc) ;
+    if $(tool.$(toolset).link.opt.out[2])
+    {
+        if $(tool.$(toolset).link.opt.out[1]) = $(tool.$(toolset).link.opt.out[2])
+        {
+            --link-out = $(tool.$(toolset).link.opt.out[1]) ;
+            --link-dir = $(tool.$(toolset).link.opt.out[3-]) ;
+        }
+        else
+        {
+            --link-bin = $(tool.$(toolset).link.opt.out[1]) ;
+            --link-dir = $(tool.$(toolset).link.opt.out[2-]) ;
+        }
+    }
+    else
+    {
+        --link-out = $(tool.$(toolset).link.opt.out) ;
+    }
+    --link-def = $(tool.$(toolset).link.opt.define) ;
+    --link-flags = $(tool.$(toolset).link.flags) ;
+    --link-defs = $(tool.$(toolset).link.defines) ;
+    --link-libs = $(tool.$(toolset).link.linklibs) ;
+}
+
+# Put executables in platform-specific subdirectory.
+locate-target = $(LOCATE_TARGET) ;
+if $(VMS)
+{
+    locate-target ?= bin$(.)vms ;
+    platform = vms ;
+}
+else if $(MAC)
+{
+    locate-target ?= bin$(.)$(OS:L)$(OSPLAT:L) ;
+    platform = $(OS:L)$(OSPLAT:L) ;
+}
+else if $(OSPLAT)
+{
+    locate-target ?= bin$(.)$(OS:L)$(OSPLAT:L) ;
+    platform = $(OS:L)$(OSPLAT:L) ;
+}
+else
+{
+    locate-target ?= bin$(.)$(OS:L) ;
+    platform = $(OS:L) ;
+}
+if $(debug)
+{
+    locate-target = [ .path $(locate-target)$(.)debug ] ;
+}
+if $(profile)
+{
+    locate-target = [ .path $(locate-target)$(.)profile ] ;
+}
+else
+{
+    locate-target = [ .path $(locate-target) ] ;
+}
+
+if --show-locate-target in $(ARGV)
+{
+  ECHO $(locate-target) ;
+}
+
+# We have some different files for UNIX, VMS, and NT.
+jam.source =
+    command.c compile.c debug.c expand.c glob.c
+    hash.c hcache.c headers.c hdrmacro.c
+    jam.c jambase.c jamgram.c
+    lists.c make.c make1.c mem.c newstr.c
+    option.c output.c parse.c regexp.c rules.c
+    scan.c search.c subst.c w32_getreg.c
+    timestamp.c variable.c modules.c strings.c filesys.c
+    builtins.c pwd.c class.c native.c modules/set.c
+    modules/path.c modules/regex.c modules/property-set.c
+    modules/sequence.c modules/order.c
+    ;
+if $(NT)
+{
+    jam.source += execnt.c filent.c pathunix.c ;
+}
+else if $(OS2)
+{
+    jam.source += execunix.c fileos2.c pathunix.c ;
+}
+else if $(VMS)
+{
+    jam.source += execvms.c filevms.c pathvms.c ;
+}
+else if $(MAC)
+{
+    jam.source += execmac.c filemac.c pathmac.c ;
+}
+else
+{
+    jam.source += execunix.c fileunix.c pathunix.c ;
+}
+
+# Debug assertions, or not.
+if ! $(debug) || --noassert in $(ARGV)
+{
+    --defs += NDEBUG ;
+}
+
+# Enable some optional features.
+--defs += OPT_HEADER_CACHE_EXT ;
+--defs += OPT_GRAPH_DEBUG_EXT ;
+--defs += OPT_SEMAPHORE ;
+--defs += OPT_AT_FILES ;
+--defs += OPT_DEBUG_PROFILE ;
+
+# Bug fixes
+--defs += OPT_FIX_TARGET_VARIABLES_EXT ;
+#~ --defs += OPT_NO_EXTERNAL_VARIABLE_SPLIT ;
+
+# Improvements
+--defs += OPT_IMPROVED_PATIENCE_EXT ;
+
+# Use Boehm GC memory allocator?
+if $(--boehm-gc)
+{
+    --defs += OPT_BOEHM_GC ;
+    if $(debug)
+    {
+        --defs += GC_DEBUG ;
+    }
+}
+
+if $(--duma)
+{
+    --defs += OPT_DUMA ;
+}
+
+if ( $(OS) = NT || $(NT) ) && ! NT in $(--defs)
+{
+    --defs += NT ;
+}
+if $(VMS)
+{
+    --defs += VMS ;
+}
+--defs += YYSTACKSIZE=5000 ;
+
+if $(with-python)
+{
+    --defs += HAVE_PYTHON ;
+}
+
+if $(debug)
+{
+    --defs += BJAM_NEWSTR_NO_ALLOCATE ;
+}
+
+
+# The basic symbolic targets...
+NOTFILE all clean dist ;
+ALWAYS clean ;
+
+# Utility rules and actions...
+rule .clean
+{
+    [DELETE] clean : $(<) ;
+}
+if $(NT) { actions piecemeal together existing [DELETE] {
+    del /F /Q "$(>)"
+} }
+if $(UNIX) { actions piecemeal together existing [DELETE] {
+    rm -f "$(>)"
+} }
+if $(VMS) { actions piecemeal together existing [DELETE] {
+    DELETE $(>[--2]:J=";*, ") $(>[-1]);*
+} }
+if $(NT) {
+    --chmod+w = "attrib -r " ;
+}
+if $(UNIX) {
+    --chmod+w = "chmod +w " ;
+}
+if $(VMS) {
+    --chmod+w = "SET FILE/PROT=(S:RWED) " ;
+}
+
+rule .mkdir
+{
+    NOUPDATE $(<) ;
+    if $(<:P) { DEPENDS $(<) : $(<:P) ; .mkdir $(<:P) ; }
+    if ! $(md<$(<)>) { [MKDIR] $(<) ; md<$(<)> = - ; }
+}
+if $(NT) { actions [MKDIR] {
+    md "$(<)"
+} }
+if $(UNIX) { actions [MKDIR] {
+    mkdir "$(<)"
+} }
+if $(VMS) { actions [MKDIR] {
+    CREATE/DIR $(<J=", ")
+} }
+
+rule .exe
+{
+    local exe = $(<) ;
+    if $(NT) || ( $(UNIX) && $(OS) = CYGWIN ) || $(VMS) { exe = $(exe:S=.exe) ; }
+    LOCATE on $(exe) = $(locate-target) ;
+    DEPENDS all : $(exe) ;
+    .mkdir $(locate-target) ;
+    if $(--link)
+    {
+        local objs = ;
+        for local s in $(>)
+        {
+            # Translate any subdir elements into a simple file name.
+            local o = [ MATCH "([^/]+)[/]?(.+)" : $(s) ] ;
+            o = $(o:J=_) ;
+            o = $(o:S=.o) ;
+            objs += $(o) ;
+            LOCATE on $(o) = $(locate-target) ;
+            DEPENDS $(exe) : $(o) ;
+            DEPENDS $(o) : $(s) ;
+            DEPENDS $(o) : $(locate-target) ;
+            [COMPILE] $(o) : $(s) ;
+            .clean $(o) ;
+        }
+        DEPENDS $(exe) : $(objs) ;
+        DEPENDS $(exe) : $(locate-target) ;
+        [COMPILE.LINK] $(exe) : $(objs) ;
+        .clean $(exe) ;
+    }
+    else
+    {
+        DEPENDS $(exe) : $(>) ;
+        DEPENDS $(exe) : $(locate-target) ;
+        [COMPILE] $(exe) : $(>) ;
+        .clean $(exe) ;
+    }
+    return $(exe) ;
+}
+if ! $(--def[2]) { actions [COMPILE] {
+    "$(--cc)" "$(--bin)$(<:D=)" "$(--dir)$(<:D)$(./)" $(--out)$(<) "$(--def)$(--defs)" "$(--flags)" "$(--libs)" "$(>)"
+} }
+else { actions [COMPILE] {
+    "$(--cc)" "$(--bin)$(<:D=)" "$(--dir)$(<:D)$(./)" $(--out)$(<) "$(--def[1])$(--defs:J=$(--def[2]))$(--def[3])" "$(--flags)" "$(--libs)" "$(>)"
+} }
+if $(VMS) { actions [COMPILE.LINK] {
+    "$(--link)" $(--link-bin)$(<:D=) $(--link-dir)$(<:D)$(./) $(--link-out)$(<) $(--link-def)$(--link-defs) $(--link-flags) "$(--link-libs)" $(>J=", ")
+} }
+else { actions [COMPILE.LINK] {
+    "$(--link)" "$(--link-bin)$(<:D=)" "$(--link-dir)$(<:D)$(./)" "$(--link-out)$(<)" "$(--link-def)$(--link-defs)" "$(--link-flags)" "$(--link-libs)" "$(>)"
+} }
+
+rule .link
+{
+    DEPENDS all : $(<) ;
+    DEPENDS $(<) : $(>) ;
+    [LINK] $(<) : $(>) ;
+    .clean $(<) ;
+}
+if $(NT) { actions [LINK] {
+    copy "$(>)" "$(<)"
+} }
+if $(UNIX) { actions [LINK] {
+    ln -fs "$(>)" "$(<)"
+} }
+if $(VMS) { actions [LINK] {
+    COPY/REPLACE $(>) $(<)
+} }
+
+rule .move
+{
+    DEPENDS $(<) : $(>) ;
+    [MOVE] $(<) : $(>) ;
+}
+if $(NT) { actions [MOVE] {
+    del /f "$(<)"
+    rename "$(>)" "$(<)"
+} }
+if $(UNIX) { actions [MOVE] {
+    mv -f "$(>)" "$(<)"
+} }
+if $(VMS) { actions [MOVE] {
+    RENAME "$(>)" "$(<)"
+} }
+
+# Generate the grammar tokens table, and the real yacc grammar.
+rule .yyacc
+{
+    local exe = [ .exe yyacc : yyacc.c ] ;
+    NOUPDATE $(exe) ;
+    DEPENDS $(<) : $(exe) $(>) ;
+    LEAVES $(<) ;
+    yyacc.exe on $(<) = $(exe:R=$(locate-target)) ;
+    [YYACC] $(<) : $(>) ;
+}
+actions [YYACC] {
+    $(--chmod+w)$(<[1])
+    $(--chmod+w)$(<[2])
+    "$(yyacc.exe)" "$(<)" "$(>)"
+}
+if $(grammar)
+{
+    .yyacc jamgram.y jamgramtab.h : jamgram.yy ;
+}
+else if $(debug)
+{
+    .exe yyacc : yyacc.c ;
+}
+
+# How to build the grammar.
+if $(NT)
+{
+    SUFEXE = .exe ;
+    # try some other likely spellings...
+    PATH ?= $(Path) ;
+    PATH ?= $(path) ;
+}
+SUFEXE ?= "" ;
+
+yacc ?= [ GLOB $(PATH) : yacc$(SUFEXE) ] ;
+yacc ?= [ GLOB $(PATH) : bison$(SUFEXE) ] ;
+yacc ?= [ GLOB "$(ProgramFiles:J= )\\GnuWin32\\bin" "C:\\Program Files\\GnuWin32\\bin" : bison$(SUFEXE) ] ;
+yacc = $(yacc[1]) ;
+switch $(yacc:D=:S=)
+{
+    case bison : yacc += -d --yacc ;
+    case yacc  : yacc += -d ;
+}
+if $(debug) && $(yacc)
+{
+    yacc += -t -v ;
+}
+yacc += $(YACCFLAGS) ;
+
+rule .yacc
+{
+    DEPENDS $(<) : $(>) ;
+    LEAVES $(<) ;
+    [YACC] $(<) : $(>) ;
+}
+if $(NT) { actions [YACC] {
+    "$(yacc)" "$(>)"
+    if not errorlevel 1 (
+        del /f "$(<[1])"
+        rename y.tab$(<[1]:S) "$(<[1])"
+        del /f $(<[2])
+        rename y.tab$(<[2]:S) "$(<[2])"
+    ) else set _error_ =
+} }
+if $(UNIX) { actions [YACC] {
+    if ` "$(yacc)" "$(>)" ` ; then
+        mv -f y.tab$(<[1]:S) "$(<[1])"
+        mv -f y.tab$(<[2]:S) "$(<[2])"
+    else
+        exit 1
+    fi
+} }
+if $(VMS) { actions [YACC] {
+    IF "$(yacc)" $(>)
+    THEN
+        RENAME y_tab$(<[1]:S) $(<[1])
+        RENAME y_tab$(<[2]:S) $(<[2])
+    ENDIF
+} }
+if $(grammar) && ! $(yacc)
+{
+    EXIT "Could not find the 'yacc' tool, and therefore can not build the grammar." ;
+}
+if $(grammar) && $(yacc)
+{
+    .yacc jamgram.c jamgram.h : jamgram.y ;
+}
+
+# How to build the compiled in jambase.
+rule .mkjambase
+{
+    local exe = [ .exe mkjambase : mkjambase.c ] ;
+    DEPENDS $(<) : $(exe) $(>) ;
+    LEAVES $(<) ;
+    mkjambase.exe on $(<) = $(exe:R=$(locate-target)) ;
+    [MKJAMBASE] $(<) : $(>) ;
+}
+actions [MKJAMBASE] {
+    $(--chmod+w)$(<)
+    $(mkjambase.exe) "$(<)" "$(>)"
+}
+if $(debug)
+{
+    .mkjambase jambase.c : Jambase ;
+}
+
+# How to build Jam.
+rule .jam
+{
+    $(>).exe = [ .exe $(>) : $(jam.source) ] ;
+    DEPENDS all : $($(>).exe) ;
+
+    if $(debug)
+    {
+        $(<).exe = $(<:S=$($(>).exe:S)) ;
+        LOCATE on $($(<).exe) = $(locate-target) ;
+        .link $($(<).exe) : $($(>).exe) ;
+        DEPENDS all : $($(<).exe) ;
+    }
+}
+.jam jam : bjam ;
+
+# Scan sources for header dependencies.
+#	WARNING: Yes those are *REAL TABS* below. DO NOT CHANGE,
+#	under any circumstances, to spaces!! And the tabs
+#	indenting this are so that if someone is in the mood to
+#	replace tabs they hit this comment, and hopefully notice
+#	their error.
+rule .scan
+{
+    HDRRULE on $(<:D=) = .hdr.scan ;
+    HDRSCAN on $(<:D=) = "^[ 	]*#[ 	]*include[ 	]*([<\"][^\">]*[\">]).*$" ;
+}
+rule .hdr.scan
+{
+    local hdrs = [ GLOB . : $(>:D=) ] ;
+    INCLUDES $(<:D=) : $(hdrs:D=) ;
+    HDRRULE on $(>:D=) = .hdr.scan ;
+    HDRSCAN on $(>:D=) = "^[ 	]*#[ 	]*include[ 	]*([<\"][^\">]*[\">]).*$" ;
+}
+.scan [ GLOB . : *.c ] ;
+
+# Distribution making from here on out. Assumes that
+# the docs are already built as html at ../doc/html. If
+# they aren't, then the docs are not included in the dist
+# archive.
+dist.license =
+    [ GLOB . : $(LICENSE).txt ]
+    ;
+dist.license = $(dist.license:D=)
+    [ GLOB [ .path .. .. .. ] : $(LICENSE).txt ]
+    [ GLOB [ .path .. boost ] : $(LICENSE).txt ] ;
+dist.docs =
+    [ GLOB . : *.png *.css *.html ]
+    ;
+dist.docs = $(dist.docs:D=)
+    [ GLOB [ .path images ] : *.png ]
+    [ GLOB [ .path jam ] : *.html ]
+    ;
+dist.source =
+    [ GLOB . : *.c *.h ]
+    ;
+dist.source = $(dist.source:D=)
+    $(dist.license[1])
+    $(dist.docs)
+    build.jam build.bat build.sh build_vms.com
+    Jambase
+    jamgram.y jamgram.yy
+    [ .path modules set.c ]
+    [ .path modules path.c ]
+    [ .path modules regex.c ]
+    [ .path modules property-set.c ]
+    [ .path modules sequence.c ]
+    [ .path modules order.c ]
+    [ GLOB [ .path boehm_gc ] : * ]
+    [ GLOB [ .path boehm_gc include ] : * ]
+    [ GLOB [ .path boehm_gc include private ] : * ]
+    [ GLOB [ .path boehm_gc cord ] : * ]
+    [ GLOB [ .path boehm_gc Mac_files ] : * ]
+    [ GLOB [ .path boehm_gc tests ] : * ]
+    [ GLOB [ .path boehm_gc doc ] : * ]
+    ;
+dist.bin =
+    bjam
+    ;
+dist.bin =
+    $(dist.license[1])
+    $(dist.bin:S=$(bjam.exe:S))
+    ;
+
+if $(NT)
+{
+    zip ?= [ GLOB "$(ProgramFiles:J= )\\7-ZIP" "C:\\Program Files\\7-ZIP" : "7z.exe" ] ;
+    zip ?= [ GLOB "$(ProgramFiles:J= )\\7-ZIP" "C:\\Program Files\\7-ZIP" : "7zn.exe" ] ;
+    zip ?= [ GLOB $(PATH) : zip.exe ] ;
+    zip ?= zip ;
+    zip = $(zip[1]) ;
+    switch $(zip:D=:S=)
+    {
+        case 7z* : zip += a -r -tzip -mx=9 ;
+        case zip  : zip += -9r ;
+    }
+    actions piecemeal [PACK] {
+    "$(zip)" "$(<)" "$(>)"
+    }
+    actions piecemeal [ZIP] {
+    "$(zip)" "$(<)" "$(>)"
+    }
+    actions piecemeal [COPY] {
+    copy /Y "$(>)" "$(<)" >NUL:
+    }
+}
+if $(UNIX)
+{
+    tar ?= [ GLOB $(PATH) : star bsdtar tar ] ;
+    tar = $(tar[1]) ;
+    switch $(tar:D=:S=)
+    {
+        case star : tar += -c artype=pax -D -d -to-stdout ;
+        case * : tar += -c -f - ;
+    }
+    actions [PACK] {
+    "$(tar)" "$(>)" | gzip -c9 > "$(<)"
+    }
+    #~ actions [PACK] {
+    #~ tar cf "$(<:S=.tar)" "$(>)"
+    #~ }
+    actions [ZIP] {
+    gzip -c9 "$(>)" > "$(<)"
+    }
+    actions [COPY] {
+    cp -Rpf "$(>)" "$(<)"
+    }
+}
+
+# The single binary, compressed.
+rule .binary
+{
+    local zip = ;
+    if $(NT) { zip = $($(<).exe:S=.zip) ; }
+    if $(UNIX) { zip = $($(<).exe:S=.tgz) ; }
+    zip = $(zip:S=)-$(VERSION)-$(RELEASE)-$(platform)$(zip:S) ;
+    DEPENDS $(zip) : $($(<).exe) ;
+    DEPENDS dist : $(zip) ;
+    #~ LOCATE on $(zip) = $(locate-target) ;
+    if $(NT) { [ZIP] $(zip) : $($(<).exe) ; }
+    if $(UNIX) { [PACK] $(zip) : $($(<).exe) ; }
+    .clean $(zip) ;
+}
+
+# Package some file.
+rule .package ( dst-dir : src-files + )
+{
+    local dst-files ;
+    local src-files-actual ;
+    for local src-path in $(src-files)
+    {
+        if ! [ GLOB $(src-path:P) : $(src-path:B) ] || [ CHECK_IF_FILE $(src-path) ]
+        {
+            local src-subdir = $(src-path:D) ;
+            local src-file = $(src-path) ;
+            while $(src-subdir:D) { src-subdir = $(src-subdir:D) ; }
+            if $(src-subdir) = ".."
+            {
+                src-file = $(src-file:D=) ;
+            }
+            dst-files += $(src-file:R=$(dst-dir)) ;
+            src-files-actual += $(src-path) ;
+        }
+    }
+
+    local pack = ;
+    if $(NT) { pack = $(dst-dir).zip ; }
+    if $(UNIX) { pack = $(dst-dir).tgz ; }
+
+    DEPENDS dist : $(pack) ;
+    DEPENDS $(pack) : $(dst-files) ;
+
+    local dst-files-queue = $(dst-files) ;
+    for local src-path in $(src-files-actual)
+    {
+        local dst-file = $(dst-files-queue[1]) ;
+        dst-files-queue = $(dst-files-queue[2-]) ;
+        DEPENDS $(dst-file) : $(src-path) $(dst-file:D) ;
+        .mkdir $(dst-file:D) ;
+
+        [COPY] $(dst-file) : $(src-path) ;
+        .clean $(dst-file) ;
+    }
+
+    [PACK] $(pack) : $(dst-files) ;
+    .clean $(pack) ;
+}
+
+# RPM distro file.
+rpm-tool = [ GLOB $(PATH) : "rpmbuild" ] ;
+rpm-tool ?= [ GLOB $(PATH) : "rpm" ] ;
+rpm-tool = $(rpm-tool[1]) ;
+rule .rpm ( name : source )
+{
+    local rpm-arch = ;
+    switch $(OSPLAT)
+    {
+        case X86       : rpm-arch ?= i386 ;
+        case PPC       : rpm-arch ?= ppc ;
+        case AXP       : rpm-arch ?= alpha ;
+        # no guaranty for these:
+        case IA64      : rpm-arch ?= ia64 ;
+        case ARM       : rpm-arch ?= arm ;
+        case SPARC     : rpm-arch ?= sparc ;
+        case *         : rpm-arch ?= other ;
+    }
+    local target = $(name)-rpm ;
+    NOTFILE $(target) ;
+    DEPENDS dist : $(target) ;
+    DEPENDS $(target) : $(name).$(rpm-arch).rpm $(name).src.rpm ;
+    DEPENDS $(name).$(rpm-arch).rpm : $(source) ;
+    DEPENDS $(name).src.rpm : $(name).$(rpm-arch).rpm ;
+    docs on $(target) = $(dist.docs:J=" ") ;
+    arch on $(target) = $(rpm-arch) ;
+    if $(rpm-arch) = ppc { target-opt on $(target) = --target= ; }
+    else { target-opt on $(target) = "--target " ; }
+    [RPM] $(target) : $(source) ;
+    .clean $(name).$(rpm-arch).rpm $(name).src.rpm ;
+}
+actions [RPM] {
+    set -e
+    export BOOST_JAM_TOOLSET="$(toolset)"
+    $(rpm-tool) -ta $(target-opt)$(arch) $(>) | tee rpm.out
+    cp `grep -e '^Wrote:' rpm.out | sed 's/^Wrote: //'` .
+    rm -f rpm.out
+}
+
+# The distribution targets. Don't bother with the targets if
+# distribution build not requested.
+if dist in $(ARGV)
+{
+    #~ .binary bjam ;
+    .package $(NAME)-$(VERSION) : $(dist.source) ;
+    .package $(NAME)-$(VERSION)-$(RELEASE)-$(platform) : $(dist.bin) ;
+    if $(rpm-tool)
+    {
+        #~ .rpm $(NAME)-$(VERSION)-$(RELEASE) : $(NAME)-$(VERSION).tgz ;
+    }
+}
diff -pruN boost-jam-3.1.17.orig/build.sh boost-jam-3.1.17/build.sh
--- boost-jam-3.1.17.orig/build.sh	2008-11-30 01:32:38.692291050 +1100
+++ boost-jam-3.1.17/build.sh	2008-11-30 01:32:54.483291045 +1100
@@ -12,7 +12,7 @@ BOOST_JAM_TOOLSET=
 echo_run ()
 {
     echo "$@"
-    $@
+    eval "$@"
     r=$?
     if test $r -ne 0 ; then
         exit $r
@@ -265,7 +265,7 @@ if test "${BJAM_UPDATE}" != "update" ; t
     echo_run rm -rf bootstrap
     echo_run mkdir bootstrap
     if test ! -r jamgram.y -o ! -r jamgramtab.h ; then
-        echo_run ${BOOST_JAM_CC} ${BOOST_JAM_OPT_YYACC} ${YYACC_SOURCES}
+        echo_run ${BOOST_JAM_CC} ${CFLAGS} ${BOOST_JAM_OPT_YYACC} ${YYACC_SOURCES}
         if test -x "./bootstrap/yyacc0" ; then
             echo_run ./bootstrap/yyacc0 jamgram.y jamgramtab.h jamgram.yy
         fi
@@ -279,16 +279,20 @@ if test "${BJAM_UPDATE}" != "update" ; t
         mv -f y.tab.h jamgram.h
     fi
     if test ! -r jambase.c ; then
-        echo_run ${BOOST_JAM_CC} ${BOOST_JAM_OPT_MKJAMBASE} ${MKJAMBASE_SOURCES}
+        echo_run ${BOOST_JAM_CC} ${CFLAGS} ${BOOST_JAM_OPT_MKJAMBASE} ${MKJAMBASE_SOURCES}
         if test -x "./bootstrap/mkjambase0" ; then
             echo_run ./bootstrap/mkjambase0 jambase.c Jambase
         fi
     fi
-    echo_run ${BOOST_JAM_CC} ${BOOST_JAM_OPT_JAM} ${BJAM_SOURCES}
+    echo_run ${BOOST_JAM_CC} ${CFLAGS} ${BOOST_JAM_OPT_JAM} ${BJAM_SOURCES}
 fi
 if test -x "./bootstrap/jam0" ; then
     if test "${BJAM_UPDATE}" != "update" ; then
         echo_run ./bootstrap/jam0 -f build.jam --toolset=$BOOST_JAM_TOOLSET "--toolset-root=$BOOST_JAM_TOOLSET_ROOT" clean
     fi
-    echo_run ./bootstrap/jam0 -f build.jam --toolset=$BOOST_JAM_TOOLSET "--toolset-root=$BOOST_JAM_TOOLSET_ROOT" "$@"
+    if test -z "$BOOST_JAM_TOOLSET_ROOT"; then
+        echo_run ./bootstrap/jam0 -f build.jam --toolset=$BOOST_JAM_TOOLSET "$@"
+    else
+        echo_run ./bootstrap/jam0 -f build.jam --toolset=$BOOST_JAM_TOOLSET "--toolset-root=$BOOST_JAM_TOOLSET_ROOT" "$@"
+    fi
 fi
