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 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204
|
#!/bin/sh
this=$0
here=`pwd`
cd ../..
twoup=`pwd`
cd $here
LINK=$twoup/bin/.link-sml
if [ ! -x $LINK ] ; then
echo $this: link script $LINK is not operational.
exit 1
fi
verbosity=${MAKEML_VERBOSITY:-"@SMLverbose"}
ALLOC=1M
ARCH=sparc
HEAP="sml"
ARGS=""
MODE=""
RUN=""
case $verbosity in
true|yes|on|TRUE|YES|ON)
VERBOSITY="@SMLverbose"
;;
false|no|off|FALSE|NO|OFF)
VERBOSITY="@SMLquiet"
;;
@SML*)
VERBOSITY=$verbosity
;;
*)
# what?!?
VERBOSITY="@SMLverbose"
;;
esac
rebuilt=no
bare=no
#
# Set CM_PATHCONFIG to ../../../lib/pathconfig
# (using an absolute path!)
# ... unless it was already set at the time we run this script.
#
CM_PATHCONFIG=${CM_PATHCONFIG:-$twoup/lib/pathconfig}
export CM_PATHCONFIG
#
# use the arch-n-opsys script to determine the ARCH/OS if possible
#
if [ -f $twoup/bin/.arch-n-opsys ]; then
ARCH_N_OPSYS=`$twoup/bin/.arch-n-opsys`
if [ "$?" = "0" ]; then
eval $ARCH_N_OPSYS
echo $this: architecture = $ARCH
fi
fi
# A function to create a directory hierarchy parallel to a given
# hierarchy where ordinary files are hard-linked (i.e., shared).
# The first argument must be a simple path (no / inside), and
# the second argument must be an absolute path.
link() {
if [ -d $1 ] ; then
if [ ! -d $2 ] ; then
if [ -f $2 ] ; then
echo $this: $2 exists as a non-directory
exit 1
fi
mkdir $2
fi
cd $1
for i in * .[a-zA-Z0-9]* ; do
link $i $2/$i
done
cd ..
elif [ -f $1 ] ; then
rm -f $2
ln $1 $2
fi
}
if [ $OPSYS = win32 ] ; then
BOOT_DIR="sml.boot.${ARCH}-win32"
else
BOOT_DIR="sml.boot.${ARCH}-unix"
fi
while [ "$#" != "0" ] ; do
arg=$1; shift
case $arg in
-run)
if [ "$#" = "0" ]; then
echo "$this: missing argument for \"-run\" option"
exit 1
fi
RUN="@SMLrun=$1"; shift
;;
-bare)
bare=yes
MODE="@SMLbare"
;;
-quiet)
VERBOSITY="@SMLquiet"
;;
-verbose)
VERBOSITY="@SMLverbose"
;;
-rebuild)
if [ "$#" = "0" ]; then
echo "$this: missing argument for \"-rebuild\" option"
exit 1
fi
rebuilt=yes
MODE="@SMLrebuild=$1"; shift
;;
-rebuildlight|-lightrebuild|-light)
if [ "$#" = "0" ]; then
echo "$this: missing argument for \"-rebuild\" option"
exit 1
fi
rebuilt=yes
MODE="@SMLlightrebuild=$1"; shift
;;
-o)
if [ "$#" = "0" ]; then
echo "$this: missing argument for \"-o\" option"
exit 1
fi
HEAP=$1; shift
;;
-alloc)
if [ "$#" = "0" ]; then
echo "$this: missing argument for \"-alloc\" option"
exit 1
fi
ALLOC=$1; shift
;;
-boot)
if [ "$#" = "0" ]; then
echo "$this: missing argument for \"-boot\" option"
exit 1
fi
BOOT_DIR=$1; shift
;;
@SML*)
ARGS="$ARGS $arg"
;;
*)
echo "$this: unknown argument \"$arg\""
exit 1
;;
esac
done
cd $BOOT_DIR
echo $LINK $RUN \
@SMLboot=BOOTLIST @SMLheap=$HEAP @SMLalloc=$ALLOC \
$VERBOSITY $ARGS $MODE
if $LINK $RUN \
@SMLboot=BOOTLIST @SMLheap=$HEAP @SMLalloc=$ALLOC \
$VERBOSITY $ARGS $MODE
then
#
# If this was a -rebuild run, we have to quit now...
#
if [ $rebuilt = yes ] ; then
echo $this: New binfiles are ready.
exit 0
fi
echo $this: Heap image generated.
else
echo $this: Something broke.
exit 1
fi
#
# Now move the libraries, generate the pathconfig file, and delete the bootdir.
#
cd $here
if [ $bare = no ] ; then
LIB_DIR=`pwd`/${HEAP}.lib
rm -rf $LIB_DIR
mkdir $LIB_DIR
cd $BOOT_DIR
for anchor in * ; do
if [ -d $anchor ] ; then
link $anchor $LIB_DIR/$anchor
echo $anchor $anchor
fi
done >$LIB_DIR/pathconfig
cd $here
fi
|