lib/scripts/run-polyml-5.0
author wenzelm
Thu, 06 Mar 2008 19:21:24 +0100
changeset 26213 3a190cb91c6c
parent 25124 a7dd8d3bf969
child 26375 234f10289d97
permissions -rwxr-xr-x
tuned comment;
     1 #!/usr/bin/env bash
     2 #
     3 # $Id$
     4 # Author: Makarius
     5 #
     6 # Poly/ML 5.0 startup script.
     7 
     8 export -n INFILE OUTFILE COPYDB COMPRESS MLTEXT TERMINATE NOWRITE
     9 
    10 
    11 ## diagnostics
    12 
    13 function fail_out()
    14 {
    15   echo "Unable to create output heap file: \"$OUTFILE\"" >&2
    16   exit 2
    17 }
    18 
    19 function check_file()
    20 {
    21   if [ ! -f "$1" ]; then
    22     echo "Unable to locate $1" >&2
    23     echo "Please check your ML system settings!" >&2
    24     exit 2
    25   fi
    26 }
    27 
    28 
    29 ## compiler executables and libraries
    30 
    31 POLY="$ML_HOME/poly"
    32 check_file "$POLY"
    33 
    34 if [ "$(basename "$ML_HOME")" = bin ]; then
    35   POLYLIB="$(cd "$ML_HOME"; cd "$(pwd -P)"; cd ../lib; pwd)"
    36 else
    37   POLYLIB="$ML_HOME"
    38 fi
    39 
    40 export LD_LIBRARY_PATH="$POLYLIB:$LD_LIBRARY_PATH"
    41 export DYLD_LIBRARY_PATH="$POLYLIB:$DYLD_LIBRARY_PATH"
    42 
    43 
    44 ## prepare databases
    45 
    46 if [ -z "$INFILE" ]; then
    47   PRG="$POLY"
    48   EXIT="fun exit 0 = (OS.Process.exit OS.Process.success): unit | exit _ = OS.Process.exit OS.Process.failure;"
    49 else
    50   check_file "$INFILE"
    51   PRG="$INFILE"
    52   EXIT=""
    53 fi
    54 
    55 if [ -z "$OUTFILE" ]; then
    56   COMMIT='fun commit () = (TextIO.output (TextIO.stdErr, "Error - Database is not opened for writing.\n"); false);'
    57 else
    58   if [ -z "$COMPRESS" ]; then
    59     COMMIT="fun commit () = (TextIO.output (TextIO.stdOut, \"Exporting $OUTFILE\n\"); PolyML.export (\"$OUTFILE\", PolyML.rootFunction); true);"
    60   else
    61     COMMIT="fun commit () = (PolyML.shareCommonData PolyML.rootFunction; TextIO.output (TextIO.stdOut, \"Exporting $OUTFILE\n\"); PolyML.export (\"$OUTFILE\", PolyML.rootFunction); true);"
    62   fi
    63   [ -f "$OUTFILE" ] && { chmod +w "$OUTFILE" || fail_out; }
    64   rm -f "${OUTFILE}.o" || fail_out
    65 fi
    66 
    67 
    68 ## run it!
    69 
    70 MLTEXT="$EXIT $COMMIT $MLTEXT"
    71 MLEXIT="commit();"
    72 
    73 if [ -z "$TERMINATE" ]; then
    74   FEEDER_OPTS=""
    75 else
    76   FEEDER_OPTS="-q"
    77 fi
    78 
    79 if [ "$PRG" = "$POLY" ]; then
    80   "$ISABELLE_HOME/lib/scripts/feeder" -p -h "$MLTEXT" -t "$MLEXIT" $FEEDER_OPTS | \
    81     { read FPID; "$PRG" -q $ML_OPTIONS; RC="$?"; kill -HUP "$FPID"; exit "$RC"; }
    82 else
    83   "$ISABELLE_HOME/lib/scripts/feeder" -p -t "$MLEXIT" $FEEDER_OPTS | \
    84     { read FPID; "$PRG" -q $ML_OPTIONS "$MLTEXT"; RC="$?"; kill -HUP "$FPID"; exit "$RC"; }
    85 fi
    86 RC="$?"
    87 
    88 if [ -n "$OUTFILE" ]; then
    89   if [ -e "${OUTFILE}.o" ]; then
    90     cc -o "$OUTFILE" "${OUTFILE}.o" -L"$POLYLIB" -lpolymain -lpolyml $POLY_LINK_OPTIONS || fail_out
    91     rm -f "${OUTFILE}.o"
    92     [ -e "${OUTFILE}.exe" ] && mv "${OUTFILE}.exe" "$OUTFILE"
    93   fi
    94   [ -f "$OUTFILE" -a -n "$NOWRITE" ] && chmod -w "$OUTFILE"
    95 fi
    96 
    97 exit "$RC"