#
# 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 test10.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
