lib/Tools/usedir
author wenzelm
Thu, 11 Oct 2007 15:57:29 +0200
changeset 24957 50959112a4e1
parent 24118 464f260e5a20
child 25234 2e91cc4ddf29
permissions -rwxr-xr-x
usage: HOL_USEDIR_OPTIONS;
     1 #!/usr/bin/env bash
     2 #
     3 # $Id$
     4 # Author: Markus Wenzel, TU Muenchen
     5 #
     6 # DESCRIPTION: build object-logic or run examples
     7 
     8 
     9 ## diagnostics
    10 
    11 PRG="$(basename "$0")"
    12 
    13 function usage()
    14 {
    15   echo
    16   echo "Usage: $PRG [OPTIONS] LOGIC NAME"
    17   echo
    18   echo "  Options are:"
    19   echo "    -C BOOL      copy existing document directory to -D PATH (default true)"
    20   echo "    -D PATH      dump generated document sources into PATH"
    21   echo "    -M MAX       multithreading: maximum number of worker threads (default 1)"
    22   echo "    -P PATH      set path for remote theory browsing information"
    23   echo "    -T LEVEL     multithreading: trace level (default 0)"
    24   echo "    -V VERSION   declare alternative document VERSION"
    25   echo "    -b           build mode (output heap image, using current dir)"
    26   echo "    -c BOOL      tell ML system to compress output image (default true)"
    27   echo "    -d FORMAT    build document as FORMAT (default false)"
    28   echo "    -f NAME      use ML file NAME (default ROOT.ML)"
    29   echo "    -g BOOL      generate session graph image for document (default false)"
    30   echo "    -i BOOL      generate HTML and graph browser information (default false)"
    31   echo "    -m MODE      add print mode for output"
    32   echo "    -p LEVEL     set level of detail for proof objects"
    33   echo "    -r           reset session path"
    34   echo "    -s NAME      override session NAME"
    35   echo "    -v BOOL      be verbose (default false)"
    36   echo
    37   echo "  Build object-logic or run examples. Also creates browsing"
    38   echo "  information (HTML etc.) according to settings."
    39   echo
    40   echo "  ISABELLE_USEDIR_OPTIONS=$ISABELLE_USEDIR_OPTIONS"
    41   echo "  HOL_USEDIR_OPTIONS=$HOL_USEDIR_OPTIONS"
    42   echo
    43   exit 1
    44 }
    45 
    46 function fail()
    47 {
    48   echo "$1" >&2
    49   exit 2
    50 }
    51 
    52 function check_bool()
    53 {
    54   [ "$1" = true -o "$1" = false ] || fail "Bad boolean: \"$1\""
    55 }
    56 
    57 function check_number()
    58 {
    59   [ -n "$1" -a -z "$(echo "$1" | tr -d '[0-9]')" ] || fail "Bad number: \"$1\""
    60 }
    61 
    62 
    63 ## process command line
    64 
    65 # options
    66 
    67 COPY_DUMP=true
    68 DUMP=""
    69 MAXTHREADS="1"
    70 RPATH=""
    71 TRACETHREADS="0"
    72 DOCUMENT_VERSIONS=""
    73 BUILD=""
    74 COMPRESS=true
    75 DOCUMENT=false
    76 ROOT_FILE="ROOT.ML"
    77 DOCUMENT_GRAPH=false
    78 INFO=false
    79 MODES=""
    80 RESET=false
    81 SESSION=""
    82 PROOFS=0
    83 VERBOSE=false
    84 
    85 function getoptions()
    86 {
    87   OPTIND=1
    88   while getopts "C:D:M:P:T:V:bc:d:f:g:i:m:p:rs:v:" OPT
    89   do
    90     case "$OPT" in
    91       C)
    92         check_bool "$OPTARG"
    93         COPY_DUMP="$OPTARG"
    94         ;;
    95       D)
    96         DUMP="$OPTARG"
    97         ;;
    98       M)
    99         check_number "$OPTARG"
   100         MAXTHREADS="$OPTARG"
   101         ;;
   102       P)
   103         RPATH="$OPTARG"
   104         ;;
   105       T)
   106         check_number "$OPTARG"
   107         TRACETHREADS="$OPTARG"
   108         ;;
   109       V)
   110         if [ -z "$DOCUMENT_VERSIONS" ]; then
   111           DOCUMENT_VERSIONS="\"$OPTARG\""
   112         else
   113           DOCUMENT_VERSIONS="$DOCUMENT_VERSIONS, \"$OPTARG\""
   114         fi
   115         ;;
   116       b)
   117         BUILD=true
   118         ;;
   119       c)
   120         check_bool "$OPTARG"
   121         COMPRESS="$OPTARG"
   122         ;;
   123       d)
   124         DOCUMENT="$OPTARG"
   125         ;;
   126       f)
   127         ROOT_FILE="$OPTARG"
   128         ;;
   129       g)
   130         check_bool "$OPTARG"
   131         DOCUMENT_GRAPH="$OPTARG"
   132         ;;
   133       i)
   134         check_bool "$OPTARG"
   135         INFO="$OPTARG"
   136         ;;
   137       m)
   138         if [ -z "$MODES" ]; then
   139           MODES="\"$OPTARG\""
   140         else
   141           MODES="\"$OPTARG\", $MODES"
   142         fi
   143         ;;
   144       p)
   145         check_number "$OPTARG"
   146         PROOFS="$OPTARG"
   147         ;;
   148       r)
   149         RESET=true
   150         ;;
   151       s)
   152         SESSION="$OPTARG"
   153         ;;
   154       v)
   155         check_bool "$OPTARG"
   156         VERBOSE="$OPTARG"
   157         ;;
   158       \?)
   159         usage
   160         ;;
   161     esac
   162   done
   163 }
   164 
   165 getoptions $ISABELLE_USEDIR_OPTIONS
   166 
   167 getoptions "$@"
   168 shift $(($OPTIND - 1))
   169 
   170 
   171 # args
   172 
   173 [ "$#" -ne 2 ] && usage
   174 
   175 LOGIC="$1"; shift
   176 NAME="$1"; shift
   177 
   178 [ -z "$SESSION" ] && SESSION=$(basename "$NAME")
   179 
   180 
   181 
   182 ## main
   183 
   184 # prepare browser info dir
   185 
   186 if [ "$INFO" = "true" -a ! -f "$ISABELLE_BROWSER_INFO/index.html" ]; then
   187   mkdir -p "$ISABELLE_BROWSER_INFO"
   188   cp "$ISABELLE_HOME/lib/logo/isabelle.gif" "$ISABELLE_BROWSER_INFO/isabelle.gif"
   189   cp "$ISABELLE_HOME/lib/html/index.html" "$ISABELLE_BROWSER_INFO/index.html"
   190 fi
   191 
   192 
   193 # prepare log dir
   194 
   195 LOGDIR="$ISABELLE_OUTPUT/log"
   196 mkdir -p "$LOGDIR"
   197 
   198 
   199 # run isabelle
   200 
   201 PARENT=$(basename "$LOGIC")
   202 
   203 if [ -z "$BUILD" ]; then
   204   cd "$NAME" || fail "Bad session directory '$NAME'"
   205 fi
   206 
   207 if [ "$DOCUMENT" != false ]; then
   208   DOC="$DOCUMENT"
   209 else
   210   DOC=""
   211 fi
   212 
   213 
   214 . "$ISABELLE_HOME/lib/scripts/timestart.bash"
   215 
   216 if [ -n "$BUILD" ]; then
   217   ITEM="$SESSION"
   218   echo "Building $ITEM ..." >&2
   219   LOG="$LOGDIR/$ITEM"
   220 
   221   OPT_C=""
   222   [ "$COMPRESS" = true ] && OPT_C="-c"
   223 
   224   "$ISABELLE" \
   225     -e "Session.use_dir \"$ROOT_FILE\" true [$MODES] $RESET $INFO \"$DOC\" $DOCUMENT_GRAPH [$DOCUMENT_VERSIONS] \"$PARENT\" \"$SESSION\" ($COPY_DUMP, \"$DUMP\") \"$RPATH\" $PROOFS $VERBOSE $MAXTHREADS $TRACETHREADS;" \
   226     $OPT_C -q -w $LOGIC $NAME > "$LOG"
   227   RC="$?"
   228 else
   229   ITEM=$(basename "$LOGIC")-"$SESSION"
   230   echo "Running $ITEM ..." >&2
   231   LOG="$LOGDIR/$ITEM"
   232 
   233   "$ISABELLE" \
   234     -e "Session.use_dir \"$ROOT_FILE\" false [$MODES] $RESET $INFO \"$DOC\" $DOCUMENT_GRAPH [$DOCUMENT_VERSIONS] \"$PARENT\" \"$SESSION\" ($COPY_DUMP, \"$DUMP\") \"$RPATH\" $PROOFS $VERBOSE $MAXTHREADS $TRACETHREADS; quit();" \
   235     -r -q "$LOGIC" > "$LOG"
   236   RC="$?"
   237   cd ..
   238 fi
   239 
   240 . "$ISABELLE_HOME/lib/scripts/timestop.bash"
   241 
   242 
   243 # exit status
   244 
   245 if [ "$RC" -eq 0 ]; then
   246   echo "Finished $ITEM ($TIMES_REPORT)" >&2
   247   gzip --force "$LOG"
   248 else
   249   { echo "$ITEM FAILED";
   250     echo "(see also $LOG)";
   251     echo; tail "$LOG"; echo; } >&2
   252 fi
   253 
   254 exit "$RC"