### lisp executable
LISP = lisp
### compiled file extension
FAS = x86f
#FAS = sparcf
### C compiler/flags
CC = gcc
CFLAGS = -Wall -O
### OpenGL and X11 libraries; a list of strings that will be passed to ld
### through #'LOAD-FOREIGN
#LIBS = "-L/usr/X11/lib" "-Xext" "-L/usr/local/lib" "-lMesaGL" "-lMesaGLU" "-lglut"
LIBS = "-L/usr/X11/lib" "-lGL" "-lGLU" "-lglut"
#LIBS = "-L/usr/openwin/lib" "-lXext" "-lXi" "-lGL" "-lGLU" "-lglut"

#------- nothing under this line should be necessary to change -------
CDIR = `pwd`

all: run-lisp gl.${FAS} xlib.${FAS} defsystem.lisp

defsystem.lisp:
	rm -f defsystem.lisp
	echo ';; defsystem.lisp -- generated by Makefile' > defsystem.lisp
	echo >> defsystem.lisp
	echo '(defun load-xlib ()' >> defsystem.lisp
	echo ' (load-foreign "'${CDIR}'/xlib-c.o" :libraries (list ${LIBS}))' >> defsystem.lisp
	echo ' (load "'${CDIR}'/cmucl-interface-defpackage")' >> defsystem.lisp
	echo ' (load "'${CDIR}'/cmucl-interface")' >> defsystem.lisp
	echo ' (load "'${CDIR}'/xlib-defpackage")' >> defsystem.lisp
	echo ' (load "'${CDIR}'/xlib"))' >> defsystem.lisp
	echo >> defsystem.lisp
	echo '(defun load-gl ()' >> defsystem.lisp
	echo ' (load-foreign "'${CDIR}'/gl-c.o" :libraries (list ${LIBS}))' >> defsystem.lisp
	echo ' (load "'${CDIR}'/cmucl-interface-defpackage")' >> defsystem.lisp
	echo ' (load "'${CDIR}'/cmucl-interface")' >> defsystem.lisp
	echo ' (load "'${CDIR}'/gl-defpackage")' >> defsystem.lisp
	echo ' (load "'${CDIR}'/gl"))' >> defsystem.lisp
	${LISP} -eval '(progn (compile-file "defsystem.lisp") (quit))'

load-libs.lisp:
	rm -f load-libs.lisp
	echo ";; load-libs.lisp -- generated by Makefile" > load-libs.lisp
	echo '(load-foreign "'${CDIR}'/gl-c.o" :libraries (list ${LIBS}))' >> load-libs.lisp
	echo '(load-foreign "'${CDIR}'/xlib-c.o" :libraries (list ${LIBS}))' >> load-libs.lisp
	${LISP} -eval '(progn (compile-file "load-libs.lisp") (quit))'

run-lisp:
	rm -f run-lisp
	echo '#!/bin/sh' > run-lisp
	echo "CDIR=${CDIR}" >> run-lisp
	echo '${LISP} -load $$CDIR/load-libs -load $$CDIR/cmucl-interface-defpackage -load $$CDIR/cmucl-interface -load $$CDIR/gl-defpackage -load $$CDIR/gl -load $$CDIR/xlib-defpackage -load $$CDIR/xlib $$*' >> run-lisp
	chmod 755 run-lisp

gl-c.o: gl-c.c
	${CC} ${CFLAGS} -c gl-c.c

xlib-c.o: xlib-c.c
	${CC} ${CFLAGS} -c xlib-c.c

cmucl-interface-defpackage.${FAS}: cmucl-interface-defpackage.lisp
	${LISP} -eval \
	'(progn (compile-file "cmucl-interface-defpackage.lisp") (quit))'

cmucl-interface.${FAS}: cmucl-interface.lisp cmucl-interface-defpackage.${FAS}
	${LISP} -load cmucl-interface-defpackage \
	-eval '(progn (compile-file "cmucl-interface.lisp" :byte-compile nil) (quit))'

gl-defpackage.${FAS}: gl-defpackage.lisp cmucl-interface-defpackage.${FAS}
	${LISP} -load cmucl-interface-defpackage \
	-eval '(progn (compile-file "gl-defpackage.lisp") (quit))'

gl.${FAS}: gl.lisp gl-defpackage.${FAS} cmucl-interface.${FAS} gl-c.o \
		xlib-c.o load-libs.lisp
	${LISP} -load cmucl-interface-defpackage -load cmucl-interface \
	-load gl-defpackage -load load-libs \
	-eval '(progn (compile-file "gl.lisp" :byte-compile nil) (quit))'

xlib-defpackage.${FAS}: xlib-defpackage.lisp cmucl-interface-defpackage.${FAS}
	${LISP} -load cmucl-interface-defpackage \
	-eval '(progn (compile-file "xlib-defpackage.lisp") (quit))'

xlib.${FAS}: xlib.lisp xlib-defpackage.${FAS} cmucl-interface.${FAS} \
		gl-c.o xlib-c.o load-libs.lisp
	${LISP} -load cmucl-interface-defpackage -load cmucl-interface \
	-load xlib-defpackage -load load-libs \
	-eval '(progn (compile-file "xlib.lisp" :byte-compile nil) (quit))'

clean:
	rm -f *.o *.${FAS} *~ load-libs.lisp run-lisp defsystem.lisp

