lib/scripts/run-smlnj
changeset 3046 6b7935317538
parent 3010 4be22c300966
child 3051 30490aa41356
equal deleted inserted replaced
3045:4ef28e05781b 3046:6b7935317538
    15   echo "Unable to create output heap file: \"$OUTFILE\"" >&2
    15   echo "Unable to create output heap file: \"$OUTFILE\"" >&2
    16   exit 2
    16   exit 2
    17 }
    17 }
    18 
    18 
    19 
    19 
       
    20 ## version specific stuff
       
    21 
       
    22 EXIT=""
       
    23 COMMIT=""
       
    24 FIXNAME=""
       
    25 
       
    26 case "$ML_SYSTEM" in
       
    27   smlnj-1.0[678]*)
       
    28     EXIT="val exit = System.Unix.exit;"
       
    29     COMMIT="fun commit () = not (exportML\"$OUTFILE\");"
       
    30     COMMIT_RO='fun commit () = (output (std_err, "Error - Database is not opened for writing.\\n"); false);'
       
    31     ;;
       
    32   smlnj-1.09*)
       
    33     EXIT="fun exit 0 : unit = OS.Process.exit OS.Process.success | exit _ = OS.Process.exit OS.Process.failure;"
       
    34     COMMIT="fun commit () = not (SMLofNJ.exportML\"$OUTFILE\");"
       
    35     COMMIT_RO='fun commit () = (TextIO.output (TextIO.stdErr, "Error - Database is not opened for writing.\\n"); false);'
       
    36     FIXNAME=true
       
    37     ;;
       
    38 esac
       
    39 
       
    40 
    20 ## prepare databases
    41 ## prepare databases
    21 
    42 
    22 EXIT=""
    43 DB="$INFILE"
    23 if [ -z "$INFILE" ]; then
    44 
    24   case "$ML_SYSTEM" in
    45 if [ -n "$DB" ]; then
    25     smlnj-1.0[678])
    46   DB="@SMLload=$INFILE"
    26       EXIT="val exit = System.Unix.exit;"
    47   EXIT=""
    27       ;;
       
    28     smlnj-1.09*)
       
    29       EXIT="fun exit 0 = OS.Process.exit OS.Process.success | exit _ = OS.Process.exit OS.Process.failure;"
       
    30     ;;
       
    31   esac
       
    32 fi
    48 fi
    33 
    49 
    34 DB="$INFILE"
       
    35 [ -n "$DB" ] && DB="@SMLload=$INFILE"
       
    36 
       
    37 COMMIT="fun commit () = not (exportML\"$OUTFILE\");"
       
    38 
       
    39 if [ -z "$OUTFILE" ]; then
    50 if [ -z "$OUTFILE" ]; then
    40   COMMIT='fun commit () = (output (std_err, "Error - Database is not opened for writing.\n"); false);'
    51   COMMIT="$COMMIT_RO"
    41 elif [ -n "$INFILE" -a ! "$INFILE" -ef "$OUTFILE" ]; then
    52 elif [ -n "$INFILE" -a ! "$INFILE" -ef "$OUTFILE" ]; then
    42   [ -f "$OUTFILE" ] && { rm -f "$OUTFILE" || fail_out; }
    53   [ -f "$OUTFILE" ] && { rm -f "$OUTFILE" || fail_out; }
    43   cp "$INFILE" "$OUTFILE" || fail_out
    54   cp "$INFILE" "$OUTFILE" || fail_out
    44 fi
    55 fi
    45 
    56 
    46 [ -n "$OUTFILE" -a -f "$OUTFILE" ] && { chmod +w "$OUTFILE" || fail_out; }
    57 [ -n "$OUTFILE" -a -f "$OUTFILE" ] && { chmod +w "$OUTFILE" || fail_out; }
    47 
    58 
    48 MLTEXT="$EXIT $COMMIT $MLTEXT"
    59 MLTEXT="$EXIT $COMMIT $MLTEXT"
    49 MLEXIT="commit();"
    60 MLEXIT="commit ();"
    50 
    61 
    51 
    62 
    52 ## run it!
    63 ## run it!
    53 
    64 
    54 START_SML="$ML_HOME/sml $ML_OPTIONS $DB"
    65 START_SML="$ML_HOME/sml $ML_OPTIONS $DB"
    62 else
    73 else
    63   sh -c "{ echo '$MLTEXT'; $ISABELLE_HOME/lib/scripts/ucat; echo '$MLEXIT'; } | $START_SML"
    74   sh -c "{ echo '$MLTEXT'; $ISABELLE_HOME/lib/scripts/ucat; echo '$MLEXIT'; } | $START_SML"
    64   RC=$?
    75   RC=$?
    65 fi
    76 fi
    66 
    77 
       
    78 #fix heap file name
       
    79 if [ -n "$OUTFILE" -a -n "$FIXNAME" ]; then
       
    80   eval $($ML_HOME/.arch-n-opsys)
       
    81   SUFFIX=$ARCH-$OPSYS
       
    82   [ -f $OUTFILE.$SUFFIX ] && mv $OUTFILE.$SUFFIX $OUTFILE
       
    83 fi
       
    84 
    67 exit $RC
    85 exit $RC