EXEEXT         = .exe
TARGET         = FAT12$(EXEEXT)
LEAK_CHECK     = LeakTracer/LeakCheck$(TARGET)
LEAK_ANALYZE   = LeakTracer/leak-analyze
LEAKTRACE_FILE = leak.out

SOURCES  = main.cpp VirtualFloppy.cpp
CXXFLAGS = -Wall -g
INCLUDE  = -idirafter . -idirafter Mona -idirafter Fat12 -idirafter FileSystem

MONA_OBJECTS  = Mona/CString.o Mona/BitMap.o
FAT12_OBJECTS = Fat12/Fat12FileSystem.o Fat12/Fat12File.o Fat12/Fat12.o
LEAK_OBJECTS  = LeakTracer/LeakTracer.o

OBJECTS = $(SOURCES:.cpp=.o)

all : $(TARGET)

$(TARGET) : $(OBJECTS) monaobj fat12obj
	$(CXX) $(OBJECTS) $(MONA_OBJECTS) $(FAT12_OBJECTS) -o $(TARGET)

.SUFFIXES: .cpp .o
.cpp.o:
	$(CXX) $(CXXFLAGS) $(INCLUDE) -c $<

fat12obj :
	cd Fat12; $(MAKE)

$(LEAK_CHECK) : $(TARGET) leakobj
	$(CXX) $(OBJECTS) $(MONA_OBJECTS) $(FAT12_OBJECTS) $(LEAK_OBJECTS) -o $(LEAK_CHECK)

test : $(TARGET)
	cd TestScripts; $(MAKE)

monaobj :
	cd Mona; $(MAKE)

leakobj :
	cd LeakTracer; $(MAKE)

leakcheck : leakcheck1 leakcheck2 leakcheck3 leakcheck4  leakcheck5 leakcheck6 leakcheck7 leakcheck8 leakcheck9
	rm -f $(LEAKTRACE_FILE)

# ls test case 1 normal pattern
leakcheck1 : $(LEAK_CHECK)
	rm -f $(LEAKTRACE_FILE)
	$(LEAK_CHECK) mona.img ls APPS/
	$(LEAK_ANALYZE) $(LEAK_CHECK)

# ls test case 2 normal pattern
leakcheck2 : $(LEAK_CHECK)
	rm -f $(LEAKTRACE_FILE)
	$(LEAK_CHECK) mona.img ls .
	$(LEAK_ANALYZE) $(LEAK_CHECK)

# ls test case 3 error pattern
leakcheck3 : $(LEAK_CHECK)
	rm -f $(LEAKTRACE_FILE)
	$(LEAK_CHECK) mona.img ls /APSSSSS
	$(LEAK_ANALYZE) $(LEAK_CHECK)

# read normal pattern
leakcheck4 : $(LEAK_CHECK)
	rm -f $(LEAKTRACE_FILE)
	$(LEAK_CHECK) mona.img read /MAIN.CPP
	$(LEAK_ANALYZE) $(LEAK_CHECK)

# read error pattern
leakcheck5 : $(LEAK_CHECK)
	rm -f $(LEAKTRACE_FILE)
	$(LEAK_CHECK) mona.img read /MAIN.EXE
	$(LEAK_ANALYZE) $(LEAK_CHECK)

# read error pattern
leakcheck6 : $(LEAK_CHECK)
	rm -f $(LEAKTRACE_FILE)
	$(LEAK_CHECK) mona.img read /HOGE/HOGE.EXT
	$(LEAK_ANALYZE) $(LEAK_CHECK)

# rm normal pattern
leakcheck7 : $(LEAK_CHECK)
	rm -f $(LEAKTRACE_FILE)
	$(LEAK_CHECK) mona.img rm /MAIN.CPP
	$(LEAK_ANALYZE) $(LEAK_CHECK)
	cp mona.img.bak mona.img

# rm normal pattern
leakcheck8 : $(LEAK_CHECK)
	rm -f $(LEAKTRACE_FILE)
	$(LEAK_CHECK) mona.img rm /APPS/2CHAA.EL2
	$(LEAK_ANALYZE) $(LEAK_CHECK)
	cp mona.img.bak mona.img

# rm normal pattern
leakcheck9 : $(LEAK_CHECK)
	rm -f $(LEAKTRACE_FILE)
	$(LEAK_CHECK) mona.img rm /APPSSSS/2CHAA.EL2
	$(LEAK_ANALYZE) $(LEAK_CHECK)
	cp mona.img.bak mona.img

depend:
	$(CXX) -MM $(INCLUDE) $(CXXFLAGS) $(SOURCES) > dependencies
	cd Mona; $(MAKE) $@
	cd Fat12; $(MAKE) $@

clean :
	rm -f $(OBJECTS) $(TARGET)
	cd Mona; $(MAKE) $@
	cd Fat12; $(MAKE) $@
	cd LeakTracer; rm -f $(LEAK_CHECK);$(MAKE) $@

include dependencies

