| author | wenzelm | 
| Mon, 29 Aug 2005 11:44:23 +0200 | |
| changeset 17181 | 5f42dd5e6570 | 
| parent 17050 | bfb571252817 | 
| child 17194 | 70d96933c210 | 
| permissions | -rwxr-xr-x | 
| 10555 | 1 | #!/usr/bin/env bash | 
| 2808 | 2 | # | 
| 3 | # $Id$ | |
| 9788 | 4 | # Author: Markus Wenzel, TU Muenchen | 
| 2808 | 5 | # | 
| 6 | # DESCRIPTION: build object-logic or run examples | |
| 7 | ||
| 8 | ||
| 9 | ## diagnostics | |
| 10 | ||
| 10511 | 11 | PRG="$(basename "$0")" | 
| 2808 | 12 | |
| 13 | function usage() | |
| 14 | {
 | |
| 15 | echo | |
| 9237 | 16 | echo "Usage: $PRG [OPTIONS] LOGIC NAME" | 
| 2808 | 17 | echo | 
| 18 | echo " Options are:" | |
| 8197 
baab8e487fad
-D PATH: dump generated document sources into PATH;
 wenzelm parents: 
7888diff
changeset | 19 | echo " -D PATH dump generated document sources into PATH" | 
| 6940 | 20 | echo " -P PATH set path for remote theory browsing information" | 
| 17050 | 21 | echo " -V VERSION declare alternative document VERSION" | 
| 6212 | 22 | echo " -b build mode (output heap image, using current dir)" | 
| 8359 
124ad46105dd
option -c: tell ML system to compress output image;
 wenzelm parents: 
8241diff
changeset | 23 | echo " -c BOOL tell ML system to compress output image (default true)" | 
| 7737 | 24 | echo " -d FORMAT build document as FORMAT (default false)" | 
| 15269 
f856f4f3258f
isatool usedir: ML root file can now be specified (previously hard-coded as ROOT.ML)
 webertj parents: 
14981diff
changeset | 25 | echo " -f NAME use ML file NAME (default ROOT.ML)" | 
| 11847 | 26 | echo " -g BOOL generate session graph image for document (default false)" | 
| 27 | echo " -i BOOL generate HTML and graph browser information (default false)" | |
| 10562 | 28 | echo " -m MODE add print mode for output" | 
| 11535 
7f4c5cdea239
Added new option for setting level of detail for proof objects.
 berghofe parents: 
10585diff
changeset | 29 | echo " -p LEVEL set level of detail for proof objects" | 
| 6212 | 30 | echo " -r reset session path" | 
| 2808 | 31 | echo " -s NAME override session NAME" | 
| 11577 | 32 | echo " -v BOOL be verbose (default false)" | 
| 2808 | 33 | echo | 
| 34 | echo " Build object-logic or run examples. Also creates browsing" | |
| 35 | echo " information (HTML etc.) according to settings." | |
| 36 | echo | |
| 7461 | 37 | echo " ISABELLE_USEDIR_OPTIONS=$ISABELLE_USEDIR_OPTIONS" | 
| 38 | echo | |
| 2808 | 39 | exit 1 | 
| 40 | } | |
| 41 | ||
| 11577 | 42 | function fail() | 
| 43 | {
 | |
| 44 | echo "$1" >&2 | |
| 45 | exit 2 | |
| 46 | } | |
| 47 | ||
| 48 | function check_bool() | |
| 49 | {
 | |
| 50 | [ "$1" = true -o "$1" = false ] || fail "Bad boolean: \"$1\"" | |
| 51 | } | |
| 52 | ||
| 53 | function check_number() | |
| 54 | {
 | |
| 12912 | 55 | [ -n "$1" -a -z "$(echo "$1" | tr -d '[0-9]')" ] || fail "Bad number: \"$1\"" | 
| 11577 | 56 | } | 
| 57 | ||
| 2808 | 58 | |
| 59 | ## process command line | |
| 60 | ||
| 61 | # options | |
| 62 | ||
| 8197 
baab8e487fad
-D PATH: dump generated document sources into PATH;
 wenzelm parents: 
