PREFIX = /usr/local
BIN = $(PREFIX)/bin

DATA_DIR = $(PREFIX)/share/vulcan

FONT_DIR = $(DATA_DIR)/fonts
MODEL_DIR = $(DATA_DIR)/models
TEXTURE_DIR = $(DATA_DIR)/textures

CC	= gcc
MV	= mv
LD	= gcc
YACC	= bison -y
LEX	= flex
CFLAGS	= -O2 -g -Wall -I/usr/X11R6/include -I/usr/local/include -DDATA_DIR=\"$(DATA_DIR)\" -DFONT_DIR=\"$(FONT_DIR)\" -DMODEL_DIR=\"$(MODEL_DIR)\" -DTEXTURE_DIR=\"$(TEXTURE_DIR)\"
YFLAGS	= -d
LFLAGS	= 
YFILES	= vrml.y modeldef.y fontdef.y
LFILES	= vrml.l fontdef.l modeldef.l
CFILES	= vector.c matrix.c render.c bsptree.c plane.c list.c hash_table.c \
  dict.c mesh.c model.c vrml_tree.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 \
  quaternion.c image.c $(YFILES:.y=_y_tab.c) $(LFILES:.l=_lex_yy.c)
VERSION	= 0.7.1
OBJS	= $(CFILES:.c=.o)
LIBS	= -lGL -lGLU -lm -lX11 -lpng
LDFLAGS	= -L/usr/local/lib -L/usr/X11R6/lib
TARGET	= vulcan
TARBALL	= vulcan-$(VERSION).tar.gz

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

vrml_y_tab.c vrml_y_tab.h: vrml.y
	$(YACC) $(YFLAGS) -b $(<:.y=) $<
	$(MV) $(<:.y=).tab.c $(<:.y=_y_tab.c)
	$(MV) $(<:.y=).tab.h $(<:.y=_y_tab.h)

vrml_lex_yy.o: vrml_lex_yy.c vrml_lex_yy_i.h vrml_y_tab.h

vrml_lex_yy_i.h: vrml.l vrml_y_tab.h
	$(LEX) $(LFLAGS) -o$@ $<

fontdef_y_tab.c fontdef_y_tab.h: fontdef.y
	$(YACC) $(YFLAGS) -b $(<:.y=) $<
	$(MV) $(<:.y=).tab.c $(<:.y=_y_tab.c)
	$(MV) $(<:.y=).tab.h $(<:.y=_y_tab.h)

fontdef_lex_yy.o: fontdef_lex_yy.c fontdef_lex_yy_i.h fontdef_y_tab.h

fontdef_lex_yy_i.h: fontdef.l fontdef_y_tab.h
	$(LEX) $(LFLAGS) -o$@ $<

modeldef_y_tab.c modeldef_y_tab.h: modeldef.y
	$(YACC) $(YFLAGS) -b $(<:.y=) $<
	$(MV) $(<:.y=).tab.c $(<:.y=_y_tab.c)
	$(MV) $(<:.y=).tab.h $(<:.y=_y_tab.h)

modeldef_lex_yy.o: modeldef_lex_yy.c modeldef_lex_yy_i.h modeldef_y_tab.h

modeldef_lex_yy_i.h: modeldef.l modeldef_y_tab.h
	$(LEX) $(LFLAGS) -o$@ $<

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

clean:
	rm -f *.o *~ core* *.stackdump $(YFILES:.y=_y_tab.[ch]) $(LFILES:.l=_lex_yy_i.h) $(TARGET) $(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))

install: $(TARGET)
	install -s -m 755 $(TARGET) $(BIN)
	install -m 755 -d $(DATA_DIR)
	install -m 755 -d $(FONT_DIR)
	cp data/fonts/* $(FONT_DIR)
	chmod 644 $(FONT_DIR)/*
	install -m 755 -d $(MODEL_DIR)
	cp data/models/* $(MODEL_DIR)
	chmod 644 $(MODEL_DIR)/*
	install -m 755 -d $(TEXTURE_DIR)
	cp data/textures/* $(TEXTURE_DIR)
	chmod 644 $(TEXTURE_DIR)/*

distclean:
	rm -f $(BIN)/$(TARGET)
	rm -fr $(DATA_DIR)

love:
	@echo that joke is old.
