CC	= gcc
LD	= gcc
YACC	= bison
LEX	= flex
CFLAGS	= -O2 -g -Wall -I/usr/X11R6/include -I/usr/local/include
YFLAGS	= -d
LFLAGS	= 
YFILES	= vrml_gram.y fontdef_gram.y modeldef_gram.y
LFILES	= vrml_scan.l fontdef_scan.l modeldef_scan.l
CFILES	= vector.c matrix.c render.c bsptree.c plane.c list.c map.c dict.c \
  mesh.c model.c vrml.c cylinder.c move.c pick.c panic.c model_dump.c \
  engine.c game.c graphics.c ui.c ui_util.c ui_main_menu.c ui_in_game_menu.c \
  ui_input_move.c ui_animation.c main-x11.c \
  font_render.c menu.c gl_util.c \
  vrml_scan.c fontdef_scan.c modeldef_scan.c \
  $(YFILES:.y=.c)
VERSION	= 0.6
OBJS	= $(CFILES:.c=.o)
LIBS	= -lGL -lGLU -lm -lX11 -lpng
LDFLAGS	= -L/usr/local/lib -L/usr/X11R6/lib
BIN	= vulcan
TARBALL	= vulcan-$(VERSION).tar.gz

$(BIN): $(OBJS)
	$(LD) $(LDFLAGS) $(OBJS) -o $@ $(LIBS)

vrml_gram.c vrml_gram.h: vrml_gram.y
	$(YACC) $(YFLAGS) -b $(<:.y=) $<
	mv $(<:.y=).tab.c $(<:.y=.c)
	mv $(<:.y=).tab.h $(<:.y=.h)

vrml_scan.o: vrml_scan.c vrml_scan_i.h vrml_gram.h

vrml_scan_i.h: vrml_scan.l vrml_gram.h
	$(LEX) $(LFLAGS) -o$@ $<

fontdef_gram.c fontdef_gram.h: fontdef_gram.y
	$(YACC) $(YFLAGS) -b $(<:.y=) $<
	mv $(<:.y=).tab.c $(<:.y=.c)
	mv $(<:.y=).tab.h $(<:.y=.h)

fontdef_scan.o: fontdef_scan.c fontdef_scan_i.h fontdef_gram.h

fontdef_scan_i.h: fontdef_scan.l fontdef_gram.h
	$(LEX) $(LFLAGS) -o$@ $<

modeldef_gram.c modeldef_gram.h: modeldef_gram.y
	$(YACC) $(YFLAGS) -b $(<:.y=) $<
	mv $(<:.y=).tab.c $(<:.y=.c)
	mv $(<:.y=).tab.h $(<:.y=.h)

modeldef_scan.o: modeldef_scan.c modeldef_scan_i.h modeldef_gram.h

modeldef_scan_i.h: modeldef_scan.l modeldef_gram.h
	$(LEX) $(LFLAGS) -o$@ $<

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

clean:
	rm -f *.o *~ core* *.stackdump $(YFILES:.y=.[ch]) $(LFILES:.l=_i.h) $(BIN) $(TARBALL) MANIFEST

MANIFEST: clean
	@find . -type f -print | grep -v RCS | grep -v page | grep -v temp | sed s:^\.:vulcan-$(VERSION): > MANIFEST

tarball: MANIFEST
	(cd ..; ln -s vulcan-dev vulcan-$(VERSION))
	(cd ..; xargs tar -czvf vulcan-dev/$(TARBALL) < vulcan-dev/MANIFEST)
	(cd ..; rm vulcan-$(VERSION))
