| author | haftmann | 
| Thu, 24 May 2007 08:37:39 +0200 | |
| changeset 23087 | ad7244663431 | 
| parent 22253 | 7a1bf4299254 | 
| child 24296 | 3479a9fe73e0 | 
| permissions | -rwxr-xr-x | 
| 21653 | 1 | #!/usr/bin/env bash | 
| 2 | # | |
| 3 | # $Id$ | |
| 4 | # Author: Makarius | |
| 5 | # | |
| 6 | # Poly/ML startup script (for 5.0) | |
| 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 | |
| 21713 
85722dc0fc81
more careful evaluation of ML text, prevents spurious output;
 wenzelm parents: 
21711diff
changeset | 47 | PRG="$POLY" | 
| 21653 | 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" | |
| 21713 
85722dc0fc81
more careful evaluation of ML text, prevents spurious output;
 wenzelm parents: 
21711diff
changeset | 51 | PRG="$INFILE" | 
| 21653 | 52 | EXIT="" | 
| 53 | fi | |
| 54 | ||
| 21711 
dfac729d3066
root function: restore default interrupt handler;
 wenzelm parents: 
21653diff
changeset | 55 | ROOT_FUNCTION="fn () => (Signal.signal (2, Signal.SIG_HANDLE (fn _ => Process.interruptConsoleProcesses ())); PolyML.rootFunction ())" | 
| 
dfac729d3066
root function: restore default interrupt handler;
 wenzelm parents: 
21653diff
changeset | 56 | |
| 21653 | 57 | if [ -z "$OUTFILE" ]; then | 
| 58 | COMMIT='fun commit () = (TextIO.output (TextIO.stdErr, "Error - Database is not opened for writing.\n"); false);' | |
| 59 | else | |
| 60 | if [ -z "$COMPRESS" ]; then | |
| 21711 
dfac729d3066
root function: restore default interrupt handler;
 wenzelm parents: 
21653diff
changeset | 61 | COMMIT="fun commit () = (TextIO.output (TextIO.stdOut, \"Exporting $OUTFILE\n\"); PolyML.export (\"$OUTFILE\", $ROOT_FUNCTION); true);" | 
| 21653 | 62 | else | 
| 21711 
dfac729d3066
root function: restore default interrupt handler;
 wenzelm parents: 
21653diff
changeset | 63 | COMMIT="fun commit () = (PolyML.shareCommonData PolyML.rootFunction; TextIO.output (TextIO.stdOut, \"Exporting $OUTFILE\n\"); PolyML.export (\"$OUTFILE\", $ROOT_FUNCTION); true);" | 
| 21653 | 64 | fi | 
| 65 |   [ -f "$OUTFILE" ] && { chmod +w "$OUTFILE" || fail_out; }
 | |
| 66 |   rm -f "${OUTFILE}.o" || fail_out
 | |
| 67 | fi | |
| 68 | ||
| 69 | ||
| 70 | ## run it! | |
| 71 | ||
| 72 | MLTEXT="PolyML.Compiler.printInAlphabeticalOrder := false; $EXIT $COMMIT $MLTEXT" | |
| 73 | MLEXIT="commit();" | |
| 74 | ||
| 75 | if [ -z "$TERMINATE" ]; then | |
| 76 | FEEDER_OPTS="" | |
| 77 | else | |
| 78 | FEEDER_OPTS="-q" | |
| 79 | fi | |
| 80 | ||
| 21713 
85722dc0fc81
more careful evaluation of ML text, prevents spurious output;
 wenzelm parents: 
21711diff
changeset | 81 | if [ "$PRG" = "$POLY" ]; then | 
| 
85722dc0fc81
more careful evaluation of ML text, prevents spurious output;
 wenzelm parents: 
21711diff
changeset | 82 | "$ISABELLE_HOME/lib/scripts/feeder" -p -h "$MLTEXT" -t "$MLEXIT" $FEEDER_OPTS | \ | 
| 21736 | 83 |     { read FPID; "$PRG" -q $ML_OPTIONS; RC="$?"; kill -HUP "$FPID"; exit "$RC"; }
 | 
| 21713 
85722dc0fc81
more careful evaluation of ML text, prevents spurious output;
 wenzelm parents: 
21711diff
changeset | 84 | else | 
| 
85722dc0fc81
more careful evaluation of ML text, prevents spurious output;
 wenzelm parents: 
21711diff
changeset | 85 | "$ISABELLE_HOME/lib/scripts/feeder" -p -t "$MLEXIT" $FEEDER_OPTS | \ | 
| 21736 | 86 |     { read FPID; "$PRG" -q $ML_OPTIONS "$MLTEXT"; RC="$?"; kill -HUP "$FPID"; exit "$RC"; }
 | 
| 21713 
85722dc0fc81
more careful evaluation of ML text, prevents spurious output;
 wenzelm parents: 
21711diff
changeset | 87 | fi | 
| 21653 | 88 | RC="$?" | 
| 89 | ||
| 90 | if [ -n "$OUTFILE" ]; then | |
| 91 |   if [ -e "${OUTFILE}.o" ]; then
 | |
| 22253 
7a1bf4299254
cc: removed option -lstdc++, which seems to be unnecessry, but causes problems on some platforms;
 wenzelm parents: 
21736diff
changeset | 92 |     cc -o "$OUTFILE" "${OUTFILE}.o" -L"$POLYLIB" -lpolymain -lpolyml || fail_out
 | 
| 21653 | 93 |     rm -f "${OUTFILE}.o"
 | 
| 21711 
dfac729d3066
root function: restore default interrupt handler;
 wenzelm parents: 
21653diff
changeset | 94 |     [ -e "${OUTFILE}.exe" ] && mv "${OUTFILE}.exe" "$OUTFILE"
 | 
| 21653 | 95 | fi | 
| 96 | [ -f "$OUTFILE" -a -n "$NOWRITE" ] && chmod -w "$OUTFILE" | |
| 97 | fi | |
| 98 | ||
| 99 | exit "$RC" |