#
# Makefile for the tests directory
#

srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
top_builddir = ..
my_dir = tests
INSTALL = @INSTALL@

@MCONFIG@

all:: @DO_TEST_SUITE@

test_script: test_script.in Makefile
	@echo "Creating test_script..."
	@echo "#!/bin/sh" > test_script
@HTREE_CMT@	@echo "HTREE=y" >> test_script
	@echo 'EGREP="@EGREP@"' >> test_script
	@echo "SRCDIR=@srcdir@" >> test_script
	@cat $(srcdir)/test_script.in >> test_script
	@chmod +x test_script

check:: test_script
	@echo "Running e2fsprogs test suite..."
	@echo " "
	@./test_script

TDIR=f_testnew
# Target which creates a new testcase to simplify adding new regression tests.
testnew:
	@echo "Creating a new e2fsck testcase in ${TDIR}"
	@mkdir -p ${TDIR}
	dd if=/dev/zero of=${TDIR}/image bs=1k count=8k
	mke2fs -j -F -N 256 ${TDIR}/image
	@echo "new test description" > ${TDIR}/name
	@echo; echo; echo "New test filesystem at ${TDIR}/image."
	@echo "Now, break the filesystem as appropriate, and run 'make testend'"

EXPECT1=${TDIR}/expect.1
EXPECT2=${TDIR}/expect.2
# Target which generates the expect files for the new testcase.
testend: test_script ${TDIR}/image
	gzip -9 ${TDIR}/image
	@OUT1=${EXPECT1} OUT2=${EXPECT2} ./test_script ${TDIR}
	@echo; echo; echo "*** output from first e2fsck run (${EXPECT1}) ***"
	@cat ${EXPECT1}
	@echo "*** output from second e2fsck run (${EXPECT2}) ***"
	@cat ${EXPECT2}
	@echo "*** end of e2fsck output ***"
	@echo; echo "Hopefully e2fsck now fixes this problem properly."
	@echo "If all is well, edit ${TDIR}/name and rename ${TDIR}."

clean::
	$(RM) -f *~ *.log *.new *.failed *.ok test.img test_script

distclean:: clean
	$(RM) -f Makefile
	$(RM) -rf ${TDIR}
