Admin/makebin
author wenzelm
Wed, 02 Jun 2010 14:55:37 +0200
changeset 37283 9e7a4d4bba54
parent 34238 b28be884edda
child 37286 344468462338
permissions -rwxr-xr-x
Added tag isa2009-2-test0 for changeset 935c75359742
wenzelm@12721
     1
#!/usr/bin/env bash
wenzelm@10082
     2
#
wenzelm@30862
     3
# makebin -- make Isabelle logic images for current platform
wenzelm@10082
     4
wenzelm@10082
     5
wenzelm@10082
     6
## global settings
wenzelm@10082
     7
wenzelm@12427
     8
TMP="/var/tmp/isabelle-makebin$$"
wenzelm@10082
     9
wenzelm@27030
    10
export THIS_IS_ISABELLE_MAKEBIN=true
wenzelm@27030
    11
wenzelm@10082
    12
wenzelm@10082
    13
## diagnostics
wenzelm@10082
    14
wenzelm@10082
    15
PRG=$(basename "$0")
wenzelm@10082
    16
wenzelm@10082
    17
function usage()
wenzelm@10082
    18
{
wenzelm@10082
    19
  echo
wenzelm@12827
    20
  echo "Usage: $PRG [OPTIONS] ARCHIVE"
wenzelm@10082
    21
  echo
wenzelm@12827
    22
  echo "  Options are:"
wenzelm@13001
    23
  echo "    -l           produce library"
wenzelm@13001
    24
  echo "    -n           dry run"
wenzelm@12827
    25
  echo
wenzelm@12827
    26
  echo "  Precompile Isabelle for the current platform."
wenzelm@10082
    27
  echo
wenzelm@10082
    28
  exit 1
wenzelm@10082
    29
}
wenzelm@10082
    30
wenzelm@10082
    31
function fail()
wenzelm@10082
    32
{
wenzelm@10082
    33
  echo "$1" >&2
wenzelm@10082
    34
  exit 2
wenzelm@10082
    35
}
wenzelm@10082
    36
wenzelm@10082
    37
wenzelm@10082
    38
## process command line
wenzelm@10082
    39
wenzelm@12827
    40
# options
wenzelm@12827
    41
wenzelm@12827
    42
DO_LIBRARY=""
wenzelm@13001
    43
DRY_RUN=""
wenzelm@12827
    44
wenzelm@13001
    45
while getopts "ln" OPT
wenzelm@12827
    46
do
wenzelm@12827
    47
  case "$OPT" in
wenzelm@12827
    48
    l)
wenzelm@12827
    49
      DO_LIBRARY=true
wenzelm@12827
    50
      ;;
wenzelm@13001
    51
    n)
wenzelm@13001
    52
      DRY_RUN=true
wenzelm@12827
    53
      ;;
wenzelm@12827
    54
    \?)
wenzelm@12827
    55
      usage
wenzelm@12827
    56
      ;;
wenzelm@12827
    57
  esac
wenzelm@12827
    58
done
wenzelm@12827
    59
wenzelm@12827
    60
shift $(($OPTIND - 1))
wenzelm@12827
    61
wenzelm@12827
    62
wenzelm@12827
    63
# args
wenzelm@12827
    64
wenzelm@10082
    65
[ "$#" -gt 1 ] && usage
wenzelm@10082
    66
wenzelm@10082
    67
ARCHIVE="$1"; shift
wenzelm@10082
    68
wenzelm@10082
    69
wenzelm@10082
    70
## main
wenzelm@10082
    71
wenzelm@10082
    72
[ ! -f "$ARCHIVE" ] && fail "Bad archive file $ARCHIVE"
wenzelm@30862
    73
ARCHIVE_BASE="$(basename "$ARCHIVE")"
wenzelm@30862
    74
ARCHIVE_DIR="$(cd $(dirname "$ARCHIVE"); echo "$PWD")"
wenzelm@10082
    75
ARCHIVE_FULL="$ARCHIVE_DIR/$ARCHIVE_BASE"
wenzelm@10082
    76
wenzelm@30862
    77
ISABELLE_NAME="$(basename "$ARCHIVE_BASE" .tar.gz)"
wenzelm@10082
    78
ISABELLE_HOME="$TMP/$ISABELLE_NAME"
wenzelm@10082
    79
wenzelm@10082
    80
wenzelm@10082
    81
# build logics
wenzelm@10082
    82
wenzelm@10082
    83
mkdir "$TMP" || fail "Cannot create directory $TMP"
wenzelm@10082
    84
wenzelm@10082
    85
cd "$TMP"
wenzelm@30862
    86
tar xzf "$ARCHIVE_FULL"
wenzelm@10082
    87
cd "$ISABELLE_NAME"
wenzelm@10082
    88
