CC = gcc
CPLUSPLUS = g++
MV = /bin/mv
RM = /bin/rm -f
ZIP = /usr/bin/zip
GZIP = /bin/gzip
TAR = /bin/tar
OPENSCAD = openscad

CFLAGS = -O3 -Wall -W -Wextra -ansi -pedantic
CPPFLAGS = -O3 -Wall -W -Wextra -ansi -pedantic
LIBS = -lm
MADEFILES = render table font.scad table.scad 
MADESTLS =  assembly3.stl assembly4.stl lid3.stl lid4.stl cradle3.stl cradle4.stl \
            rod0.stl rod1.stl rod2.stl rod3.stl rod4.stl \
            rod5.stl rod6.stl rod7.stl rod8.stl rod9.stl 
PACKAGEFILES = Makefile README fontdesc.txt main.scad assembly3.scad assembly4.scad \
               render.C table.c lid.scad cradle.scad rod.scad HISTORY
RODBASE = 10
DIGALPH = 0123456789
CARRYALPH = ' ABCDEFGHIJKLMNOPQRSTUVWXYZ*' 
RENDERARGS = 0.375 8
# The following is higher-resolution but slower to render in OpenSCAD.
# RENDERARGS = 0.375 100
FONTFILE = fontdesc.txt

all: $(MADEFILES)

stl: $(MADESTLS)

clean:
	$(RM) $(MADEFILES) $(MADESTLS)

zip: $(PACKAGEFILES)
	$(RM) slonimsky-rods.zip
	$(ZIP) slonimsky-rods.zip $(PACKAGEFILES)

tar: $(PACKAGEFILES)
	$(RM) slonimsky-rods.tar slonimsky-rods.tar.gz slonimsky-rods.tgz
	$(TAR) cvf slonimsky-rods.tar $(PACKAGEFILES)
	$(GZIP) slonimsky-rods.tar
	$(MV) slonimsky-rods.tar.gz slonimsky-rods.tgz

table: table.c
	$(CC) $(CFLAGS) -o table table.c $(LIBS)

render: render.C
	$(CPLUSPLUS) $(CPPFLAGS) -o render render.C $(LIBS)

# Output PBM files for characters in fonts.
# Names of PBM files will be outA for A, outB for B, etc.
pbm: render $(FONTFILE)
	./render $(RENDERARGS) out <$(FONTFILE)

font.scad: render $(FONTFILE)
	./render $(RENDERARGS) <$(FONTFILE) >font.scad

table.scad: table
	./table $(RODBASE) $(DIGALPH) $(CARRYALPH) >table.scad

# Directions for making STL files

assembly3.stl: assembly3.scad font.scad table.scad main.scad
	$(OPENSCAD) -o assembly3.stl assembly3.scad

assembly4.stl: assembly4.scad font.scad table.scad main.scad
	$(OPENSCAD) -o assembly4.stl assembly4.scad

cradle3.stl: cradle.scad font.scad table.scad main.scad
	$(OPENSCAD) -o cradle3.stl -D numrods=3 cradle.scad

cradle4.stl: cradle.scad font.scad table.scad main.scad
	$(OPENSCAD) -o cradle4.stl -D numrods=4 cradle.scad

lid3.stl: lid.scad font.scad table.scad main.scad
	$(OPENSCAD) -o lid3.stl -D numrods=3 lid.scad

lid4.stl: lid.scad font.scad table.scad main.scad
	$(OPENSCAD) -o lid4.stl -D numrods=4 lid.scad

rod0.stl: rod.scad font.scad table.scad main.scad
	$(OPENSCAD) -o rod0.stl -D whichrod=0 rod.scad

rod1.stl: rod.scad font.scad table.scad main.scad
	$(OPENSCAD) -o rod1.stl -D whichrod=1 rod.scad

rod2.stl: rod.scad font.scad table.scad main.scad
	$(OPENSCAD) -o rod2.stl -D whichrod=2 rod.scad

rod3.stl: rod.scad font.scad table.scad main.scad
	$(OPENSCAD) -o rod3.stl -D whichrod=3 rod.scad

rod4.stl: rod.scad font.scad table.scad main.scad
	$(OPENSCAD) -o rod4.stl -D whichrod=4 rod.scad

rod5.stl: rod.scad font.scad table.scad main.scad
	$(OPENSCAD) -o rod5.stl -D whichrod=5 rod.scad

rod6.stl: rod.scad font.scad table.scad main.scad
	$(OPENSCAD) -o rod6.stl -D whichrod=6 rod.scad

rod7.stl: rod.scad font.scad table.scad main.scad
	$(OPENSCAD) -o rod7.stl -D whichrod=7 rod.scad

rod8.stl: rod.scad font.scad table.scad main.scad
	$(OPENSCAD) -o rod8.stl -D whichrod=8 rod.scad

rod9.stl: rod.scad font.scad table.scad main.scad
	$(OPENSCAD) -o rod9.stl -D whichrod=9 rod.scad
