| author | blanchet | 
| Tue, 15 May 2012 13:06:15 +0200 | |
| changeset 47927 | c35238d19bb9 | 
| parent 45056 | bbd7eac14df3 | 
| child 48698 | 2585042b1a30 | 
| permissions | -rwxr-xr-x | 
| 11550 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 1 | #!/usr/bin/env bash | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 2 | # | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 3 | # Author: Markus Wenzel, TU Muenchen | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 4 | # | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 5 | # Isabelle process startup script. | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 6 | |
| 15843 | 7 | if [ -L "$0" ]; then | 
| 8 | TARGET="$(LC_ALL=C ls -l "$0" | sed 's/.* -> //')" | |
| 15967 | 9 | exec "$(cd "$(dirname "$0")"; cd "$(pwd -P)"; cd "$(dirname "$TARGET")"; pwd)/$(basename "$TARGET")" "$@" | 
| 15843 | 10 | fi | 
| 11 | ||
| 11550 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 12 | |
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 13 | ## settings | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 14 | |
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 15 | PRG="$(basename "$0")" | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 16 | |
| 15967 | 17 | ISABELLE_HOME="$(cd "$(dirname "$0")"; cd "$(pwd -P)"; cd ..; pwd)" | 
| 18 | source "$ISABELLE_HOME/lib/scripts/getsettings" || exit 2 | |
| 11550 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 19 | |
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 20 | |
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 21 | ## diagnostics | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 22 | |
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 23 | function usage() | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 24 | {
 | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 25 | echo | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 26 | echo "Usage: $PRG [OPTIONS] [INPUT] [OUTPUT]" | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 27 | echo | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 28 | echo " Options are:" | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 29 | echo " -I startup Isar interaction mode" | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 30 | echo " -P startup Proof General interaction mode" | 
| 20929 | 31 | echo " -S secure mode -- disallow critical operations" | 
| 45028 | 32 | echo " -T ADDR startup process wrapper, with socket address" | 
| 38253 
3d4e521014f7
Isabelle_Process: separate input fifo for commands (still using the old tty protocol);
 wenzelm parents: 
34116diff
changeset | 33 | echo " -W IN:OUT startup process wrapper, with input/output fifos" | 
| 16101 | 34 | echo " -X startup PGIP interaction mode" | 
| 11550 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 35 | echo " -e MLTEXT pass MLTEXT to the ML session" | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 36 | echo " -f pass 'Session.finish();' to the ML session" | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 37 | echo " -m MODE add print mode for output" | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 38 | echo " -q non-interactive session" | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 39 | echo " -r open heap file read-only" | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 40 | echo " -u pass 'use\"ROOT.ML\";' to the ML session" | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 41 | echo " -w reset write permissions on OUTPUT" | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 42 | echo | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 43 | echo " INPUT (default \"$ISABELLE_LOGIC\") and OUTPUT specify in/out heaps." | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 44 | echo " These are either names to be searched in the Isabelle path, or" | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 45 | echo " actual file names (containing at least one /)." | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 46 | echo " If INPUT is \"RAW_ML_SYSTEM\", just start the bare bones ML system." | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 47 | echo | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 48 | exit 1 | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 49 | } | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 50 | |
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 51 | function fail() | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 52 | {
 | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 53 | echo "$1" >&2 | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 54 | exit 2 | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 55 | } | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 56 | |
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 57 | |
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 58 | ## process command line | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 59 | |
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 60 | # options | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 61 | |
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 62 | ISAR=false | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 63 | PROOFGENERAL="" | 
| 20923 | 64 | SECURE="" | 
| 45028 | 65 | WRAPPER_SOCKET="" | 
| 38253 
3d4e521014f7
Isabelle_Process: separate input fifo for commands (still using the old tty protocol);
 wenzelm parents: 
