SUFFIX=.gz .bz2
CFLAGS=-O2 -Wall -pedantic -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -std=gnu99
CFLAGS=-g3 -Wall -pedantic -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -std=gnu99

freedup: freedup.c

all:	freedup test

test:	test0 test1 test2 test3 test4 test5 test6

test0:	freedup
	@mkdir test
	@cp freedup test/test1
	@dd bs=1 count=$$(/bin/ls -l freedup | awk '{printf"%1.0f\n",$$5/2+0}') if=freedup of=test/test2 2>/dev/null
	@dd bs=1 count=$$(/bin/ls -l freedup | awk '{printf"%1.0f\n",$$5/3+0}') if=freedup of=test/test3 2>/dev/null
	@chmod 5777 test/test?
	@echo -e "Test prepared:\t\tSame Content - Different Size\t\t\c"
	@./freedup test >/dev/null 2>&1
	@[ $$(ls -i test/test1|awk '{print $$1}') -ne $$(ls -i test/test2|awk '{print $$1}') ] && \
	 [ $$(ls -i test/test2|awk '{print $$1}') -ne $$(ls -i test/test3|awk '{print $$1}') ] && \
	 echo "successful"
	@rm -r test

test1:	freedup
	@mkdir test
	@cp freedup test/test1
	@cp freedup test/test2
	@cp freedup test/test3
	@dd bs=1 count=$$(/bin/ls -l freedup | awk '{print $$5}') if=/dev/zero of=test/test4 2>/dev/null
	@dd bs=1 count=$$(/bin/ls -l freedup | awk '{print $$5}') if=/dev/zero of=test/test5 2>/dev/null
	@echo -e "Test prepared:\t\tSame Size - Different Content\t\t\c"
	@./freedup test >/dev/null 2>&1
	@[ $$(ls -i test/test1|awk '{print $$1}') -eq $$(ls -i test/test2|awk '{print $$1}') ] && \
	 [ $$(ls -i test/test2|awk '{print $$1}') -eq $$(ls -i test/test3|awk '{print $$1}') ] && \
	 [ $$(ls -i test/test4|awk '{print $$1}') -eq $$(ls -i test/test5|awk '{print $$1}') ] && \
	 [ $$(ls -i test/test1|awk '{print $$1}') -ne $$(ls -i test/test5|awk '{print $$1}') ] && \
	 echo "successful"
	@rm -r test

test2:	freedup
	@mkdir test
	@cp freedup test/test\ 1
	@cp freedup test/tes\ t\ 2
	@cp freedup test/t\ e\ s\ t\ 3
	@dd bs=1 count=$$(/bin/ls -l freedup | awk '{print $$5}') if=/dev/zero of=test/test\ 4 2>/dev/null
	@dd bs=1 count=$$(/bin/ls -l freedup | awk '{print $$5}') if=/dev/zero of=test/test\ 5 2>/dev/null
	@echo -e "Test prepared:\t\tSame Size - Spaces in Names\t\t\c"
	@./freedup test >/dev/null 2>&1
	@[ $$(ls -i test/test\ 1|awk '{print $$1}') -eq $$(ls -i test/tes\ t\ 2|awk '{print $$1}') ] && \
	 [ $$(ls -i test/test\ 1|awk '{print $$1}') -eq $$(ls -i test/t\ e\ s\ t\ 3|awk '{print $$1}') ] && \
	 [ $$(ls -i test/test\ 4|awk '{print $$1}') -eq $$(ls -i test/test\ 5|awk '{print $$1}') ] && \
	 [ $$(ls -i test/test\ 1|awk '{print $$1}') -ne $$(ls -i test/test\ 5|awk '{print $$1}') ] && \
	 echo "successful"
	@rm -r test

test3:	freedup
	@mkdir -p te\ st/te\ st/te\ st
	@cp freedup te\ st/test\ 1
	@cp freedup te\ st/te\ st/test\ 2
	@cp freedup te\ st/te\ st/te\ st/test\ 3
	@echo -e "Test prepared:\t\tSame Size - Spaces in Dirs\t\t\c"
	@./freedup te\ st >/dev/null 2>&1
	@[ $$(ls -i te\ st/test\ 1|awk '{print $$1}') -eq $$(ls -i te\ st/te\ st/test\ 2 |awk '{print $$1}') ] && \
	 [ $$(ls -i te\ st/test\ 1|awk '{print $$1}') -eq $$(ls -i te\ st/te\ st/te\ st/test\ 3 |awk '{print $$1}') ] && \
	 echo "successful"
	@rm -r te\ st

