summaryrefslogtreecommitdiffstats
path: root/ocamlbuild/test
diff options
context:
space:
mode:
Diffstat (limited to 'ocamlbuild/test')
-rw-r--r--ocamlbuild/test/good-output1022
-rwxr-xr-xocamlbuild/test/runtest.sh34
-rw-r--r--ocamlbuild/test/test1/foo.ml1
-rw-r--r--ocamlbuild/test/test10/dbdi12
-rwxr-xr-xocamlbuild/test/test10/test.sh6
-rw-r--r--ocamlbuild/test/test2/_tags1
-rw-r--r--ocamlbuild/test/test2/tata.ml1
-rw-r--r--ocamlbuild/test/test2/tata.mli2
-rwxr-xr-xocamlbuild/test/test2/test.sh18
-rw-r--r--ocamlbuild/test/test2/titi.ml1
-rw-r--r--ocamlbuild/test/test2/toto.ml5
-rw-r--r--ocamlbuild/test/test2/tutu.ml2
-rw-r--r--ocamlbuild/test/test2/tutu.mli3
-rw-r--r--ocamlbuild/test/test2/tyty.mli1
-rw-r--r--ocamlbuild/test/test2/vivi1.ml2
-rw-r--r--ocamlbuild/test/test2/vivi2.ml2
-rw-r--r--ocamlbuild/test/test2/vivi3.ml2
-rw-r--r--ocamlbuild/test/test3/_tags1
-rw-r--r--ocamlbuild/test/test3/a.ml1
-rw-r--r--ocamlbuild/test/test3/a.mli1
-rw-r--r--ocamlbuild/test/test3/b.ml1
-rw-r--r--ocamlbuild/test/test3/b.mli1
-rw-r--r--ocamlbuild/test/test3/c.ml1
-rw-r--r--ocamlbuild/test/test3/c.mli1
-rw-r--r--ocamlbuild/test/test3/d.ml1
-rw-r--r--ocamlbuild/test/test3/d.mli1
-rw-r--r--ocamlbuild/test/test3/e.ml1
-rw-r--r--ocamlbuild/test/test3/e.mli1
-rw-r--r--ocamlbuild/test/test3/f.ml2
-rw-r--r--ocamlbuild/test/test3/f.mli1
-rw-r--r--ocamlbuild/test/test3/proj.odocl1
-rwxr-xr-xocamlbuild/test/test3/test.sh11
-rw-r--r--ocamlbuild/test/test4/_tags2
-rw-r--r--ocamlbuild/test/test4/a/aa.ml1
-rw-r--r--ocamlbuild/test/test4/a/aa.mli1
-rw-r--r--ocamlbuild/test/test4/b/bb.ml2
-rwxr-xr-xocamlbuild/test/test4/test.sh11
-rw-r--r--ocamlbuild/test/test5/_tags1
-rw-r--r--ocamlbuild/test/test5/a.ml1
-rw-r--r--ocamlbuild/test/test5/a.mli1
-rw-r--r--ocamlbuild/test/test5/b.ml1
-rw-r--r--ocamlbuild/test/test5/c.mlpack1
-rw-r--r--ocamlbuild/test/test5/d.ml1
-rwxr-xr-xocamlbuild/test/test5/test.sh11
-rw-r--r--ocamlbuild/test/test6/a.ml1
-rw-r--r--ocamlbuild/test/test6/a.mli1
-rw-r--r--ocamlbuild/test/test6/b.ml1
-rw-r--r--ocamlbuild/test/test6/b.mli1
-rw-r--r--ocamlbuild/test/test6/b.mli.v11
-rw-r--r--ocamlbuild/test/test6/b.mli.v22
-rw-r--r--ocamlbuild/test/test6/d.ml2
-rw-r--r--ocamlbuild/test/test6/d.mli1
-rw-r--r--ocamlbuild/test/test6/d.mli.v12
-rw-r--r--ocamlbuild/test/test6/d.mli.v21
-rw-r--r--ocamlbuild/test/test6/main.ml1
-rw-r--r--ocamlbuild/test/test6/main.mli1
-rwxr-xr-xocamlbuild/test/test6/test.sh26
-rw-r--r--ocamlbuild/test/test7/_tags1
-rw-r--r--ocamlbuild/test/test7/aa.ml1
-rw-r--r--ocamlbuild/test/test7/bb.ml1
-rw-r--r--ocamlbuild/test/test7/bb.mli1
-rw-r--r--ocamlbuild/test/test7/bb2.ml3
-rw-r--r--ocamlbuild/test/test7/bb3.ml3
-rw-r--r--ocamlbuild/test/test7/bbcc.mllib1
-rw-r--r--ocamlbuild/test/test7/c2.ml1
-rw-r--r--ocamlbuild/test/test7/c2.mli1
-rw-r--r--ocamlbuild/test/test7/c3.ml1
-rw-r--r--ocamlbuild/test/test7/cc.ml1
-rw-r--r--ocamlbuild/test/test7/cool_plugin.ml1
-rw-r--r--ocamlbuild/test/test7/main.ml1
-rw-r--r--ocamlbuild/test/test7/myocamlbuild.ml3
-rwxr-xr-xocamlbuild/test/test7/test.sh19
-rw-r--r--ocamlbuild/test/test8/a.ml1
-rw-r--r--ocamlbuild/test/test8/myocamlbuild.ml9
-rwxr-xr-xocamlbuild/test/test8/test.sh11
-rw-r--r--ocamlbuild/test/test9/dbgl10
-rwxr-xr-xocamlbuild/test/test9/test.sh6
-rw-r--r--ocamlbuild/test/test9/testglob.ml91
78 files changed, 1383 insertions, 0 deletions
diff --git a/ocamlbuild/test/good-output b/ocamlbuild/test/good-output
new file mode 100644
index 000000000..5a9df660a
--- /dev/null
+++ b/ocamlbuild/test/good-output
@@ -0,0 +1,1022 @@
+ _____ _ ____
+|_ _|__ ___| |_|___ \
+ | |/ _ \/ __| __| __) |
+ | | __/\__ \ |_ / __/
+ |_|\___||___/\__|_____|
+
++ CMDOPTS=-- -help
++ BUILD=../../_build/ocamlbuild.native toto.byte toto.native -no-skip -classic-display
++ BUILD1=../../_build/ocamlbuild.native toto.byte toto.native -no-skip -classic-display -- -help
++ BUILD2=../../_build/ocamlbuild.native toto.byte toto.native -no-skip -classic-display -verbose 0 -nothing-should-be-rebuilt -- -help
++ rm -rf _build
++ cp vivi1.ml vivi.ml
++ ../../_build/ocamlbuild.native toto.byte toto.native -no-skip -classic-display -- -help
+ocamldep.opt -modules toto.ml > toto.ml.depends
+ocamldep.opt -modules tutu.mli > tutu.mli.depends
+ocamldep.opt -modules titi.ml > titi.ml.depends
+ocamldep.opt -modules tata.mli > tata.mli.depends
+ocamlc.opt -c -o tutu.cmi tutu.mli
+ocamlc.opt -c -o titi.cmo titi.ml
+ocamlc.opt -c -o tata.cmi tata.mli
+ocamlc.opt -c -o toto.cmo toto.ml
+ocamldep.opt -modules tutu.ml > tutu.ml.depends
+ocamldep.opt -pp camlp4o -modules vivi.ml > vivi.ml.depends
+ocamldep.opt -modules tyty.mli > tyty.mli.depends
+ocamlc.opt -c -pp camlp4o -o vivi.cmo vivi.ml
+ocamlc.opt -c -o tyty.cmi tyty.mli
+ocamldep.opt -modules tata.ml > tata.ml.depends
+ocamlc.opt -c -o tutu.cmo tutu.ml
+ocamlc.opt -c -o tata.cmo tata.ml
+ocamlc.opt tata.cmo titi.cmo vivi.cmo tutu.cmo toto.cmo -o toto.byte
+ocamlopt.opt -c -pp camlp4o -o vivi.cmx vivi.ml
+ocamlopt.opt -c -o tutu.cmx tutu.ml
+ocamlopt.opt -c -o titi.cmx titi.ml
+ocamlopt.opt -c -o tata.cmx tata.ml
+ocamlopt.opt -c -o toto.cmx toto.ml
+ocamlopt.opt tata.cmx titi.cmx vivi.cmx tutu.cmx toto.cmx -o toto.native
+Warning: Using -- only run the last target
+toto.native: _build/toto.native: Hello world!!!
+Tutu.tutu => 1
+Tata.tata => "TATA2"
++ ../../_build/ocamlbuild.native toto.byte toto.native -no-skip -classic-display -verbose 0 -nothing-should-be-rebuilt -- -help
+[cache hit] ocamldep.opt -modules toto.ml > toto.ml.depends
+[cache hit] ocamldep.opt -modules tutu.mli > tutu.mli.depends
+[cache hit] ocamlc.opt -c -o tutu.cmi tutu.mli
+[cache hit] ocamldep.opt -modules titi.ml > titi.ml.depends
+[cache hit] ocamlc.opt -c -o titi.cmo titi.ml
+[cache hit] ocamldep.opt -modules tata.mli > tata.mli.depends
+[cache hit] ocamlc.opt -c -o tata.cmi tata.mli
+[cache hit] ocamlc.opt -c -o toto.cmo toto.ml
+[cache hit] ocamldep.opt -modules tutu.ml > tutu.ml.depends
+[cache hit] ocamldep.opt -pp camlp4o -modules vivi.ml > vivi.ml.depends
+[cache hit] ocamlc.opt -c -pp camlp4o -o vivi.cmo vivi.ml
+[cache hit] ocamldep.opt -modules tyty.mli > tyty.mli.depends
+[cache hit] ocamlc.opt -c -o tyty.cmi tyty.mli
+[cache hit] ocamlc.opt -c -o tutu.cmo tutu.ml
+[cache hit] ocamldep.opt -modules tata.ml > tata.ml.depends
+[cache hit] ocamlc.opt -c -o tata.cmo tata.ml
+[cache hit] ocamlc.opt tata.cmo titi.cmo vivi.cmo tutu.cmo toto.cmo -o toto.byte
+[cache hit] ocamlopt.opt -c -pp camlp4o -o vivi.cmx vivi.ml
+[cache hit] ocamlopt.opt -c -o tutu.cmx tutu.ml
+[cache hit] ocamlopt.opt -c -o titi.cmx titi.ml
+[cache hit] ocamlopt.opt -c -o tata.cmx tata.ml
+[cache hit] ocamlopt.opt -c -o toto.cmx toto.ml
+[cache hit] ocamlopt.opt tata.cmx titi.cmx vivi.cmx tutu.cmx toto.cmx -o toto.native
+Warning: Using -- only run the last target
+toto.native: _build/toto.native: Hello world!!!
+Tutu.tutu => 1
+Tata.tata => "TATA2"
++ cp vivi2.ml vivi.ml
++ ../../_build/ocamlbuild.native toto.byte toto.native -no-skip -classic-display -- -help
+ocamldep.opt -pp camlp4o -modules vivi.ml > vivi.ml.depends
+ocamlc.opt -c -pp camlp4o -o vivi.cmo vivi.ml
+ocamlc.opt tata.cmo titi.cmo vivi.cmo tutu.cmo toto.cmo -o toto.byte
+ocamlopt.opt -c -pp camlp4o -o vivi.cmx vivi.ml
+ocamlopt.opt tata.cmx titi.cmx vivi.cmx tutu.cmx toto.cmx -o toto.native
+Warning: Using -- only run the last target
+toto.native: _build/toto.native: Hello world!!!
+Tutu.tutu => 1
+Tata.tata => "TATA2"
++ ../../_build/ocamlbuild.native toto.byte toto.native -no-skip -classic-display -verbose 0 -nothing-should-be-rebuilt -- -help
+[cache hit] ocamldep.opt -modules toto.ml > toto.ml.depends
+[cache hit] ocamldep.opt -modules tutu.mli > tutu.mli.depends
+[cache hit] ocamlc.opt -c -o tutu.cmi tutu.mli
+[cache hit] ocamldep.opt -modules titi.ml > titi.ml.depends
+[cache hit] ocamlc.opt -c -o titi.cmo titi.ml
+[cache hit] ocamldep.opt -modules tata.mli > tata.mli.depends
+[cache hit] ocamlc.opt -c -o tata.cmi tata.mli
+[cache hit] ocamlc.opt -c -o toto.cmo toto.ml
+[cache hit] ocamldep.opt -modules tutu.ml > tutu.ml.depends
+[cache hit] ocamldep.opt -pp camlp4o -modules vivi.ml > vivi.ml.depends
+[cache hit] ocamlc.opt -c -pp camlp4o -o vivi.cmo vivi.ml
+[cache hit] ocamldep.opt -modules tyty.mli > tyty.mli.depends
+[cache hit] ocamlc.opt -c -o tyty.cmi tyty.mli
+[cache hit] ocamlc.opt -c -o tutu.cmo tutu.ml
+[cache hit] ocamldep.opt -modules tata.ml > tata.ml.depends
+[cache hit] ocamlc.opt -c -o tata.cmo tata.ml
+[cache hit] ocamlc.opt tata.cmo titi.cmo vivi.cmo tutu.cmo toto.cmo -o toto.byte
+[cache hit] ocamlopt.opt -c -pp camlp4o -o vivi.cmx vivi.ml
+[cache hit] ocamlopt.opt -c -o tutu.cmx tutu.ml
+[cache hit] ocamlopt.opt -c -o titi.cmx titi.ml
+[cache hit] ocamlopt.opt -c -o tata.cmx tata.ml
+[cache hit] ocamlopt.opt -c -o toto.cmx toto.ml
+[cache hit] ocamlopt.opt tata.cmx titi.cmx vivi.cmx tutu.cmx toto.cmx -o toto.native
+Warning: Using -- only run the last target
+toto.native: _build/toto.native: Hello world!!!
+Tutu.tutu => 1
+Tata.tata => "TATA2"
++ cp vivi3.ml vivi.ml
++ ../../_build/ocamlbuild.native toto.byte toto.native -no-skip -classic-display -- -help
+ocamldep.opt -pp camlp4o -modules vivi.ml > vivi.ml.depends
+ocamlc.opt -c -pp camlp4o -o vivi.cmo vivi.ml
+ocamlc.opt -c -o tutu.cmo tutu.ml
+ocamlc.opt tata.cmo titi.cmo vivi.cmo tutu.cmo toto.cmo -o toto.byte
+ocamlopt.opt -c -pp camlp4o -o vivi.cmx vivi.ml
+ocamlopt.opt -c -o tutu.cmx tutu.ml
+ocamlopt.opt -c -o toto.cmx toto.ml
+ocamlopt.opt tata.cmx titi.cmx vivi.cmx tutu.cmx toto.cmx -o toto.native
+Warning: Using -- only run the last target
+toto.native: _build/toto.native: Hello world!!!
+Tutu.tutu => 2
+Tata.tata => "TATA2"
++ ../../_build/ocamlbuild.native toto.byte toto.native -no-skip -classic-display -verbose 0 -nothing-should-be-rebuilt -- -help
+[cache hit] ocamldep.opt -modules toto.ml > toto.ml.depends
+[cache hit] ocamldep.opt -modules tutu.mli > tutu.mli.depends
+[cache hit] ocamlc.opt -c -o tutu.cmi tutu.mli
+[cache hit] ocamldep.opt -modules titi.ml > titi.ml.depends
+[cache hit] ocamlc.opt -c -o titi.cmo titi.ml
+[cache hit] ocamldep.opt -modules tata.mli > tata.mli.depends
+[cache hit] ocamlc.opt -c -o tata.cmi tata.mli
+[cache hit] ocamlc.opt -c -o toto.cmo toto.ml
+[cache hit] ocamldep.opt -modules tutu.ml > tutu.ml.depends
+[cache hit] ocamldep.opt -pp camlp4o -modules vivi.ml > vivi.ml.depends
+[cache hit] ocamlc.opt -c -pp camlp4o -o vivi.cmo vivi.ml
+[cache hit] ocamldep.opt -modules tyty.mli > tyty.mli.depends
+[cache hit] ocamlc.opt -c -o tyty.cmi tyty.mli
+[cache hit] ocamlc.opt -c -o tutu.cmo tutu.ml
+[cache hit] ocamldep.opt -modules tata.ml > tata.ml.depends
+[cache hit] ocamlc.opt -c -o tata.cmo tata.ml
+[cache hit] ocamlc.opt tata.cmo titi.cmo vivi.cmo tutu.cmo toto.cmo -o toto.byte
+[cache hit] ocamlopt.opt -c -pp camlp4o -o vivi.cmx vivi.ml
+[cache hit] ocamlopt.opt -c -o tutu.cmx tutu.ml
+[cache hit] ocamlopt.opt -c -o titi.cmx titi.ml
+[cache hit] ocamlopt.opt -c -o tata.cmx tata.ml
+[cache hit] ocamlopt.opt -c -o toto.cmx toto.ml
+[cache hit] ocamlopt.opt tata.cmx titi.cmx vivi.cmx tutu.cmx toto.cmx -o toto.native
+Warning: Using -- only run the last target
+toto.native: _build/toto.native: Hello world!!!
+Tutu.tutu => 2
+Tata.tata => "TATA2"
+ _____ _ _____
+|_ _|__ ___| |_|___ /
+ | |/ _ \/ __| __| |_ \
+ | | __/\__ \ |_ ___) |
+ |_|\___||___/\__|____/
+
++ CMDOTPS=
++ BUILD=../../_build/ocamlbuild.native a.byte a.native proj.docdir/index.html -no-skip -classic-display
++ BUILD1=../../_build/ocamlbuild.native a.byte a.native proj.docdir/index.html -no-skip -classic-display
++ BUILD2=../../_build/ocamlbuild.native a.byte a.native proj.docdir/index.html -no-skip -classic-display -verbose 0 -nothing-should-be-rebuilt
++ rm -rf _build
++ ../../_build/ocamlbuild.native a.byte a.native proj.docdir/index.html -no-skip -classic-display
+ocamldep.opt -modules a.ml > a.ml.depends
+ocamldep.opt -modules a.mli > a.mli.depends
+ocamlc.opt -c -o a.cmi a.mli
+ocamldep.opt -modules b.mli > b.mli.depends
+ocamlc.opt -c -o b.cmi b.mli
+ocamlc.opt -c -o a.cmo a.ml
+ocamldep.opt -modules b.ml > b.ml.depends
+ocamldep.opt -modules c.mli > c.mli.depends
+ocamlc.opt -c -o c.cmi c.mli
+ocamlc.opt -c -o b.cmo b.ml
+ocamldep.opt -modules c.ml > c.ml.depends
+ocamldep.opt -modules d.mli > d.mli.depends
+ocamlc.opt -c -o d.cmi d.mli
+ocamlc.opt -c -o c.cmo c.ml
+ocamldep.opt -modules d.ml > d.ml.depends
+ocamldep.opt -modules e.mli > e.mli.depends
+ocamlc.opt -c -o e.cmi e.mli
+ocamlc.opt -c -o d.cmo d.ml
+ocamldep.opt -modules e.ml > e.ml.depends
+ocamldep.opt -modules f.mli > f.mli.depends
+ocamlc.opt -c -o f.cmi f.mli
+ocamlc.opt -c -o e.cmo e.ml
+ocamldep.opt -modules f.ml > f.ml.depends
+ocamlc.opt -c -o f.cmo f.ml
+ocamlc.opt unix.cma f.cmo e.cmo d.cmo c.cmo b.cmo a.cmo -o a.byte
+ocamlopt.opt -c -o f.cmx f.ml
+ocamlopt.opt -c -o e.cmx e.ml
+ocamlopt.opt -c -o d.cmx d.ml
+ocamlopt.opt -c -o c.cmx c.ml
+ocamlopt.opt -c -o b.cmx b.ml
+ocamlopt.opt -c -o a.cmx a.ml
+ocamlopt.opt unix.cmxa f.cmx e.cmx d.cmx c.cmx b.cmx a.cmx -o a.native
+ocamldoc.opt -dump a.odoc a.mli
+ocamldoc.opt -dump b.odoc b.mli
+ocamldoc.opt -dump c.odoc c.mli
+ocamldoc.opt -dump d.odoc d.mli
+ocamldoc.opt -dump e.odoc e.mli
+ocamldoc.opt -dump f.odoc f.mli
+rm -rf proj.docdir
+mkdir -p proj.docdir
+ocamldoc.opt -load a.odoc -load b.odoc -load c.odoc -load d.odoc -load e.odoc -load f.odoc -html -d proj.docdir
++ ../../_build/ocamlbuild.native a.byte a.native proj.docdir/index.html -no-skip -classic-display -verbose 0 -nothing-should-be-rebuilt
+[cache hit] ocamldep.opt -modules a.ml > a.ml.depends
+[cache hit] ocamldep.opt -modules a.mli > a.mli.depends
+[cache hit] ocamlc.opt -c -o a.cmi a.mli
+[cache hit] ocamldep.opt -modules b.mli > b.mli.depends
+[cache hit] ocamlc.opt -c -o b.cmi b.mli
+[cache hit] ocamlc.opt -c -o a.cmo a.ml
+[cache hit] ocamldep.opt -modules b.ml > b.ml.depends
+[cache hit] ocamldep.opt -modules c.mli > c.mli.depends
+[cache hit] ocamlc.opt -c -o c.cmi c.mli
+[cache hit] ocamlc.opt -c -o b.cmo b.ml
+[cache hit] ocamldep.opt -modules c.ml > c.ml.depends
+[cache hit] ocamldep.opt -modules d.mli > d.mli.depends
+[cache hit] ocamlc.opt -c -o d.cmi d.mli
+[cache hit] ocamlc.opt -c -o c.cmo c.ml
+[cache hit] ocamldep.opt -modules d.ml > d.ml.depends
+[cache hit] ocamldep.opt -modules e.mli > e.mli.depends
+[cache hit] ocamlc.opt -c -o e.cmi e.mli
+[cache hit] ocamlc.opt -c -o d.cmo d.ml
+[cache hit] ocamldep.opt -modules e.ml > e.ml.depends
+[cache hit] ocamldep.opt -modules f.mli > f.mli.depends
+[cache hit] ocamlc.opt -c -o f.cmi f.mli
+[cache hit] ocamlc.opt -c -o e.cmo e.ml
+[cache hit] ocamldep.opt -modules f.ml > f.ml.depends
+[cache hit] ocamlc.opt -c -o f.cmo f.ml
+[cache hit] ocamlc.opt unix.cma f.cmo e.cmo d.cmo c.cmo b.cmo a.cmo -o a.byte
+[cache hit] ocamlopt.opt -c -o f.cmx f.ml
+[cache hit] ocamlopt.opt -c -o e.cmx e.ml
+[cache hit] ocamlopt.opt -c -o d.cmx d.ml
+[cache hit] ocamlopt.opt -c -o c.cmx c.ml
+[cache hit] ocamlopt.opt -c -o b.cmx b.ml
+[cache hit] ocamlopt.opt -c -o a.cmx a.ml
+[cache hit] ocamlopt.opt unix.cmxa f.cmx e.cmx d.cmx c.cmx b.cmx a.cmx -o a.native
+[cache hit] ocamldoc.opt -dump a.odoc a.mli
+[cache hit] ocamldoc.opt -dump b.odoc b.mli
+[cache hit] ocamldoc.opt -dump c.odoc c.mli
+[cache hit] ocamldoc.opt -dump d.odoc d.mli
+[cache hit] ocamldoc.opt -dump e.odoc e.mli
+[cache hit] ocamldoc.opt -dump f.odoc f.mli
+[cache hit] rm -rf proj.docdir
+[cache hit] mkdir -p proj.docdir
+[cache hit] ocamldoc.opt -load a.odoc -load b.odoc -load c.odoc -load d.odoc -load e.odoc -load f.odoc -html -d proj.docdir
+ _____ _ _ _
+|_ _|__ ___| |_| || |
+ | |/ _ \/ __| __| || |_
+ | | __/\__ \ |_|__ _|
+ |_|\___||___/\__| |_|
+
++ CMDOTPS=
++ BUILD=../../_build/ocamlbuild.native -I a -I b aa.byte aa.native -no-skip -classic-display
++ BUILD1=../../_build/ocamlbuild.native -I a -I b aa.byte aa.native -no-skip -classic-display
++ BUILD2=../../_build/ocamlbuild.native -I a -I b aa.byte aa.native -no-skip -classic-display -verbose 0 -nothing-should-be-rebuilt
++ rm -rf _build
++ ../../_build/ocamlbuild.native -I a -I b aa.byte aa.native -no-skip -classic-display
+ocamldep.opt -modules a/aa.ml > a/aa.ml.depends
+ocamldep.opt -modules a/aa.mli > a/aa.mli.depends
+ocamlc.opt -c -I a -I b -o a/aa.cmi a/aa.mli
+ocamldep.opt -modules b/bb.ml > b/bb.ml.depends
+ocamlc.opt -c -I b -I a -o b/bb.cmo b/bb.ml
+ocamlc.opt -c -I a -I b -o a/aa.cmo a/aa.ml
+ocamlc.opt str.cma b/bb.cmo a/aa.cmo -o a/aa.byte
+ocamlopt.opt -c -I b -I a -o b/bb.cmx b/bb.ml
+ocamlopt.opt -c -I a -I b -o a/aa.cmx a/aa.ml
+ocamlopt.opt str.cmxa b/bb.cmx a/aa.cmx -o a/aa.native
++ ../../_build/ocamlbuild.native -I a -I b aa.byte aa.native -no-skip -classic-display -verbose 0 -nothing-should-be-rebuilt
+[cache hit] ocamldep.opt -modules a/aa.ml > a/aa.ml.depends
+[cache hit] ocamldep.opt -modules a/aa.mli > a/aa.mli.depends
+[cache hit] ocamlc.opt -c -I a -I b -o a/aa.cmi a/aa.mli
+[cache hit] ocamldep.opt -modules b/bb.ml > b/bb.ml.depends
+[cache hit] ocamlc.opt -c -I b -I a -o b/bb.cmo b/bb.ml
+[cache hit] ocamlc.opt -c -I a -I b -o a/aa.cmo a/aa.ml
+[cache hit] ocamlc.opt str.cma b/bb.cmo a/aa.cmo -o a/aa.byte
+[cache hit] ocamlopt.opt -c -I b -I a -o b/bb.cmx b/bb.ml
+[cache hit] ocamlopt.opt -c -I a -I b -o a/aa.cmx a/aa.ml
+[cache hit] ocamlopt.opt str.cmxa b/bb.cmx a/aa.cmx -o a/aa.native
+ _____ _ ____
+|_ _|__ ___| |_| ___|
+ | |/ _ \/ __| __|___ \
+ | | __/\__ \ |_ ___) |
+ |_|\___||___/\__|____/
+
++ CMDOPTS=
++ BUILD=../../_build/ocamlbuild.native d.byte d.native -no-skip -classic-display
++ BUILD1=../../_build/ocamlbuild.native d.byte d.native -no-skip -classic-display
++ BUILD2=../../_build/ocamlbuild.native d.byte d.native -no-skip -classic-display -verbose 0 -nothing-should-be-rebuilt
++ rm -rf _build
++ ../../_build/ocamlbuild.native d.byte d.native -no-skip -classic-display
+ocamldep.opt -modules d.ml > d.ml.depends
+ocamldep.opt -modules a.ml > a.ml.depends
+ocamldep.opt -modules a.mli > a.mli.depends
+ocamlc.opt -c -o a.cmi a.mli
+ocamldep.opt -modules b.ml > b.ml.depends
+ocamlc.opt -c -o a.cmo a.ml
+ocamlc.opt -c -o b.cmo b.ml
+ocamlc.opt -pack a.cmo b.cmo -o c.cmo
+ocamlc.opt -c -o d.cmo d.ml
+ocamlc.opt c.cmo d.cmo -o d.byte
+ocamlopt.opt -c -for-pack C -o a.cmx a.ml
+ocamlopt.opt -c -for-pack C -o b.cmx b.ml
+mv c.cmi c.cmitmp
+ocamlopt.opt -pack a.cmx b.cmx -o c.cmx
+cmp c.cmitmp c.cmi
+ocamlopt.opt -c -o d.cmx d.ml
+ocamlopt.opt c.cmx d.cmx -o d.native
++ ../../_build/ocamlbuild.native d.byte d.native -no-skip -classic-display -verbose 0 -nothing-should-be-rebuilt
+[cache hit] ocamldep.opt -modules d.ml > d.ml.depends
+[cache hit] ocamldep.opt -modules a.ml > a.ml.depends
+[cache hit] ocamldep.opt -modules a.mli > a.mli.depends
+[cache hit] ocamlc.opt -c -o a.cmi a.mli
+[cache hit] ocamlc.opt -c -o a.cmo a.ml
+[cache hit] ocamldep.opt -modules b.ml > b.ml.depends
+[cache hit] ocamlc.opt -c -o b.cmo b.ml
+[cache hit] ocamlc.opt -pack a.cmo b.cmo -o c.cmo
+[cache hit] ocamlc.opt -c -o d.cmo d.ml
+[cache hit] ocamlc.opt c.cmo d.cmo -o d.byte
+[cache hit] ocamlopt.opt -c -for-pack C -o a.cmx a.ml
+[cache hit] ocamlopt.opt -c -for-pack C -o b.cmx b.ml
+[cache hit] mv c.cmi c.cmitmp
+[cache hit] ocamlopt.opt -pack a.cmx b.cmx -o c.cmx
+[cache hit] cmp c.cmitmp c.cmi
+[cache hit] ocamlopt.opt -c -o d.cmx d.ml
+[cache hit] ocamlopt.opt c.cmx d.cmx -o d.native
+ _____ _ __
+|_ _|__ ___| |_ / /_
+ | |/ _ \/ __| __| '_ \
+ | | __/\__ \ |_| (_) |
+ |_|\___||___/\__|\___/
+
++ rm -rf _build
++ CMDOPTS=
++ BUILD=../../_build/ocamlbuild.native -no-skip main.byte -classic-display
++ BUILD1=../../_build/ocamlbuild.native -no-skip main.byte -classic-display
++ BUILD2=../../_build/ocamlbuild.native -no-skip main.byte -classic-display -verbose 0 -nothing-should-be-rebuilt
++ cp b.mli.v1 b.mli
++ cp d.mli.v1 d.mli
++ ../../_build/ocamlbuild.native -no-skip main.byte -classic-display
+ocamldep.opt -modules main.ml > main.ml.depends
+ocamldep.opt -modules main.mli > main.mli.depends
+ocamlc.opt -c -o main.cmi main.mli
+ocamldep.opt -modules d.mli > d.mli.depends
+ocamldep.opt -modules a.mli > a.mli.depends
+ocamlc.opt -c -o d.cmi d.mli
+ocamlc.opt -c -o a.cmi a.mli
+ocamlc.opt -c -o main.cmo main.ml
+ocamldep.opt -modules d.ml > d.ml.depends
+ocamldep.opt -modules a.ml > a.ml.depends
+ocamldep.opt -modules b.mli > b.mli.depends
+ocamlc.opt -c -o b.cmi b.mli
+ocamlc.opt -c -o d.cmo d.ml
+ocamlc.opt -c -o a.cmo a.ml
+ocamldep.opt -modules b.ml > b.ml.depends
+ocamlc.opt -c -o b.cmo b.ml
+ocamlc.opt d.cmo b.cmo a.cmo main.cmo -o main.byte
++ ../../_build/ocamlbuild.native -no-skip main.byte -classic-display -verbose 0 -nothing-should-be-rebuilt
+[cache hit] ocamldep.opt -modules main.ml > main.ml.depends
+[cache hit] ocamldep.opt -modules main.mli > main.mli.depends
+[cache hit] ocamlc.opt -c -o main.cmi main.mli
+[cache hit] ocamldep.opt -modules d.mli > d.mli.depends
+[cache hit] ocamlc.opt -c -o d.cmi d.mli
+[cache hit] ocamldep.opt -modules a.mli > a.mli.depends
+[cache hit] ocamlc.opt -c -o a.cmi a.mli
+[cache hit] ocamlc.opt -c -o main.cmo main.ml
+[cache hit] ocamldep.opt -modules d.ml > d.ml.depends
+[cache hit] ocamlc.opt -c -o d.cmo d.ml
+[cache hit] ocamldep.opt -modules a.ml > a.ml.depends
+[cache hit] ocamldep.opt -modules b.mli > b.mli.depends
+[cache hit] ocamlc.opt -c -o b.cmi b.mli
+[cache hit] ocamlc.opt -c -o a.cmo a.ml
+[cache hit] ocamldep.opt -modules b.ml > b.ml.depends
+[cache hit] ocamlc.opt -c -o b.cmo b.ml
+[cache hit] ocamlc.opt d.cmo b.cmo a.cmo main.cmo -o main.byte
++ cp b.mli.v2 b.mli
++ cp d.mli.v2 d.mli
++ ../../_build/ocamlbuild.native -no-skip main.byte -classic-display
+ocamldep.opt -modules d.mli > d.mli.depends
+ocamlc.opt -c -o d.cmi d.mli
+ocamlc.opt -c -o main.cmo main.ml
+ocamldep.opt -modules b.mli > b.mli.depends
++ ocamldep.opt -modules b.mli > b.mli.depends
+File "b.mli", line 1, characters 0-2:
+Syntax error
+Command exited with code 2.
++ cp b.mli.v1 b.mli
++ ../../_build/ocamlbuild.native -no-skip main.byte -classic-display
+ocamldep.opt -modules b.mli > b.mli.depends
+ocamlc.opt -c -o b.cmi b.mli
+ocamlc.opt -c -o d.cmo d.ml
+ocamlc.opt -c -o b.cmo b.ml
+ocamlc.opt d.cmo b.cmo a.cmo main.cmo -o main.byte
++ ../../_build/ocamlbuild.native -no-skip main.byte -classic-display -verbose 0 -nothing-should-be-rebuilt
+[cache hit] ocamldep.opt -modules main.ml > main.ml.depends
+[cache hit] ocamldep.opt -modules main.mli > main.mli.depends
+[cache hit] ocamlc.opt -c -o main.cmi main.mli
+[cache hit] ocamldep.opt -modules d.mli > d.mli.depends
+[cache hit] ocamlc.opt -c -o d.cmi d.mli
+[cache hit] ocamldep.opt -modules a.mli > a.mli.depends
+[cache hit] ocamlc.opt -c -o a.cmi a.mli
+[cache hit] ocamlc.opt -c -o main.cmo main.ml
+[cache hit] ocamldep.opt -modules d.ml > d.ml.depends
+[cache hit] ocamlc.opt -c -o d.cmo d.ml
+[cache hit] ocamldep.opt -modules a.ml > a.ml.depends
+[cache hit] ocamldep.opt -modules b.mli > b.mli.depends
+[cache hit] ocamlc.opt -c -o b.cmi b.mli
+[cache hit] ocamlc.opt -c -o a.cmo a.ml
+[cache hit] ocamldep.opt -modules b.ml > b.ml.depends
+[cache hit] ocamlc.opt -c -o b.cmo b.ml
+[cache hit] ocamlc.opt d.cmo b.cmo a.cmo main.cmo -o main.byte
++ echo PASS
+PASS
+ _____ _ _____
+|_ _|__ ___| ||___ |
+ | |/ _ \/ __| __| / /
+ | | __/\__ \ |_ / /
+ |_|\___||___/\__/_/
+
++ CMDOPTS=
++ BUILD=../../_build/ocamlbuild.native bbcc.cma main.byte bbcc.cmxa main.native -no-skip -classic-display
++ BUILD1=../../_build/ocamlbuild.native bbcc.cma main.byte bbcc.cmxa main.native -no-skip -classic-display
++ BUILD2=../../_build/ocamlbuild.native bbcc.cma main.byte bbcc.cmxa main.native -no-skip -classic-display -verbose 0 -nothing-should-be-rebuilt
++ rm -rf _build
++ svn revert bb.ml
++ ../../_build/ocamlbuild.native bbcc.cma main.byte bbcc.cmxa main.native -no-skip -classic-display
+ocamlopt.opt -I /Users/ertai/local/lib/ocamlbuild unix.cmxa /Users/ertai/local/lib/ocamlbuild/ocamlbuildlib.cmxa myocamlbuild.ml /Users/ertai/local/lib/ocamlbuild/ocamlbuild.cmx -o myocamlbuild
+ocamldep.opt -modules bb.ml > bb.ml.depends
+ocamldep.opt -modules bb.mli > bb.mli.depends
+ocamlc.opt -c -o bb.cmi bb.mli
+ocamldep.opt -modules cc.ml > cc.ml.depends
+ocamldep.opt -modules c2.mli > c2.mli.depends
+ocamldep.opt -modules aa.ml > aa.ml.depends
+ocamlc.opt -c -o c2.cmi c2.mli
+ocamlc.opt -c -o aa.cmo aa.ml
+ocamlc.opt -c -o bb.cmo bb.ml
+ocamlc.opt -c -o cc.cmo cc.ml
+ocamlc.opt -a bb.cmo cc.cmo -o bbcc.cma
+ocamldep.opt -modules main.ml > main.ml.depends
+ocamldep.opt -modules c3.ml > c3.ml.depends
+ocamlc.opt -c -o c3.cmo c3.ml
+ocamlc.opt -c -o main.cmo main.ml
+ocamldep.opt -modules cool_plugin.ml > cool_plugin.ml.depends
+ocamlc.opt -c -o cool_plugin.cmo cool_plugin.ml
+ocamldep.opt -modules c2.ml > c2.ml.depends
+ocamlc.opt -c -o c2.cmo c2.ml
+ocamlc.opt aa.cmo c2.cmo bbcc.cma c3.cmo main.cmo cool_plugin.cmo -o main.byte
+ocamlopt.opt -c -o bb.cmx bb.ml
+ocamlopt.opt -c -o c2.cmx c2.ml
+ocamlopt.opt -c -o aa.cmx aa.ml
+ocamlopt.opt -c -o cc.cmx cc.ml
+ocamlopt.opt -a bb.cmx cc.cmx -o bbcc.cmxa
+ocamlopt.opt -c -o c3.cmx c3.ml
+ocamlopt.opt -c -o main.cmx main.ml
+ocamlopt.opt aa.cmx c2.cmx bbcc.cmxa c3.cmx main.cmx -o main.native
++ ../../_build/ocamlbuild.native bbcc.cma main.byte bbcc.cmxa main.native -no-skip -classic-display -verbose 0 -nothing-should-be-rebuilt
+[cache hit] ocamldep.opt -modules bb.ml > bb.ml.depends
+[cache hit] ocamldep.opt -modules bb.mli > bb.mli.depends
+[cache hit] ocamlc.opt -c -o bb.cmi bb.mli
+[cache hit] ocamlc.opt -c -o bb.cmo bb.ml
+[cache hit] ocamldep.opt -modules cc.ml > cc.ml.depends
+[cache hit] ocamldep.opt -modules c2.mli > c2.mli.depends
+[cache hit] ocamlc.opt -c -o c2.cmi c2.mli
+[cache hit] ocamldep.opt -modules aa.ml > aa.ml.depends
+[cache hit] ocamlc.opt -c -o aa.cmo aa.ml
+[cache hit] ocamlc.opt -c -o cc.cmo cc.ml
+[cache hit] ocamlc.opt -a bb.cmo cc.cmo -o bbcc.cma
+[cache hit] ocamldep.opt -modules main.ml > main.ml.depends
+[cache hit] ocamldep.opt -modules c3.ml > c3.ml.depends
+[cache hit] ocamlc.opt -c -o c3.cmo c3.ml
+[cache hit] ocamlc.opt -c -o main.cmo main.ml
+[cache hit] ocamldep.opt -modules cool_plugin.ml > cool_plugin.ml.depends
+[cache hit] ocamlc.opt -c -o cool_plugin.cmo cool_plugin.ml
+[cache hit] ocamldep.opt -modules c2.ml > c2.ml.depends
+[cache hit] ocamlc.opt -c -o c2.cmo c2.ml
+[cache hit] ocamlc.opt aa.cmo c2.cmo bbcc.cma c3.cmo main.cmo cool_plugin.cmo -o main.byte
+[cache hit] ocamlopt.opt -c -o bb.cmx bb.ml
+[cache hit] ocamlopt.opt -c -o c2.cmx c2.ml
+[cache hit] ocamlopt.opt -c -o aa.cmx aa.ml
+[cache hit] ocamlopt.opt -c -o cc.cmx cc.ml
+[cache hit] ocamlopt.opt -a bb.cmx cc.cmx -o bbcc.cmxa
+[cache hit] ocamlopt.opt -c -o c3.cmx c3.ml
+[cache hit] ocamlopt.opt -c -o main.cmx main.ml
+[cache hit] ocamlopt.opt aa.cmx c2.cmx bbcc.cmxa c3.cmx main.cmx -o main.native
++ cp bb2.ml bb.ml
++ ../../_build/ocamlbuild.native bbcc.cma main.byte bbcc.cmxa main.native -no-skip -classic-display -verbose 0
+ocamldep.opt -modules bb.ml > bb.ml.depends
+[cache hit] ocamldep.opt -modules bb.mli > bb.mli.depends
+[cache hit] ocamlc.opt -c -o bb.cmi bb.mli
+[cache hit] ocamldep.opt -modules cc.ml > cc.ml.depends
+[cache hit] ocamldep.opt -modules c2.mli > c2.mli.depends
+[cache hit] ocamlc.opt -c -o c2.cmi c2.mli
+[cache hit] ocamldep.opt -modules aa.ml > aa.ml.depends
+[cache hit] ocamlc.opt -c -o aa.cmo aa.ml
+[cache hit] ocamlc.opt -c -o cc.cmo cc.ml
+ocamlc.opt -c -o bb.cmo bb.ml
+ocamlc.opt -a bb.cmo cc.cmo -o bbcc.cma
+[cache hit] ocamldep.opt -modules main.ml > main.ml.depends
+[cache hit] ocamldep.opt -modules c3.ml > c3.ml.depends
+[cache hit] ocamlc.opt -c -o c3.cmo c3.ml
+[cache hit] ocamlc.opt -c -o main.cmo main.ml
+[cache hit] ocamldep.opt -modules cool_plugin.ml > cool_plugin.ml.depends
+[cache hit] ocamlc.opt -c -o cool_plugin.cmo cool_plugin.ml
+[cache hit] ocamldep.opt -modules c2.ml > c2.ml.depends
+[cache hit] ocamlc.opt -c -o c2.cmo c2.ml
+ocamlc.opt aa.cmo c2.cmo bbcc.cma c3.cmo main.cmo cool_plugin.cmo -o main.byte
+[cache hit] ocamlopt.opt -c -o c2.cmx c2.ml
+ocamlopt.opt -c -o bb.cmx bb.ml
+[cache hit] ocamlopt.opt -c -o aa.cmx aa.ml
+ocamlopt.opt -c -o cc.cmx cc.ml
+ocamlopt.opt -a bb.cmx cc.cmx -o bbcc.cmxa
+ocamlopt.opt -c -o c3.cmx c3.ml
+ocamlopt.opt -c -o main.cmx main.ml
+ocamlopt.opt aa.cmx c2.cmx bbcc.cmxa c3.cmx main.cmx -o main.native
++ ../../_build/ocamlbuild.native bbcc.cma main.byte bbcc.cmxa main.native -no-skip -classic-display -verbose 0 -nothing-should-be-rebuilt
+[cache hit] ocamldep.opt -modules bb.ml > bb.ml.depends
+[cache hit] ocamldep.opt -modules bb.mli > bb.mli.depends
+[cache hit] ocamlc.opt -c -o bb.cmi bb.mli
+[cache hit] ocamlc.opt -c -o bb.cmo bb.ml
+[cache hit] ocamldep.opt -modules cc.ml > cc.ml.depends
+[cache hit] ocamldep.opt -modules c2.mli > c2.mli.depends
+[cache hit] ocamlc.opt -c -o c2.cmi c2.mli
+[cache hit] ocamldep.opt -modules aa.ml > aa.ml.depends
+[cache hit] ocamlc.opt -c -o aa.cmo aa.ml
+[cache hit] ocamlc.opt -c -o cc.cmo cc.ml
+[cache hit] ocamlc.opt -a bb.cmo cc.cmo -o bbcc.cma
+[cache hit] ocamldep.opt -modules main.ml > main.ml.depends
+[cache hit] ocamldep.opt -modules c3.ml > c3.ml.depends
+[cache hit] ocamlc.opt -c -o c3.cmo c3.ml
+[cache hit] ocamlc.opt -c -o main.cmo main.ml
+[cache hit] ocamldep.opt -modules cool_plugin.ml > cool_plugin.ml.depends
+[cache hit] ocamlc.opt -c -o cool_plugin.cmo cool_plugin.ml
+[cache hit] ocamldep.opt -modules c2.ml > c2.ml.depends
+[cache hit] ocamlc.opt -c -o c2.cmo c2.ml
+[cache hit] ocamlc.opt aa.cmo c2.cmo bbcc.cma c3.cmo main.cmo cool_plugin.cmo -o main.byte
+[cache hit] ocamlopt.opt -c -o bb.cmx bb.ml
+[cache hit] ocamlopt.opt -c -o c2.cmx c2.ml
+[cache hit] ocamlopt.opt -c -o aa.cmx aa.ml
+[cache hit] ocamlopt.opt -c -o cc.cmx cc.ml
+[cache hit] ocamlopt.opt -a bb.cmx cc.cmx -o bbcc.cmxa
+[cache hit] ocamlopt.opt -c -o c3.cmx c3.ml
+[cache hit] ocamlopt.opt -c -o main.cmx main.ml
+[cache hit] ocamlopt.opt aa.cmx c2.cmx bbcc.cmxa c3.cmx main.cmx -o main.native
++ cp bb3.ml bb.ml
++ ../../_build/ocamlbuild.native bbcc.cma main.byte bbcc.cmxa main.native -no-skip -classic-display -verbose 0
+ocamldep.opt -modules bb.ml > bb.ml.depends
+[cache hit] ocamldep.opt -modules bb.mli > bb.mli.depends
+[cache hit] ocamlc.opt -c -o bb.cmi bb.mli
+[cache hit] ocamldep.opt -modules cc.ml > cc.ml.depends
+[cache hit] ocamldep.opt -modules c2.mli > c2.mli.depends
+[cache hit] ocamlc.opt -c -o c2.cmi c2.mli
+[cache hit] ocamldep.opt -modules aa.ml > aa.ml.depends
+[cache hit] ocamlc.opt -c -o aa.cmo aa.ml
+[cache hit] ocamlc.opt -c -o cc.cmo cc.ml
+ocamlc.opt -c -o bb.cmo bb.ml
+ocamlc.opt -a bb.cmo cc.cmo -o bbcc.cma
+[cache hit] ocamldep.opt -modules main.ml > main.ml.depends
+[cache hit] ocamldep.opt -modules c3.ml > c3.ml.depends
+[cache hit] ocamlc.opt -c -o c3.cmo c3.ml
+[cache hit] ocamlc.opt -c -o main.cmo main.ml
+[cache hit] ocamldep.opt -modules cool_plugin.ml > cool_plugin.ml.depends
+[cache hit] ocamlc.opt -c -o cool_plugin.cmo cool_plugin.ml
+[cache hit] ocamldep.opt -modules c2.ml > c2.ml.depends
+[cache hit] ocamlc.opt -c -o c2.cmo c2.ml
+ocamlc.opt aa.cmo c2.cmo bbcc.cma c3.cmo main.cmo cool_plugin.cmo -o main.byte
+[cache hit] ocamlopt.opt -c -o c2.cmx c2.ml
+ocamlopt.opt -c -o bb.cmx bb.ml
+[cache hit] ocamlopt.opt -c -o aa.cmx aa.ml
+[cache hit] ocamlopt.opt -c -o cc.cmx cc.ml
+ocamlopt.opt -a bb.cmx cc.cmx -o bbcc.cmxa
+[cache hit] ocamlopt.opt -c -o c3.cmx c3.ml
+[cache hit] ocamlopt.opt -c -o main.cmx main.ml
+ocamlopt.opt aa.cmx c2.cmx bbcc.cmxa c3.cmx main.cmx -o main.native
++ ../../_build/ocamlbuild.native bbcc.cma main.byte bbcc.cmxa main.native -no-skip -classic-display -verbose 0 -nothing-should-be-rebuilt
+[cache hit] ocamldep.opt -modules bb.ml > bb.ml.depends
+[cache hit] ocamldep.opt -modules bb.mli > bb.mli.depends
+[cache hit] ocamlc.opt -c -o bb.cmi bb.mli
+[cache hit] ocamlc.opt -c -o bb.cmo bb.ml
+[cache hit] ocamldep.opt -modules cc.ml > cc.ml.depends
+[cache hit] ocamldep.opt -modules c2.mli > c2.mli.depends
+[cache hit] ocamlc.opt -c -o c2.cmi c2.mli
+[cache hit] ocamldep.opt -modules aa.ml > aa.ml.depends
+[cache hit] ocamlc.opt -c -o aa.cmo aa.ml
+[cache hit] ocamlc.opt -c -o cc.cmo cc.ml
+[cache hit] ocamlc.opt -a bb.cmo cc.cmo -o bbcc.cma
+[cache hit] ocamldep.opt -modules main.ml > main.ml.depends
+[cache hit] ocamldep.opt -modules c3.ml > c3.ml.depends
+[cache hit] ocamlc.opt -c -o c3.cmo c3.ml
+[cache hit] ocamlc.opt -c -o main.cmo main.ml
+[cache hit] ocamldep.opt -modules cool_plugin.ml > cool_plugin.ml.depends
+[cache hit] ocamlc.opt -c -o cool_plugin.cmo cool_plugin.ml
+[cache hit] ocamldep.opt -modules c2.ml > c2.ml.depends
+[cache hit] ocamlc.opt -c -o c2.cmo c2.ml
+[cache hit] ocamlc.opt aa.cmo c2.cmo bbcc.cma c3.cmo main.cmo cool_plugin.cmo -o main.byte
+[cache hit] ocamlopt.opt -c -o bb.cmx bb.ml
+[cache hit] ocamlopt.opt -c -o c2.cmx c2.ml
+[cache hit] ocamlopt.opt -c -o aa.cmx aa.ml
+[cache hit] ocamlopt.opt -c -o cc.cmx cc.ml
+[cache hit] ocamlopt.opt -a bb.cmx cc.cmx -o bbcc.cmxa
+[cache hit] ocamlopt.opt -c -o c3.cmx c3.ml
+[cache hit] ocamlopt.opt -c -o main.cmx main.ml
+[cache hit] ocamlopt.opt aa.cmx c2.cmx bbcc.cmxa c3.cmx main.cmx -o main.native
++ svn revert bb.ml
+Reverted 'bb.ml'
+ _____ _ ___
+|_ _|__ ___| |_( _ )
+ | |/ _ \/ __| __/ _ \
+ | | __/\__ \ || (_) |
+ |_|\___||___/\__\___/
+
++ CMDOPTS=
++ BUILD=../../_build/ocamlbuild.native a.byte a.native -no-skip -classic-display
++ BUILD1=../../_build/ocamlbuild.native a.byte a.native -no-skip -classic-display
++ BUILD2=../../_build/ocamlbuild.native a.byte a.native -no-skip -classic-display -verbose 0 -nothing-should-be-rebuilt
++ rm -rf _build
++ ../../_build/ocamlbuild.native a.byte a.native -no-skip -classic-display
+ocamlopt.opt -I /Users/ertai/local/lib/ocamlbuild unix.cmxa /Users/ertai/local/lib/ocamlbuild/ocamlbuildlib.cmxa myocamlbuild.ml /Users/ertai/local/lib/ocamlbuild/ocamlbuild.cmx -o myocamlbuild
+ocamldep.opt -modules a.ml > a.ml.depends
+ocamldep.opt -modules myconfig.ml > myconfig.ml.depends
+ocamlc.opt -c -o myconfig.cmo myconfig.ml
+ocamlc.opt -c -o a.cmo a.ml
+ocamlc.opt myconfig.cmo a.cmo -o a.byte
+ocamlopt.opt -c -o myconfig.cmx myconfig.ml
+ocamlopt.opt -c -o a.cmx a.ml
+ocamlopt.opt myconfig.cmx a.cmx -o a.native
++ ../../_build/ocamlbuild.native a.byte a.native -no-skip -classic-display -verbose 0 -nothing-should-be-rebuilt
+[cache hit] ocamldep.opt -modules a.ml > a.ml.depends
+[cache hit] ocamldep.opt -modules myconfig.ml > myconfig.ml.depends
+[cache hit] ocamlc.opt -c -o myconfig.cmo myconfig.ml
+[cache hit] ocamlc.opt -c -o a.cmo a.ml
+[cache hit] ocamlc.opt myconfig.cmo a.cmo -o a.byte
+[cache hit] ocamlopt.opt -c -o myconfig.cmx myconfig.ml
+[cache hit] ocamlopt.opt -c -o a.cmx a.ml
+[cache hit] ocamlopt.opt myconfig.cmx a.cmx -o a.native
+ _____ _ ___
+|_ _|__ ___| |_ / _ \
+ | |/ _ \/ __| __| (_) |
+ | | __/\__ \ |_ \__, |
+ |_|\___||___/\__| /_/
+
+++ dirname ./test9/test.sh
++ cd ./test9/../..
++ ./_build/ocamlbuild.native -quiet -build-dir _buildtest -no-links test/test9/testglob.native
++ ./_buildtest/test/test9/testglob.native
+Globexp for "\"hello\"" OK
+Globexp for "<hello>" OK
+Globexp for "<hel*lo>" OK
+Globexp for "<a> and <b> or <c>" OK
+Globexp for "<a> titi" OK
+Glob.eval "<[a]>" "a" = true OK
+Glob.eval "<[a]>" "b" = false OK
+Glob.eval "<[a]>" "a" = true OK
+Glob.eval "<[a]>" "b" = false OK
+Glob.eval "<[a]>" "a" = true OK
+Glob.eval "<[a]>" "b" = false OK
+Glob.eval "<[a-z]>" "a" = true OK
+Glob.eval "<[a-z]>" "e" = true OK
+Glob.eval "<[a-z]>" "k" = true OK
+Glob.eval "<[a-z]>" "z" = true OK
+Glob.eval "<[a-z]>" "0" = false OK
+Glob.eval "<[a-z]>" "A" = false OK
+Glob.eval "<[a-z]>" "~" = false OK
+Glob.eval "<[a-z]>" "a" = true OK
+Glob.eval "<[a-z]>" "e" = true OK
+Glob.eval "<[a-z]>" "k" = true OK
+Glob.eval "<[a-z]>" "z" = true OK
+Glob.eval "<[a-z]>" "0" = false OK
+Glob.eval "<[a-z]>" "A" = false OK
+Glob.eval "<[a-z]>" "~" = false OK
+Glob.eval "<[a-z]>" "a" = true OK
+Glob.eval "<[a-z]>" "e" = true OK
+Glob.eval "<[a-z]>" "k" = true OK
+Glob.eval "<[a-z]>" "z" = true OK
+Glob.eval "<[a-z]>" "0" = false OK
+Glob.eval "<[a-z]>" "A" = false OK
+Glob.eval "<[a-z]>" "~" = false OK
+Glob.eval "<[a-z][0-9]>" "a0" = true OK
+Glob.eval "<[a-z][0-9]>" "b9" = true OK
+Glob.eval "<[a-z][0-9]>" "a00" = false OK
+Glob.eval "<[a-z][0-9]>" "a0a" = false OK
+Glob.eval "<[a-z][0-9]>" "b0a" = false OK
+Glob.eval "<[a-z][0-9]>" "isduis" = false OK
+Glob.eval "<[a-z][0-9]>" "" = false OK
+Glob.eval "<[a-z][0-9]>" "a0" = true OK
+Glob.eval "<[a-z][0-9]>" "b9" = true OK
+Glob.eval "<[a-z][0-9]>" "a00" = false OK
+Glob.eval "<[a-z][0-9]>" "a0a" = false OK
+Glob.eval "<[a-z][0-9]>" "b0a" = false OK
+Glob.eval "<[a-z][0-9]>" "isduis" = false OK
+Glob.eval "<[a-z][0-9]>" "" = false OK
+Glob.eval "<[a-z][0-9]>" "a0" = true OK
+Glob.eval "<[a-z][0-9]>" "b9" = true OK
+Glob.eval "<[a-z][0-9]>" "a00" = false OK
+Glob.eval "<[a-z][0-9]>" "a0a" = false OK
+Glob.eval "<[a-z][0-9]>" "b0a" = false OK
+Glob.eval "<[a-z][0-9]>" "isduis" = false OK
+Glob.eval "<[a-z][0-9]>" "" = false OK
+Glob.eval "<hello>" "hello" = true OK
+Glob.eval "<hello>" "helli" = false OK
+Glob.eval "<hello>" "hello" = true OK
+Glob.eval "<hello>" "helli" = false OK
+Glob.eval "<hello>" "hello" = true OK
+Glob.eval "<hello>" "helli" = false OK
+Glob.eval "\"hello\"" "hello" = true OK
+Glob.eval "\"hello\"" "heidi" = false OK
+Glob.eval "\"hello\"" "hello" = true OK
+Glob.eval "\"hello\"" "heidi" = false OK
+Glob.eval "\"hello\"" "hello" = true OK
+Glob.eval "\"hello\"" "heidi" = false OK
+Glob.eval "<*>" "" = true OK
+Glob.eval "<*>" "a" = true OK
+Glob.eval "<*>" "ax" = true OK
+Glob.eval "<*>" "" = true OK
+Glob.eval "<*>" "a" = true OK
+Glob.eval "<*>" "ax" = true OK
+Glob.eval "<*>" "" = true OK
+Glob.eval "<*>" "a" = true OK
+Glob.eval "<*>" "ax" = true OK
+Glob.eval "<a*b>" "ab" = true OK
+Glob.eval "<a*b>" "acb" = true OK
+Glob.eval "<a*b>" "axxxxxb" = true OK
+Glob.eval "<a*b>" "ababbababb" = true OK
+Glob.eval "<a*b>" "abx" = false OK
+Glob.eval "<a*b>" "xxxxxab" = false OK
+Glob.eval "<a*b>" "xab" = false OK
+Glob.eval "<a*b>" "ab" = true OK
+Glob.eval "<a*b>" "acb" = true OK
+Glob.eval "<a*b>" "axxxxxb" = true OK
+Glob.eval "<a*b>" "ababbababb" = true OK
+Glob.eval "<a*b>" "abx" = false OK
+Glob.eval "<a*b>" "xxxxxab" = false OK
+Glob.eval "<a*b>" "xab" = false OK
+Glob.eval "<a*b>" "ab" = true OK
+Glob.eval "<a*b>" "acb" = true OK
+Glob.eval "<a*b>" "axxxxxb" = true OK
+Glob.eval "<a*b>" "ababbababb" = true OK
+Glob.eval "<a*b>" "abx" = false OK
+Glob.eval "<a*b>" "xxxxxab" = false OK
+Glob.eval "<a*b>" "xab" = false OK
+Glob.eval "<*.ml>" "hello.ml" = true OK
+Glob.eval "<*.ml>" ".ml" = true OK
+Glob.eval "<*.ml>" "ml" = false OK
+Glob.eval "<*.ml>" "" = false OK
+Glob.eval "<*.ml>" "toto.mli" = false OK
+Glob.eval "<*.ml>" "hello.ml" = true OK
+Glob.eval "<*.ml>" ".ml" = true OK
+Glob.eval "<*.ml>" "ml" = false OK
+Glob.eval "<*.ml>" "" = false OK
+Glob.eval "<*.ml>" "toto.mli" = false OK
+Glob.eval "<*.ml>" "hello.ml" = true OK
+Glob.eval "<*.ml>" ".ml" = true OK
+Glob.eval "<*.ml>" "ml" = false OK
+Glob.eval "<*.ml>" "" = false OK
+Glob.eval "<*.ml>" "toto.mli" = false OK
+Glob.eval "<a>" "a" = true OK
+Glob.eval "<a>" "" = false OK
+Glob.eval "<a>" "aa" = false OK
+Glob.eval "<a>" "ba" = false OK
+Glob.eval "<a>" "ab" = false OK
+Glob.eval "<a>" "abaa" = false OK
+Glob.eval "<a>" "a" = true OK
+Glob.eval "<a>" "" = false OK
+Glob.eval "<a>" "aa" = false OK
+Glob.eval "<a>" "ba" = false OK
+Glob.eval "<a>" "ab" = false OK
+Glob.eval "<a>" "abaa" = false OK
+Glob.eval "<a>" "a" = true OK
+Glob.eval "<a>" "" = false OK
+Glob.eval "<a>" "aa" = false OK
+Glob.eval "<a>" "ba" = false OK
+Glob.eval "<a>" "ab" = false OK
+Glob.eval "<a>" "abaa" = false OK
+Glob.eval "<ab>" "ab" = true OK
+Glob.eval "<ab>" "" = false OK
+Glob.eval "<ab>" "abab" = false OK
+Glob.eval "<ab>" "aba" = false OK
+Glob.eval "<ab>" "abx" = false OK
+Glob.eval "<ab>" "ab" = true OK
+Glob.eval "<ab>" "" = false OK
+Glob.eval "<ab>" "abab" = false OK
+Glob.eval "<ab>" "aba" = false OK
+Glob.eval "<ab>" "abx" = false OK
+Glob.eval "<ab>" "ab" = true OK
+Glob.eval "<ab>" "" = false OK
+Glob.eval "<ab>" "abab" = false OK
+Glob.eval "<ab>" "aba" = false OK
+Glob.eval "<ab>" "abx" = false OK
+Glob.eval "<ab?c>" "abac" = true OK
+Glob.eval "<ab?c>" "abxc" = true OK
+Glob.eval "<ab?c>" "abab" = false OK
+Glob.eval "<ab?c>" "ababab" = false OK
+Glob.eval "<ab?c>" "ababa" = false OK
+Glob.eval "<ab?c>" "abac" = true OK
+Glob.eval "<ab?c>" "abxc" = true OK
+Glob.eval "<ab?c>" "abab" = false OK
+Glob.eval "<ab?c>" "ababab" = false OK
+Glob.eval "<ab?c>" "ababa" = false OK
+Glob.eval "<ab?c>" "abac" = true OK
+Glob.eval "<ab?c>" "abxc" = true OK
+Glob.eval "<ab?c>" "abab" = false OK
+Glob.eval "<ab?c>" "ababab" = false OK
+Glob.eval "<ab?c>" "ababa" = false OK
+Glob.eval "<*ab?cd*>" "123abecd345" = true OK
+Glob.eval "<*ab?cd*>" "abccd" = true OK
+Glob.eval "<*ab?cd*>" "abccd345" = true OK
+Glob.eval "<*ab?cd*>" "ababcababccdab" = true OK
+Glob.eval "<*ab?cd*>" "abcd" = false OK
+Glob.eval "<*ab?cd*>" "aaaaabcdababcd" = false OK
+Glob.eval "<*ab?cd*>" "123abecd345" = true OK
+Glob.eval "<*ab?cd*>" "abccd" = true OK
+Glob.eval "<*ab?cd*>" "abccd345" = true OK
+Glob.eval "<*ab?cd*>" "ababcababccdab" = true OK
+Glob.eval "<*ab?cd*>" "abcd" = false OK
+Glob.eval "<*ab?cd*>" "aaaaabcdababcd" = false OK
+Glob.eval "<*ab?cd*>" "123abecd345" = true OK
+Glob.eval "<*ab?cd*>" "abccd" = true OK
+Glob.eval "<*ab?cd*>" "abccd345" = true OK
+Glob.eval "<*ab?cd*>" "ababcababccdab" = true OK
+Glob.eval "<*ab?cd*>" "abcd" = false OK
+Glob.eval "<*ab?cd*>" "aaaaabcdababcd" = false OK
+Glob.eval "<*this*is*a*test*>" "this is a test" = true OK
+Glob.eval "<*this*is*a*test*>" "You know this is a test really" = true OK
+Glob.eval "<*this*is*a*test*>" "thisisatest" = true OK
+Glob.eval "<*this*is*a*test*>" "thisatest" = false OK
+Glob.eval "<*this*is*a*test*>" "this is a test" = true OK
+Glob.eval "<*this*is*a*test*>" "You know this is a test really" = true OK
+Glob.eval "<*this*is*a*test*>" "thisisatest" = true OK
+Glob.eval "<*this*is*a*test*>" "thisatest" = false OK
+Glob.eval "<*this*is*a*test*>" "this is a test" = true OK
+Glob.eval "<*this*is*a*test*>" "You know this is a test really" = true OK
+Glob.eval "<*this*is*a*test*>" "thisisatest" = true OK
+Glob.eval "<*this*is*a*test*>" "thisatest" = false OK
+Glob.eval "<b*>" "bxx" = true OK
+Glob.eval "<b*>" "bx" = true OK
+Glob.eval "<b*>" "aaab" = false OK
+Glob.eval "<b*>" "" = false OK
+Glob.eval "<b*>" "bxx" = true OK
+Glob.eval "<b*>" "bx" = true OK
+Glob.eval "<b*>" "aaab" = false OK
+Glob.eval "<b*>" "" = false OK
+Glob.eval "<b*>" "bxx" = true OK
+Glob.eval "<b*>" "bx" = true OK
+Glob.eval "<b*>" "aaab" = false OK
+Glob.eval "<b*>" "" = false OK
+Glob.eval "<*>" "" = true OK
+Glob.eval "<*>" "a" = true OK
+Glob.eval "<*>" "aaa" = true OK
+Glob.eval "<*>" "aaaaa" = true OK
+Glob.eval "<*>" "" = true OK
+Glob.eval "<*>" "a" = true OK
+Glob.eval "<*>" "aaa" = true OK
+Glob.eval "<*>" "aaaaa" = true OK
+Glob.eval "<*>" "" = true OK
+Glob.eval "<*>" "a" = true OK
+Glob.eval "<*>" "aaa" = true OK
+Glob.eval "<*>" "aaaaa" = true OK
+Glob.eval "<?>" "a" = true OK
+Glob.eval "<?>" "" = false OK
+Glob.eval "<?>" "aaa" = false OK
+Glob.eval "<?>" "aaaaa" = false OK
+Glob.eval "<?>" "a" = true OK
+Glob.eval "<?>" "" = false OK
+Glob.eval "<?>" "aaa" = false OK
+Glob.eval "<?>" "aaaaa" = false OK
+Glob.eval "<?>" "a" = true OK
+Glob.eval "<?>" "" = false OK
+Glob.eval "<?>" "aaa" = false OK
+Glob.eval "<?>" "aaaaa" = false OK
+Glob.eval "<{a,b}>" "a" = true OK
+Glob.eval "<{a,b}>" "b" = true OK
+Glob.eval "<{a,b}>" "" = false OK
+Glob.eval "<{a,b}>" "aa" = false OK
+Glob.eval "<{a,b}>" "ab" = false OK
+Glob.eval "<{a,b}>" "ba" = false OK
+Glob.eval "<{a,b}>" "bb" = false OK
+Glob.eval "<{a,b}>" "c" = false OK
+Glob.eval "<{a,b}>" "a" = true OK
+Glob.eval "<{a,b}>" "b" = true OK
+Glob.eval "<{a,b}>" "" = false OK
+Glob.eval "<{a,b}>" "aa" = false OK
+Glob.eval "<{a,b}>" "ab" = false OK
+Glob.eval "<{a,b}>" "ba" = false OK
+Glob.eval "<{a,b}>" "bb" = false OK
+Glob.eval "<{a,b}>" "c" = false OK
+Glob.eval "<{a,b}>" "a" = true OK
+Glob.eval "<{a,b}>" "b" = true OK
+Glob.eval "<{a,b}>" "" = false OK
+Glob.eval "<{a,b}>" "aa" = false OK
+Glob.eval "<{a,b}>" "ab" = false OK
+Glob.eval "<{a,b}>" "ba" = false OK
+Glob.eval "<{a,b}>" "bb" = false OK
+Glob.eval "<{a,b}>" "c" = false OK
+Glob.eval "<toto.{ml,mli}>" "toto.ml" = true OK
+Glob.eval "<toto.{ml,mli}>" "toto.mli" = true OK
+Glob.eval "<toto.{ml,mli}>" "toto." = false OK
+Glob.eval "<toto.{ml,mli}>" "toto.mll" = false OK
+Glob.eval "<toto.{ml,mli}>" "toto.ml" = true OK
+Glob.eval "<toto.{ml,mli}>" "toto.mli" = true OK
+Glob.eval "<toto.{ml,mli}>" "toto." = false OK
+Glob.eval "<toto.{ml,mli}>" "toto.mll" = false OK
+Glob.eval "<toto.{ml,mli}>" "toto.ml" = true OK
+Glob.eval "<toto.{ml,mli}>" "toto.mli" = true OK
+Glob.eval "<toto.{ml,mli}>" "toto." = false OK
+Glob.eval "<toto.{ml,mli}>" "toto.mll" = false OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "acf" = true OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "acg" = true OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "adf" = true OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "adg" = true OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "aef" = true OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "aeg" = true OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "bcf" = true OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "bcg" = true OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "bdf" = true OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "bdg" = true OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "bef" = true OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "beg" = true OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "afg" = false OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "af" = false OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "aee" = false OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "acf" = true OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "acg" = true OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "adf" = true OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "adg" = true OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "aef" = true OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "aeg" = true OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "bcf" = true OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "bcg" = true OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "bdf" = true OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "bdg" = true OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "bef" = true OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "beg" = true OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "afg" = false OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "af" = false OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "aee" = false OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "acf" = true OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "acg" = true OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "adf" = true OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "adg" = true OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "aef" = true OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "aeg" = true OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "bcf" = true OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "bcg" = true OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "bdf" = true OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "bdg" = true OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "bef" = true OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "beg" = true OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "afg" = false OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "af" = false OK
+Glob.eval "<{a,b}{c,[de]}{f,g}>" "aee" = false OK
+Glob.eval "(<*.ml> or <*.mli>) and not \"hello.ml\"" "a.ml" = true OK
+Glob.eval "(<*.ml> or <*.mli>) and not \"hello.ml\"" "b.ml" = true OK
+Glob.eval "(<*.ml> or <*.mli>) and not \"hello.ml\"" "a.mli" = true OK
+Glob.eval "(<*.ml> or <*.mli>) and not \"hello.ml\"" "hello.ml" = false OK
+Glob.eval "(<*.ml> or <*.mli>) and not \"hello.ml\"" "a.mli.x" = false OK
+Glob.eval "(<*.ml> or <*.mli>) and not \"hello.ml\"" "a.ml" = true OK
+Glob.eval "(<*.ml> or <*.mli>) and not \"hello.ml\"" "b.ml" = true OK
+Glob.eval "(<*.ml> or <*.mli>) and not \"hello.ml\"" "a.mli" = true OK
+Glob.eval "(<*.ml> or <*.mli>) and not \"hello.ml\"" "hello.ml" = false OK
+Glob.eval "(<*.ml> or <*.mli>) and not \"hello.ml\"" "a.mli.x" = false OK
+Glob.eval "(<*.ml> or <*.mli>) and not \"hello.ml\"" "a.ml" = true OK
+Glob.eval "(<*.ml> or <*.mli>) and not \"hello.ml\"" "b.ml" = true OK
+Glob.eval "(<*.ml> or <*.mli>) and not \"hello.ml\"" "a.mli" = true OK
+Glob.eval "(<*.ml> or <*.mli>) and not \"hello.ml\"" "hello.ml" = false OK
+Glob.eval "(<*.ml> or <*.mli>) and not \"hello.ml\"" "a.mli.x" = false OK
+Glob.eval "<*>" "alpha" = true OK
+Glob.eval "<*>" "beta" = true OK
+Glob.eval "<*>" "alpha/beta" = false OK
+Glob.eval "<*>" "gamma/delta" = false OK
+Glob.eval "<*>" "alpha" = true OK
+Glob.eval "<*>" "beta" = true OK
+Glob.eval "<*>" "alpha/beta" = false OK
+Glob.eval "<*>" "gamma/delta" = false OK
+Glob.eval "<*>" "alpha" = true OK
+Glob.eval "<*>" "beta" = true OK
+Glob.eval "<*>" "alpha/beta" = false OK
+Glob.eval "<*>" "gamma/delta" = false OK
+Glob.eval "<alpha/**/beta>" "alpha/beta" = true OK
+Glob.eval "<alpha/**/beta>" "alpha/gamma/beta" = true OK
+Glob.eval "<alpha/**/beta>" "alpha/gamma/delta/beta" = true OK
+Glob.eval "<alpha/**/beta>" "alpha" = false OK
+Glob.eval "<alpha/**/beta>" "beta" = false OK
+Glob.eval "<alpha/**/beta>" "gamma/delta" = false OK
+Glob.eval "<alpha/**/beta>" "alpha/beta" = true OK
+Glob.eval "<alpha/**/beta>" "alpha/gamma/beta" = true OK
+Glob.eval "<alpha/**/beta>" "alpha/gamma/delta/beta" = true OK
+Glob.eval "<alpha/**/beta>" "alpha" = false OK
+Glob.eval "<alpha/**/beta>" "beta" = false OK
+Glob.eval "<alpha/**/beta>" "gamma/delta" = false OK
+Glob.eval "<alpha/**/beta>" "alpha/beta" = true OK
+Glob.eval "<alpha/**/beta>" "alpha/gamma/beta" = true OK
+Glob.eval "<alpha/**/beta>" "alpha/gamma/delta/beta" = true OK
+Glob.eval "<alpha/**/beta>" "alpha" = false OK
+Glob.eval "<alpha/**/beta>" "beta" = false OK
+Glob.eval "<alpha/**/beta>" "gamma/delta" = false OK
+Glob.eval "<**/*.ml>" "toto.ml" = true OK
+Glob.eval "<**/*.ml>" "toto/tata.ml" = true OK
+Glob.eval "<**/*.ml>" "alpha/gamma/delta/beta.ml" = true OK
+Glob.eval "<**/*.ml>" "toto.mli" = false OK
+Glob.eval "<**/*.ml>" "toto.ml" = true OK
+Glob.eval "<**/*.ml>" "toto/tata.ml" = true OK
+Glob.eval "<**/*.ml>" "alpha/gamma/delta/beta.ml" = true OK
+Glob.eval "<**/*.ml>" "toto.mli" = false OK
+Glob.eval "<**/*.ml>" "toto.ml" = true OK
+Glob.eval "<**/*.ml>" "toto/tata.ml" = true OK
+Glob.eval "<**/*.ml>" "alpha/gamma/delta/beta.ml" = true OK
+Glob.eval "<**/*.ml>" "toto.mli" = false OK
+Glob.eval "<toto/**>" "toto/" = true OK
+Glob.eval "<toto/**>" "toto/tata" = true OK
+Glob.eval "<toto/**>" "toto/alpha/gamma/delta/beta.ml" = true OK
+Glob.eval "<toto/**>" "toto" = true OK
+Glob.eval "<toto/**>" "toto2/tata" = false OK
+Glob.eval "<toto/**>" "tata/titi" = false OK
+Glob.eval "<toto/**>" "toto/" = true OK
+Glob.eval "<toto/**>" "toto/tata" = true OK
+Glob.eval "<toto/**>" "toto/alpha/gamma/delta/beta.ml" = true OK
+Glob.eval "<toto/**>" "toto" = true OK
+Glob.eval "<toto/**>" "toto2/tata" = false OK
+Glob.eval "<toto/**>" "tata/titi" = false OK
+Glob.eval "<toto/**>" "toto/" = true OK
+Glob.eval "<toto/**>" "toto/tata" = true OK
+Glob.eval "<toto/**>" "toto/alpha/gamma/delta/beta.ml" = true OK
+Glob.eval "<toto/**>" "toto" = true OK
+Glob.eval "<toto/**>" "toto2/tata" = false OK
+Glob.eval "<toto/**>" "tata/titi" = false OK
diff --git a/ocamlbuild/test/runtest.sh b/ocamlbuild/test/runtest.sh
new file mode 100755
index 000000000..7bdb76be1
--- /dev/null
+++ b/ocamlbuild/test/runtest.sh
@@ -0,0 +1,34 @@
+#!/bin/sh
+set -e
+cd `dirname $0`
+
+myfiglet() {
+ figlet $@ | sed 's/ *$//'
+}
+
+if figlet ""; then
+ BANNER=myfiglet
+else
+ echo "Install figlet to have a better output, press enter to continue with echo"
+ read
+ BANNER=echo
+fi
+
+HERE=`pwd`
+
+$BANNER Test2
+./test2/test.sh $@
+$BANNER Test3
+./test3/test.sh $@
+$BANNER Test4
+./test4/test.sh $@
+$BANNER Test5
+./test5/test.sh $@
+$BANNER Test6
+./test6/test.sh $@
+$BANNER Test7
+./test7/test.sh $@
+$BANNER Test8
+./test8/test.sh $@
+$BANNER Test9
+./test9/test.sh $@
diff --git a/ocamlbuild/test/test1/foo.ml b/ocamlbuild/test/test1/foo.ml
new file mode 100644
index 000000000..43a510651
--- /dev/null
+++ b/ocamlbuild/test/test1/foo.ml
@@ -0,0 +1 @@
+module MA1 = A1
diff --git a/ocamlbuild/test/test10/dbdi b/ocamlbuild/test/test10/dbdi
new file mode 100644
index 000000000..7f548108b
--- /dev/null
+++ b/ocamlbuild/test/test10/dbdi
@@ -0,0 +1,12 @@
+#load "discard_printf.cmo";;
+#load "debug.cmo";;
+#load "unix.cma";;
+#load "str.cma";;
+#load "my_unix.cmo";;
+#load "bool.cmo";;
+#load "glob_ast.cmo";;
+#load "glob_lexer.cmo";;
+#load "glob.cmo";;
+#load "lexers.cmo";;
+#load "my_std.cmo";;
+#load "tags.cmo";;
diff --git a/ocamlbuild/test/test10/test.sh b/ocamlbuild/test/test10/test.sh
new file mode 100755
index 000000000..1f96443c5
--- /dev/null
+++ b/ocamlbuild/test/test10/test.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+set -e
+set -x
+cd `dirname $0`/../..
+./_build/ocamlbuild.native -quiet -build-dir _buildtest -no-links test/test9/testglob.native
+./_buildtest/test/test9/testglob.native
diff --git a/ocamlbuild/test/test2/_tags b/ocamlbuild/test/test2/_tags
new file mode 100644
index 000000000..354ad4e69
--- /dev/null
+++ b/ocamlbuild/test/test2/_tags
@@ -0,0 +1 @@
+"vivi.ml": camlp4o
diff --git a/ocamlbuild/test/test2/tata.ml b/ocamlbuild/test/test2/tata.ml
new file mode 100644
index 000000000..361fadd35
--- /dev/null
+++ b/ocamlbuild/test/test2/tata.ml
@@ -0,0 +1 @@
+let tata = "TATA2"
diff --git a/ocamlbuild/test/test2/tata.mli b/ocamlbuild/test/test2/tata.mli
new file mode 100644
index 000000000..7c7175c91
--- /dev/null
+++ b/ocamlbuild/test/test2/tata.mli
@@ -0,0 +1,2 @@
+(* a comment *)
+val tata : string
diff --git a/ocamlbuild/test/test2/test.sh b/ocamlbuild/test/test2/test.sh
new file mode 100755
index 000000000..8bbd7c7a7
--- /dev/null
+++ b/ocamlbuild/test/test2/test.sh
@@ -0,0 +1,18 @@
+#!/bin/sh
+cd `dirname $0`
+set -e
+set -x
+CMDOPTS="-- -help"
+BUILD="../../_build/ocamlbuild.native toto.byte toto.native -no-skip -classic-display $@"
+BUILD1="$BUILD $CMDOPTS"
+BUILD2="$BUILD -verbose 0 -nothing-should-be-rebuilt $CMDOPTS"
+rm -rf _build
+cp vivi1.ml vivi.ml
+$BUILD1
+$BUILD2
+cp vivi2.ml vivi.ml
+$BUILD1
+$BUILD2
+cp vivi3.ml vivi.ml
+$BUILD1
+$BUILD2
diff --git a/ocamlbuild/test/test2/titi.ml b/ocamlbuild/test/test2/titi.ml
new file mode 100644
index 000000000..3abbf1d2e
--- /dev/null
+++ b/ocamlbuild/test/test2/titi.ml
@@ -0,0 +1 @@
+let titi = []
diff --git a/ocamlbuild/test/test2/toto.ml b/ocamlbuild/test/test2/toto.ml
new file mode 100644
index 000000000..dbb5a43d3
--- /dev/null
+++ b/ocamlbuild/test/test2/toto.ml
@@ -0,0 +1,5 @@
+let i = Tutu.tutu + 10
+let s = Tata.tata ^ ".ml"
+let l = 3 :: Titi.titi
+let () = Format.printf "toto.native: %s: Hello world!!!@." Sys.argv.(0)
+let () = Format.printf "Tutu.tutu => %d@.Tata.tata => %S@." Tutu.tutu Tata.tata
diff --git a/ocamlbuild/test/test2/tutu.ml b/ocamlbuild/test/test2/tutu.ml
new file mode 100644
index 000000000..2e8015b70
--- /dev/null
+++ b/ocamlbuild/test/test2/tutu.ml
@@ -0,0 +1,2 @@
+let tutu = (Array.length Vivi.vivi : Tyty.t)
+let tutu' = 2.0 +. float_of_int tutu
diff --git a/ocamlbuild/test/test2/tutu.mli b/ocamlbuild/test/test2/tutu.mli
new file mode 100644
index 000000000..26657f87c
--- /dev/null
+++ b/ocamlbuild/test/test2/tutu.mli
@@ -0,0 +1,3 @@
+(* a comment *)
+val tutu : int
+val tutu' : float
diff --git a/ocamlbuild/test/test2/tyty.mli b/ocamlbuild/test/test2/tyty.mli
new file mode 100644
index 000000000..975adb531
--- /dev/null
+++ b/ocamlbuild/test/test2/tyty.mli
@@ -0,0 +1 @@
+type t = int
diff --git a/ocamlbuild/test/test2/vivi1.ml b/ocamlbuild/test/test2/vivi1.ml
new file mode 100644
index 000000000..1c0517e01
--- /dev/null
+++ b/ocamlbuild/test/test2/vivi1.ml
@@ -0,0 +1,2 @@
+let rec p i = [< '1; '2; p (i + 1) >]
+let vivi = [|2|]
diff --git a/ocamlbuild/test/test2/vivi2.ml b/ocamlbuild/test/test2/vivi2.ml
new file mode 100644
index 000000000..1fb48c176
--- /dev/null
+++ b/ocamlbuild/test/test2/vivi2.ml
@@ -0,0 +1,2 @@
+let rec p i = [< '1; '2; p (i + 1) >]
+let vivi = [|3|]
diff --git a/ocamlbuild/test/test2/vivi3.ml b/ocamlbuild/test/test2/vivi3.ml
new file mode 100644
index 000000000..7849fad65
--- /dev/null
+++ b/ocamlbuild/test/test2/vivi3.ml
@@ -0,0 +1,2 @@
+let rec p i = [< '1; '2; p (i + 1) >]
+let vivi = [|2.1; 1.1|]
diff --git a/ocamlbuild/test/test3/_tags b/ocamlbuild/test/test3/_tags
new file mode 100644
index 000000000..4505f13fd
--- /dev/null
+++ b/ocamlbuild/test/test3/_tags
@@ -0,0 +1 @@
+"a.byte" or "a.native": use_unix
diff --git a/ocamlbuild/test/test3/a.ml b/ocamlbuild/test/test3/a.ml
new file mode 100644
index 000000000..d4586eae7
--- /dev/null
+++ b/ocamlbuild/test/test3/a.ml
@@ -0,0 +1 @@
+module X = B
diff --git a/ocamlbuild/test/test3/a.mli b/ocamlbuild/test/test3/a.mli
new file mode 100644
index 000000000..c17617a6e
--- /dev/null
+++ b/ocamlbuild/test/test3/a.mli
@@ -0,0 +1 @@
+(* Nothing *)
diff --git a/ocamlbuild/test/test3/b.ml b/ocamlbuild/test/test3/b.ml
new file mode 100644
index 000000000..58c510c1e
--- /dev/null
+++ b/ocamlbuild/test/test3/b.ml
@@ -0,0 +1 @@
+module X = C
diff --git a/ocamlbuild/test/test3/b.mli b/ocamlbuild/test/test3/b.mli
new file mode 100644
index 000000000..5eea48096
--- /dev/null
+++ b/ocamlbuild/test/test3/b.mli
@@ -0,0 +1 @@
+(* nothing *)
diff --git a/ocamlbuild/test/test3/c.ml b/ocamlbuild/test/test3/c.ml
new file mode 100644
index 000000000..06f0fd918
--- /dev/null
+++ b/ocamlbuild/test/test3/c.ml
@@ -0,0 +1 @@
+module X = D
diff --git a/ocamlbuild/test/test3/c.mli b/ocamlbuild/test/test3/c.mli
new file mode 100644
index 000000000..5eea48096
--- /dev/null
+++ b/ocamlbuild/test/test3/c.mli
@@ -0,0 +1 @@
+(* nothing *)
diff --git a/ocamlbuild/test/test3/d.ml b/ocamlbuild/test/test3/d.ml
new file mode 100644
index 000000000..42ab72424
--- /dev/null
+++ b/ocamlbuild/test/test3/d.ml
@@ -0,0 +1 @@
+module X = E
diff --git a/ocamlbuild/test/test3/d.mli b/ocamlbuild/test/test3/d.mli
new file mode 100644
index 000000000..5eea48096
--- /dev/null
+++ b/ocamlbuild/test/test3/d.mli
@@ -0,0 +1 @@
+(* nothing *)
diff --git a/ocamlbuild/test/test3/e.ml b/ocamlbuild/test/test3/e.ml
new file mode 100644
index 000000000..863ea00c8
--- /dev/null
+++ b/ocamlbuild/test/test3/e.ml
@@ -0,0 +1 @@
+module X = F
diff --git a/ocamlbuild/test/test3/e.mli b/ocamlbuild/test/test3/e.mli
new file mode 100644
index 000000000..5eea48096
--- /dev/null
+++ b/ocamlbuild/test/test3/e.mli
@@ -0,0 +1 @@
+(* nothing *)
diff --git a/ocamlbuild/test/test3/f.ml b/ocamlbuild/test/test3/f.ml
new file mode 100644
index 000000000..00915fdc1
--- /dev/null
+++ b/ocamlbuild/test/test3/f.ml
@@ -0,0 +1,2 @@
+(* nothing *)
+let _ = Unix.stat
diff --git a/ocamlbuild/test/test3/f.mli b/ocamlbuild/test/test3/f.mli
new file mode 100644
index 000000000..5eea48096
--- /dev/null
+++ b/ocamlbuild/test/test3/f.mli
@@ -0,0 +1 @@
+(* nothing *)
diff --git a/ocamlbuild/test/test3/proj.odocl b/ocamlbuild/test/test3/proj.odocl
new file mode 100644
index 000000000..532c72038
--- /dev/null
+++ b/ocamlbuild/test/test3/proj.odocl
@@ -0,0 +1 @@
+A B C D E F
diff --git a/ocamlbuild/test/test3/test.sh b/ocamlbuild/test/test3/test.sh
new file mode 100755
index 000000000..396aaf2aa
--- /dev/null
+++ b/ocamlbuild/test/test3/test.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+cd `dirname $0`
+set -e
+set -x
+CMDOTPS="" # -- command args
+BUILD="../../_build/ocamlbuild.native a.byte a.native proj.docdir/index.html -no-skip -classic-display $@"
+BUILD1="$BUILD $CMDOPTS"
+BUILD2="$BUILD -verbose 0 -nothing-should-be-rebuilt $CMDOPTS"
+rm -rf _build
+$BUILD1
+$BUILD2
diff --git a/ocamlbuild/test/test4/_tags b/ocamlbuild/test/test4/_tags
new file mode 100644
index 000000000..4b6e7986e
--- /dev/null
+++ b/ocamlbuild/test/test4/_tags
@@ -0,0 +1,2 @@
+# a comment
+"a/aa.byte" or "a/aa.native": use_str
diff --git a/ocamlbuild/test/test4/a/aa.ml b/ocamlbuild/test/test4/a/aa.ml
new file mode 100644
index 000000000..411d29bff
--- /dev/null
+++ b/ocamlbuild/test/test4/a/aa.ml
@@ -0,0 +1 @@
+let bar = 3 + List.length Bb.foo
diff --git a/ocamlbuild/test/test4/a/aa.mli b/ocamlbuild/test/test4/a/aa.mli
new file mode 100644
index 000000000..20f3c52a8
--- /dev/null
+++ b/ocamlbuild/test/test4/a/aa.mli
@@ -0,0 +1 @@
+val bar : int
diff --git a/ocamlbuild/test/test4/b/bb.ml b/ocamlbuild/test/test4/b/bb.ml
new file mode 100644
index 000000000..031031fba
--- /dev/null
+++ b/ocamlbuild/test/test4/b/bb.ml
@@ -0,0 +1,2 @@
+let r = Str.regexp "r"
+let foo = [2.2]
diff --git a/ocamlbuild/test/test4/test.sh b/ocamlbuild/test/test4/test.sh
new file mode 100755
index 000000000..4b2580a8d
--- /dev/null
+++ b/ocamlbuild/test/test4/test.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+cd `dirname $0`
+set -e
+set -x
+CMDOTPS="" # -- command args
+BUILD="../../_build/ocamlbuild.native -I a -I b aa.byte aa.native -no-skip -classic-display $@"
+BUILD1="$BUILD $CMDOPTS"
+BUILD2="$BUILD -verbose 0 -nothing-should-be-rebuilt $CMDOPTS"
+rm -rf _build
+$BUILD1
+$BUILD2
diff --git a/ocamlbuild/test/test5/_tags b/ocamlbuild/test/test5/_tags
new file mode 100644
index 000000000..2f66a28c1
--- /dev/null
+++ b/ocamlbuild/test/test5/_tags
@@ -0,0 +1 @@
+"a.cmx" or "b.cmx": for-pack(C)
diff --git a/ocamlbuild/test/test5/a.ml b/ocamlbuild/test/test5/a.ml
new file mode 100644
index 000000000..250900301
--- /dev/null
+++ b/ocamlbuild/test/test5/a.ml
@@ -0,0 +1 @@
+let a = 42
diff --git a/ocamlbuild/test/test5/a.mli b/ocamlbuild/test/test5/a.mli
new file mode 100644
index 000000000..3f79c8149
--- /dev/null
+++ b/ocamlbuild/test/test5/a.mli
@@ -0,0 +1 @@
+val a : int
diff --git a/ocamlbuild/test/test5/b.ml b/ocamlbuild/test/test5/b.ml
new file mode 100644
index 000000000..8db5ca3b8
--- /dev/null
+++ b/ocamlbuild/test/test5/b.ml
@@ -0,0 +1 @@
+let b = A.a + 1
diff --git a/ocamlbuild/test/test5/c.mlpack b/ocamlbuild/test/test5/c.mlpack
new file mode 100644
index 000000000..5decc2b6a
--- /dev/null
+++ b/ocamlbuild/test/test5/c.mlpack
@@ -0,0 +1 @@
+A B
diff --git a/ocamlbuild/test/test5/d.ml b/ocamlbuild/test/test5/d.ml
new file mode 100644
index 000000000..a5ec43298
--- /dev/null
+++ b/ocamlbuild/test/test5/d.ml
@@ -0,0 +1 @@
+Format.printf "C.B.b = %d@." C.B.b
diff --git a/ocamlbuild/test/test5/test.sh b/ocamlbuild/test/test5/test.sh
new file mode 100755
index 000000000..9d78f1991
--- /dev/null
+++ b/ocamlbuild/test/test5/test.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+cd `dirname $0`
+set -e
+set -x
+CMDOPTS="" # -- command args
+BUILD="../../_build/ocamlbuild.native d.byte d.native -no-skip -classic-display $@"
+BUILD1="$BUILD $CMDOPTS"
+BUILD2="$BUILD -verbose 0 -nothing-should-be-rebuilt $CMDOPTS"
+rm -rf _build
+$BUILD1
+$BUILD2
diff --git a/ocamlbuild/test/test6/a.ml b/ocamlbuild/test/test6/a.ml
new file mode 100644
index 000000000..e09e5d02a
--- /dev/null
+++ b/ocamlbuild/test/test6/a.ml
@@ -0,0 +1 @@
+let a = B.b
diff --git a/ocamlbuild/test/test6/a.mli b/ocamlbuild/test/test6/a.mli
new file mode 100644
index 000000000..451c586eb
--- /dev/null
+++ b/ocamlbuild/test/test6/a.mli
@@ -0,0 +1 @@
+val a : 'a -> 'a
diff --git a/ocamlbuild/test/test6/b.ml b/ocamlbuild/test/test6/b.ml
new file mode 100644
index 000000000..362c8fc15
--- /dev/null
+++ b/ocamlbuild/test/test6/b.ml
@@ -0,0 +1 @@
+let b = D.d
diff --git a/ocamlbuild/test/test6/b.mli b/ocamlbuild/test/test6/b.mli
new file mode 100644
index 000000000..685b7906b
--- /dev/null
+++ b/ocamlbuild/test/test6/b.mli
@@ -0,0 +1 @@
+val b : 'a -> 'a
diff --git a/ocamlbuild/test/test6/b.mli.v1 b/ocamlbuild/test/test6/b.mli.v1
new file mode 100644
index 000000000..685b7906b
--- /dev/null
+++ b/ocamlbuild/test/test6/b.mli.v1
@@ -0,0 +1 @@
+val b : 'a -> 'a
diff --git a/ocamlbuild/test/test6/b.mli.v2 b/ocamlbuild/test/test6/b.mli.v2
new file mode 100644
index 000000000..a43169837
--- /dev/null
+++ b/ocamlbuild/test/test6/b.mli.v2
@@ -0,0 +1,2 @@
+....
+val b : 'a -> 'a
diff --git a/ocamlbuild/test/test6/d.ml b/ocamlbuild/test/test6/d.ml
new file mode 100644
index 000000000..61c7a9c62
--- /dev/null
+++ b/ocamlbuild/test/test6/d.ml
@@ -0,0 +1,2 @@
+type t
+let d x = x
diff --git a/ocamlbuild/test/test6/d.mli b/ocamlbuild/test/test6/d.mli
new file mode 100644
index 000000000..1db89bbe6
--- /dev/null
+++ b/ocamlbuild/test/test6/d.mli
@@ -0,0 +1 @@
+val d : 'a -> 'a
diff --git a/ocamlbuild/test/test6/d.mli.v1 b/ocamlbuild/test/test6/d.mli.v1
new file mode 100644
index 000000000..12fea1c16
--- /dev/null
+++ b/ocamlbuild/test/test6/d.mli.v1
@@ -0,0 +1,2 @@
+type t
+val d : 'a -> 'a
diff --git a/ocamlbuild/test/test6/d.mli.v2 b/ocamlbuild/test/test6/d.mli.v2
new file mode 100644
index 000000000..1db89bbe6
--- /dev/null
+++ b/ocamlbuild/test/test6/d.mli.v2
@@ -0,0 +1 @@
+val d : 'a -> 'a
diff --git a/ocamlbuild/test/test6/main.ml b/ocamlbuild/test/test6/main.ml
new file mode 100644
index 000000000..61acf1283
--- /dev/null
+++ b/ocamlbuild/test/test6/main.ml
@@ -0,0 +1 @@
+A.a 2. +. D.d 1.
diff --git a/ocamlbuild/test/test6/main.mli b/ocamlbuild/test/test6/main.mli
new file mode 100644
index 000000000..5eea48096
--- /dev/null
+++ b/ocamlbuild/test/test6/main.mli
@@ -0,0 +1 @@
+(* nothing *)
diff --git a/ocamlbuild/test/test6/test.sh b/ocamlbuild/test/test6/test.sh
new file mode 100755
index 000000000..fedbc9c9b
--- /dev/null
+++ b/ocamlbuild/test/test6/test.sh
@@ -0,0 +1,26 @@
+#!/bin/sh
+cd `dirname $0`
+set -x
+rm -rf _build
+CMDOPTS="" # -- command args
+BUILD="../../_build/ocamlbuild.native -no-skip main.byte -classic-display $@"
+BUILD1="$BUILD $CMDOPTS"
+BUILD2="$BUILD -verbose 0 -nothing-should-be-rebuilt $CMDOPTS"
+cp b.mli.v1 b.mli
+cp d.mli.v1 d.mli
+$BUILD1
+$BUILD2
+cp b.mli.v2 b.mli
+cp d.mli.v2 d.mli
+$BUILD1
+cp b.mli.v1 b.mli
+if $BUILD1; then
+ if $BUILD2; then
+ echo PASS
+ else
+ echo "FAIL (-nothing-should-be-rebuilt)"
+ fi
+else
+ echo FAIL
+fi
+
diff --git a/ocamlbuild/test/test7/_tags b/ocamlbuild/test/test7/_tags
new file mode 100644
index 000000000..8501e3285
--- /dev/null
+++ b/ocamlbuild/test/test7/_tags
@@ -0,0 +1 @@
+"main.byte": my_cool_plugin
diff --git a/ocamlbuild/test/test7/aa.ml b/ocamlbuild/test/test7/aa.ml
new file mode 100644
index 000000000..877d0af14
--- /dev/null
+++ b/ocamlbuild/test/test7/aa.ml
@@ -0,0 +1 @@
+let aa = "aa"
diff --git a/ocamlbuild/test/test7/bb.ml b/ocamlbuild/test/test7/bb.ml
new file mode 100644
index 000000000..9ac2d5965
--- /dev/null
+++ b/ocamlbuild/test/test7/bb.ml
@@ -0,0 +1 @@
+let bb = 43
diff --git a/ocamlbuild/test/test7/bb.mli b/ocamlbuild/test/test7/bb.mli
new file mode 100644
index 000000000..9256de2b1
--- /dev/null
+++ b/ocamlbuild/test/test7/bb.mli
@@ -0,0 +1 @@
+val bb : int
diff --git a/ocamlbuild/test/test7/bb2.ml b/ocamlbuild/test/test7/bb2.ml
new file mode 100644
index 000000000..2f91b988b
--- /dev/null
+++ b/ocamlbuild/test/test7/bb2.ml
@@ -0,0 +1,3 @@
+let bb = 43
+let f x = x + 1
+let () = incr (ref 0)
diff --git a/ocamlbuild/test/test7/bb3.ml b/ocamlbuild/test/test7/bb3.ml
new file mode 100644
index 000000000..b7ad4b5c2
--- /dev/null
+++ b/ocamlbuild/test/test7/bb3.ml
@@ -0,0 +1,3 @@
+let bb = 43
+let f x = x + 1
+let () = incr (ref 1)
diff --git a/ocamlbuild/test/test7/bbcc.mllib b/ocamlbuild/test/test7/bbcc.mllib
new file mode 100644
index 000000000..a97a0e6c2
--- /dev/null
+++ b/ocamlbuild/test/test7/bbcc.mllib
@@ -0,0 +1 @@
+Bb Cc
diff --git a/ocamlbuild/test/test7/c2.ml b/ocamlbuild/test/test7/c2.ml
new file mode 100644
index 000000000..36ff6d6fb
--- /dev/null
+++ b/ocamlbuild/test/test7/c2.ml
@@ -0,0 +1 @@
+let c2 = 12
diff --git a/ocamlbuild/test/test7/c2.mli b/ocamlbuild/test/test7/c2.mli
new file mode 100644
index 000000000..19fe565df
--- /dev/null
+++ b/ocamlbuild/test/test7/c2.mli
@@ -0,0 +1 @@
+val c2 : int
diff --git a/ocamlbuild/test/test7/c3.ml b/ocamlbuild/test/test7/c3.ml
new file mode 100644
index 000000000..277e1ee0a
--- /dev/null
+++ b/ocamlbuild/test/test7/c3.ml
@@ -0,0 +1 @@
+let c3 = Bb.bb + 13
diff --git a/ocamlbuild/test/test7/cc.ml b/ocamlbuild/test/test7/cc.ml
new file mode 100644
index 000000000..b39ef21df
--- /dev/null
+++ b/ocamlbuild/test/test7/cc.ml
@@ -0,0 +1 @@
+let cc = (String.length Aa.aa) + Bb.bb + C2.c2
diff --git a/ocamlbuild/test/test7/cool_plugin.ml b/ocamlbuild/test/test7/cool_plugin.ml
new file mode 100644
index 000000000..322518687
--- /dev/null
+++ b/ocamlbuild/test/test7/cool_plugin.ml
@@ -0,0 +1 @@
+print_endline "I am a cool plugin"
diff --git a/ocamlbuild/test/test7/main.ml b/ocamlbuild/test/test7/main.ml
new file mode 100644
index 000000000..f12195969
--- /dev/null
+++ b/ocamlbuild/test/test7/main.ml
@@ -0,0 +1 @@
+let main = String.length Aa.aa - Bb.bb - C3.c3 - Cc.cc - 1
diff --git a/ocamlbuild/test/test7/myocamlbuild.ml b/ocamlbuild/test/test7/myocamlbuild.ml
new file mode 100644
index 000000000..12b274ff0
--- /dev/null
+++ b/ocamlbuild/test/test7/myocamlbuild.ml
@@ -0,0 +1,3 @@
+open Ocamlbuild_plugin;;
+use_lib "main" "bbcc";;
+dep ["ocaml"; "link"; "byte"; "my_cool_plugin"] ["cool_plugin.cmo"];;
diff --git a/ocamlbuild/test/test7/test.sh b/ocamlbuild/test/test7/test.sh
new file mode 100755
index 000000000..0ccb69d98
--- /dev/null
+++ b/ocamlbuild/test/test7/test.sh
@@ -0,0 +1,19 @@
+#!/bin/sh
+cd `dirname $0`
+set -e
+set -x
+CMDOPTS="" # -- command args
+BUILD="../../_build/ocamlbuild.native bbcc.cma main.byte bbcc.cmxa main.native -no-skip -classic-display $@"
+BUILD1="$BUILD $CMDARGS"
+BUILD2="$BUILD -verbose 0 -nothing-should-be-rebuilt $CMDARGS"
+rm -rf _build
+svn revert bb.ml
+$BUILD1
+$BUILD2
+cp bb2.ml bb.ml
+$BUILD1 -verbose 0
+$BUILD2
+cp bb3.ml bb.ml
+$BUILD1 -verbose 0
+$BUILD2
+svn revert bb.ml
diff --git a/ocamlbuild/test/test8/a.ml b/ocamlbuild/test/test8/a.ml
new file mode 100644
index 000000000..35ac74996
--- /dev/null
+++ b/ocamlbuild/test/test8/a.ml
@@ -0,0 +1 @@
+print_endline Myconfig.version;;
diff --git a/ocamlbuild/test/test8/myocamlbuild.ml b/ocamlbuild/test/test8/myocamlbuild.ml
new file mode 100644
index 000000000..4a8ae9d68
--- /dev/null
+++ b/ocamlbuild/test/test8/myocamlbuild.ml
@@ -0,0 +1,9 @@
+open Ocamlbuild_pack;;
+open Ocamlbuild_plugin;;
+let version = "0.1";;
+file_rule "myconfig.ml"
+ ~prod:"myconfig.ml"
+ ~cache:(fun _ -> version)
+ begin fun _ oc ->
+ Printf.fprintf oc "let version = %S;;\n%!" version
+ end;;
diff --git a/ocamlbuild/test/test8/test.sh b/ocamlbuild/test/test8/test.sh
new file mode 100755
index 000000000..80fc7197c
--- /dev/null
+++ b/ocamlbuild/test/test8/test.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+cd `dirname $0`
+set -e
+set -x
+CMDOPTS="" # -- command args
+BUILD="../../_build/ocamlbuild.native a.byte a.native -no-skip -classic-display $@"
+BUILD1="$BUILD $CMDOPTS"
+BUILD2="$BUILD -verbose 0 -nothing-should-be-rebuilt $CMDOPTS"
+rm -rf _build
+$BUILD1
+$BUILD2
diff --git a/ocamlbuild/test/test9/dbgl b/ocamlbuild/test/test9/dbgl
new file mode 100644
index 000000000..ac61a3d55
--- /dev/null
+++ b/ocamlbuild/test/test9/dbgl
@@ -0,0 +1,10 @@
+#load "unix.cma";;
+#load "str.cma";;
+#load "discard_printf.cmo";;
+#load "debug.cmo";;
+#load "bool.cmo";;
+#load "glob_ast.cmo";;
+#load "glob_lexer.cmo";;
+#load "my_unix.cmo";;
+#use "glob.ml";;
+#install_printer print_is;;
diff --git a/ocamlbuild/test/test9/test.sh b/ocamlbuild/test/test9/test.sh
new file mode 100755
index 000000000..0feded208
--- /dev/null
+++ b/ocamlbuild/test/test9/test.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+set -e
+set -x
+cd `dirname $0`/../..
+./_build/ocamlbuild.native -quiet -build-dir _buildtest -no-links test/test9/testglob.native $@
+./_buildtest/test/test9/testglob.native
diff --git a/ocamlbuild/test/test9/testglob.ml b/ocamlbuild/test/test9/testglob.ml
new file mode 100644
index 000000000..e307a769c
--- /dev/null
+++ b/ocamlbuild/test/test9/testglob.ml
@@ -0,0 +1,91 @@
+(* Testglob *)
+
+open Bool;;
+open Glob;;
+
+let yep f x =
+ try
+ ignore (f x);
+ true
+ with
+ | _ -> false
+;;
+
+let tests1 = [
+ "\"hello\"", true;
+ "<hello>", true;
+ "<hel*lo>", true;
+ "<a> and <b> or <c>", true;
+ "<a> titi", false
+];;
+
+let tests2 = [
+ "<[a]>", ["a"], ["b"];
+ "<[a-z]>", ["a";"e";"k";"z"], ["0";"A";"~"];
+ "<[a-z][0-9]>", ["a0";"b9"], ["a00";"a0a";"b0a";"isduis";""];
+ "<hello>", ["hello"], ["helli"];
+ "\"hello\"", ["hello"], ["heidi"];
+ "<*>", ["";"a";"ax"], [];
+ "<a*b>", ["ab";"acb";"axxxxxb";"ababbababb"], ["abx";"xxxxxab";"xab"];
+ "<*.ml>", ["hello.ml";".ml"], ["ml"; ""; "toto.mli"];
+ "<a>", ["a"], ["";"aa";"ba";"ab";"abaa"];
+ "<ab>", ["ab"], ["";"abab";"aba";"abx"];
+ "<ab?c>", ["abac";"abxc"], ["abab";"ababab";"ababa"];
+ "<*ab?cd*>", ["123abecd345";"abccd";"abccd345";"ababcababccdab"], ["abcd";"aaaaabcdababcd"];
+ "<*this*is*a*test*>", ["this is a test";"You know this is a test really";"thisisatest"], ["thisatest"];
+ "<b*>", ["bxx";"bx"], ["aaab";""];
+ "<*>", ["";"a";"aaa";"aaaaa"], [];
+ "<?>", ["a"],["";"aaa";"aaaaa"];
+ "<{a,b}>", ["a";"b"],["";"aa";"ab";"ba";"bb";"c"];
+ "<toto.{ml,mli}>", ["toto.ml";"toto.mli"],["toto.";"toto.mll"];
+ "<{a,b}{c,[de]}{f,g}>", ["acf";"acg";"adf";"adg";"aef";"aeg";"bcf";"bcg";"bdf";"bdg";"bef";"beg"],
+ ["afg";"af";"aee"];
+ "(<*.ml> or <*.mli>) and not \"hello.ml\"",
+ ["a.ml"; "b.ml"; "a.mli"],
+ ["hello.ml"; "a.mli.x"];
+ "<*>", ["alpha";"beta"], ["alpha/beta";"gamma/delta"];
+ "<alpha/**/beta>", ["alpha/beta";"alpha/gamma/beta";"alpha/gamma/delta/beta"],
+ ["alpha";"beta";"gamma/delta"];
+ "<**/*.ml>", ["toto.ml";"toto/tata.ml";"alpha/gamma/delta/beta.ml"],
+ ["toto.mli"];
+ "<toto/**>", ["toto/";"toto/tata";"toto/alpha/gamma/delta/beta.ml";"toto"],
+ ["toto2/tata"; "tata/titi"]
+];;
+
+
+let _ =
+ let times = 3 in
+ List.iter
+ begin fun (str, ast) ->
+ let ast' = yep Glob.parse str in
+ if ast <> ast' then
+ begin
+ Printf.printf "Globexp parsing failed for %S.\n%!" str;
+ exit 1
+ end
+ else
+ Printf.printf "Globexp for %S OK\n%!" str
+ end
+ tests1;
+ List.iter
+ begin fun (gstr, yes, no) ->
+ let globber = Glob.parse gstr in
+ let check polarity =
+ List.iter
+ begin fun y ->
+ if Glob.eval globber y = polarity then
+ Printf.printf "Glob.eval %S %S = %b OK\n%!" gstr y polarity
+ else
+ begin
+ Printf.printf "Glob.eval %S %S = %b FAIL\n%!" gstr y (not polarity);
+ exit 1
+ end
+ end
+ in
+ for k = 1 to times do
+ check true yes;
+ check false no
+ done
+ end
+ tests2
+;;