# Makefile para bshell.

CC = gcc
C++ = g++

ifeq ($(MAKECMDGOALS), efence)
  CFLAGS = -D_EFENCE -Wall -g -DYYDEBUG
  LIBS = -lefence -lpthread
else
  CFLAGS = -Wall -g -DYYDEBUG
  LIBS =
endif

LEX = flex
# LEXFLAGS = -d --c++
LEXFLAGS = -d
YACC = bison
YACCFLAGS = -d -v --debug
MV = mv
RM = rm -f

all: bshell
bshell: gram.tab.o scan.o clases.o
	$(C++) -o bshell $(CFLAGS) clases.o gram.tab.o scan.o $(LIBS)
clases.o: clases.cc clases.hc
	$(C++) -c $(CFLAGS) clases.cc
gram.tab.o: gram.tab.cc clases.hc
	$(C++) -c $(CFLAGS) gram.tab.cc
scan.o: scan.cc gram.tab.hc
	$(C++) -c $(CFLAGS) scan.cc
gram.tab.cc gram.tab.hc: gram.yc
	$(YACC) $(YACCFLAGS) gram.yc
scan.cc: scan.lex
	$(LEX) -oscan.cc $(LEXFLAGS) scan.lex

efence: gram.tab.o scan.o clases.o
	$(C++) -o bshell $(CFLAGS) clases.o gram.tab.o scan.o $(LIBS)

test: all b m p
b: b.c
	$(CC) -o b b.c
m: m.c
	$(CC) -o m m.c
p: p.c
	$(CC) -o p p.c

clean:
	$(RM) gram.tab.hc
	$(RM) gram.tab.cc
	$(RM) gram.output
	$(RM) scan.cc
	$(RM) *.o
veryclean: clean
	$(RM) bshell
	$(RM) b m p
