#
#  Make file: Makefile
#
#  Library:   mathbase.a (project Riemann math routines)
#
#  Contents:  This is the make file for the project Riemann math routines 
#	      library.  There are routines that work on expressions, 
#	      polynomials, equations, and vectors.  There are also routines
#	      that parse expressions and polynomials.  This make file also
#	      compiles three test programs: polytest, exprtest, and exprtest2.
#	      These test programs can be used to test the polynomial and 
#	      expression routines, especially the parsers.
#


# Defining S_DEBUG via "-DS_DEBUG" would enable debugging output from the 
#   expression simplifier

INCLDIR= ../include

CC=gcc
INCLUDE= -I$(INCLDIR)
DEBUG= -O
CFLAGS= $(DEBUG) $(INCLUDE)
YFLAGS= -d
LIB= -lm

# Object files which should appear in mathbase.a
MOBJ= power.o \
     vct_add.o vct_dotprod.o vct_negate.o vct_project.o \
     vct_reflect.o vct_sclrprod.o vct_sub.o vct_normalize.o \
     vct_iszero.o vct_crossprod.o vct_det.o vct_copy.o \
     poly_copy.o poly_print.o poly_partial.o poly_eval.o \
     eqn_eval.o eqn_copy.o eqn_gradient.o eqn_partial.o\
     expr_read.o expr_eval.o expr_print.o parse_expr.o expr_node.o \
     expr_partial.o expr_copy.o runge_kutta.o vvf_prod.o \
     poly_add.o poly_mult.o eval_par_eqn.o \
     poly_parse.o parse_expr_y.o parse_expr_l.o eqn_add.o eqn_mult.o \
     my_malloc.o

CSRC= power.c \
     vct_add.c vct_dotprod.c vct_negate.c vct_project.c vct_copy.c \
     vct_reflect.c vct_sclrprod.c vct_sub.c vct_normalize.c \
     vct_iszero.c vct_crossprod.c vct_det.c \
     poly_copy.c poly_print.c poly_partial.c poly_eval.c \
     eqn_eval.c eqn_copy.c eqn_gradient.c eqn_partial.c\
     expr_read.c expr_eval.c expr_print.c parse_expr.c expr_node.c \
     expr_partial.c expr_copy.c runge_kutta.c vvf_prod.c \
     poly_add.c poly_mult.c eval_par_eqn.c \
     poly_parse.c eqn_add.c eqn_mult.c poly_test.c expr_test.c expr_test2.c \
     my_malloc.c

SRC= $(CSRC) parse_expr_y.y parse_expr_l.l
HDR= parse_expr.h parse_poly.h

standard: mathbase.a exprtest exprtest2 polytest

mathbase.a: $(MOBJ)
	ar rc mathbase.a $(MOBJ)
	ranlib mathbase.a

parse_expr_y.h parse_expr_y.c: parse_expr_y.y
	yacc -d parse_expr_y.y; \
	sed -e 's/yy/ParseExpr_/g' y.tab.c > parse_expr_y.c; \
	sed -e 's/yy/ParseExpr_/g' y.tab.h > parse_expr_y.h; \
	rm y.tab.c y.tab.h

parse_expr_l.c: parse_expr_l.l
	lex parse_expr_l.l; \
	sed -e 's/yy/ParseExpr_/g' lex.yy.c > parse_expr_l.c; \
	rm lex.yy.c

parse_expr_y.y:	parse_expr.h
parse_expr_l.l:	parse_expr.h parse_expr_y.h

exprtest: expr_test.o mathbase.a
	$(CC) $(CFLAGS) expr_test.o mathbase.a -o exprtest $(LIB)

exprtest2: expr_test2.o mathbase.a
	$(CC) $(CFLAGS) expr_test2.o mathbase.a -o exprtest2 $(LIB)

polytest: poly_test.o mathbase.a
	$(CC) $(CFLAGS) poly_test.o mathbase.a -o polytest $(LIB)

lint: $(CSRC)
	lint $(INCLUDE) $(CSRC) > lint
	
