CC=clang # gcc
RM=rm -Rfv

LFLAGS= -lm
CFLAGS = -std=c99 -pedantic -Wall -Wextra -D_POSIX_SOURCE -D_GNU_SOURCE

ifdef DEBUG
	CFLAGS += -ggdb -DDEBUG
else
	CFLAGS += -g -O2
endif

all: shell

clean:
	$(RM) shell *.o input.lex.* input.yacc.*

shell: input.yacc.o input.lex.o main.o
	$(CC) $(CFLAGS) $(LFLAGS) -o $@ $^

test: shell
	 echo -n 'exit' | ./shell
	 echo -n 'cd ../' | ./shell
	 echo -n 'help' | ./shell
	 echo -n 'cat input.l' | ./shell
	 echo -n 'cat input.l | grep "id"' | ./shell
	 echo -n '!!' | ./shell
	 echo -n '!2' | ./shell

input.yacc.c: input.y
	bison --debug --verbose -d -o $@ $<

input.yacc.h: input.yacc.c

input.lex.c: input.l
	`which flex35 2>/dev/null || which flex 2>/dev/null` \
		--interactive --header-file=input.lex.h -o $@ -d $<

input.lex.h: input.lex.c

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

input.lex.o:  input.yacc.h input.l.h
input.yacc.o: input.lex.h
