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

SOURCES    = main.cpp VirtualCD.cpp

CXXFLAGS = -Wall -g
INCLUDE  = -idirafter . -idirafter Mona -idirafter ISO9660

MONA_OBJECTS    = Mona/CString.o
ISO9660_OBJECTS = ISO9660/ISO9660.o
LEAK_OBJECTS    = LeakTracer/LeakTracer.o

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

all : $(TARGET)

$(TARGET) : $(OBJECTS) monaobj iso9660obj
	$(CXX) $(OBJECTS) $(MONA_OBJECTS) $(ISO9660_OBJECTS) -o $(TARGET)

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

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

monaobj :
	cd Mona; $(MAKE)

iso9660obj :
	cd ISO9660; $(MAKE)

leakobj :
	cd LeakTracer; $(MAKE)

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

# ls 正常に行なえる場合
leakcheck1 : $(LEAK_CHECK)
	rm -f $(LEAKTRACE_FILE)
	$(LEAK_CHECK) sample.iso ls SERVERS/FILE
	$(LEAK_ANALYZE) $(LEAK_CHECK)

# ls ディレクトリがない場合
leakcheck2 : $(LEAK_CHECK)
	rm -f $(LEAKTRACE_FILE)
	$(LEAK_CHECK) sample.iso ls HOGE
	$(LEAK_ANALYZE) $(LEAK_CHECK)

# cp ファイルがある場合
leakcheck3 : $(LEAK_CHECK)
	rm -f $(LEAKTRACE_FILE)
	$(LEAK_CHECK) sample.iso cp MAKEFILE testMakefile
	rm -f testMakefile
	$(LEAK_ANALYZE) $(LEAK_CHECK)

# cp ファイルがない場合
leakcheck4 : $(LEAK_CHECK)
	rm -f $(LEAKTRACE_FILE)
	$(LEAK_CHECK) sample.iso cp MAKEFIL testMakefile
	$(LEAK_ANALYZE) $(LEAK_CHECK)

# read ファイルがある場合
leakcheck5 : $(LEAK_CHECK)
	rm -f $(LEAKTRACE_FILE)
	$(LEAK_CHECK) sample.iso read MAKEFILE
	rm -f testMakefile
	$(LEAK_ANALYZE) $(LEAK_CHECK)

# read ファイルがない場合
leakcheck6 : $(LEAK_CHECK)
	rm -f $(LEAKTRACE_FILE)
	$(LEAK_CHECK) sample.iso read SERVERS/MAKEFIL
	$(LEAK_ANALYZE) $(LEAK_CHECK)

# ls 正常に行なえる場合
leakcheck7 : $(LEAK_CHECK)
	rm -f $(LEAKTRACE_FILE)
	$(LEAK_CHECK) sample.iso ls -l SERVERS/FILE
	$(LEAK_ANALYZE) $(LEAK_CHECK)

# ls ディレクトリがない場合
leakcheck8 : $(LEAK_CHECK)
	rm -f $(LEAKTRACE_FILE)
	$(LEAK_CHECK) sample.iso ls -l HOGE
	$(LEAK_ANALYZE) $(LEAK_CHECK)

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

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

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

include dependencies
