CFLAGS=-g3 -Wall -pedantic -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -std=gnu99
CFLAGS=-O2 -Wall -pedantic -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -std=gnu99

freedup: freedup.c

freedup.c: freedup.h

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
	@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\tplease 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

test6:	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:
	grep define.version freedup.spec |awk '{print $$3}' >version

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