7888diff
changeset | 63 | DUMP="" | 
| 
baab8e487fad
-D PATH: dump generated document sources into PATH;
 wenzelm parents: 
7888diff
changeset | 64 | RPATH="" | 
| 17050 | 65 | DOCUMENT_VERSIONS="" | 
| 2808 | 66 | BUILD="" | 
| 8747 | 67 | COMPRESS=true | 
| 7737 | 68 | DOCUMENT=false | 
| 17050 | 69 | ROOT_FILE="ROOT.ML" | 
| 11847 | 70 | DOCUMENT_GRAPH=false | 
| 3747 
cd9b6c86926c
There is now one single option -i for generating theory browsing
 berghofe parents: 
3636diff
changeset | 71 | INFO=false | 
| 10562 | 72 | MODES="" | 
| 6212 | 73 | RESET=false | 
| 2808 | 74 | SESSION="" | 
| 11543 
d61b913431c5
renamed `keep_derivs' to `proofs', and made an integer;
 wenzelm parents: 
11535diff
changeset | 75 | PROOFS=0 | 
| 11577 | 76 | VERBOSE=false | 
| 2808 | 77 | |
| 2917 | 78 | function getoptions() | 
| 79 | {
 | |
| 80 | OPTIND=1 | |
| 17050 | 81 | while getopts "D:P:V:bc:d:f:g:i:m:p:rs:v:" OPT | 
| 2917 | 82 | do | 
| 83 | case "$OPT" in | |
| 8197 
baab8e487fad
-D PATH: dump generated document sources into PATH;
 wenzelm parents: 
7888diff
changeset | 84 | D) | 
| 
baab8e487fad
-D PATH: dump generated document sources into PATH;
 wenzelm parents: 
7888diff
changeset | 85 | DUMP="$OPTARG" | 
| 
baab8e487fad
-D PATH: dump generated document sources into PATH;
 wenzelm parents: 
7888diff
changeset | 86 | ;; | 
| 
baab8e487fad
-D PATH: dump generated document sources into PATH;
 wenzelm parents: 
7888diff
changeset | 87 | P) | 
| 
baab8e487fad
-D PATH: dump generated document sources into PATH;
 wenzelm parents: 
7888diff
changeset | 88 | RPATH="$OPTARG" | 
| 
baab8e487fad
-D PATH: dump generated document sources into PATH;
 wenzelm parents: 
7888diff
changeset | 89 | ;; | 
| 17050 | 90 | V) | 
| 91 | if [ -z "$DOCUMENT_VERSIONS" ]; then | |
| 92 | DOCUMENT_VERSIONS="\"$OPTARG\"" | |
| 93 | else | |
| 94 | DOCUMENT_VERSIONS="$DOCUMENT_VERSIONS, \"$OPTARG\"" | |
| 95 | fi | |
| 96 | ;; | |
| 2917 | 97 | b) | 
| 98 | BUILD=true | |
| 99 | ;; | |
| 8359 
124ad46105dd
option -c: tell ML system to compress output image;
 wenzelm parents: 
8241diff
changeset | 100 | c) | 
| 11577 | 101 | check_bool "$OPTARG" | 
| 8359 
124ad46105dd
option -c: tell ML system to compress output image;
 wenzelm parents: 
8241diff
changeset | 102 | COMPRESS="$OPTARG" | 
| 
124ad46105dd
option -c: tell ML system to compress output image;
 wenzelm parents: 
8241diff
changeset | 103 | ;; | 
| 7737 | 104 | d) | 
| 105 | DOCUMENT="$OPTARG" | |
| 106 | ;; | |
| 15269 
f856f4f3258f
isatool usedir: ML root file can now be specified (previously hard-coded as ROOT.ML)
 webertj parents: 
14981diff
changeset | 107 | f) | 
| 
f856f4f3258f
isatool usedir: ML root file can now be specified (previously hard-coded as ROOT.ML)
 webertj parents: 
14981diff
changeset | 108 | ROOT_FILE="$OPTARG" | 
| 
f856f4f3258f
isatool usedir: ML root file can now be specified (previously hard-coded as ROOT.ML)
 webertj parents: 
