include tool_support

# add stupid prefix to parser_generated symbols
BFL=$(BISON_FLAGS) -p SMML
FFL=$(FLEX_FLAGS)  -PSMML

INCLUDES = $(MML_INCLUDES) $(BASE_INCLUDES) $(SME3_INCLUDE)
LINKS = $(BASE_LIB) $(MML_LIB) $(SME3_LIBS)

all: libBase libMML parser
	parser

libBase:
	cd $(top)/Base/src; $(MAKE) all

libMML:
	cd $(top)/MML/src; $(MAKE) all

lexer: SMML_lexer.cc parser.bison.h
	$(CXX) -o lexer $(INCLUDES) SMML_lexer.cc $ $(LEXLIB)

bison_sources: SMML_parser.h SMML_parser.cc
	cp SMML_parser.cc ../../MML/src/SMML_parser.cc
	cp SMML_parser.h ../../MML/src/SMML_parser.h

flex_sources: SMML_lexer.cc
	cp SMML_lexer.cc ../../MML/src/SMML_lexer.cc

SMML_lexer.cc: lexer.flex  
	$(LEX) $(FFL) -oSMML_lexer.cc lexer.flex

SMML_parser.h: parser.bison.y parser.bison.tab.c
	mv parser.bison.tab.h SMML_parser.h

parser.bison.tab.c: parser.bison.y
	$(YACC) $(BFL) parser.bison.y


SMML_parser.cc: parser.bison.tab.c
	mv parser.bison.tab.c SMML_parser.cc
 
SMML_lexer.o: SMML_lexer.cc
	$(CC) -c $(INCLUDES) -o SMML_lexer.o SMML_lexer.cc

SMML_parser.o: SMML_parser.cc SMML_parser.h
	$(CC) -c $(INCLUDES) -o SMML_parser.o SMML_parser.cc

Main.o: Main.cc
	$(CC) -c $(INCLUDES) -o Main.o Main.cc

parser: SMML_parser.cc  SMML_parser.h SMML_lexer.o Main.o
	cp SMML_lexer.cc ../../MML/src/SMML_lexer.cc
	cp SMML_parser.cc ../../MML/src/SMML_parser.cc
	cp SMML_parser.h ../../MML/src/SMML_parser.h
	$(CXX) -o parser $(INCLUDES) Main.o $(LINKS) $(LEXLIB)

parserd: SMML_parser.o  SMML_lexer.o Main.o
	cp SMML_lexer.cc ../../MML/src/SMML_lexer.cc
	cp SMML_parser.cc ../../MML/src/SMML_parser.cc
	cp SMML_parser.h ../../MML/src/SMML_parser.h
	$(CXX) -o parserd $(INCLUDES) Main.o  SMML_parser.o SMML_lexer.o $(LINKS) $(LEXLIB)


clean:
	@$(RM) parser.bison.tab.c 
	@$(RM) parser.bison.tab.h
	@$(RM) parser
	@$(RM) parserd
	@$(RM) *.o
	@$(RM) *~

