--- Makefile.orig	Sat Jun 26 02:43:06 2004
+++ Makefile	Wed Oct 31 13:51:36 2007
@@ -6,25 +6,33 @@
 ##############################################################################
 # These are the locations for executables, heap images and library files
 ##############################################################################
-PREFIX     = /home/berlea/xmlsoft
 FXP_BINDIR = ${PREFIX}/bin
-FXP_LIBDIR = ${PREFIX}/fxp
+FXP_LIBDIR = ${PREFIX}/lib/sml-fxp
+FXP_DOCDIR = ${PREFIX}/share/doc/fxp
 
 ##############################################################################
 # The path where the SML-NJ binaries are located, and the name of the 
 # SML-NJ executable with the Compilation manager built-in. If sml is in 
 # your PATH at execution time, you fon't need the full path here.  
 ##############################################################################
-SML_BINDIR = /usr/share/smlnj/bin
+SML_BINDIR = ${PREFIX}/bin
 SML_EXEC   = ${SML_BINDIR}/sml
 ##############################################################################
 # No need to change this for SML-NJ 110.0.6. For earlier or working versions  
 # 110.19 you might have to use the second or third line. This is the
 # compilation manager function for making with a named description file. 
 ##############################################################################
-SML_MAKEDEF= val make = CM.make'
-#SML_MAKEDEF= val make = CM.make
-#SML_MAKEDEF= fun make x = CM.make'{force_relink=true, group=x}
+.if defined(SMLNJ_DEVEL) && ${SMLNJ_DEVEL} == "yes"
+SML_MAKEDEF = val make = CM.make
+SML_STABILIZEDEF = val stabilize = CM.stabilize true
+.else
+SML_MAKEDEF = val make = CM.make'
+SML_STABILIZEDEF = val stabilize = (fn n=> CM.stabilize' (n, true))
+.endif
+
+MLTON=${PREFIX}/bin/mlton
+HEAP2EXEC=${PREFIX}/bin/heap2exec
+HEAP_SUFFIX=x86-bsd
 
 ##############################################################################
 # These should be fine on most unix machines
@@ -38,37 +46,48 @@
 #buggy in cygwin
 #MKDIRHIER = mkdirhier 
 MKDIRHIER = mkdir -p
+MV	  = mv
 
 ##############################################################################
 # nothing to change below this line
 ##############################################################################
 SRC         = src
 DOC         = doc
-FXLIB_PRUNE = \( -name CM -o -name CVS -o -name Apps \)
+FXLIB_PRUNE = \( -name CM -o -name .cm -o -name CVS -o -name Apps \)
 
-all: fxp.sh images
+all: fxp.sh images stabilize
 
 arch.os:
-	if test -s ${SML_BINDIR}/.arch-n-opsys; then\
-            ${SML_BINDIR}/.arch-n-opsys | \
-            ${SED} -e 's/^.*HEAP_SUFFIX=\(.*\)$$/\1/' > .arch-opsys;\
-        else \
-            echo "ARCH=x86; OPSYS=win32; HEAP_SUFFIX=x86-win32" | \
-            ${SED} -e 's/^.*HEAP_SUFFIX=\(.*\)$$/\1/' > .arch-opsys;\
-        fi
+	echo ${HEAP_SUFFIX} > .arch-opsys
 
 fxp.sh: Makefile arch.os
-	${RM} fxp.sh
-	echo "#!/bin/sh -f" > fxp.sh
-	echo >> fxp.sh
-	echo "SML_BINDIR=${SML_BINDIR}" >> fxp.sh
-	echo "FXP_LIBDIR=${FXP_LIBDIR}" >> fxp.sh
-	cat fxp.sh.in >> fxp.sh
-
-image.prog:
+	@${RM} fxp.sh
+	@echo "#!/bin/sh -f" > fxp.sh
+	@echo >> fxp.sh
+	@echo "SML_BINDIR=${SML_BINDIR}" >> fxp.sh
+	@echo "FXP_LIBDIR=${FXP_LIBDIR}" >> fxp.sh
+	@cat fxp.sh.in >> fxp.sh
+
+stabilize:
+	#see inst.fxlib for old sml-nj
+.if defined(STABILIZE) && defined(SMLNJ_DEVEL) && ${SMLNJ_DEVEL} == "yes"
+	@echo "Stabilizing the library..."
+	echo "${SML_STABILIZEDEF}; stabilize \"src/fxlib.cm\"; \
+	      OS.Process.exit OS.Process.success;" | ${SML_EXEC}
+.endif
+
+image.prog: fxp.sh
+.if defined(MLTON_BUILD)
+	@echo "Building the ${PROG_NAME} binary..."
+	${MLTON} -output ${SRC}/${PROG_NAME} ${SRC}/${PROG_CM:S/cm$/mlb/}
+.else
 	@echo "Creating the ${PROG_NAME} heap image..."
 	echo "${SML_MAKEDEF}; make \"${SRC}/${PROG_CM}\"; \
 	      SMLofNJ.exportFn(\"${SRC}/_${PROG_NAME}\",${PROG_FUN})" | ${SML_EXEC}
+.if defined(SMLNJ_DEVEL) && ${SMLNJ_DEVEL} == "yes"
+	${HEAP2EXEC} ${SRC}/_${PROG_NAME}.${HEAP_SUFFIX} ${SRC}/${PROG_NAME}
+.endif
+.endif
 
 image.fxlib:
 image.fxp:
@@ -92,13 +111,15 @@
 	test -d ${FXP_LIBDIR} || ${MKDIRHIER} ${FXP_LIBDIR}	
 
 inst.prog: inst.dirs fxp.sh arch.os
+.if defined(NO_HEAP2EXEC)
 	${RM} ${FXP_BINDIR}/${PROG_NAME} ${FXP_BINDIR}/fxp.sh \
 	      ${FXP_LIBDIR}/_${PROG_NAME}.`cat .arch-opsys`
-	${COPY} fxp.sh ${FXP_BINDIR}
-	${CHMOD} 755 ${FXP_BINDIR}/fxp.sh
+	${BSD_INSTALL_SCRIPT} fxp.sh ${FXP_BINDIR}/
 	ln -s fxp.sh ${FXP_BINDIR}/${PROG_NAME}
-	${COPY} ${SRC}/_${PROG_NAME}.`cat .arch-opsys` ${FXP_LIBDIR}
-	${CHMOD} 644 ${FXP_LIBDIR}/_${PROG_NAME}.`cat .arch-opsys`
+	${BSD_INSTALL_DATA} ${SRC}/_${PROG_NAME}.${HEAP_SUFFIX} ${FXP_LIBDIR}/
+.else
+	${BSD_INSTALL_PROGRAM} ${SRC}/${PROG_NAME} ${FXP_BINDIR}/
+.endif
 
 inst.fxp:
 	@make inst.prog PROG_NAME=fxp PROG_CM=Apps/Null/null.cm PROG_FUN=Null.null
@@ -116,13 +137,39 @@
 	    ${MKDIRHIER} ${FXP_LIBDIR}/$${dir}; \
 	done
 	for file in `${FIND} ${SRC} ${FXLIB_PRUNE} -prune -o -name '*.sml' -print`; do \
-	    ${COPY} $${file} ${FXP_LIBDIR}/$${file}; \
+	    ${BSD_INSTALL_DATA} $${file} ${FXP_LIBDIR}/$${file}; \
+	done
+	for file in `${FIND} ${SRC} ${FXLIB_PRUNE} -prune -o -type f -name '*.cm' -print`; do \
+	    ${BSD_INSTALL_DATA} $${file} ${FXP_LIBDIR}/$${file}; \
+	done
+	${BSD_INSTALL_DATA} ${SRC}/fxlib.cm ${FXP_LIBDIR}/${SRC}/
+	${BSD_INSTALL_DATA} ${SRC}/fxlib.mlb ${FXP_LIBDIR}/${SRC}/
+.if defined(STABILIZE)
+.if defined(SMLNJ) && ${SMLNJ} == "yes"
+	# Stabilizing in place seems to be the only reliable way for old sml-nj
+	echo "${SML_STABILIZEDEF}; stabilize \"${FXP_LIBDIR}/src/fxlib.cm\"; \
+	      OS.Process.exit OS.Process.success;" | ${SML_EXEC}
+.else
+	${MKDIRHIER} ${FXP_LIBDIR}/src/.cm/x86-unix
+	${BSD_INSTALL_DATA} ${SRC}/.cm/x86-unix/fxlib.cm ${FXP_LIBDIR}/src/.cm/x86-unix/
+.endif
+.endif
+
+install-doc:
+	for file in ball-shadow.jpg fxp-shadow.jpg shadow.jpg \
+		    exa-vcg-1.gif exa-vcg-2.gif exa-vcg-3.gif \
+		    exa-vcg-4.gif exa-vcg-5.gif exa-vcg-6.gif ; do \
+	    rm ${DOC}/$${file} || true; \
+	done
+	rm ${DOC}/Images/index.html || true
+	for dir in `${FIND} ${DOC}/* -type d -print`; do \
+	    d=`expr "$${dir}" : "[^/]*/\(.*\)"`; \
+	    ${MKDIRHIER} ${FXP_DOCDIR}/$${d}; \
+	done
+	for file in `${FIND} ${DOC}/* -type f \! -regex '.*\.orig$$' -print`; do \
+	    f=`expr "$${file}" : "[^/]*/\(.*\)"`; \
+	    ${BSD_INSTALL_MAN} $${file} ${FXP_DOCDIR}/$${f}; \
 	done
-	${COPY} ${SRC}/fxlib.cm ${FXP_LIBDIR}/${SRC}/fxlib.cm
-	rm -f ${FXP_LIBDIR}/fxlib.cm
-	echo Group is > ${FXP_LIBDIR}/fxlib.cm
-	echo "  "${SRC}/fxlib.cm >> ${FXP_LIBDIR}/fxlib.cm
-	${COPY} -r ${DOC} ${FXP_LIBDIR}
 
 install:
 	for prog in ${INSTALL_PROGS}; do \
