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