lib/scripts/run-smlnj
author wenzelm
Thu, 24 Apr 1997 19:41:00 +0200
changeset 3046 6b7935317538
parent 3010 4be22c300966
child 3051 30490aa41356
permissions -rwxr-xr-x
adapted to SML/NJ 1.09.27;
minor cleanup;
wenzelm@3007
     1
#!/bin/bash
wenzelm@2302
     2
#
wenzelm@2313
     3
# $Id$
wenzelm@2313
     4
#
wenzelm@2302
     5
# SML/NJ startup script (for 1.06 or later).
wenzelm@2302
     6
#
wenzelm@2349
     7
# Global vars: INFILE OUTFILE COPYDB MLTEXT TERMINATE,
wenzelm@2302
     8
# and from settings
wenzelm@2302
     9
wenzelm@2302
    10
wenzelm@2302
    11
## diagnostics
wenzelm@2302
    12
wenzelm@2349
    13
function fail_out()
wenzelm@2302
    14
{
wenzelm@2349
    15
  echo "Unable to create output heap file: \"$OUTFILE\"" >&2
wenzelm@2302
    16
  exit 2
wenzelm@2302
    17
}
wenzelm@2302
    18
wenzelm@2302
    19
wenzelm@3046
    20
## version specific stuff
wenzelm@3046
    21
wenzelm@3046
    22
EXIT=""
wenzelm@3046
    23
COMMIT=""
wenzelm@3046
    24
FIXNAME=""
wenzelm@3046
    25
wenzelm@3046
    26
case "$ML_SYSTEM" in
wenzelm@3046
    27
  smlnj-1.0[678]*)
wenzelm@3046
    28
    EXIT="val exit = System.Unix.exit;"
wenzelm@3046
    29
    COMMIT="fun commit () = not (exportML\"$OUTFILE\");"
wenzelm@3046
    30
    COMMIT_RO='fun commit () = (output (std_err, "Error - Database is not opened for writing.\\n"); false);'
wenzelm@3046
    31
    ;;
wenzelm@3046
    32
  smlnj-1.09*)
wenzelm@3046
    33
    EXIT="fun exit 0 : unit = OS.Process.exit OS.Process.success | exit _ = OS.Process.exit OS.Process.failure;"
wenzelm@3046
    34
    COMMIT="fun commit () = not (SMLofNJ.exportML\"$OUTFILE\");"
wenzelm@3046
    35
    COMMIT_RO='fun commit () = (TextIO.output (TextIO.stdErr, "Error - Database is not opened for writing.\\n"); false);'
wenzelm@3046
    36
    FIXNAME=true
wenzelm@3046
    37
    ;;
wenzelm@3046
    38
esac
wenzelm@3046
    39
wenzelm@3046
    40
wenzelm@2302
    41
## prepare databases
wenzelm@2302
    42
wenzelm@3046
    43
DB="$INFILE"
wenzelm@3046
    44
wenzelm@3046
    45
if [ -n "$DB" ]; then
wenzelm@3046
    46
  DB="@SMLload=$INFILE"
wenzelm@3046
    47
  EXIT=""
wenzelm@2349
    48
fi
wenzelm@2349
    49
wenzelm@2302
    50
if [ -z "$OUTFILE" ]; then
wenzelm@3046
    51
  COMMIT="$COMMIT_RO"
wenzelm@2349
    52
elif [ -n "$INFILE" -a ! "$INFILE" -ef "$OUTFILE" ]; then
wenzelm@2936
    53
  [ -f "$OUTFILE" ] && { rm -f "$OUTFILE" || fail_out; }
wenzelm@2302
    54
  cp "$INFILE" "$OUTFILE" || fail_out
wenzelm@2302
    55
fi
wenzelm@2302
    56
wenzelm@2936
    57
[ -n "$OUTFILE" -a -f "$OUTFILE" ] && { chmod +w "$OUTFILE" || fail_out; }
wenzelm@2396
    58
wenzelm@2349
    59
MLTEXT="$EXIT $COMMIT $MLTEXT"
wenzelm@3046
    60
MLEXIT="commit ();"
wenzelm@2302
    61
wenzelm@2302
    62
wenzelm@2302
    63
## run it!
wenzelm@2302
    64
wenzelm@2429
    65
START_SML="$ML_HOME/sml $ML_OPTIONS $DB"
wenzelm@2302
    66
wenzelm@2302
    67
if [ -n "$TERMINATE" ]; then
wenzelm@3010
    68
  echo "$MLTEXT" "$MLEXIT" | $START_SML
wenzelm@2622
    69
  RC=$?
wenzelm@2622
    70
elif [ -z "$MLTEXT" ]; then
wenzelm@2622
    71
  sh -c "{ $ISABELLE_HOME/lib/scripts/ucat; echo '$MLEXIT'; } | $START_SML"
wenzelm@2302
    72
  RC=$?
wenzelm@2302
    73
else
wenzelm@2622
    74
  sh -c "{ echo '$MLTEXT'; $ISABELLE_HOME/lib/scripts/ucat; echo '$MLEXIT'; } | $START_SML"
wenzelm@2302
    75
  RC=$?
wenzelm@2302
    76
fi
wenzelm@2302
    77
wenzelm@3046
    78
#fix heap file name
wenzelm@3046
    79
if [ -n "$OUTFILE" -a -n "$FIXNAME" ]; then
wenzelm@3046
    80
  eval $($ML_HOME/.arch-n-opsys)
wenzelm@3046
    81
  SUFFIX=$ARCH-$OPSYS
wenzelm@3046
    82
  [ -f $OUTFILE.$SUFFIX ] && mv $OUTFILE.$SUFFIX $OUTFILE
wenzelm@3046
    83
fi
wenzelm@3046
    84
wenzelm@2302
    85
exit $RC