# 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
