
CC		= gcc
CPP		= g++

SRC_DIR		= ./
DOBJ_DIR	= $(SRC_DIR)dobj/
ROBJ_DIR	= $(SRC_DIR)obj/
DBIN_DIR	= $(SRC_DIR)dobj/
RBIN_DIR	= $(SRC_DIR)bin/
VIEWS_INCLUDE_DIR = ../include/


INCLUDE_FLAG	= -I
# Rely on -O defining NDEBUG automatically
DEBUG_FLAGS	= -g -O0 -Wall
OPTIMIZE_FLAGS	= -O3
PREPROCESS_FLAG	= -E -P -C -H

DEPENDENCY_FLAG	= -MM
VERSION_FLAG	= -v
LIBRARY_FLAG	= -l
OUTPUT_FLAG	= -o
COMPILE_ONLY_FLAG	= -c
LINK_FLAGS	=

#
# Operating System Dependencies
#

# Set OS either to DOS or Solaris
# Set MODE either to RELEASE or DEBUG

ifeq ($(OS),DOS)
  CPU = -mpentium
  EXE = .exe
else

ifeq ($(OS),Solaris)
  CPU = -mtune=ultrasparc -mv8
  EXE =
endif

endif


PROJECT_INCLUDE	= \
	$(INCLUDE_FLAG)$(VIEWS_INCLUDE_DIR)

INCLUDE	= \
	$(PROJECT_INCLUDE)

SOURCES	= \
	$(SRC_DIR)crossproduct_test.cpp	\
	$(SRC_DIR)difference_test.cpp	\
	$(SRC_DIR)downcast_test.cpp	\
	$(SRC_DIR)equal_range_test.cpp	\
	$(SRC_DIR)flagged_test.cpp	\
	$(SRC_DIR)intersection_test.cpp	\
	$(SRC_DIR)map_test.cpp	\
	$(SRC_DIR)merge_view_test.cpp	\
	$(SRC_DIR)pair_merge_test.cpp	\
	$(SRC_DIR)performance_test.cpp \
	$(SRC_DIR)poly_test.cpp	\
	$(SRC_DIR)range_test.cpp	\
	$(SRC_DIR)reverse_test.cpp	\
	$(SRC_DIR)rotate_test.cpp	\
	$(SRC_DIR)set_difference_test.cpp	\
	$(SRC_DIR)set_intersection_test.cpp	\
	$(SRC_DIR)set_symmetric_difference_test.cpp	\
	$(SRC_DIR)set_union_test.cpp \
	$(SRC_DIR)slist_test.cpp	\
	$(SRC_DIR)sorted_difference_test.cpp	\
	$(SRC_DIR)sorted_intersection_test.cpp	\
	$(SRC_DIR)sorted_sym_diff_test.cpp	\
	$(SRC_DIR)unique_test.cpp \
	$(SRC_DIR)vector_test.cpp \
	$(SRC_DIR)window_test.cpp \
	$(SRC_DIR)zip_test.cpp


ifeq ($(MODE),RELEASE)
  OBJECTS = ${patsubst $(SRC_DIR)%.cpp, $(ROBJ_DIR)%.o, $(SOURCES)}
  EXECUTABLES = ${patsubst $(ROBJ_DIR)%.o, $(RBIN_DIR)%.exe, $(OBJECTS)}
else

#ifeq ($(MODE),DEBUG)
  OBJECTS = ${patsubst $(SRC_DIR)%.cpp, $(DOBJ_DIR)%.o, $(SOURCES)}
  EXECUTABLES = ${patsubst $(DOBJ_DIR)%.o, $(DBIN_DIR)%$(EXE), $(OBJECTS)}
#endif
endif

STD_LIBS	= 

LIBS		= \
	$(STD_LIBS)

CPP_FLAGS	= $(CPU) $(INCLUDE)
DEBUG_COMPILE	= $(DEBUG_FLAGS) $(CPP_FLAGS)
RELEASE_COMPILE = $(OPTIMIZE_FLAGS) $(CPP_FLAGS)
LINK_FLAGS	= $(LIBS)

.EXTENSIONS:
.EXTENSIONS: $(EXE) .o .cpp .h

#
# Rules for creating object files
#
$(ROBJ_DIR)%.o: $(SRC_DIR)%.cpp
	$(CPP) $(RELEASE_COMPILE) $(COMPILE_ONLY_FLAG) $< $(OUTPUT_FLAG) $@
$(DOBJ_DIR)%.o: $(SRC_DIR)%.cpp
	$(CPP) $(DEBUG_COMPILE) $(COMPILE_ONLY_FLAG) $< $(OUTPUT_FLAG) $@


#
# Rules for creating executables
#
$(RBIN_DIR)%$(EXE): $(ROBJ_DIR)%.o
	$(CPP) $(OUTPUT_FLAG) $@ $(LINK_FLAGS) $< $(LIBS)
$(DBIN_DIR)%$(EXE): $(DOBJ_DIR)%.o
	$(CPP) $(OUTPUT_FLAG) $@ $(LINK_FLAGS) $< $(LIBS)

test:
	echo $(MODE) $(OS) $(DBIN_DIR) $(EXE)

#
# Targets
#
install :  $(EXECUTABLES)

include .dependencies

dependency : .dependencies

.dependencies: $(SOURCES)
	rm -f .dependencies
	$(CPP) $(DEPENDENCY_FLAG) $(INCLUDE) $(SOURCES) \
	| sed -e 's#[a-zA-Z0-9_]*\.o#$(DOBJ_DIR)&#g' > .depend1
	sed -e 's#$(DOBJ_DIR)#$(ROBJ_DIR)#' .depend1 > .dependencies
	cat .depend1 >> .dependencies
	rm .depend1

preprocess :
	$(CPP) $(PREPROCESS_FLAG) examples.cpp > examples.d

version :
	$(CPP) $(VERSION_FLAG)

clean	:
	rm -f $(OBJECTS) 


# $Id: Makefile,v 1.6 2000/11/20 14:03:49 bzfweise Exp $
