# %W% %G%

# make and run all the example programs for
# lex & yacc, Second Edition
CC = gcc -g
LIBS = -ly -ll
LEX = flex
YACC = yacc
CFLAGS = -DYYDEBUG=1

PROGRAMS1 = ch1-01.pgm ch1-02.pgm ch1-03.pgm ch1-04.pgm ch1-05.pgm ch1-06.pgm
PROGRAMS2 = ch2-01.pgm ch2-02.pgm ch2-03.pgm ch2-04.pgm ch2-05.pgm \
       ch2-06.pgm ch2-07.pgm ch2-08.pgm ch2-09.pgm

PROGRAMS3 = ch3-01.pgm ch3-02.pgm ch3-03.pgm ch3-04.pgm ch3-05.pgm
PROGRAMS4 = mgl
PROGRAMS5 = sql1 sql2

PROGRAMSE = ape-05.pgm ape-06.pgm

all:    ${PROGRAMS1} ${PROGRAMS2} ${PROGRAMS3} ${PROGRAMS4} ${PROGRAMS5} \
       ${PROGRAMSE}

progs.tar:
       tar cvf $@ \
       Makefile ape-05.l ape-06.l ch1-01.l ch1-02.l ch1-03.l ch1-04.l \
       ch1-05.l ch1-05.y ch1-05y.h ch1-06.l ch1-06.y ch1-06y.h ch2-01.l \
       ch2-02.l ch2-03.l ch2-04.l ch2-05.l ch2-06.l ch2-07.l ch2-08.l \
       ch2-09.l ch3-01.l ch3-01.y ch3-02.y ch3-03.l ch3-03.y ch3-04.l \
       ch3-04.y ch3-05.l ch3-05.y ch3-06.y ch3hdr.h ch3hdr2.h magic.input \
       mgl-code mgl-in mgllex.l mglyac.y mmain.c sample.c subr.c \
       scn1.l scn2.l sql1.y sql2.y sqltext.c

# Chapter 1

ch1-05.pgm: ch1-05l.o ch1-05y.o
       ${CC} -o ch1-05.pgm ch1-05l.o ch1-05y.o ${LIBS}

ch1-05l.c:      ch1-05.l
       ${LEX} ch1-05.l
       mv lex.yy.c ch1-05l.c

ch1-05l.o:      ch1-05l.c ch1-05y.h

ch1-05y.h ch1-05y.c:    ch1-05.y
       ${YACC} -d ch1-05.y
       mv y.tab.c ch1-05y.c
       mv y.tab.h ch1-05y.h

ch1-06.pgm: ch1-06l.o ch1-06y.o
       ${CC} -o ch1-06.pgm ch1-06l.o ch1-06y.o ${LIBS}

ch1-06l.c:      ch1-06.l
       ${LEX} ch1-06.l
       mv lex.yy.c ch1-06l.c

ch1-06l.o:      ch1-06l.c ch1-06y.h

ch1-06y.h ch1-06y.c:    ch1-06.y
       ${YACC} -d ch1-06.y
       mv y.tab.c ch1-06y.c
       mv y.tab.h ch1-06y.h

# Chapter 2
#       all use single lex source files

# Chapter 3

ch3-01.pgm: ch3-01.l ch3-01.y
       ${LEX} ch3-01.l
       ${YACC} -d ch3-01.y
       ${CC} ${CFLAGS} -o ch3-01.pgm y.tab.c lex.yy.c ${LIBS}

ch3-02.pgm: ch3-01.l ch3-02.y
       ${LEX} ch3-01.l
       ${YACC} -d ch3-02.y
       ${CC} ${CFLAGS} -o ch3-02.pgm y.tab.c lex.yy.c ${LIBS}

ch3-03.pgm: ch3-03.l ch3-03.y
       ${LEX} ch3-03.l
       ${YACC} -d ch3-03.y
       ${CC} ${CFLAGS} -o ch3-03.pgm y.tab.c lex.yy.c ${LIBS}

ch3-04.pgm: ch3-04.l ch3-04.y ch3hdr.h
       ${LEX} ch3-04.l
       ${YACC} -d ch3-04.y
       ${CC} ${CFLAGS} -o ch3-04.pgm y.tab.c lex.yy.c ${LIBS}

ch3-05.pgm: ch3-05.l ch3-05.y ch3hdr2.h
       ${LEX} ch3-05.l
       ${YACC} -d ch3-05.y
       ${CC} ${CFLAGS} -o ch3-05.pgm y.tab.c lex.yy.c ${LIBS} -lm

# chapter 4

mgl:    subr.o mglyac.o mgllex.o
       ${CC} -o $@ subr.o mglyac.o mgllex.o ${LIBS}

subr.o: subr.c mglyac.h mgl-code

mgllex.o: mgllex.c mglyac.h

mgllex.c:       mgllex.l
       ${LEX} mgllex.l
       mv lex.yy.c mgllex.c

mglyac.c mglyac.h:      mglyac.y
       ${YACC} -d mglyac.y
       mv y.tab.c mglyac.c
       mv y.tab.h mglyac.h

# chapter 5

sql1:   sql1.o scn1.o
       ${CC} -o $@ sql1.o scn1.o

sql1.c sql1.h:  sql1.y
       ${YACC} -vd sql1.y
       mv y.tab.h sql1.h
       mv y.tab.c sql1.c
       mv y.output sql1.out

scn1.o: sql1.h scn1.c

sql2:   sql2.o scn2.o sqltext.o
       ${CC} -o $@ sql2.o scn2.o sqltext.o

sql2.c sql2.h:  sql2.y
       ${YACC} -vd sql2.y
       mv y.tab.h sql2.h
       mv y.tab.c sql2.c
       mv y.output sql2.out

scn2.o: sql2.h scn2.c


SUFFIXES:       .pgm .l .y

l.pgm:
       ${LEX} $<
       mv lex.yy.c $*.c
       ${CC} -o $@ $*.c ${LIBS}