test4:	freedup
	@mkdir test
	@cp freedup test/test1
	@cp freedup test/test2
	@cp freedup test/test3
	@ln test/test1 test/test4
	@ln test/test2 test/test5
	@ln test/test3 test/test6
	@ln test/test1 test/test7
	@ln test/test1 test/test8
	@ln test/test2 test/test9
	@ln test/test3 test/testA
	@ln test/test2 test/testB
	@ln test/test1 test/testC
	@ln test/test3 test/testD
	@ln test/test3 test/testE
	@ln test/test3 test/testF
	@echo -e "Test prepared:\t\tSame File - Different Link Clusters\t\c"
	@./freedup test >/dev/null 2>&1
	@r="successful";m=$$(ls -i test/test1 |awk '{print $$1}') ; \
	 for n in test/test? ; do  [ $$(ls -i $$n |awk '{print $$1}') -eq $$m ] || r="failed" ; done ; echo $$r
	@rm -r test

test5:	freedup
	@mkdir test
	@cp freedup test/test1
	@cp freedup test/test2
	@cp freedup test/test3
	@echo -e "Test prepared:\t\tSame File - Testing standard input\t\c"
	@(echo test/test1 ; echo test/test2 ; echo test/test3 ; echo freedup ) | ./freedup >/dev/null 2>&1
	@r="successful";m=$$(ls -i test/test1 |awk '{print $$1}') ; \
	 for n in test/test? ; do  [ $$(ls -i $$n |awk '{print $$1}') -eq $$m ] || r="failed" ; done ; echo $$r
	@rm -r test

test6:	freedup
	@if [ $$(df .|tail -1|awk '{print $$4}') -lt 4198400 ];then echo "Test lacks file space ... skipping";exit;fi
	@mkdir test
	@echo -e "Test is being prepared:\t\t\t\t\t please be patient\t\t"
	@dd if=/dev/zero bs=2050 count=1048576 of=test/test1 2>/dev/null
	@date >>test/test1
	@cp test/test1 test/test2
	@echo -e "Test prepared:\t\tBig Size - More than 2GB\t\t\c"
	@./freedup test >/dev/null 2>&1
	@[ $$(ls -i test/test1|awk '{print $$1}') -eq $$(ls -i test/test2 |awk '{print $$1}') ] && \
	 echo "successful"
	@rm -r test

test9:	freedup
	@mkdir -p te\:st/te\'st/te\&st
	@cp freedup te\:st/test\ 1
	@cp freedup te\:st/te\'st/test\`2
	@cp freedup te\:st/te\'st/te\&st/test3
	@echo -e "Test prepared:\t\tSame Size - Special Chars\t\t\c"
	@./freedup te\:st >/dev/null 2>&1
	@[ $$(ls -i te\:st/test\ 1|awk '{print $$1}') -eq $$(ls -i te\:st/te\'st/test\`2 |awk '{print $$1}') ] && \
	 [ $$(ls -i te\:st/test\ 1|awk '{print $$1}') -eq $$(ls -i te\:st/te\'st/te\&st/test3 |awk '{print $$1}') ] && \
	 echo "successful"
	@rm -r te\:st


version: freedup.spec
	grep define.version freedup.spec |awk '{print $$3}' >version

README:	index.html
	html2text -nobs -o $@ $<

%.bz2:	%.gz
	gzip -cd $< | bzip2 -c >$@

%.gz:	%
	gzip -c $< >$@

ChangeLog: freedup.spec
	sed -n '/^%changelog/,$$p' freedup.spec | grep -v '^%changelog' >ChangeLog

rpm:	freedup version README ChangeLog freedup.1.gz
	strip freedup
	if [ -d freedup-$$(cat version) ] ; then exit -1 ;fi
	mkdir freedup-$$(cat version)
	cp Makefile freedup.spec freedup freedup.c freedup.h freedup.1.gz TODO README ChangeLog \
	freedup-$$(cat version)
	tar czf /usr/src/packages/SOURCES/freedup-$$(cat version).tgz \
	freedup-$$(cat version)
	rpmbuild -bb freedup.spec
