# 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++

#TARGET - name of the program
TARGET = moviedb

all: list_test $(TARGET)

#compiles the sorted linked list module
SDoublyLinkedList.o: SDoublyLinkedList.h SDoublyLinkedList.cc
	$(CC) $(CFLAGS) SDoublyLinkedList.cc

#compiles the explicit template declaration module
explicit.o: SDoublyLinkedList.h SDoublyLinkedList.cc explicit.cc
	$(CC) $(CFLAGS) explicit.cc

#compiles the list test module
list_test_exp.o: SDoublyLinkedList.h Name.h  list_test_exp.cc
	$(CC) $(CFLAGS) list_test_exp.cc

#compiles the list test module
list_test.o: SDoublyLinkedList.h Name.h  list_test.cc
	$(CC) $(CFLAGS) list_test.cc

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

#compiles the NameList module
NameList.o: SDoublyLinkedList.h Name.h NameList.h NameList.cc
	$(CC) $(CFLAGS) NameList.cc

#compiles the Movie module
Movie.o: Name.h NameList.h Movie.h Movie.cc
	$(CC) $(CFLAGS) Movie.cc

#compiles the Data Manager Module
DataManager.o: SDoublyLinkedList.h Name.h Movie.h DataManager.h DataManager.cc
	$(CC) $(CFLAGS) DataManager.cc

#compiles the moviedb module
moviedb.o: Name.h Movie.h DataManager.h moviedb.h moviedb.cc
	$(CC) $(CFLAGS) moviedb.cc

#generates the executable list test program
list_test: SDoublyLinkedList.o Name.o list_test_exp.o list_test.o 
	$(CC) SDoublyLinkedList.o Name.o list_test_exp.o list_test.o \
	$(OFLAGS) list_test

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

# compiles the DataManager2 
DataManager2.o: SDoublyLinkedList.h Name.h Movie.h DataManager2.h DataManager2.cc
	$(CC) $(CFLAGS) DataManager2.cc

#compiles the moviedb2.o file
moviedb2.o: Name.h Movie.h DataManager.h moviedb2.h moviedb2.cc
	$(CC) $(CFLAGS) moviedb2.cc

#generates the moviedb2 program
moviedb2: SDoublyLinkedList.o explicit.o Name.o NameList.o Movie.o \
	DataManager2.o moviedb2.o
	$(CC) SDoublyLinkedList.o explicit.o NameList.o Name.o Movie.o \
	DataManager2.o moviedb2.o $(OFLAGS) moviedb2

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

#Removes all .o files and the executable
delete: 
	/bin/rm -f *.o
	/bin/rm -rf $(TARGET) list_test core moviedb2
	/bin/rm -f *~

#create dir
sdir:
	/bin/rm -rf $(USER)
	mkdir $(USER)
	cp SDoublyLinkedList.cc DataManager*.cc moviedb*.cc $(USER)
	tar -cvf $(USER).tar $(USER)

submit:
	/home/profs/manuel/bin/submit 3 $(USER).tar