tags:	$(SRC)
	ctags $(SRC)

clean:
	rm -f $(MOBJ) expr_test.o expr_test2.o poly_test.o core mathbase.a \
          exprtest exprtest2 polytest lint tags parse_expr_y.h y.tab.* \
          parse_expr_?.c lex.yy.c

maketd:
	maketd $(INCLUDE) $(CSRC)

# DO NOT DELETE THIS LINE - maketd DEPENDS ON IT
# Dependencies generated at: Tue Aug  1 20:23:22 EST 1989

eqn_add.o: ../include/master.h
eqn_add.o: eqn_add.c
eqn_copy.o: ../include/master.h
eqn_copy.o: eqn_copy.c
eqn_eval.o: ../include/master.h
eqn_eval.o: eqn_eval.c
eqn_gradient.o: ../include/master.h
eqn_gradient.o: eqn_gradient.c
eqn_mult.o: ../include/master.h
eqn_mult.o: eqn_mult.c
eqn_partial.o: ../include/master.h
eqn_partial.o: eqn_partial.c
eval_par_eqn.o: ../include/master.h
eval_par_eqn.o: eval_par_eqn.c
expr_copy.o: ../include/master.h
expr_copy.o: expr_copy.c
expr_eval.o: ../include/master.h
expr_eval.o: expr_eval.c
expr_node.o: ../include/master.h
expr_node.o: expr_node.c
expr_partial.o: ../include/master.h
expr_partial.o: expr_partial.c
expr_print.o: ../include/master.h
expr_print.o: expr_print.c
expr_read.o: ../include/master.h
expr_read.o: parse_expr.h
expr_read.o: expr_read.c
expr_test.o: ../include/master.h
expr_test.o: expr_test.c
expr_test2.o: ../include/master.h
expr_test2.o: expr_test2.c
my_malloc.o: ../include/master.h
my_malloc.o: my_malloc.c
parse_expr.o: ../include/master.h
parse_expr.o: parse_expr.h
parse_expr.o: parse_expr.c
poly_add.o: ../include/master.h
poly_add.o: poly_add.c
poly_copy.o: ../include/master.h
poly_copy.o: poly_copy.c
poly_eval.o: ../include/master.h
poly_eval.o: poly_eval.c
poly_mult.o: ../include/master.h
poly_mult.o: poly_mult.c
poly_parse.o: ../include/master.h
poly_parse.o: ../include/parsepoly.h
poly_parse.o: poly_parse.c
poly_partial.o: ../include/master.h
poly_partial.o: poly_partial.c
poly_print.o: ../include/master.h
poly_print.o: poly_print.c
poly_test.o: ../include/master.h
poly_test.o: poly_test.c
power.o: ../include/master.h
power.o: power.c
runge_kutta.o: ../include/master.h
runge_kutta.o: runge_kutta.c
vct_add.o: ../include/master.h
vct_add.o: vct_add.c
vct_copy.o: ../include/master.h
vct_copy.o: vct_copy.c
vct_crossprod.o: ../include/master.h
vct_crossprod.o: vct_crossprod.c
vct_det.o: ../include/master.h
vct_det.o: vct_det.c
vct_dotprod.o: ../include/master.h
vct_dotprod.o: vct_dotprod.c
vct_iszero.o: ../include/master.h
vct_iszero.o: vct_iszero.c
vct_negate.o: ../include/master.h
vct_negate.o: vct_negate.c
vct_normalize.o: ../include/master.h
vct_normalize.o: vct_normalize.c
vct_project.o: ../include/master.h
vct_project.o: vct_project.c
vct_reflect.o: ../include/master.h
vct_reflect.o: vct_reflect.c
vct_sclrprod.o: ../include/master.h
vct_sclrprod.o: vct_sclrprod.c
vct_sub.o: ../include/master.h
vct_sub.o: vct_sub.c
vvf_prod.o: ../include/master.h
vvf_prod.o: vvf_prod.c

# DO NOT ADD ANYTHING HERE - WILL GO AWAY

