# TestDisk Makefile
# http://www.cgsecurity.org/testdisk.html
#
STRIP=strip
CC=gcc
REN=mv
UPX=upx
# You can get UPX at http://upx.sourceforge.net/
LIBREISER=../progsreiserfs-0.3.1-rc7/libreiserfs/.libs/libreiserfs.a
INCREISER=../progsreiserfs-0.3.1-rc7/include
LIBEXT=../e2fsprogs-1.29/lib/ext2fs/libext2fs.a
CFLAGS=-Wall -MD -Wpointer-arith -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wshadow -Wwrite-strings -W -Wcast-align -Waggregate-return -Wbad-function-cast -Wcast-qual -O2 -g -Wundef -Wredundant-decls -Wsign-compare -I.  -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64
#-pg 
#-Wunreachable-code -Wmissing-noreturn 
#-pedantic
#-Wconversion
#-Wtraditional 
#--static 
# -g
#-nostdinc 


#-Werror 
#-fstack-check
#s -fomit-frame-pointer
#g
#-fcheck-memory-usage

OBJS=lang.o fnctdsk.o analyse.o testdisk.o readpart.o godmode.o bsd.o common.o fat.o mbrmanip.o ext2.o bfs.o swap.o netware.o intrface.o hdaccess.o ntfs.o rfs.o lvm.o ext2_dir.o fat_dir.o md.o adv.o fat_adv.o dir.o rfs_dir.o

default:
	@echo "make linux"
	@echo "make linuxstatic"
	@echo "make dos"
	@echo "make bsd"
	@echo "make bsd_no_reiserfs"  : BSD version without reiserfs
	
$(LIBREISER):
$(LIBEXT):
	@echo "======================================================================"
	@echo "e2fs or reiser library is not present"
	@echo "Please install and compile them"
	@echo "Source are avaible at http://www.cgsecurity.org/
	@echo "======================================================================"
	exit 1


linux:	$(LIBEXT) $(LIBREISER)
	echo \#define COMPILE_TIME \"`date`\" > version.h
	echo \#define COMPILE_BY \"`whoami`\" >> version.h
	echo \#define COMPILE_HOST \"`hostname`\" >> version.h
	$(MAKE) testdisk CFLAGS="$(CFLAGS) -DLINUX -DHAVE_REISERFS -pipe"  LDFLAGS="-lncurses $(LIBEXT) $(LIBREISER)"

linuxstatic:
#	$(MAKE) testdisk CFLAGS="$(CFLAGS) -DLINUX -DHAVE_REISERFS -pipe"  LDFLAGS="$(LIBEXT) $(LIBREISER) /usr/lib/libncurses.a"
	echo \#define COMPILE_TIME \"`date`\" > version.h
	echo \#define COMPILE_BY \"`whoami`\" >> version.h
	echo \#define COMPILE_HOST \"`hostname`\" >> version.h
	$(MAKE) testdisk_static CFLAGS="$(CFLAGS) -DLINUX -DHAVE_REISERFS -pipe"  LDFLAGS="-lncurses $(LIBEXT) $(LIBREISER)"


dos:
	@echo > version.h
	$(MAKE) testdisk.exe CFLAGS="$(CFLAGS) -DHAVE_REISERFS" LDFLAGS="$(LIBEXT) $(LIBREISER) -lpdcurses"

dos_no_reiserfs:
	@echo > version.h
	$(MAKE) testdisk.exe CFLAGS="$(CFLAGS)" LDFLAGS="$(LIBEXT) -lpdcurses"

bsd:
	echo \#define COMPILE_TIME \"`date`\" > version.h
	echo \#define COMPILE_BY \"`whoami`\" >> version.h
	echo \#define COMPILE_HOST \"`hostname`\" >> version.h
	$(MAKE) testdisk CFLAGS="$(CFLAGS) -DBSD -DHAVE_REISERFS -pipe"  LDFLAGS="-lncurses $(LIBEXT) $(LIBREISER)"

bsd_no_reiserfs:
	echo \#define COMPILE_TIME \"`date`\" > version.h
	echo \#define COMPILE_BY \"`whoami`\" >> version.h
	echo \#define COMPILE_HOST \"`hostname`\" >> version.h
	$(MAKE) testdisk CFLAGS="$(CFLAGS) -DBSD -pipe" LDFLAGS="-lncurses $(LIBEXT)"

testdisk: $(OBJS)
	$(CC) $(CFLAGS) -o testdisk $(OBJS) $(LDFLAGS)

testdisk_static: $(OBJS)
	$(CC) $(CFLAGS) -o testdisk_static $(OBJS) $(LDFLAGS) --static
	$(STRIP) testdisk_static
	$(STRIP) -s testdisk_static
	$(STRIP) --remove-section=.comment testdisk_static
	$(STRIP) --remove-section=.note testdisk_static
# Thanks to Tiger and The Starman for the UPX idea
	$(UPX)   -9 testdisk_static

testdisk.exe: $(OBJS)
	$(CC) $(CFLAGS) -o testdisk.exe $(OBJS) $(LDFLAGS)

