#
# sketch: 3d line drawings from a simple scene description language
#
# (c) Gene Ressler
#
# makefile v0.03
#
CC = gcc -O1 -g
YACC = bison --defines --debug --report=all --yacc
LEX = flex

verdata=$(shell cat version.dat)
VER_MINOR=$(word 3,$(verdata))
VER_MAJOR=$(word 6,$(verdata))
VER_BUILD=$(word 9,$(verdata))
VER=$(VER_MAJOR).$(VER_MINOR).$(VER_BUILD)

ifeq ($(OS),Windows_NT)
EXE=sketch.exe
else
EXE=sketch
endif

DISTDIR=sketch-$(VER)
TARFILE=$(DISTDIR).tar
TARZIP=$(DISTDIR).tgz
ZIP=$(DISTDIR).zip
EXEZIP=sketchexe-$(VER).zip
UPLOAD=Upload

OBJECTS=bsp.o cmdline.o emit.o error.o expr.o geometry.o geomio.o global.o\
       langver.o lex.yy.o main.o memutil.o opts.o scene.o symbol.o y.tab.o

SOURCES=$(OBJECTS:%.o=%.c) sketch.l sketch.y

HEADERS=bsp.h cmdline.h dynarray.h emit.h error.h expr.h geometry.h geomio.h\
       global.h langver.h main.h memutil.h opts.h parse.h resource.h scene.h\
       symbol.h version.h y.tab.h

$(EXE) : $(OBJECTS)
       $(CC) -o $(EXE) $(OBJECTS) -lm

y.tab.c y.tab.h : sketch.y
       $(YACC) $<

lex.yy.c : sketch.l
       $(LEX) $<

version.h : version.dat FORCE
       perl makever.pl
FORCE:

PHONY : dist
dist : clean
       -rm $(TARZIP)
       -rm -rf $(DISTDIR)
       mkdir $(DISTDIR)
       perl distadmin.pl
       cp readme COPYING.txt makefile updates.htm makever.pl $(DISTDIR)
       echo dist=1 | cat version.dat - > $(DISTDIR)/version.dat
       cp $(SOURCES) $(DISTDIR)
       touch $(DISTDIR)/lex.yy.c $(DISTDIR)/y.tab.c
       cp $(HEADERS) $(DISTDIR)
       mkdir $(DISTDIR)/Data
       -cp Data/bunny.sk Data/buggy.sk Data/test.sk \
               Data/2tori.sk Data/hand.sk Data/cone.sk $(DISTDIR)/Data
       cp -r Doc $(DISTDIR)
       tar cfv $(TARFILE) $(DISTDIR)
       gzip $(TARFILE)
       mv -f $(TARFILE).gz $(TARZIP)
       -rm -f $(ZIP)
       zip -r $(ZIP) $(DISTDIR)
       -rm -f $(EXEZIP)
       cl -DYY_NEVER_INTERACTIVE=1 -Za -Ox -Fe$(EXE) *.c
       zip $(EXEZIP) $(EXE)
       -rm -rf $(UPLOAD)
       mkdir $(UPLOAD)
       mv $(EXEZIP) $(UPLOAD)
       mv $(ZIP) $(UPLOAD)
       mv $(TARZIP) $(UPLOAD)
       cp Doc/sketch.pdf $(UPLOAD)
       cp Doc/sketch.html $(UPLOAD)
       cp index.htm updates.htm $(UPLOAD)

PHONY : upload
upload :
       ftp -s:upload.ftp -d ftp.frontiernet.net

PHONY : clean
clean :
       -rm -f $(EXE) $(OBJECTS) *.obj core *~ *.stackdump y.output
       -rm -rf Debug Release
       -cd Doc; rm -f \
               sketch.ps sketch.dvi \
               sketch.aux sketch.cp sketch.cps sketch.fn sketch.ky \
               sketch.log sketch.op sketch.ops sketch.pg \
               sketch.sx sketch.sxs sketch.tmp sketch.toc sketch.tp \
               sketch.vr texput.log ex*\.pdf ex*\.eps ex*\.tex ex*\.txt \
               \#*\# *~
       -cd Data; rm -f *~ \#*\#

MANUAL=sketch
MANUALTEXI=$(MANUAL).texi

PHONY : realclean
realclean: clean
       cd Doc;\
       rm -f *~ $(MANUAL).dvi $(MANUAL).pdf $(MANUAL).ps $(MANUAL).html;\
       cd $(MANUAL); rm -f *; cd ..;\
       cd Data; rm -f *~; cd ..

PHONY : docs
docs :  clean $(EXE)
       cd Doc;\
       cmd /c "make.bat examples"

bsp.o: bsp.c bsp.h geometry.h dynarray.h error.h geomio.h
cmdline.o: cmdline.c cmdline.h langver.h error.h memutil.h symbol.h \
 scene.h opts.h dynarray.h geometry.h expr.h bsp.h global.h emit.h \
 parse.h version.h
emit.o: emit.c emit.h scene.h opts.h dynarray.h error.h geometry.h expr.h \
 bsp.h global.h langver.h memutil.h version.h
error.o: error.c error.h
expr.o: expr.c expr.h geometry.h dynarray.h error.h
geometry.o: geometry.c geometry.h dynarray.h error.h memutil.h
geomio.o: geomio.c geomio.h geometry.h dynarray.h error.h
global.o: global.c global.h opts.h dynarray.h error.h geometry.h \
 langver.h memutil.h
langver.o: langver.c langver.h error.h
lex.yy.o: lex.yy.c geometry.h dynarray.h error.h symbol.h scene.h opts.h \
 expr.h bsp.h global.h langver.h memutil.h parse.h y.tab.h
main.o: main.c main.h cmdline.h langver.h error.h memutil.h symbol.h \
 scene.h opts.h dynarray.h geometry.h expr.h bsp.h global.h parse.h \
 emit.h
memutil.o: memutil.c memutil.h
opts.o: opts.c opts.h dynarray.h error.h geometry.h
scene.o: scene.c scene.h opts.h dynarray.h error.h geometry.h expr.h \
 bsp.h global.h langver.h memutil.h emit.h
symbol.o: symbol.c error.h geometry.h dynarray.h symbol.h scene.h opts.h \
 expr.h bsp.h global.h langver.h memutil.h
y.tab.o: y.tab.c parse.h scene.h opts.h dynarray.h error.h geometry.h \
 expr.h bsp.h global.h langver.h memutil.h symbol.h