HOLDIR=/local/scratch/kxs/foo/export
MOSMLDIR=/local/scratch/kxs/143
HOLMAKE=${HOLDIR}/bin/Holmake.enquote
SIGOBJ=${HOLDIR}/sigobj

KERNDIRS=src/portableML src/0
LIBDIRS=src/bool src/basicHol90 src/goalstack src/num src/pair/src src/combin \
	src/list/src src/sum src/tree src/one src/option src/reduce/src \
	src/arith/src src/lite src/ho_match src/refute src/meson/src src/taut \
	src/hol88 src/ind_def/src src/IndDef src/datatype src/decision/src \
	src/q src/tfl/src src/unwind src/utils src/mutrec src/nested_rec \
	src/res_quan/theories src/res_quan/src src/set/src \
	src/pred_set/src src/string/theories src/string/src src/word/theories \
	src/word/src src/simp/src src/integer src/BoyerMoore src/hol90 \
	src/boss src/finite_map src/real

.PHONY : help sigobj

all: kernel quote-filter library sigobj help robdd

kernel:
	for x in $(KERNDIRS); do (cd $$x; ${HOLMAKE}); done

library: kernel
	for x in $(LIBDIRS); do (cd $$x; ${HOLMAKE}); done

sigobj: kernel library 
	(cd ${SIGOBJ}; rm -f *; \
	 for x in $(KERNDIRS) $(LIBDIRS);\
	  do for y in ../$$x/*;\
	      do case $$y in \
	            *.sig|*.ui|*.uo) ln -s $$y . ;; \
	            *) \
	         esac ; done;\
	  done)

# Making the help databases. This should look nicer when the help database
# stuff becomes part of the Mosml library.
help: library help/HOLbase

help/HOLbase: help/mk_dbs libdoc
	help/mk_dbs ${HOLDIR}/

help/mk_dbs: help/mk_dbs.uo help/src/Parsspec.uo help/src/Database.uo
	cd help; ${HOLDIR}/bin/mosmlc -I ${HOLDIR}/help/src \
			     -I ${MOSMLDIR}/src/compiler -o mk_dbs mk_dbs.uo
help/mk_dbs.uo: help/mk_dbs.sml help/src/Parsspec.ui help/src/Database.ui
	cd help; ${HOLDIR}/bin/mosmlc -I ${HOLDIR}/help/src \
			     -I ${MOSMLDIR}/src/compiler -c mk_dbs.sml

help/src/Parsspec.uo: help/src/Parsspec.sml
	cd help/src; ${HOLMAKE} -f Makefile
help/src/Database.uo: help/src/Database.sml
	cd help/src; ${HOLMAKE} -f Makefile
help/src/Parsspec.ui: help/src/Parsspec.sml
	cd help/src; ${HOLMAKE} -f Makefile
help/src/Database.ui: help/src/Database.sig
	cd help/src; ${HOLMAKE} -f Makefile

# The ".doc" files for the libraries (those that have them, that is).
libdoc:
	cp src/arith/help/entries/*.doc help/libDocfiles/arith
	cp src/hol88/help/entries/*.doc help/libDocfiles/hol88
	cp src/list/help/entries/*.doc help/libDocfiles/list
	cp src/pair/help/entries/*.doc help/libDocfiles/pair
	cp src/pred_set/help/entries/*.doc help/libDocfiles/pred_set
	cp src/reduce/help/entries/*.doc help/libDocfiles/reduce
	cp src/res_quan/help/entries/*.doc help/libDocfiles/res_quan
	cp src/set/help/entries/*.doc help/libDocfiles/set
	cp src/string/help/entries/*.doc help/libDocfiles/string
	cp src/taut/help/entries/*.doc help/libDocfiles/taut
	cp src/unwind/help/entries/*.doc help/libDocfiles/unwind
	cp src/utils/help/*.doc help/libDocfiles/utils
	cp src/word/help/entries/*.doc help/libDocfiles/word

help_clean:
	cd help; /bin/rm -f *.ui *.uo mk_dbs HOLdbase
	cd help/src; make clean
	rm -f help/libDocfiles/arith/*.doc
	rm -f help/libDocfiles/hol88/*.doc
	rm -f help/libDocfiles/list/*.doc
	rm -f help/libDocfiles/pair/*.doc
	rm -f help/libDocfiles/pred_set/*.doc
	rm -f help/libDocfiles/reduce/*.doc
	rm -f help/libDocfiles/res_quan/*.doc
	rm -f help/libDocfiles/set/*.doc
	rm -f help/libDocfiles/string/*.doc
	rm -f help/libDocfiles/taut/*.doc
	rm -f help/libDocfiles/unwind/*.doc
	rm -f help/libDocfiles/utils/*.doc
	rm -f help/libDocfiles/word/*.doc

clean: help_clean robdd_clean
	for x in $(KERNDIRS) $(LIBDIRS); do (cd $$x; ${HOLMAKE} clean); done
	cd ${HOLDIR}/src/quote-filter; make clean
	rm -f ${HOLDIR}/sigobj/*

cleanAll: help_clean robdd_clean
	for x in $(KERNDIRS) $(LIBDIRS); do (cd $$x; ${HOLMAKE} cleanAll); done
	cd ${HOLDIR}/src/quote-filter; make clean
	rm -f ${SIGOBJ}/*

quote-filter:
	cd ${HOLDIR}/src/quote-filter; make

robdd_clean:
	cd ${HOLDIR}/src/robdd/C/bdd11/src; make clean
	cd ${HOLDIR}/src/robdd; make clean
	cd ${HOLDIR}/sigobj/; /bin/rm -f Robdd.u?; /bin/rm -f robddLib.u?

robdd: robdd_clean
	cd ${HOLDIR}/src/robdd/C/bdd11; make
	cd ${HOLDIR}/src/robdd; make depend; make
	cd ${HOLDIR}/sigobj; ln -s ${HOLDIR}/src/robdd/Robdd.ui . ; \
	ln -s ${HOLDIR}/src/robdd/Robdd.uo . ; \
	ln -s ${HOLDIR}/src/robdd/robddLib.ui . ; \
	ln -s ${HOLDIR}/src/robdd/robddLib.uo .

