#
INCLUDES=
CXXFLAGS= -g
CXX=$(INCLUDES) $(CXXFLAGS)
OBJS= gram.o translator.o keywords.o

all: SUBSYS.o

shared: libifsql.so

exe: ifsql

SUBSYS.o: $(OBJS)
	ld -r -o SUBSYS.o $(OBJS)

libifsql.so: $(OBJS)
	g++ -shared $(OBJS) -o libifsql.so

ifsql: SUBSYS.o main.o
	g++ SUBSYS.o main.o -o ifsql

gram.o: gram.cpp scan.cpp gramparse.hpp keywords.hpp translator.h
	g++ $(CXX) -c gram.cpp

parse.hpp gram.cpp: gram.y
	bison -t -y -d -o y.tab.cpp gram.y
	sed -e 's/yyval[ ]*=[ ]*yyvsp[ ]*\[[ ]*1[ ]*-[ ]*yylen[ ]*\][ ]*;/DEFAULT_TRANSLATION_ACTION/g' < y.tab.cpp > y.tab.1.cpp
	sed -e 's/union/struct/g' -e 's/yy/ifsql_yy/g' -e 's/YY/IFSQL_YY/g' < y.tab.hpp > parse.hpp
	sed -e 's/union/struct/g' -e 's/yy/ifsql_yy/g' -e 's/YY/IFSQL_YY/g' < y.tab.1.cpp > gram.cpp
	rm y.tab.*

scan.cpp: scan.l
	rm -f lex.base_yy.cpp
	flex -CF -o'lex.base_yy.cpp' scan.l
	sed -e 's/yy/ifsql_yy/g' -e 's/YY/IFSQL_YY/g' < lex.base_yy.cpp > scan.cpp
	rm lex.base_yy.cpp

translator.o: translator.cpp translator.h gramparse.hpp parse.hpp
	g++ $(CXX) -c translator.cpp

keywords.o: keywords.cpp keywords.hpp parse.hpp
	g++ $(CXX) -c keywords.cpp

main.o: main.cpp translator.h
	g++ $(CXX) -c main.cpp

clean:
	rm -f *.o ifsql

veryclean:
	rm -f scan.cpp gram.cpp parse.hpp *.o ifsql
