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