3 # Author: Markus Wenzel, TU Muenchen
5 # DESCRIPTION: build object-logic or run examples
10 PRG="$(basename "$0")"
15 echo "Usage: isabelle $PRG [OPTIONS] LOGIC NAME"
18 echo " -C BOOL copy existing document directory to -D PATH (default true)"
19 echo " -D PATH dump generated document sources into PATH"
20 echo " -M MAX multithreading: maximum number of worker threads (default 1)"
21 echo " -P PATH set path for remote theory browsing information"
22 echo " -T LEVEL multithreading: trace level (default 0)"
23 echo " -V VERSION declare alternative document VERSION"
24 echo " -b build mode (output heap image, using current dir)"
25 echo " -d FORMAT build document as FORMAT (default false)"
26 echo " -f NAME use ML file NAME (default ROOT.ML)"
27 echo " -g BOOL generate session graph image for document (default false)"
28 echo " -i BOOL generate HTML and graph browser information (default false)"
29 echo " -m MODE add print mode for output"
30 echo " -p LEVEL set level of detail for proof objects (default 0)"
31 echo " -q LEVEL set level of parallel proof checking (default 1)"
32 echo " -r reset session path"
33 echo " -s NAME override session NAME"
34 echo " -t BOOL internal session timing (default false)"
35 echo " -v BOOL be verbose (default false)"
37 echo " Build object-logic or run examples. Also creates browsing"
38 echo " information (HTML etc.) according to settings."
40 echo " ISABELLE_USEDIR_OPTIONS=$ISABELLE_USEDIR_OPTIONS"
42 echo " ML_PLATFORM=$ML_PLATFORM"
43 echo " ML_HOME=$ML_HOME"
44 echo " ML_SYSTEM=$ML_SYSTEM"
45 echo " ML_OPTIONS=$ML_OPTIONS"
58 [ "$1" = true -o "$1" = false ] || fail "Bad boolean: \"$1\""
61 function check_number()
63 [ -n "$1" -a -z "$(echo "$1" | tr -d '[0-9]')" ] || fail "Bad number: \"$1\""
67 ## process command line
93 while getopts "C:D:M:P:T:V:bd:f:g:i:m:p:q:rs:t:v:" OPT
104 if [ "$OPTARG" = max ]; then
107 check_number "$OPTARG"
115 check_number "$OPTARG"
116 TRACETHREADS="$OPTARG"
119 if [ -z "$DOCUMENT_VERSIONS" ]; then
120 DOCUMENT_VERSIONS="\"$OPTARG\""
122 DOCUMENT_VERSIONS="$DOCUMENT_VERSIONS, \"$OPTARG\""
136 DOCUMENT_GRAPH="$OPTARG"
143 if [ -z "$MODES" ]; then
146 MODES="\"$OPTARG\", $MODES"
150 check_number "$OPTARG"
154 check_number "$OPTARG"
155 PARALLEL_PROOFS="$OPTARG"
178 eval "OPTIONS=($ISABELLE_USEDIR_OPTIONS)"
179 getoptions "${OPTIONS[@]}"
182 shift $(($OPTIND - 1))
187 [ "$#" -ne 2 ] && usage
192 [ -z "$SESSION" ] && SESSION=$(basename "$NAME")
198 # prepare browser info dir
200 if [ "$INFO" = "true" -a ! -f "$ISABELLE_BROWSER_INFO/index.html" ]; then
201 mkdir -p "$ISABELLE_BROWSER_INFO"
202 cp "$ISABELLE_HOME/lib/logo/isabelle.gif" "$ISABELLE_BROWSER_INFO/isabelle.gif"
203 cat "$ISABELLE_HOME/lib/html/library_index_header.template" \
204 "$ISABELLE_HOME/lib/html/library_index_content.template" \
205 "$ISABELLE_HOME/lib/html/library_index_footer.template"> "$ISABELLE_BROWSER_INFO/index.html"
211 LOGDIR="$ISABELLE_OUTPUT/log"
217 PARENT=$(basename "$LOGIC")
219 if [ -z "$BUILD" ]; then
220 cd "$NAME" || fail "Bad session directory '$NAME'"
223 if [ "$DOCUMENT" != false ]; then
230 . "$ISABELLE_HOME/lib/scripts/timestart.bash"
232 if [ -n "$BUILD" ]; then
234 echo "Building $ITEM ..." >&2
237 "$ISABELLE_PROCESS" \
238 -e "Session.use_dir \"$ITEM\" \"$ROOT_FILE\" true [$MODES] $RESET $INFO \"$DOC\" $DOCUMENT_GRAPH [$DOCUMENT_VERSIONS] \"$PARENT\" \"$SESSION\" ($COPY_DUMP, \"$DUMP\") \"$RPATH\" $PROOFS $TIMING $VERBOSE $MAXTHREADS $TRACETHREADS $PARALLEL_PROOFS;" \
239 -q -w $LOGIC $NAME > "$LOG"
242 ITEM=$(basename "$LOGIC")-"$SESSION"
243 echo "Running $ITEM ..." >&2
246 "$ISABELLE_PROCESS" \
247 -e "Session.use_dir \"$ITEM\" \"$ROOT_FILE\" false [$MODES] $RESET $INFO \"$DOC\" $DOCUMENT_GRAPH [$DOCUMENT_VERSIONS] \"$PARENT\" \"$SESSION\" ($COPY_DUMP, \"$DUMP\") \"$RPATH\" $PROOFS $TIMING $VERBOSE $MAXTHREADS $TRACETHREADS $PARALLEL_PROOFS; quit();" \
248 -r -q "$LOGIC" > "$LOG"
253 . "$ISABELLE_HOME/lib/scripts/timestop.bash"
258 if [ "$RC" -eq 0 ]; then
259 echo "Finished $ITEM ($TIMES_REPORT)" >&2
262 { echo "$ITEM FAILED";
263 echo "(see also $LOG)";
264 echo; tail -40 "$LOG"; echo; } >&2