wenzelm@17575
    89
perl -pi \
wenzelm@30862
    90
  -e 's:^ISABELLE_USEDIR_OPTIONS=.*$:ISABELLE_USEDIR_OPTIONS="-M 1 -p 1":;' \
wenzelm@17575
    91
  etc/settings
wenzelm@17575
    92
wenzelm@13001
    93
if [ -n "$DO_LIBRARY" ]; then
wenzelm@30862
    94
  perl -pi -e 's:^ISABELLE_USEDIR_OPTIONS=.*$:ISABELLE_USEDIR_OPTIONS="-M 1 -p 1 -i true -d pdf -V outline=/proof,/ML":;' \
wenzelm@13001
    95
    etc/settings
wenzelm@13001
    96
fi
wenzelm@11576
    97
wenzelm@28504
    98
ISABELLE_HOME_USER=$(./bin/isabelle getenv -b ISABELLE_HOME_USER)
wenzelm@10082
    99
[ -f "$ISABELLE_HOME_USER/etc/settings" ] && \
wenzelm@10082
   100
  echo "### WARNING!  Personal Isabelle settings present. " >&2
wenzelm@10082
   101
wenzelm@28504
   102
COMPILER=$(./bin/isabelle getenv -b ML_IDENTIFIER)
wenzelm@28504
   103
PLATFORM=$(./bin/isabelle getenv -b ML_PLATFORM)
wenzelm@10082
   104
wenzelm@13001
   105
if [ -n "$DRY_RUN" ]; then
wenzelm@12827
   106
  mkdir -p "heaps/$COMPILER/log"
wenzelm@10082
   107
  touch "heaps/$COMPILER/HOL"
wenzelm@12827
   108
  touch "heaps/$COMPILER/log/HOL.gz"
wenzelm@27587
   109
  touch "heaps/$COMPILER/HOL-Nominal"
wenzelm@27587
   110
  touch "heaps/$COMPILER/log/HOL-Nominal.gz"
wenzelm@33934
   111
  touch "heaps/$COMPILER/HOLCF"
wenzelm@33934
   112
  touch "heaps/$COMPILER/log/HOLCF.gz"
wenzelm@10082
   113
  touch "heaps/$COMPILER/ZF"
wenzelm@12827
   114
  touch "heaps/$COMPILER/log/ZF.gz"
wenzelm@12827
   115
  mkdir browser_info
wenzelm@13001
   116
elif [ -n "$DO_LIBRARY" ]; then
wenzelm@13001
   117
  ./build -bait
wenzelm@10082
   118
else
wenzelm@27587
   119
  ./build -b -m HOL-Nominal HOL
wenzelm@33934
   120
  ./build -b HOLCF
wenzelm@10082
   121
  ./build -b ZF
wenzelm@10082
   122
  rm -f "heaps/$COMPILER/Pure" "heaps/$COMPILER/FOL"
wenzelm@10082
   123
fi
wenzelm@10082
   124
wenzelm@10082
   125
wenzelm@10082
   126
# prepare result
wenzelm@10082
   127
wenzelm@10082
   128
cd "$TMP"
wenzelm@10082
   129
wenzelm@10082
   130
chmod -R g=o "$TMP"
wenzelm@10082
   131
chgrp -R isabelle "$TMP"
wenzelm@10082
   132
wenzelm@13001
   133
if [ -n "$DO_LIBRARY" ]; then
wenzelm@30862
   134
  tar cf "${ISABELLE_NAME}_library.tar" $ISABELLE_NAME/browser_info && \
wenzelm@13001
   135
    gzip -f "${ISABELLE_NAME}_library.tar"
wenzelm@13001
   136
    cp -f "${ISABELLE_NAME}_library.tar.gz" "$ARCHIVE_DIR"
wenzelm@13001
   137
else
wenzelm@33934
   138
  for IMG in HOL HOL-Nominal HOLCF ZF
wenzelm@13001
   139
  do
wenzelm@30862
   140
    tar cf "${IMG}_$PLATFORM.tar" \
wenzelm@13001
   141
      "$ISABELLE_NAME/heaps/$COMPILER/$IMG" \
wenzelm@13001
   142
      "$ISABELLE_NAME/heaps/$COMPILER/log/$IMG.gz"
wenzelm@13001
   143
    gzip -f "${IMG}_$PLATFORM.tar"
wenzelm@13001
   144
    cp -f "${IMG}_$PLATFORM.tar.gz" "$ARCHIVE_DIR"
wenzelm@13001
   145
  done
wenzelm@13001
   146
fi
wenzelm@10082
   147
wenzelm@10082
   148
wenzelm@10082
   149
# clean up
wenzelm@10082
   150
cd /tmp
wenzelm@10082
   151
rm -rf "$TMP"