wenzelm@2292: #!/bin/bash wenzelm@2292: # wenzelm@2308: # $Id$ wenzelm@2308: # wenzelm@2292: # Basic Isabelle startup script. wenzelm@2292: wenzelm@2292: wenzelm@2292: ## settings wenzelm@2292: wenzelm@2292: ISABELLE_HOME=$(dirname $(dirname $0)) wenzelm@2292: . $ISABELLE_HOME/lib/scripts/getsettings wenzelm@2292: wenzelm@2292: #get bash-style platform info wenzelm@2292: unset HOSTTYPE wenzelm@2292: unset OSTYPE wenzelm@2292: PLATFORM=$(bash -noprofile -c 'echo $HOSTTYPE-$OSTYPE') wenzelm@2292: wenzelm@2292: wenzelm@2292: ## diagnostics wenzelm@2292: wenzelm@2292: PRG=$(basename $0) wenzelm@2292: wenzelm@2292: function usage() wenzelm@2292: { wenzelm@2292: echo wenzelm@2292: echo "Usage: $PRG [OPTIONS] [INPUT] [OUTPUT]" wenzelm@2292: echo wenzelm@2292: echo " Options are:" wenzelm@2292: echo " -c force copying of heap file" wenzelm@2292: echo " -e MLTEXT pass MLTEXT to ML session" wenzelm@2292: #FIXME echo " -o OPTIONS pass options to ML system" wenzelm@2292: echo " -q non-interactive session" wenzelm@2292: echo " -r open heap file read-only" wenzelm@2292: echo " -u pass 'use\"ROOT.ML\" handle _ => exit 1; commit();'" wenzelm@2292: echo " to the ML session" wenzelm@2292: echo wenzelm@2292: echo " INPUT (default \"$DEFAULT_LOGIC\") and OUTPUT specify in/out heaps." wenzelm@2292: echo " These are either names to be searched in the Isabelle path, or actual" wenzelm@2292: echo " file names (containing at least one /)." wenzelm@2292: echo " If INPUT is \"SYSTEM\", just start the bare bones ML system." wenzelm@2292: echo wenzelm@2292: exit 1 wenzelm@2292: } wenzelm@2292: wenzelm@2292: function fail() wenzelm@2292: { wenzelm@2292: echo "$1" wenzelm@2292: exit 2 wenzelm@2292: } wenzelm@2292: wenzelm@2292: wenzelm@2292: ## process command line wenzelm@2292: wenzelm@2292: # options wenzelm@2292: wenzelm@2292: COPYDB="" wenzelm@2292: MLTEXT="" wenzelm@2292: COPYDB="" wenzelm@2292: OPTIONS="" wenzelm@2292: TERMINATE="" wenzelm@2292: READONLY="" wenzelm@2292: wenzelm@2292: while getopts "ce:qru" OPT wenzelm@2292: do wenzelm@2292: case "$OPT" in wenzelm@2292: c) wenzelm@2292: COPYDB=true wenzelm@2292: ;; wenzelm@2292: e) wenzelm@2292: MLTEXT="$MLTEXT $OPTARG" wenzelm@2292: ;; wenzelm@2292: o) wenzelm@2292: OPTIONS="$OPTIONS $OPTARG" wenzelm@2292: ;; wenzelm@2292: q) wenzelm@2292: TERMINATE=true wenzelm@2292: ;; wenzelm@2292: r) wenzelm@2292: READONLY=true wenzelm@2292: ;; wenzelm@2292: u) wenzelm@2292: MLTEXT="$MLTEXT use\"ROOT.ML\" handle _ => exit 1; commit();" wenzelm@2292: ;; wenzelm@2292: \?) wenzelm@2292: usage wenzelm@2292: ;; wenzelm@2292: esac wenzelm@2292: done wenzelm@2292: wenzelm@2292: shift $(($OPTIND - 1)) wenzelm@2292: wenzelm@2292: wenzelm@2292: # args wenzelm@2292: wenzelm@2292: INPUT="" wenzelm@2292: OUTPUT="" wenzelm@2292: wenzelm@2292: if [ $# -ge 1 ]; then wenzelm@2292: INPUT="$1" wenzelm@2292: shift wenzelm@2292: fi wenzelm@2292: wenzelm@2292: if [ $# -ge 1 ]; then wenzelm@2292: OUTPUT="$1" wenzelm@2292: shift wenzelm@2292: fi wenzelm@2292: wenzelm@2292: [ $# -ne 0 ] && fail "Bad args: $*" wenzelm@2292: wenzelm@2292: wenzelm@2292: ## check ML system wenzelm@2292: wenzelm@2308: [ -z "$ML_SYSTEM" ] && fail "Missing ML system settings! Unable to run Isabelle." wenzelm@2292: wenzelm@2292: wenzelm@2292: ## input heap file wenzelm@2292: wenzelm@2292: [ -z "$INPUT" ] && INPUT="$DEFAULT_LOGIC" wenzelm@2292: wenzelm@2292: case "$INPUT" in wenzelm@2292: SYSTEM) wenzelm@2292: INFILE="" wenzelm@2292: ;; wenzelm@2292: */*) wenzelm@2292: INFILE="$INPUT" wenzelm@2292: [ ! -f "$INFILE" ] && fail "Bad heap file file: \"$INFILE\"" wenzelm@2292: ;; wenzelm@2292: *) wenzelm@2308: ISA_PATH="" wenzelm@2292: INFILE="" wenzelm@2292: for DIR in $(echo $ISABELLE_PATH | tr : " ") wenzelm@2292: do wenzelm@2308: ISA_PATH="$ISA_PATH $DIR/$ML_SYSTEM-$PLATFORM" wenzelm@2292: [ -z "$INFILE" -a -f $DIR/$ML_SYSTEM-$PLATFORM/$INPUT ] && INFILE=$DIR/$ML_SYSTEM-$PLATFORM/$INPUT wenzelm@2292: done wenzelm@2308: if [ -z "$INFILE" ]; then wenzelm@2308: echo "Unknown logic \"$INPUT\" -- no heap file found in:" wenzelm@2308: for DIR in $ISA_PATH wenzelm@2308: do wenzelm@2308: echo " $DIR" wenzelm@2308: done wenzelm@2308: exit 2 wenzelm@2308: fi wenzelm@2292: ;; wenzelm@2292: esac wenzelm@2292: wenzelm@2292: wenzelm@2292: ## output heap file wenzelm@2292: wenzelm@2292: case "$OUTPUT" in wenzelm@2292: "") wenzelm@2292: [ -z "$READONLY" -a -w "$INFILE" ] && OUTFILE="$INFILE" wenzelm@2292: ;; wenzelm@2292: */*) wenzelm@2292: OUTFILE="$OUTPUT" wenzelm@2292: ;; wenzelm@2292: *) wenzelm@2292: OUTDIR="$ISABELLE_OUTPUT/$ML_SYSTEM-$PLATFORM" wenzelm@2292: mkdir -p "$OUTDIR" wenzelm@2292: OUTFILE="$OUTDIR/$OUTPUT" wenzelm@2292: ;; wenzelm@2292: esac wenzelm@2292: wenzelm@2292: wenzelm@2292: ## run it! wenzelm@2292: wenzelm@2292: ML_SYSTEM_BASE=$(echo $ML_SYSTEM | cut -f1 -d-) wenzelm@2292: wenzelm@2292: export INFILE OUTFILE COPYDB MLTEXT OPTIONS TERMINATE wenzelm@2292: [ -f $ISABELLE_HOME/lib/scripts/run-$ML_SYSTEM ] && exec $ISABELLE_HOME/lib/scripts/run-$ML_SYSTEM wenzelm@2292: exec $ISABELLE_HOME/lib/scripts/run-$ML_SYSTEM_BASE