34116diff
changeset | 66 | WRAPPER_FIFOS="" | 
| 25523 | 67 | PGIP="" | 
| 11550 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 68 | MLTEXT="" | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 69 | MODES="" | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 70 | TERMINATE="" | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 71 | READONLY="" | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 72 | NOWRITE="" | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 73 | |
| 45028 | 74 | while getopts "IPST:W:Xe:fm:qruw" OPT | 
| 11550 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 75 | do | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 76 | case "$OPT" in | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 77 | I) | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 78 | ISAR=true | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 79 | ;; | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 80 | P) | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 81 | PROOFGENERAL=true | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 82 | ;; | 
| 20923 | 83 | S) | 
| 84 | SECURE=true | |
| 85 | ;; | |
| 45028 | 86 | T) | 
| 87 | WRAPPER_SOCKET="$OPTARG" | |
| 88 | ;; | |
| 25523 | 89 | W) | 
| 38253 
3d4e521014f7
Isabelle_Process: separate input fifo for commands (still using the old tty protocol);
 wenzelm parents: 
34116diff
changeset | 90 | WRAPPER_FIFOS="$OPTARG" | 
| 25523 | 91 | ;; | 
| 16101 | 92 | X) | 
| 93 | PGIP=true | |
| 94 | ;; | |
| 11550 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 95 | e) | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 96 | MLTEXT="$MLTEXT $OPTARG" | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 97 | ;; | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 98 | f) | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 99 | MLTEXT="$MLTEXT Session.finish();" | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 100 | ;; | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 101 | m) | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 102 | if [ -z "$MODES" ]; then | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 103 | MODES="\"$OPTARG\"" | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 104 | else | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 105 | MODES="\"$OPTARG\", $MODES" | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 106 | fi | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 107 | ;; | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 108 | q) | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 109 | TERMINATE=true | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 110 | ;; | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 111 | r) | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 112 | READONLY=true | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 113 | ;; | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 114 | u) | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 115 | MLTEXT="$MLTEXT use\"ROOT.ML\";" | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 116 | ;; | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 117 | w) | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 118 | NOWRITE=true | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 119 | ;; | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 120 | \?) | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 121 | usage | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 122 | ;; | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 123 | esac | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 124 | done | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 125 | |
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 126 | shift $(($OPTIND - 1)) | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 127 | |
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 128 | |
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 129 | # args | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 130 | |
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 131 | INPUT="" | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 132 | OUTPUT="" | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 133 | |
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 134 | if [ "$#" -ge 1 ]; then | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 135 | INPUT="$1" | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 136 | shift | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 137 | fi | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 138 | |
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 139 | if [ "$#" -ge 1 ]; then | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 140 | OUTPUT="$1" | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 141 | shift | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 142 | fi | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 143 | |
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 144 | [ "$#" -ne 0 ] && { echo "Bad args: $*"; usage; }
 | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 145 | |
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 146 | |
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 147 | ## check ML system | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 148 | |
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 149 | [ -z "$ML_SYSTEM" ] && fail "Missing ML system settings! Unable to run Isabelle." | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 150 | |
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 151 | |
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 152 | ## input heap file | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 153 | |
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 154 | [ -z "$INPUT" ] && INPUT="$ISABELLE_LOGIC" | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 155 | |
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 156 | case "$INPUT" in | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 157 | RAW_ML_SYSTEM) | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 158 | INFILE="" | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 159 | ;; | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 160 | */*) | 
| 27201 | 161 | INFILE="$INPUT" | 
| 11550 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 162 | [ ! -f "$INFILE" ] && fail "Bad heap file: \"$INFILE\"" | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 163 | ;; | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 164 | *) | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 165 | INFILE="" | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 166 | ISA_PATH="" | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 167 | |
| 32390 
468eff174a77
function splitarray: splightly more abstract version that accomodates older bashes;
 wenzelm parents: 
32322diff
changeset | 168 |     splitarray ":" "$ISABELLE_PATH"; PATHS=("${SPLITARRAY[@]}")
 | 
| 32322 
45cb4a86eca2
change IFS only locally -- thanks to bash arrays;
 wenzelm parents: 
31797diff
changeset | 169 |     for DIR in "${PATHS[@]}"
 | 
| 11550 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 170 | do | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 171 | DIR="$DIR/$ML_IDENTIFIER" | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 172 | ISA_PATH="$ISA_PATH $DIR\n" | 
| 27201 | 173 | [ -z "$INFILE" -a -f "$DIR/$INPUT" ] && INFILE="$DIR/$INPUT" | 
| 11550 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 174 | done | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 175 | |
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 176 | if [ -z "$INFILE" ]; then | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 177 | echo "Unknown logic \"$INPUT\" -- no heap file found in:" >&2 | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 178 | echo -ne "$ISA_PATH" >&2 | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 179 | exit 2 | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 180 | fi | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 181 | ;; | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 182 | esac | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 183 | |
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 184 | |
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 185 | ## output heap file | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 186 | |
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 187 | case "$OUTPUT" in | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 188 | "") | 
| 33920 
d4d430dfabc6
double check file permissions of write-back image -- more robust for root or administrator on Cygwin;
 wenzelm parents: 
32390diff
changeset | 189 | if [ -z "$READONLY" -a -w "$INFILE" ]; then | 
| 
d4d430dfabc6
double check file permissions of write-back image -- more robust for root or administrator on Cygwin;
 wenzelm parents: 
32390diff
changeset | 190 |       perl -e "exit (((stat('$INFILE'))[2] & 0222) != 0 ? 0 : 1);" && OUTFILE="$INFILE"
 | 
| 
d4d430dfabc6
double check file permissions of write-back image -- more robust for root or administrator on Cygwin;
 wenzelm parents: 
32390diff
changeset | 191 | fi | 
| 11550 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 192 | ;; | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 193 | */*) | 
| 27201 | 194 | OUTFILE="$OUTPUT" | 
| 11550 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 195 | ;; | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 196 | *) | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 197 | mkdir -p "$ISABELLE_OUTPUT" | 
| 27201 | 198 | OUTFILE="$ISABELLE_OUTPUT/$OUTPUT" | 
| 11550 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 199 | ;; | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 200 | esac | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 201 | |
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 202 | |
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 203 | ## prepare tmp directory | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 204 | |
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 205 | [ -z "$ISABELLE_TMP_PREFIX" ] && ISABELLE_TMP_PREFIX=/tmp/isabelle | 
| 16874 | 206 | ISABELLE_PID="$$" | 
| 17792 | 207 | ISABELLE_TMP="$ISABELLE_TMP_PREFIX$ISABELLE_PID" | 
| 16874 | 208 | mkdir -p "$ISABELLE_TMP" | 
| 11550 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 209 | |
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 210 | |
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 211 | ## run it! | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 212 | |
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 213 | ML_SYSTEM_BASE=$(echo "$ML_SYSTEM" | cut -f1 -d-) | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 214 | |
| 45056 | 215 | [ -n "$MODES" ] && MLTEXT="Unsynchronized.change print_mode (append [$MODES]); $MLTEXT" | 
| 11550 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 216 | |
| 20923 | 217 | [ -n "$SECURE" ] && MLTEXT="$MLTEXT Secure.set_secure ();" | 
| 218 | ||
| 25645 
b2ed983a5e80
non-ML session: run with 'nice', to prevent isabelle process from flooding interactive front-ends (ProofGeneral/XEmacs etc.)
 wenzelm parents: 
