STDCPARSER = Stdc
MODELPARSER = Model
BACKUPPARSER = Backup
PARSER-SRCS = $(STDCPARSER)Parser.cpp $(STDCPARSER)Lexer.cpp \
	      $(MODELPARSER)Parser.cpp $(MODELPARSER)Lexer.cpp \
	      $(BACKUPPARSER)Parser.cpp $(BACKUPPARSER)Lexer.cpp
PARSER-HDRS = $(STDCPARSER)Parser.h $(MODELPARSER)Parser.h $(BACKUPPARSER)Parser.h
SRCS = $(filter-out $(PARSER-SRCS),$(wildcard *.cpp)) $(PARSER-SRCS)
DEPS = $(patsubst %.cpp,%.d,$(SRCS))
OBJS = $(patsubst %.cpp,%.o,$(SRCS))

-include ../Makefile.common

LEX = flex
YACC = bison
CFLAGS = $(COMMON-CFLAGS) -I../main
LIB = libparser.a

all with-cprover lite : $(LIB)

$(LIB) : $(PARSER-SRCS) $(PARSER-HDRS) $(OBJS)
	$(AR) $(LIB) $(OBJS)
	$(RANLIB) $(LIB)

%.o : %.cpp
	$(CC) $(CFLAGS) -c -o $@ $<

%.d : %.cpp
	$(CC) $(CFLAGS) -MM $< > $@

%Parser.cpp %Parser.h : %Parser.y
	$(YACC) -d -p $* -o $@ $<
	/bin/mv -f $*Parser.hpp $*Parser.h

%Lexer.cpp : %Lexer.lex %Parser.cpp
	$(LEX) -P$* -o$@ $<

clean :
	rm -f $(LIB) $(OBJS) $(DEPS) $(PARSER-SRCS) $(PARSER-HDRS)
