# comment
rule b
rule c
#d
rule c
description=a
rule d
description = ds
description = ds
rule=ds
description = ds
rule b

rule c

rule c
# ds
ds=ds
description=a
rule d
rule =description = ds

rule b
command = clang -MMD -MF $out.d -o $out -c $in
description = building $out
unknown = xyz

rule dump
command = sleep 1; ls -l /proc/self/fd; exit 1
pool = link_pool
# blah blah
pool = console
pool = $console

rule xy-z_
rule --xy-z_
rule _xy-z_

# error
rule with error
rule a:a
rule a|a
rule a$
rule 0-@#d

# browse_py.h is used to inline browse.py.
rule inline
command = "$root/src/inline.sh" $varname < $in > $out
description = INLINE $out

default foo bar
default baz

include ninja1.ninja

subninja ninja2.ninja

pool link_pool
depth = 4
xxx = d

pool link_pool d
depth = 4

build a.o: b a.c

build a.o|c: b a.c || a | b

build a.o | c : b a.c | a || b

build $a.o | $c : b $a.c | $a || $b

build 0: sleep README

build 1: sleep README

build all: phony 0 1
deps = xxx
CMD = cc
build all: phony 0 1

build $builddir/browse_py.h: inline $root/src/browse.py | $root/src/inline.sh
varname = kBrowsePy

build $builddir/subprocess-posix.o: cxx $root/src/subprocess-posix.cc
build $builddir/libninja.a: ar $builddir/browse.o $builddir/build.o $
$builddir/build_log.o $builddir/clean.o $builddir/debug_flags.o $
$builddir/depfile_parser.o $builddir/deps_log.o

build $root/doc/manual.pdf: dblatex $builddir/manual.xml | $
$root/doc/dblatex.xsl

build out: cat in |@ validate1 validate2 |@ validate1 | dep
build out: cat in || dep |@ validate

builddir=/
builddir =/
builddir= /
ldflags = -L$builddir

xx x

x = $a
x = $-a_
x = ${a}
x = ${-a}
x = $a@
x = $@
x = $$
x = $:
x = $ a
x = $
b
x = $
$
a
x = $
$a
x = $a a
x = ${a} a
x = $$ a
x = $: a
x = $! a
x = ${a b ds
x = a