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
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
	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 read /MAIN.CPP
	$(LEAK_ANALYZE) $(LEAK_CHECK)

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; $(MAKE) $@

include dependencies

