#  Compiling gcl
# select a machine-type from ./MACHINES

# ./add-defs machine-type
# make

# For more details see README

PREFIX_DIR=/usr/local
# This would cause make install to create /usr/local/bin/gcl and
# /usr/local/lib/gcl-1-??/* with some basic files.
##########################

# begin makedefs
GCLDIR=/d/wfs/gcl-2.0
SHELL=/bin/sh
MACHINE=sun4
TK_LIBRARY=/usr/local/lib/tk
X11_INCLUDE_DIR=-I/usr/openwin/include
TK_INCLUDE_DIR=-I/public/include/tcl
TK_LIBS=-L/usr/local/lib -ltk
TCL_LIBS=-L/usr/local/lib -ltcl
X11_LIBS=-L/usr/openwin/lib -lX11
EMACS_SITE_LISP=/usr/local/lib/emacs/site-lisp
INFO_DIR=/usr/local/info

LBINDIR=/usr/local/bin
OFLAG	=  -O
LIBS	= -lm 

X11_LIBS=-L/usr/openwin/lib -lX11
X11_INCLUDE_DIR=-I/usr/openwin/include


# the commercial (for money) C compiler has never been able
# to compile akcl/gcl correctly.  Perhaps it does not like the idea
# that this is free software.   However the standard C compiler is ok.

#CC = cc  -DVOL=  -I$(GCLDIR)/o -Bstatic -temp=. -pipe
#CC = cc  -DVOL=  -I$(GCLDIR)/o -Bstatic  -pipe
ODIR_DEBUG=-O4 

#gcc 2.1 and 2.2 compile gcl correctly as far as I have been able to determine.
#gcc 2.3.3 does not compile gcl correctly
# gcc 2.5.7 is correct as far as I can tell
# and gcl compiled with gcc runs our tests 15% faster than with cc..
CC = gcc -I${GCLDIR}/o -static -DVOL=volatile -pipe -fsigned-char

AS=as -P

CFLAGS	= -c $(DEFS)  -I../h

MAIN    = ../o/main.o

MPFILES=$(MPDIR)/mpi-sparc.o $(MPDIR)/sparcdivul3.o $(MPDIR)/libmport.a
#MPFILES=${MPDIR}/mpi.o ${MPDIR}/libmport.a

RSYM	= rsym
SFASL	= $(ODIR)/sfasl.o

# This function will be run before dumping.
# When using SFASL it is good to have (si::build-symbol-table)
INITFORM=(si::build-symbol-table)



# Use symbolic links
SYMB=-s
# the  make to use for saved_kcp the profiler.
GCP=gcp-sun

NULLFILE = ../h/secondary_sun_magic

# end makedefs









BINDIR	= bin
HDIR	= h/
CDIR	= c
ODIR	= o
LSPDIR	= lsp
CMPDIR	= cmpnew
PORTDIR	= unixport

all:   ${HDIR}cmpinclude.h
	(cd $(BINDIR); make all)
	(cd mp ; make all)
	rm -f o/cmpinclude.h ; ln h/cmpinclude.h o
	(cd $(ODIR); make all)
	(cd $(LSPDIR); make all)
	(cd $(CMPDIR); make all)
	(cd $(PORTDIR); make saved_gcl)
	make command

# 	After making successfully send in a notification to
#	gcl@nicolas.ma.utexas.edu.   This is extremely helpful in
#	tracking on which machines and OS versions there are problems.
#	This will be done automatically by the  xbin/notify line.
	(cd  cmpnew ; make collectfn.o)
	(cd lsp ; make info.o)
	@- if  [ -f cmpnew/collectfn.o ]  ; \
	then echo "Make of GCL `cat majvers`.`cat minvers` completed." ; \
	./xbin/notify "CC=${CC}" ; \
	else echo "The new image failed to compile collectfn.lsp" ;fi
	if [ "${X11_LIBS}" != "-Lunknown -lX11" ] ; then if [ "${TK_LIBS}" != "-Lunknown -ltk" ]; \
	then (cd gcl-tk ; make) ; fi ; fi
	(cd info ; make)


command:
	rm -f bin/gcl xbin/gcl
	make install-command "INSTALL_LIB_DIR=${GCLDIR}" "PREFIX_DIR=${GCLDIR}"
	(cd xbin ; ln -s ../bin/gcl .)

merge:
	${CC} -o merge merge.c

