project
    : requirements <include>/home/ghost/Work/boost <threading>multi
    ;
project a : : debug ;

exe hello : hello.cpp ;

exe hello
    : hello.cpp
    : <include>boost <threading>multi
    ;
exe app : app.cpp ../util/foo//bar ;
exe important : main.cpp helpers/<link>static ;

exe b : [ glob *.cpp ] ;

lib tools :
    [ glob *.cpp ] ;

lib tools : [ glob *.cpp : file_to_exclude.cpp bad*.cpp ] ;

lib network : network.cpp
    : <conditional>@my-rule
    ;

DEPENDS foo.o : foo.c ;

using msvc : : "Z:/Programs/Microsoft Visual Studio/vc98/bin/cl" ;
using msvc : : echo Compiling && foo/bar/baz/cl ;
using gcc : 5 : : <cxxflags>"-std=c++14 -O2" ;
using clang : 3.9 : : <cxxflags>-std=c++14 <cxxflags>-O2 ;
exe test3 : test3.cpp : -<threading>multi ;
XYZ += <cxxflags>-Wzero-as-null-pointer-constant&&-Wno-zero-as-null-pointer-constant ;
exe hello : hello.cpp : <os>NT,<toolset>gcc:<link>static ;

install dist : hello helpers :
    <variant>release:<location>dist/release
    <variant>debug:<location>dist/debug ;
install dist2 : hello helpers : <location>$(DIST) ;

exe app : app.cpp : [ check-target-builds has_foo "System has foo" : <library>foo : <define>FOO_MISSING=1 ] ;

import path : * ;

using python
: 2.7 # version
: # Interpreter/path to dir
: /usr/include/python2.7 # includes
: /usr/lib/x86_64-linux-gnu # libs
: # conditions
;

xx ;
xx ;; ;
xx ;a ;
xx a; ;
xx ;a; ;

## comment title
# BUG
# TODO
# aTODOa


if cond <beginfold id='1'>{</beginfold id='1'>
    statements ;
<endfold id='1'>}</endfold id='1'>
else <beginfold id='1'>{</beginfold id='1'>
    statements ;
<endfold id='1'>}</endfold id='1'>

for var in list <beginfold id='1'>{</beginfold id='1'>
    statements ;
<endfold id='1'>}</endfold id='1'>

while cond <beginfold id='1'>{</beginfold id='1'>
    statements ;
<endfold id='1'>}</endfold id='1'>

switch value
<beginfold id='1'>{</beginfold id='1'>
    case pattern1 : statements ;
    case pattern2 : statements ;
    other ;
<endfold id='1'>}</endfold id='1'>

if xxinxx <beginfold id='1'>{</beginfold id='1'>
<endfold id='1'>}</endfold id='1'>

ifxxx s ;

rule a? ( x )
<beginfold id='1'>{</beginfold id='1'>
  echo $(x) ;
<endfold id='1'>}</endfold id='1'>
a? 23 ;

local rule test ( a )
<beginfold id='1'>{</beginfold id='1'>
<endfold id='1'>}</endfold id='1'>

rule example
 (
     parameter1 :
     parameter2 ? :
     parameter3 + :
     parameter4 *
 )
 <beginfold id='1'>{</beginfold id='1'>
   if <variant>debug in $(properties)
   <beginfold id='1'>{</beginfold id='1'>
       OPTIONS on $(targets) = --debug ;
   <endfold id='1'>}</endfold id='1'>
 <endfold id='1'>}</endfold id='1'>

rule my-rule ( properties * )
<beginfold id='1'>{</beginfold id='1'>
    local result ;
    if <toolset>gcc <optimization>speed in $(properties)
    <beginfold id='1'>{</beginfold id='1'>
        result += <define>USE_INLINE_ASSEMBLER ;
        return $(result) ;
    <endfold id='1'>}</endfold id='1'>

    local m = [ CALLER_MODULE ] ;
    local result ;
    for v in $(values)
    <beginfold id='1'>{</beginfold id='1'>
        if [ modules.call-in $(m) : $(f) $(v) ]
        <beginfold id='1'>{</beginfold id='1'>
            result += $(v) ;
        <endfold id='1'>}</endfold id='1'>
    <endfold id='1'>}</endfold id='1'>
    return result ;
    return <name>$(name) ;
    return [ virtual-target.register $(t) ] ;
    return [ sequence.transform virtual-target.register : $(targets) ] ;
<endfold id='1'>}</endfold id='1'>

