1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
|
--- 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 \
|