LISP_LIB=cmpnew/collectfn.o lsp/gprof.lsp lsp/info.o lsp/profile.lsp gcl-tk/tkl.o  gcl-tk/tinfo.o gcl-tk/demos/*.lsp gcl-tk/demos/*.lisp gcl-tk/demos/*.o

install-command:
	(echo "#!/bin/sh" ; \
	echo exec ${INSTALL_LIB_DIR}/unixport/saved_gcl \\ ; \
	echo '   -dir' ${INSTALL_LIB_DIR}/unixport/ \\ ; \
	echo '   -libdir' ${INSTALL_LIB_DIR}/ \\ ; \
	echo '   -eval '\''(setq si::*allow-gzipped-file* t)'\' \\ ;\
	echo '   -eval '\''(setq si::*tk-library* '\"${TK_LIBRARY}\"')'\' \\;\
	echo '     '\"\$$@\" ) > ${PREFIX_DIR}/bin/gcl;
	echo '#' other options: -load "/tmp/foo.o" -load "jo.lsp" -eval '"(joe 3)"' >> ${PREFIX_DIR}/bin/gcl
	chmod a+x ${PREFIX_DIR}/bin/gcl

install: 
	make install1 "INSTALL_LIB_DIR=${PREFIX_DIR}/lib/gcl-`cat majvers`.`cat minvers`" "PREFIX_DIR=${PREFIX_DIR}"
INSTALL_LIB_DIR=
install1:
	-if [ -d ${PREFIX_DIR}/lib ] ;then true; else mkdir ${PREFIX_DIR}/lib ; fi
	-if [ -d ${PREFIX_DIR}/bin ] ;then true; else mkdir ${PREFIX_DIR}/bin ; fi
	-if [ -d ${INSTALL_LIB_DIR} ] ; then true; else mkdir ${INSTALL_LIB_DIR} ;fi
	make install-command "INSTALL_LIB_DIR=${INSTALL_LIB_DIR}" "PREFIX_DIR=${PREFIX_DIR}"
	rm -f ${PREFIX_DIR}/bin/gcl.exe
	tar cvf - unixport/saved_gcl info/*info* doc/*.el ${LISP_LIB} \
    	gcl-tk/gcl.tcl gcl-tk/gcltkaux  |  (cd ${INSTALL_LIB_DIR} ;tar xvf -)
	ln ${SYMB} ${INSTALL_LIB_DIR}/unixport/saved_gcl \
	 ${PREFIX_DIR}/bin/gcl.exe
	-cat gcl-tk/gcltksrv | \
	sed -e "s:DIR=.*:DIR=${INSTALL_LIB_DIR}/gcl-tk:g"  \
	-e "s:TK_LIBRARY=.*:TK_LIBRARY=${TK_LIBRARY}:g" > \
	${INSTALL_LIB_DIR}/gcl-tk/gcltksrv
	-chmod a+x ${INSTALL_LIB_DIR}/gcl-tk/gcltksrv
	-(cd ${INSTALL_LIB_DIR}/gcl-tk/demos ; \
	-echo '(load "../tkl.o")(TK::GET-AUTOLOADS (directory "*.lisp"))' | ${PREFIX_DIR}/bin/gcl)
	(cd info ; make ; make install)

clean:
	(cd $(BINDIR); make clean)
	(cd mp ; make clean)
	(cd $(ODIR); make clean)
	(cd $(LSPDIR); make clean)
	(cd $(CMPDIR); make clean)
	(cd $(PORTDIR); make clean)
	(cd gcl-tk ; make clean)
	


CMPINCLUDE_FILES=${HDIR}cmpincl1.h ${HDIR}compbas.h ${HDIR}enum.h ${HDIR}object.h ${HDIR}vs.h \
	${HDIR}bds.h ${HDIR}frame.h \
	${HDIR}lex.h ${HDIR}eval.h    ${HDIR}funlink.h \
	${HDIR}att_ext.h ${HDIR}compbas2.h ${HDIR}/compat.h ${HDIR}/cmponly.h

OTHERS=${HDIR}notcomp.h ${HDIR}rgbc.h ${HDIR}stacks.h 

${HDIR}cmpinclude.h: ${CMPINCLUDE_FILES} ${HDIR}config.h
	cat ${HDIR}config.h | sed -e "1,/Begin for cmpincl/d" \
		-e "/End for cmpinclude/,50000d" > tmpx
	cat ${CMPINCLUDE_FILES} >> tmpx
	./xbin/move-if-changed mv tmpx h/cmpinclude.h
	./xbin/move-if-changed ln h/cmpinclude.h o/cmpinclude.h

go:
	mkdir go
	(cd go ; ln -s ../o/makefile ../o/*.o ../o/*.c ../o/*.d ../o/*.ini  .)
	(cd go ; make  go)

tar:
	rm -f gcl-`cat majvers`.`cat minvers`
	xbin/distribute ../ngcl-`cat majvers`.`cat minvers`-beta.tgz

kcp:
	(cd go ; make  "CFLAGS = -I../h -pg  -c -g ")
	(cd unixport ; make gcp)