25523diff
changeset | 219 | NICE="nice" | 
| 38253 
3d4e521014f7
Isabelle_Process: separate input fifo for commands (still using the old tty protocol);
 wenzelm parents: 
34116diff
changeset | 220 | |
| 45028 | 221 | if [ -n "$WRAPPER_SOCKET" ]; then | 
| 222 | MLTEXT="$MLTEXT; Isabelle_Process.init_socket \"$WRAPPER_SOCKET\";" | |
| 223 | elif [ -n "$WRAPPER_FIFOS" ]; then | |
| 38253 
3d4e521014f7
Isabelle_Process: separate input fifo for commands (still using the old tty protocol);
 wenzelm parents: 
34116diff
changeset | 224 |   splitarray ":" "$WRAPPER_FIFOS"; FIFOS=("${SPLITARRAY[@]}")
 | 
| 
3d4e521014f7
Isabelle_Process: separate input fifo for commands (still using the old tty protocol);
 wenzelm parents: 
34116diff
changeset | 225 |   [ "${#FIFOS[@]}" -eq 2 ] || fail "Expected IN:OUT fifo specification"
 | 
| 
3d4e521014f7
Isabelle_Process: separate input fifo for commands (still using the old tty protocol);
 wenzelm parents: 
34116diff
changeset | 226 |   [ -p "${FIFOS[0]}" ] || fail "Bad input fifo: ${FIFOS[0]}"
 | 
