#
# Makefile to run all tests for Vim
#

VimProg ?= ../vim

Scripts = test1.out test2.out test3.out test4.out test5.out test6.out
		test7.out test8.out test9.out test11.out
		test12.out  test13.out test14.out test15.out test17.out
		test18.out test19.out test20.out test21.out test22.out
		test23.out test24.out test25.out test26.out test27.out
		test28.out test29.out test30.out test31.out test32.out
		test33.out test34.out test35.out test36.out test37.out
		test38.out test39.out test40.out test41.out test42.out
		test43.out test44.out test45.out test46.out test47.out
		test48.out test49.out test74.out

ScriptsGUI = test16.out

# Build "nongui" when no target was specified.
nongui:	newlog $Scripts
	:print
	:cat test.log
	:print ALL DONE

# Build "ngui" when specified.
gui:	newlog $Scripts $ScriptsGUI
	:print
	:cat test.log
	:print ALL DONE

$Scripts $ScriptsGUI: $VimProg

clean:
	:del {r}{force} *.out test.log tiny.vim small.vim mbyte.vim mzscheme.vim test.ok X*

# test1 is special, it checks for features
test1.out: test1.in
	:del {force} test1.failed tiny.vim small.vim mbyte.vim mzscheme.vim
	:sys {i} $VimProg -u unix.vim -U NONE --noplugin -s dotest.in test1.in
	@if os.system("diff test.out test1.ok") != 0:
		:error test1 FAILED - Something basic is wrong
	:move {force} test.out test1.out
	:del {r}{force} X*

:rule %.out : %.in
	:del {force} $(match).failed test.ok
	:copy $(match).ok test.ok
	:sys {i} $VimProg -u unix.vim -U NONE --noplugin -s dotest.in $(match).in
	@if os.system("diff test.out " + match + ".ok") != 0:
		:print $match FAILED >>test.log
		:move {force} test.out $(match).failed
	@else:
		:move {force} test.out $(match).out
	:del {r}{force} X* test.ok

newlog:
	:print Test results: >! test.log
