###          ###
### MAKEFILE ###
###          ###

RADPATH	    = ../rad

#
# -- Spaceball
#
# Preprad needs a spaceball to run.
# If you don't have a spaceball, Preprad will not compile
SBOPTION    = -DSPACEBALL
SB	    = -lspaceball

# Choose your library option, depending on your system version
#
# System 3.X
#
#OLD	= -DOLDSYS
#CCKR	=
#SYSLIB	= -limage -ll -lfm_s -lgl_s -lcps -lbsd -lfastm -lmalloc -lm
#
# System 4.X
#
OLD	=
CCKR	= -cckr
SYSLIB	= -limage -ll -lfm_s -lgl_s -lfastm -lm -lmalloc -lc_s


#
# -- Path for include files
#
IPATH  = -I. -I$(RADPATH)

#
# -- Internal variables
#
SHARED = $(RADPATH)/y.tab.o \
	 $(RADPATH)/ioread.o \
	 $(RADPATH)/misc.o \
	 $(RADPATH)/load_image.o \
	 $(RADPATH)/soft_zoom.o \
	 $(RADPATH)/free.o \
	 $(RADPATH)/forms.o \
	 $(RADPATH)/libforms.a

#
# -- Compilation Macros
#

CC     = cc
LD     = cc
LINT   = lint
YACC   = yacc
LEX    = lex
LFLAGS = -u  
CFLAGS = -O2 -prototypes $(CCKR) $(SBOPTION) $(OLD)
LIBS   = $(SHARED) \
	 $(SB) \
	 $(SYSLIB)

#
# -- Files to be updated
#
CFILES = init.c display.c ray.c select.c write.c object.c popup.c \
	 panels.c picture.c sbinteg.c
OFILES = ${CFILES:.c=.o}
XFILES = preprad

#
# -- Dependency rules
#
WHAT_I_WANT: FIRST_ACTION $(XFILES)
	@echo ""
	@echo " *************"
	@echo " *** DONE. ***"
	@echo " *************"
	@echo ""

FIRST_ACTION:
	@echo ""
	@echo " *******************"
	@echo " *** UPDATING... ***"
	@echo " *******************"

$(XFILES): $(OFILES) Makefile

depend:
	@echo ""
	@echo " *** UPDATING DEPENDENCIES... ***"
	@(sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \
	  $(CC) -M $(CFLAGS) $(IPATH) $(CFILES) | \
          egrep -v "/usr/include" | sort -u |\
          sed 's/\.\///; /\//d' \
	 ) >Makefile.new
	@cp Makefile Makefile.BAK
	@cp Makefile.new Makefile
	@rm -f Makefile.new

clean:
	@echo ""
	@echo " *** CLEANING UP... ***"
	-rm -f *.BAK *.CKP .emacs* a.out core

cleanall:
	@echo ""
	@echo " *** CLEANING UP... EVERYTHING... ***"
	-rm -f *.BAK *.CKP .emacs* a.out core
	-rm -f $(OFILES) $(XFILES)
	-make depend

#
# -- Default Rules and Suffixes
#
.SUFFIXES:
.SUFFIXES: .x .o .c .y .l

.c:
	@echo ""
	@echo " *** COMPILING AND LINKING $<... ***"
#	$(LINT) $(LFLAGS) $(IPATH) $<
	$(CC) $(CFLAGS) $(IPATH) $< -o $@ $(OFILES) $(LIBS)

.c.o:
	@echo ""
	@echo " *** COMPILING $<... ***"
#	$(LINT) $(LFLAGS) $(IPATH) $<
	$(CC) $(CFLAGS) $(IPATH) -c $<

#
# -- Non Automatic dependencies
#

y.tab.c:    gram.y lex.yy.c
	@echo ""
	@echo " *** YACCING gram.y... ***"
	$(YACC) gram.y 

lex.yy.c:   lex.l
	@echo ""
	@echo " *** LEXING lex.l... ***"
	$(LEX) lex.l

#
# -- Automatic dependencies
#
# DO NOT DELETE THIS LINE
display.o: display.h
display.o: preprad.h
display.o: display.c
init.o: init.h
init.o: preprad.h
init.o: ray.h
init.o: init.c
object.o: object.h
object.o: preprad.h
object.o: object.c
panels.o: panels.h
panels.o: picture.h
panels.o: panels.c
picture.o: picture.h
picture.o: picture.c
popup.o: panels.h
popup.o: picture.h
popup.o: popup.h
popup.o: preprad.h
popup.o: prtype.h
popup.o: popup.c
ray.o: display.h
ray.o: preprad.h
ray.o: ray.h
ray.o: ray.c
sbinteg.o: sbinteg.c
select.o: preprad.h
select.o: prtype.h
select.o: ray.h
select.o: select.h
select.o: select.c
write.o: preprad.h
write.o: write.h
write.o: write.c
