# Flags for the compiler:
#       -g - generate code for debugger
#       -Wall - generate warnings about suspect operations ...
#       -c - generate binary object code
CFLAGS= -g -Wall -c

# Flags to generate the executable program:
#       -o - used to give a name to the program
OFLAGS = -o

#Name of C++ compiler
#       g++ - GNU C++ compiler
CC = g++

# Project name
PNAME = p3

# Project submission dir
DIRNAME=$(USER)$(PNAME)

all: list_test moviedb

# compiles the CLList module
CLList.o: list.h Iterator.h CLList.h CLList.cpp
	$(CC) $(CFLAGS) CLList.cpp

# compiles the list_test_exp module
list_test_exp.o: CLList.h CLList.cpp 
	$(CC) $(CFLAGS) list_test_exp.cpp

# compiles the list_test module
list_test.o: CLList.h list_test.cpp
	$(CC) $(CFLAGS) list_test.cpp

# compiles the Name module
Name.o: Name.h Name.cpp
	$(CC) $(CFLAGS) Name.cpp

# compiles the NameList module
NameList.o: CLList.h Name.h NameList.h NameList.cpp
	$(CC) $(CFLAGS) NameList.cpp

# compiles the Movie module
Movie.o: Movie.h Movie.cpp
	$(CC) $(CFLAGS) Movie.cpp

# compiles the DataManager module
DataManager.o: DataManager.h DataManager.cpp
	$(CC) $(CFLAGS) DataManager.cpp

# compiles the explicit Module
explicit.o: list.h Iterator.h CLList.h CLList.cpp Name.h Movie.h \
	explicit.cpp
	$(CC) $(CFLAGS) explicit.cpp

# compiles the moviedb module
moviedb.o: moviedb.h moviedb.cpp
	$(CC) $(CFLAGS) moviedb.cpp

# generates the list_test executable program
list_test: CLList.o list_test_exp.o list_test.o
	$(CC) CLList.o list_test_exp.o list_test.o \
	$(OFLAGS) list_test

# generates the moviedb executable program
moviedb: CLList.o explicit.o Name.o NameList.o Movie.o \
	DataManager.o moviedb.o
	$(CC) CLList.o Name.o NameList.o Movie.o \
	explicit.o DataManager.o moviedb.o $(OFLAGS) moviedb

# removes all .o files
clean:
	/bin/rm -f *.o

# removes all .o files, backups and executables
delete:
	/bin/rm -rf *.o core
	/bin/rm -rf list_test moviedb
	/bin/rm -f *~

#################### Submit Stuff

# Create project submit directory
sdir:
	/bin/rm -rf $(DIRNAME)
	mkdir $(DIRNAME)
	cp CLList.* DataManager.* $(DIRNAME)
	tar -cvf $(USER).tar $(DIRNAME)

# Submit the project
submit: 
	/home/profs/manuel/bin/submit 3 $(USER).tar
