| 3007 |      1 | #!/bin/bash
 | 
| 2302 |      2 | #
 | 
| 2313 |      3 | # $Id$
 | 
|  |      4 | #
 | 
| 4505 |      5 | # SML/NJ startup script (for 109.27-109.33, 110 or later).
 | 
| 2302 |      6 | #
 | 
| 4333 |      7 | # Global vars: INFILE OUTFILE MLTEXT TERMINATE NOWRITE ISABELLE_TMP,
 | 
| 2302 |      8 | # and from settings
 | 
|  |      9 | 
 | 
|  |     10 | 
 | 
|  |     11 | ## diagnostics
 | 
|  |     12 | 
 | 
| 2349 |     13 | function fail_out()
 | 
| 2302 |     14 | {
 | 
| 2349 |     15 |   echo "Unable to create output heap file: \"$OUTFILE\"" >&2
 | 
| 2302 |     16 |   exit 2
 | 
|  |     17 | }
 | 
|  |     18 | 
 | 
| 5063 |     19 | function check_mlhome_file()
 | 
|  |     20 | {
 | 
|  |     21 |   if [ ! -f "$1" ]; then
 | 
|  |     22 |     echo "Unable to locate $1" >&2
 | 
|  |     23 |     echo "Please check your ML_HOME setting!" >&2
 | 
|  |     24 |     exit 2
 | 
|  |     25 |   fi
 | 
|  |     26 | }
 | 
|  |     27 | 
 | 
|  |     28 | 
 | 
|  |     29 | ## compiler binaries
 | 
|  |     30 | 
 | 
|  |     31 | SML="$ML_HOME/sml"
 | 
|  |     32 | ARCH_N_OPSYS="$ML_HOME/.arch-n-opsys"
 | 
|  |     33 | 
 | 
|  |     34 | check_mlhome_file "$SML"
 | 
|  |     35 | check_mlhome_file "$ARCH_N_OPSYS"
 | 
|  |     36 | 
 | 
|  |     37 | 
 | 
| 2302 |     38 | 
 | 
| 3046 |     39 | ## prepare databases
 | 
|  |     40 | 
 | 
| 4505 |     41 | if [ -z "$INFILE" ]; then
 | 
|  |     42 |   EXIT="fun exit 0 = (OS.Process.exit OS.Process.success): unit | exit _ = OS.Process.exit OS.Process.failure;"
 | 
|  |     43 |   DB=""
 | 
|  |     44 | else
 | 
|  |     45 |   EXIT=""
 | 
| 3046 |     46 |   DB="@SMLload=$INFILE"
 | 
| 2349 |     47 | fi
 | 
|  |     48 | 
 | 
| 4505 |     49 | if [ -z "$OUTFILE" ]; then
 | 
|  |     50 |   COMMIT='fun commit () = (TextIO.output (TextIO.stdErr, "Error - Database is not opened for writing.\n"); false);'
 | 
|  |     51 | else
 | 
|  |     52 |   COMMIT="fun commit () = not (SMLofNJ.exportML\"$OUTFILE\");"
 | 
|  |     53 |   [ -f "$OUTFILE" ] && { chmod +w "$OUTFILE" || fail_out; }
 | 
|  |     54 | fi
 | 
| 2302 |     55 | 
 | 
|  |     56 | 
 | 
|  |     57 | ## run it!
 | 
|  |     58 | 
 | 
| 4505 |     59 | MLTEXT="$EXIT $COMMIT $MLTEXT"
 | 
|  |     60 | MLEXIT="commit();"
 | 
| 2302 |     61 | 
 | 
| 4505 |     62 | if [ -z "$TERMINATE" ]; then
 | 
|  |     63 |   FEEDER_OPTS=""
 | 
| 2302 |     64 | else
 | 
| 4505 |     65 |   FEEDER_OPTS="-q"
 | 
| 2302 |     66 | fi
 | 
|  |     67 | 
 | 
| 4505 |     68 | $ISABELLE_HOME/lib/scripts/feeder -p -h "$MLTEXT" -t "$MLEXIT" $FEEDER_OPTS | \
 | 
| 5063 |     69 |   { read FPID; $SML $ML_OPTIONS $DB; RC=$?; kill -HUP $FPID; exit $RC; }
 | 
| 4505 |     70 | RC=$?
 | 
|  |     71 | 
 | 
|  |     72 | 
 | 
|  |     73 | ## fix heap file name and permissions
 | 
| 3046 |     74 | 
 | 
| 4505 |     75 | if [ -n "$OUTFILE" ]; then
 | 
| 5063 |     76 |   eval $($ARCH_N_OPSYS)
 | 
| 4505 |     77 |   SUFFIX=".$ARCH-$OPSYS"
 | 
|  |     78 |   if [ -f "$OUTFILE$SUFFIX" ]; then
 | 
|  |     79 |     mv "$OUTFILE$SUFFIX" "$OUTFILE"
 | 
|  |     80 |     [ -n "$NOWRITE" ] && chmod -w "$OUTFILE"
 | 
|  |     81 |   fi
 | 
|  |     82 | fi
 | 
| 3503 |     83 | 
 | 
| 2302 |     84 | exit $RC
 |