
FLEX := flex
BISON := bison

PARSER := parser

OBJS := lex.yy.o $(PARSER).tab.o $(patsubst %.cc,%.o,$(wildcard *.cc))
DEPS := $(OBJS:.o=.dep)

all: $(DEPS) $(OBJS)

%.o: %.cc
	$(CXX) -c -o $@ $(CPPFLAGS) $(CXXFLAGS) $<

$(PARSER).tab.cc $(PARSER).tab.hh: $(PARSER).yy
	$(BISON) -d $<

lex.yy.o: lex.yy.cc

lex.yy.cc: $(PARSER).tab.hh
lex.yy.cc: $(PARSER).lex
	$(FLEX) -o $@ $<

# Make dependency files
%.dep: %.cc
	@set -e; rm -f $@; \
	  $(CXX) -MM $(CPPFLAGS) $< > $@.$$$$; \
	  sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
	  rm -f $@.$$$$

clean:
	-rm -f lex.yy.cc $(PARSER).tab.cc $(PARSER).tab.hh *~ *.o *.dep

# Include dependency files
ifndef CLEAN
-include $(DEPS)
endif
