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 $(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, and NT.
jam.source =
    command.c compile.c constants.c debug.c execcmd.c frames.c function.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 object.c option.c output.c parse.c pathsys.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 class.c cwd.c native.c md5.c
    [ .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 ] ;
if $(OS) = NT
{
    jam.source += execnt.c filent.c pathnt.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)
    {
 