
.SUFFIXES: .o .c .lisp

SHELL	= sh
GCLDIR	= /usr/lib/gcl-1.1
MAXDIR	= /home/eloranta/maxima
# for installation
# for the shell script to invoke saved_maxima 
LBINDIR	= /usr/local/bin
# for the info files.
EMACS_INFO_DIR = /usr/local/info
EMACS_LISP_DIR = /usr/local/emacs/lisp


SRC	= .
PORTDIR	=$(GCLDIR)/unixport
MAXIMA	= ./saved_maxima
LISP	= /usr/bin/gcl
#       sloop.o is already in our kcl. otherwise it goes here.

MACROS = lmdcls.o letmac.o kclmac.o clmacs.o commac.o mormac.o \
	compat.o defopt.o defcal.o maxmac.o mopers.o \
	mforma.o mrgmac.o procs.o rzmac.o strmac.o \
	displm.o ratmac.o mhayat.o \
	numerm.o transm.o optimize.o 

OBJS   = opers.o utils.o sumcon.o sublis.o runtim.o \
	serror.o merror.o mformt.o mutils.o \
	outmis.o ar.o misc.o comm.o comm2.o mlisp.o \
	mmacro.o buildq.o simp.o float.o csimp.o \
	csimp2.o zero.o logarc.o rpart.o macsys.o mload.o \
	suprv1.o dskfn.o lesfac.o \
	factor.o algfac.o nalgfa.o ufact.o result.o \
	rat3a.o rat3b.o rat3d.o rat3c.o rat3e.o \
	nrat4.o ratout.o  transl.o transs.o \
	trans1.o trans2.o trans3.o trans4.o \
	trans5.o transf.o troper.o trutil.o trmode.o trdata.o \
	trpred.o transq.o acall.o \
	fcall.o evalw.o trprop.o mdefun.o bessel.o ellipt.o \
	numer.o intpol.o rombrg.o \
	nparse.o displa.o nforma.o ldisp.o \
	grind.o spgcd.o ezgcd.o option.o macdes.o \
	inmis.o db.o compar.o askp.o sinint.o \
	sin.o risch.o hayat.o defint.o residu.o trigi.o \
	trigo.o trgred.o specfn.o mat.o matrix.o \
	sprdet.o newinv.o linnew.o newdet.o \
	schatc.o matcom.o matrun.o nisimp.o tlimit.o \
	limit.o solve.o psolve.o algsys.o \
	polyrz.o cpoly.o mtrace.o scs.o asum.o fortra.o \
	optim.o marray.o mdot.o irinte.o \
	series.o numth.o laplac.o pade.o homog.o combin.o \
	mstuff.o ratpoi.o pois2.o pois3.o 


TRANSLATED = nusum.o desoln.o elim.o trgsmp.o ode2.o invert.o plot.o

OTHERS 	= hypgeo.o hyp.o

all:   $(MACROS) $(OBJS)  saved_maxima $(OTHERS) translated

sysinit.o maxobjs: sysinit.lsp
	echo '(load "sysdef.lisp")(compile-file "sysinit.lsp" )' | $(LISP)

# make an init_maxima.lsp in the PORTDIR
init: $(PORTDIR)/init_gcl.lsp
	cat $(PORTDIR)/init_gcl.lsp | sed -e \
	"s;system-init(si::chdir \"`pwd`\")(load \"maxima-package.lisp\")(load \"sysinit.o\")(user::user-init)(load \"init_max1.lisp\")(si::save-system \"saved_maxima\")g" \
	> init_maxima.lsp
	- if cmp init_maxima.lsp $(PORTDIR)/init_maxima.lsp > /dev/null ;\
	then true; else  cp init_maxima.lsp $(PORTDIR)/init_maxima.lsp ;fi
	
saved_maxima: maxobjs sysinit.o $(OBJS) $(MACROS) version.lisp
	make init
	(cd $(PORTDIR) ; make saved_maxima "SYSTEM=maxima" "SYSTEM_OBJS=`cat $(MAXDIR)/src/maxobjs`" "PORTDIR=$(PORTDIR)")

version.lisp: ../majvers  ../minvers
	echo "(setf (get :maxima :version) (quote (" `cat ../majvers` `cat ../minvers` \"`date`\" ")))" > version.lisp

PREAMBLE='(load "sysdef.lisp")' \
	'(load "SYS-PROCLAIM.lisp")' \
	'(proclaim (quote (optimize (safety 0) (speed 0) (space 0))))' \
	'\#+gcl(setq compiler::*ifuncall* t)'


$(MACROS):  
	echo $(PREAMBLE)\
	'(proclaim (quote (optimize (safety 2) (speed 2) (space 2))))' \
	'(make::make :maxima-macros :compile t)' | $(LISP)

$(TRANSLATED) $(OTHERS):	saved_maxima
	./saved_maxima -compile  $*.lisp 

translated:	$(TRANSLATED) $(OTHERS)

sloop.o make.o:
	 $(SAVEDKCLDIR)/saved_kcl $(SAVEDKCLDIR) $*.lisp $* S1000

# This would cause recompiling of all objects if one macro file changed.
# $(OBJS):: saved_max_compile
#	rm $@

.lisp.o:
	echo $(PREAMBLE)'(make::make :maxima-macros)(compile-file '\"$*.lisp\"'#+gcl :system-p #+gcl t)' | ${LISP}
	
# c files should not get left but they're sometimes there.

.c.o:
	echo $(PREAMBLE)'(make::make :maxima-macros)(compile-file '\"$*.lisp\"'#+gcl :system-p #+gcl t)' | ${LISP}

all-clean:
	rm -f $(TRANSLATED) $(OBJS) $(MACROS) core saved_maxima
	rm -f *.o

clean:
	rm -f  $(OBJS) $(MACROS) core saved_max_compile make.o $(PORTDIR)/raw_maxima


install:
	echo '#!/bin/sh' > $(LBINDIR)/maxima	
	echo $(MAXDIR)/src/saved_maxima $(MAXDIR)/src/ $@ >> $(LBINDIR)/maxima
	chmod a+x $(LBINDIR)/maxima
	cp ../doc/*.el $(EMACS_LISP_DIR)
	if [ -d info ] ; then cp info/*.info* info/*.info*gz $(EMACS_INFO_DIR);fi
	echo make sure to add a maxima entry in $(EMACS_INFO_DIR)/info.dir

eliminate-source:
	rm -f `echo  $(OBJS) | sed -e "s:[.]o:.lisp"`
	rm -f $(OBJS) sysdef.lisp make.lisp
	rm -f info/*.texi
	rm -f $(PORTDIR)/raw_maxima

tags:
	@echo etags $(OTHERS) $(TRANSLATED) $(OBJS) $(MACROS) | sed -e "s:\.o:.lisp:g" |sh

proclaims:
	echo "(setq user::lisp-dir \"$(KCLDIR)\")" \
	'(load "makepro.lisp")' | $(KCLDIR)/xbin/kcl
	cat var-proclaims.lisp >> SYS-PROCLAIM.lisp





	