14981diff
changeset | 109 | ;; | 
| 11847 | 110 | g) | 
| 111 | check_bool "$OPTARG" | |
| 112 | DOCUMENT_GRAPH="$OPTARG" | |
| 113 | ;; | |
| 3747 
cd9b6c86926c
There is now one single option -i for generating theory browsing
 berghofe parents: 
3636diff
changeset | 114 | i) | 
| 11577 | 115 | check_bool "$OPTARG" | 
| 3747 
cd9b6c86926c
There is now one single option -i for generating theory browsing
 berghofe parents: 
3636diff
changeset | 116 | INFO="$OPTARG" | 
| 2917 | 117 | ;; | 
| 10562 | 118 | m) | 
| 119 | if [ -z "$MODES" ]; then | |
| 120 | MODES="\"$OPTARG\"" | |
| 121 | else | |
| 10585 | 122 | MODES="\"$OPTARG\", $MODES" | 
| 10562 | 123 | fi | 
| 124 | ;; | |
| 11535 
7f4c5cdea239
Added new option for setting level of detail for proof objects.
 berghofe parents: 
10585diff
changeset | 125 | p) | 
| 11577 | 126 | check_number "$OPTARG" | 
| 11543 
d61b913431c5
renamed `keep_derivs' to `proofs', and made an integer;
 wenzelm parents: 
11535diff
changeset | 127 | PROOFS="$OPTARG" | 
| 11535 
7f4c5cdea239
Added new option for setting level of detail for proof objects.
 berghofe parents: 
10585diff
changeset | 128 | ;; | 
| 6212 | 129 | r) | 
| 130 | RESET=true | |
| 131 | ;; | |
| 2917 | 132 | s) | 
| 133 | SESSION="$OPTARG" | |
| 134 | ;; | |
| 11577 | 135 | v) | 
| 136 | check_bool "$OPTARG" | |
| 137 | VERBOSE="$OPTARG" | |
| 138 | ;; | |
| 2917 | 139 | \?) | 
| 140 | usage | |
| 141 | ;; | |
| 142 | esac | |
| 143 | done | |
| 144 | } | |
| 2808 | 145 | |
| 2917 | 146 | getoptions $ISABELLE_USEDIR_OPTIONS | 
| 147 | ||
| 148 | getoptions "$@" | |
| 2808 | 149 | shift $(($OPTIND - 1)) | 
| 150 | ||
| 151 | ||
| 152 | # args | |
| 153 | ||
| 9788 | 154 | [ "$#" -ne 2 ] && usage | 
| 2808 | 155 | |
| 156 | LOGIC="$1"; shift | |
| 157 | NAME="$1"; shift | |
| 158 | ||
| 9788 | 159 | [ -z "$SESSION" ] && SESSION=$(basename "$NAME") | 
| 2808 | 160 | |
| 4419 | 161 | |
| 162 | ||
| 163 | ## main | |
| 3636 
3f2e55e5bacc
Added some code for generating theory browsing data.
 berghofe parents: 
3504diff
changeset | 164 | |
| 4451 | 165 | # prepare browser info dir | 
| 4419 | 166 | |
| 9788 | 167 | if [ "$INFO" = "true" -a ! -f "$ISABELLE_BROWSER_INFO/index.html" ]; then | 
| 168 | mkdir -p "$ISABELLE_BROWSER_INFO" | |
| 169 | cp "$ISABELLE_HOME/lib/logo/isabelle.gif" "$ISABELLE_BROWSER_INFO/isabelle.gif" | |
| 170 | cp "$ISABELLE_HOME/lib/html/index.html" "$ISABELLE_BROWSER_INFO/index.html" | |
| 3636 
3f2e55e5bacc
Added some code for generating theory browsing data.
 berghofe parents: 
3504diff
changeset | 171 | fi | 
| 
3f2e55e5bacc
Added some code for generating theory browsing data.
 berghofe parents: 
