CC := g++
CFLAGS := -g -Wall -Wstrict-overflow=2
CXXFLAGS := -g -Wall -Wstrict-overflow=2
YFLAGS := -dv

%.o : %.cxx
	$(CC) $(CXXFLAGS) $< -c

%.tab.cxx %.tab.hxx : %.yxx
	bison $(YFLAGS) $<

##	mv $(<:%.y=%.tab.c) $(<:%.y=%.c)
##	mv $(<:%.y=%.tab.h) $(<:%.y=%.h)

.SECONDARY:		## keep all intermediate results
.PHONY : bun sources

sources := ddc.yxx ddc-g.h parse.l p_math.cxx p_math.h rand.cxx rand.h \
	gcd.cxx gcd.h p_rand.cxx moremath.cxx		\
	bdecl.awk btoktab.awk btokdef.awk bname.awk bpol.awk	\
	ddc.bsym makefile

tempfiles := bdecl.h btoktab.c btokdef.h bname.c bpol.c \
        parse.cxx ddc.tab.cxx ddc.tab.hxx \
        ddc.tab.o  gcd.o  moremath.o  p_math.o  p_rand.o  rand.o \
        ddc.output ddc

all : ddc

clean : ALWAYS
	rm $(tempfiles)

ALWAYS :

ddc : ddc.tab.o p_math.o p_rand.o rand.o moremath.o gcd.o
	$(CC) -o $@ $^ -lm

ddc.tab.o:	parse.cxx bname.c

ddc.tab.cxx : parse.cxx # because of an #include statement

parse.cxx : parse.l bison_ifc.h
	flex -o $@ parse.l      # /usr/bin/lex is a symlink to flex

bdecl.h btoktab.c btokdef.h bname.c bpol.c : \
	ddc.bsym bdecl.awk btoktab.awk btokdef.awk bname.awk bpol.awk
	awk -f bdecl.awk   ddc.bsym > bdecl.h
	awk -f btoktab.awk ddc.bsym > btoktab.c
	awk -f btokdef.awk ddc.bsym > btokdef.h
	awk -f bname.awk   ddc.bsym > bname.c
	awk -f bpol.awk    ddc.bsym > bpol.c

bun ddc.tgz : $(sources)
	tar -C ..  -cl $(sources:%=ddc/%) | gzip > ddc.tgz

list-sources :
	@echo $(sources)

shipit : $(sources) ddc.tgz
	put $^
	@echo Also consider 'make install'

install :
	rsync ddc root@localhost:/usr/local/bin/