| 
3d4e521014f7
Isabelle_Process: separate input fifo for commands (still using the old tty protocol);
 wenzelm parents: 
34116diff
changeset | 227 |   [ -p "${FIFOS[1]}" ] || fail "Bad output fifo: ${FIFOS[1]}"
 | 
| 45028 | 228 |   MLTEXT="$MLTEXT; Isabelle_Process.init_fifos \"${FIFOS[0]}\" \"${FIFOS[1]}\";"
 | 
| 25523 | 229 | elif [ -n "$PGIP" ]; then | 
| 21639 
8ab7c4dbb524
Forward compatibility with new Proof General module.
 aspinall parents: 
20929diff
changeset | 230 | MLTEXT="$MLTEXT; ProofGeneralPgip.init_pgip $ISAR;" | 
| 16101 | 231 | elif [ -n "$PROOFGENERAL" ]; then | 
| 11550 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 232 | MLTEXT="$MLTEXT; ProofGeneral.init $ISAR;" | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 233 | elif [ "$ISAR" = true ]; then | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 234 | MLTEXT="$MLTEXT; Isar.main();" | 
| 25645 
b2ed983a5e80
non-ML session: run with 'nice', to prevent isabelle process from flooding interactive front-ends (ProofGeneral/XEmacs etc.)
 wenzelm parents: 
25523diff
changeset | 235 | else | 
| 
b2ed983a5e80
non-ML session: run with 'nice', to prevent isabelle process from flooding interactive front-ends (ProofGeneral/XEmacs etc.)
 wenzelm parents: 
25523diff
changeset | 236 | NICE="" | 
| 11550 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 237 | fi | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 238 | |
| 31317 
1f5740424c69
removed "compress" option from isabelle-process and isabelle usedir -- this is always enabled;
 wenzelm parents: 
31315diff
changeset | 239 | export INFILE OUTFILE MLTEXT TERMINATE NOWRITE ISABELLE_PID ISABELLE_TMP | 
| 11550 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 240 | |
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 241 | if [ -f "$ISABELLE_HOME/lib/scripts/run-$ML_SYSTEM" ]; then | 
| 25645 
b2ed983a5e80
non-ML session: run with 'nice', to prevent isabelle process from flooding interactive front-ends (ProofGeneral/XEmacs etc.)
 wenzelm parents: 
25523diff
changeset | 242 | $NICE "$ISABELLE_HOME/lib/scripts/run-$ML_SYSTEM" | 
| 11550 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 243 | else | 
| 25645 
b2ed983a5e80
non-ML session: run with 'nice', to prevent isabelle process from flooding interactive front-ends (ProofGeneral/XEmacs etc.)
 wenzelm parents: 
25523diff
changeset | 244 | $NICE "$ISABELLE_HOME/lib/scripts/run-$ML_SYSTEM_BASE" | 
| 11550 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 245 | fi | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 246 | RC="$?" | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 247 | |
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 248 | rmdir "$ISABELLE_TMP" | 
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 249 | |
| 
915c5de6480f
smart selection of isabelle-process versus isabelle-interface;
 wenzelm parents: diff
changeset | 250 | exit "$RC" |