3504diff
changeset | 172 | |
| 2808 | 173 | |
| 4451 | 174 | # prepare log dir | 
| 175 | ||
| 176 | LOGDIR="$ISABELLE_OUTPUT/log" | |
| 177 | mkdir -p "$LOGDIR" | |
| 178 | ||
| 179 | ||
| 180 | # run isabelle | |
| 181 | ||
| 7737 | 182 | PARENT=$(basename "$LOGIC") | 
| 183 | ||
| 11949 | 184 | if [ -z "$BUILD" ]; then | 
| 185 | cd "$NAME" || fail "Bad session directory '$NAME'" | |
| 186 | fi | |
| 4451 | 187 | |
| 11847 | 188 | if [ "$DOCUMENT" != false ]; then | 
| 8568 | 189 | DOC="$DOCUMENT" | 
| 190 | else | |
| 191 | DOC="" | |
| 192 | fi | |
| 7737 | 193 | |
| 194 | ||
| 195 | SECONDS=0 | |
| 6249 | 196 | |
| 2808 | 197 | if [ -n "$BUILD" ]; then | 
| 4451 | 198 | ITEM="$SESSION" | 
| 11577 | 199 | echo "Building $ITEM ..." >&2 | 
| 4451 | 200 | LOG="$LOGDIR/$ITEM" | 
| 201 | ||
| 8359 
124ad46105dd
option -c: tell ML system to compress output image;
 wenzelm parents: 
8241diff
changeset | 202 | OPT_C="" | 
| 
124ad46105dd
option -c: tell ML system to compress output image;
 wenzelm parents: 
8241diff
changeset | 203 | [ "$COMPRESS" = true ] && OPT_C="-c" | 
| 
124ad46105dd
option -c: tell ML system to compress output image;
 wenzelm parents: 
8241diff
changeset | 204 | |
| 9788 | 205 | "$ISABELLE" \ | 
| 17050 | 206 | -e "Session.use_dir \"$ROOT_FILE\" true [$MODES] $RESET $INFO \"$DOC\" $DOCUMENT_GRAPH [$DOCUMENT_VERSIONS] \"$PARENT\" \"$SESSION\" \"$DUMP\" \"$RPATH\" $PROOFS $VERBOSE;" \ | 
| 11577 | 207 | $OPT_C -q -w $LOGIC $NAME > "$LOG" | 
| 9788 | 208 | RC="$?" | 
| 2808 | 209 | else | 
| 9788 | 210 | ITEM=$(basename "$LOGIC")-"$SESSION" | 
| 11577 | 211 | echo "Running $ITEM ..." >&2 | 
| 4451 | 212 | LOG="$LOGDIR/$ITEM" | 
| 213 | ||
| 9788 | 214 | "$ISABELLE" \ | 
| 17050 | 215 | -e "Session.use_dir \"$ROOT_FILE\" false [$MODES] $RESET $INFO \"$DOC\" $DOCUMENT_GRAPH [$DOCUMENT_VERSIONS] \"$PARENT\" \"$SESSION\" \"$DUMP\" \"$RPATH\" $PROOFS $VERBOSE; quit();" \ | 
| 11577 | 216 | -r -q "$LOGIC" > "$LOG" | 
| 9788 | 217 | RC="$?" | 
| 6212 | 218 | cd .. | 
| 2808 | 219 | fi | 
| 4451 | 220 | |
| 9788 | 221 | ELAPSED=$("$ISABELLE_HOME/lib/scripts/showtime" "$SECONDS")
 | 
| 4451 | 222 | |
| 223 | ||
| 224 | # exit status | |
| 225 | ||
| 9788 | 226 | if [ "$RC" -eq 0 ]; then | 
| 11577 | 227 | echo "Finished $ITEM ($ELAPSED elapsed time)" >&2 | 
| 4451 | 228 | gzip --force "$LOG" | 
| 229 | else | |
| 11577 | 230 |   { echo "$ITEM FAILED";
 | 
| 231 | echo "(see also $LOG)"; | |
| 232 | echo; tail "$LOG"; echo; } >&2 | |
| 4451 | 233 | fi | 
| 234 | ||
| 9788 | 235 | exit "$RC" |