#-lcurses 
#-lncurses_g -g /usr/lib/ccmalloc.o -ldl
#-lccmalloc -ldl
#-static -s

mbrmanip.o: mbrmanip.c types.h common.h fnctdsk.h lang.h hdaccess.h
	$(CC) $(CFLAGS) -c mbrmanip.c

readpart.o: readpart.c types.h common.h readpart.h testdisk.h fnctdsk.h analyse.h hdaccess.h lang.h intrface.h
	$(CC) $(CFLAGS) -c readpart.c

common.o: common.c common.h
	$(CC) $(CFLAGS) -c common.c

fat.o: fat.c types.h common.h fat.h lang.h hdaccess.h fnctdsk.h testdisk.h intrface.h
	$(CC) $(CFLAGS) -c fat.c

fat_adv.o: fat_adv.c types.h common.h fat.h lang.h hdaccess.h fnctdsk.h testdisk.h intrface.h
	$(CC) $(CFLAGS) -c fat_adv.c

fat_dir.o: fat_dir.c types.h common.h fat.h lang.h hdaccess.h fnctdsk.h testdisk.h intrface.h dir.h
	$(CC) $(CFLAGS) -c fat_dir.c

dir.o: dir.c types.h common.h fat.h lang.h hdaccess.h fnctdsk.h testdisk.h intrface.h dir.h
	$(CC) $(CFLAGS) -c dir.c

ntfs.o: ntfs.c types.h common.h intrface.h ntfs.h fnctdsk.h lang.h hdaccess.h
	$(CC) $(CFLAGS) -c ntfs.c

bsd.o: bsd.c types.h common.h fnctdsk.h bsd.h intrface.h fnctdsk.h hdaccess.h
	$(CC) $(CFLAGS) -c bsd.c

ext2.o: ext2.c types.h common.h ext2.h intrface.h fnctdsk.h hdaccess.h
	$(CC) $(CFLAGS) -c ext2.c

bfs.o: bfs.c types.h common.h bfs.h intrface.h fnctdsk.h hdaccess.h
	$(CC) $(CFLAGS) -c bfs.c

netware.o: netware.c types.h common.h netware.h 
	$(CC) $(CFLAGS) -c netware.c

swap.o: swap.c types.h common.h swap.h fnctdsk.h hdaccess.h
	$(CC) $(CFLAGS) -c swap.c

md.o: md.c types.h common.h md.h intrface.h fnctdsk.h hdaccess.h
	$(CC) $(CFLAGS) -c md.c

testdisk.o:  testdisk.c types.h common.h testdisk.h lang.h intrface.h godmode.h fnctdsk.h fat.h
	$(CC) $(CFLAGS) -c testdisk.c

analyse.o:  analyse.c types.h common.h fnctdsk.h hdaccess.h analyse.h bfs.h swap.h bsd.h fat.h ntfs.h ext2.h netware.h intrface.h rfs.h lvm.h md.h
	$(CC) $(CFLAGS) -c analyse.c

godmode.o:  godmode.c types.h common.h fnctdsk.h analyse.h lang.h godmode.h testdisk.h fat.h intrface.h hdaccess.h md.h adv.h
	$(CC) $(CFLAGS) -c godmode.c

fnctdsk.o: fnctdsk.c types.h common.h fnctdsk.h lang.h testdisk.h hdaccess.h intrface.h analyse.h
	$(CC) $(CFLAGS) -c fnctdsk.c

lang.o: lang.c
	$(CC) $(CFLAGS) -c lang.c

hdaccess.o:   hdaccess.c types.h common.h fnctdsk.h hdaccess.h
	$(CC) $(CFLAGS) -c hdaccess.c

intrface.o: intrface.c types.h common.h lang.h intrface.h readpart.h godmode.h fnctdsk.h testdisk.h lang.h hdaccess.h fat.h ext2.h rfs.h ntfs.h adv.h
	$(CC) $(CFLAGS) -c intrface.c

adv.o: adv.c types.h common.h lang.h intrface.h readpart.h fnctdsk.h testdisk.h hdaccess.h fat.h ntfs.h adv.h
	$(CC) $(CFLAGS) -c adv.c

rfs.o: rfs.c types.h common.h rfs.h fnctdsk.h hdaccess.h intrface.h
	$(CC) $(CFLAGS) -c rfs.c

lvm.o: lvm.c types.h common.h lvm.h intrface.h fnctdsk.h hdaccess.h
	$(CC) $(CFLAGS) -c lvm.c

ext2_dir.o: ext2_dir.c types.h common.h intrface.h hdaccess.h dir.h
	$(CC) $(CFLAGS) -c ext2_dir.c

rfs_dir.o: rfs_dir.c types.h common.h intrface.h hdaccess.h rfs.h dir.h
	$(CC) $(CFLAGS) -c rfs_dir.c -I$(INCREISER)

clean:
	rm -f *.o *~ *.d core *.bak version.h

zip:
	rm -f testdisk.zip
	zip testdisk.zip *
