CXX		= g++
#CXX		= /usr/local/libexec/gcc-2.95.3/bin/g++
#CXX		= /usr/local/libexec/gcc-3.2/bin/g++
#CXX             = insure
#CC              = gcc

WD = $(shell pwd)

YACC = bison
YLWRAP = $(WD)/ylwrap
YFLAGS = -y -d
YACCCOMPILE = $(YACC) $(YFLAGS)

FLEX = flex
FLEXFLAGS = -olex.yy.c

GD_DIR        = $(WD)/../gd/2.0.12-install

CXXLIBS			= -lm

CXXFLAGS  = -DLinux
CXXFLAGS += -I.
CXXFLAGS += -I$(GD_DIR)/include
CXXFLAGS += $(OSFLAGS_Linux) # -W -Wall
#CXXFLAGS += -DDEBUG
CXXFLAGS += -O2
CXXFLAGS += -g
#CXXFLAGS += -pg
CXXFLAGS += -Wno-deprecated

# SMURF: check these flags
BISONFLAGS = -dt 
LEXFLAGS = 
BISON = bison
LEX = flex

srcdir = .

LIBNAME = librcssclangparser.a 

all: $(LIBNAME)

full: cln genfiles depend all

NORM_OFILES = Geometry.o clangmsgbuilder.o clangmsg.o \
	clangmetamsg.o clangfreeformmsg.o clangunsuppmsg.o \
	clangrulemsg.o clangdelmsg.o clanginfomsg.o \
	clangadvicemsg.o clangdefmsg.o clangaction.o \
	coach_lang_comp.o paramreader.o serverparam.o \
	coach_lang_par.o region.o visitor.o \
	clangutil.o utility.o cond.o compop.o arithop.o rule.o \
	VarBindings.o Logger.o FieldImage.o ClangIterator.o
NORM_SRCS = \
Geometry.C \
clangmsgbuilder.cc \
clangmsg.cc \
clangmetamsg.cc \
clangfreeformmsg.cc \
clangunsuppmsg.cc \
clangrulemsg.cc \
clangdelmsg.cc \
clanginfomsg.cc \
clangadvicemsg.cc \
clangdefmsg.cc \
clangaction.cc \
coach_lang_comp.C \
region.C \
visitor.cc \
clangutil.cc \
utility.C \
cond.cc \
compop.cc \
arithop.cc \
rule.cc \
paramreader.C \
serverparam.C \
VarBindings.C \
ClangIterator.C
#msgstore.C
#rcssexceptions.h \

#NORM_SRCS   =	$(NORM_OFILES:%.o=%.C)

GEN_OFILES = coach_lang_tok.o coach_lang_par.o
GEN_SRC_FILES = coach_lang_par.cc coach_lang_tok.cc
#GEN_SRC_FILES = coach_lang_par.yy coach_lang_tok.ll
GEN_HEAD_FILES = coach_lang_par.h 
GEN_FILES = $(GEN_SRC_FILES) $(GEN_HEAD_FILES)

OFILES = $(NORM_OFILES) $(GEN_OFILES)
SRCS = $(NORM_SRCS) $(GEN_SRC_FILES)

.SUFFIXES: .C .cc .h .ll .yy .o

.cc.o : $*.cc
	$(CXX) -c $(CXXFLAGS) $(CXXINCLUDE) $*.cc
.C.o : $*.C
	$(CXX) -c $(CXXFLAGS) $(CXXINCLUDE) $*.C

.yy.h: $*.yy
	if test -e "$*.cc"; then \
		if test "$*.cc" -ot "$*.yy"; then \
			$(MAKE) $*.cc; \
		elif test "$*.h" -ot "$*.yy"; then \
			$(MAKE) -W "$*.yy" $*.cc; \
			touch "$*.h"; \
		fi \
	else \
		$(MAKE) $*.cc; \
	fi

.yy.cc: $*.yy
	$(SHELL) $(YLWRAP) `test -f '$<' || echo '$(srcdir)/'`$< y.tab.c $@ y.tab.h $*.h y.output $*.output -- $(YACCCOMPILE)

.ll.cc:	$*.ll
	$(FLEX) $(FLEXFLAGS) $<
	sed 's/#include <FlexLexer\.h>/#include \"$*.h\"/;\
         s/class istream;/#include <iosfwd>/;\
         s/cin/std::cin/;s/cout/std::cout/;s/cerr/std::cerr/;\
         s/ostream/std::ostream/;\
         s/#include <istd::ostream.h>/#include <iostream>/;\
         s/#include <istd::ostream>/#include <iostream>/;\
         s/istream/std::istream/' lex.yy.c > $@
	rm -f lex.yy.c

$(LIBNAME): $(OFILES)
	ar rc $(LIBNAME) $(OFILES)
	ranlib $(LIBNAME)

clean: cln
cln:
	echo cleaning up....
	/bin/rm -f $(OFILES) $(GEN_FILES) $(LIBNAME) $(DEPEND)

genfiles: $(GEN_SRC_FILES) $(GEN_HEAD_FILES)


insure: # compile with insure for memory debugging
	make "CXX=insure"

depend:
	$(RM) $(DEPEND)
	$(CXX) -M $(CXXFLAGS) $(SRCS) >> $(DEPEND)

DEPEND = Makefile.depend
ifeq ($(wildcard $(DEPEND)),$(DEPEND))
include $(DEPEND)
endif