rule run ( project name ? : property-set : sources * )
<beginfold id='1'>{</beginfold id='1'>
    if [ $(s).type ] = PY
    <beginfold id='1'>{</beginfold id='1'>
        python = $(s) ;
    <endfold id='1'>}</endfold id='1'>

    local new-sources ;
    for local s in $(sources)
    <beginfold id='1'>{</beginfold id='1'>
        if [ type.is-derived [ $(s).type ] CPP ]
        <beginfold id='1'>{</beginfold id='1'>
            local name = [ $(s).name ] ;    # get the target's basename
            if $(name) = [ $(python).name ]
            <beginfold id='1'>{</beginfold id='1'>
                name = $(name)_ext ;        # rename the target
            <endfold id='1'>}</endfold id='1'>
            new-sources += [ generators.construct $(project) $(name) :
              PYTHON_EXTENSION : $(property-set) : $(s) $(libs) ] ;
        <endfold id='1'>}</endfold id='1'>
    <endfold id='1'>}</endfold id='1'>

    result = [ construct-result $(python) $(new-sources) : $(project) $(name)
                 : $(property-set) ] ;
<endfold id='1'>}</endfold id='1'>


rule link
<beginfold id='1'>{</beginfold id='1'>
    DEPENDS $(<) : [ on $(<) return $(DEF_FILE) ] ;
<endfold id='1'>}</endfold id='1'>


actions link bind DEF_FILE
<beginfold id='1'>{</beginfold id='1'>
    <beginfold id='2'>$(</beginfold id='2'>.LD<endfold id='2'>)</endfold id='2'> .... /DEF:<beginfold id='2'>$(</beginfold id='2'>DEF_FILE<endfold id='2'>)</endfold id='2'> ....
<endfold id='1'>}</endfold id='1'>

actions create-file-from-another
<beginfold id='1'>{</beginfold id='1'>
    create-file-from-another <beginfold id='2'>$(</beginfold id='2'>OPTIONS<endfold id='2'>)</endfold id='2'> <beginfold id='2'>$(</beginfold id='2'><<endfold id='2'>)</endfold id='2'> <beginfold id='2'>$(</beginfold id='2'>><endfold id='2'>)</endfold id='2'>
<endfold id='1'>}</endfold id='1'>


mypackage =
  [ pkg-config.import mypackage : usage-requirements <conditional>@define_ns
  ] ;

me = [ modules.binding $(__name__) ] ;

local ZLIB_INCLUDE = [ modules.peek : ZLIB_INCLUDE ] ;

local t = [ new file-target $(name) : CPP : $(project) : $(a) ] ;

$(var) field1 : field2 : ... : fieldN ;
$(var)o aaaa ;

on target $(var) field1 : field2 : ... : fieldN ;

[ $(var) field1 : field2 : ... : fieldN ]
[ on target $(var) field1 : field2 : ... : fieldN ]

local key = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths" ;
local values = [ W32_GETREGNAMES "$(key)\\$(subkey)" : values ] ;

variable = $(b) $(c) ;
variable += elements ;
variable on targets = elements ;
variable on targets += "elements" ;
variable default = elements ;
variable ?= elements ;

defs += <define>NAME='\"$(VALUE)\"' ;

x = $($(Z)) ;
x = $(Z)x ;
x = x$(Z) ;
x = x$(Z)x ;

x = "C:\\Program Files\\Borland" ; ECHO $(x:T) ;

module my_module # my module
<beginfold id='1'>{</beginfold id='1'>
    rule salute ( x ) <beginfold id='1'>{</beginfold id='1'> ECHO $(x), world ; <endfold id='1'>}</endfold id='1'>
    rule greet ( ) <beginfold id='1'>{</beginfold id='1'> salute hello ; <endfold id='1'>}</endfold id='1'>
    greet ; # ok
<endfold id='1'>}</endfold id='1'>

class verbatim-scanner : common-scanner
<beginfold id='1'>{</beginfold id='1'>
    rule pattern ( )
    <beginfold id='1'>{</beginfold id='1'>
        return "//###include[ ]*\"([^\"]*)\"" ;
    <endfold id='1'>}</endfold id='1'>
    greet ; # error
<endfold id='1'>}</endfold id='1'>

# test crazy (and valid) name
a<b> a<b> [ a<b> a<b> a] ] ;
rule a<b>() () <beginfold id='1'>{</beginfold id='1'> <endfold id='1'>}</endfold id='1'>
actions a<b> <beginfold id='1'>{</beginfold id='1'> <endfold id='1'>}</endfold id='1'>
local a<x> ;
local a<x> = a<b> ;
