#	Makefile for C++ programs (c) Ingmar Bitter '95
#
#	make		: compile only changed files and their depend files
#	make all	: recompile all
#	make clean	: recompile all and remove unecessary files
#
#	Put the name of your executable program on the 'EXECUTABLE' line.

#
#	user info
#
MSG		=	Hi
REAL_NAME	=	Ingmar Bitter
LOGIN_NAME	=	ingmar

HANDIN_INFO	= "$(MSG) from $(LOGIN_NAME) <=> $(REAL_NAME)"

RM		= /bin/rm -f

#
#	put -g here| to add debugging info to executable
#		   V
CDEBUGFLAGS	= 
CCOPTIONS	= -Wall -O

CC		= g++

#
#	object and source file directories
#
OBJ		= obj
SRC		= src

INCLUDES	= -I$(SRC)
LIBS		=
CFLAGS		= $(CCOPTIONS) $(CDEBUGFLAGS) $(INCLUDES)

OBJECTS 	=	$(OBJ)/main.o			\
			$(OBJ)/test.o			\
			$(OBJ)/Timer.o			\
			$(OBJ)/DynaArray.o		\
			$(OBJ)/BasicVertex.o		\
			$(OBJ)/PermutationVertex.o	\
			$(OBJ)/Edge.o			\
			$(OBJ)/BasicGraph.o		\
			$(OBJ)/BasicLinearGraph.o	\
			$(OBJ)/FastLinearGraph.o	\
			$(OBJ)/BandwidthMinimzer.o

EXECUTABLE 	= go

$(EXECUTABLE):	$(OBJECTS)
		$(CC) -o $(EXECUTABLE) $(OBJECTS) $(CFLAGS) $(LIBS)

#
#	target: dependency \n tab rule
#
$(OBJ)/%.o:	$(SRC)/%.cpp
	$(CC) -c $(CFLAGS) $(SRC)/$*.cpp -o $@

$(OBJ)/%.o:	$(SRC)/%.h
	$(CC) -c $(CFLAGS) $(SRC)/$*.cpp -o $@

#
#	switch:: ; \n tab rule
#
all::	;
	$(RM) *.o; $(RM) $(OBJ)/*.o; $(RM) $(EXECUTABLE)
	make

clean::	;
	$(RM) *.o; $(RM) $(OBJ)/*.o; $(RM) $(EXECUTABLE)
	$(RM) *~;  $(RM) $(SRC)/*~;  $(RM) #*#; $(RM) $(SRC)/#*#;
	make
	$(RM) *.o; $(RM) $(OBJ)/*.o

handin::	;
	$(RM) *.o; $(RM) $(OBJ)/*.o; $(RM) $(EXECUTABLE)
	$(RM) *~;  $(RM) $(SRC)/*~;  $(RM) #*#; $(RM) $(SRC)/#*#;
	$(RM) handin.tar; $(RM) handin.tar.gz;
	tar -cvf ../handin.tar . ; mv ../handin.tar .
	gzip handin.tar
	uuencode handin.tar.gz $(LOGIN_NAME).handin.tar.gz | \
				mail -s $(HANDIN_INFO) ingmar

