Admin/polyml/bin/polyml
author wenzelm
Mon, 05 Feb 2001 20:44:51 +0100
changeset 11073 e45b136716f5
child 11074 100637226ff5
permissions -rwxr-xr-x
polyml multiplatform setup;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11073
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
     1
#!/bin/sh
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
     2
#
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
     3
# Poly/ML wrapper script
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
     4
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
     5
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
     6
## self references
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
     7
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
     8
PRG=`basename "$0"`
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
     9
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    10
if [ -h "$0" ]; then
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    11
  THIS=`cd \`dirname "$0"\`; cd \`dirname \\\`find "$PRG" -ls | cut -d ">" -f 2\\\`\`; pwd`
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    12
else
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    13
  THIS=`cd \`dirname "$0"\`; pwd`
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    14
fi
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    15
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    16
SUPER=`cd "$THIS/.."; pwd`
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    17
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    18
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    19
## diagnostics
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    20
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    21
usage()
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    22
{
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    23
  echo
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    24
  echo "Usage: $PRG [OPTIONS] [DATABASE]"
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    25
  echo
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    26
  echo "  Options are:"
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    27
  echo "    -H SIZE      heap size in MB"
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    28
  echo "    -c           compress DATABASE"
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    29
  echo "    -p ARGS      pass ARGS to poly"
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    30
  echo "    -r           open DATABASE read-only"
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    31
  echo
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    32
  exit 1
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    33
}
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    34
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    35
fail()
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    36
{
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    37
  echo "$1" >&2
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    38
  exit 2
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    39
}
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    40
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    41
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    42
## process command line
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    43
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    44
# options
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    45
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    46
COMPRESS=""
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    47
PASS_ARGS=""
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    48
READONLY=""
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    49
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    50
while getopts "H:cp:r" OPT
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    51
do
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    52
  case "$OPT" in
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    53
    H)
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    54
      PASS_ARGS="$PASS_ARGS -H $OPTARG"
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    55
      ;;
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    56
    c)
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    57
      COMPRESS=true
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    58
      ;;
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    59
    p)
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    60
      PASS_ARGS="$PASS_ARGS $OPTARG"
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    61
      ;;
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    62
    r)
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    63
      READONLY=true
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    64
      ;;
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    65
    \?)
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    66
      usage
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    67
      ;;
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    68
  esac
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    69
done
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    70
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    71
shift `expr $OPTIND - 1`
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    72
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    73
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    74
# arguments
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    75
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    76
DATABASE=""
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    77
[ $# -ge 1 ] && { DATABASE="$1"; shift; }
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    78
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    79
[ $# -ne 0 ] && { echo "Bad arguments: $*"; usage; }
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    80
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    81
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    82
## main
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    83
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    84
PLATFORM=`"$THIS/polyml-platform"`
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    85
POLY="$SUPER/$PLATFORM/poly"
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    86
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    87
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    88
# prepare database
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    89
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    90
if [ -z "$DATABASE" ]; then
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    91
  DB="$SUPER/$PLATFORM/ML_dbase"
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    92
  READONLY=true
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    93
elif [ -f "$DATABASE.$PLATFORM" ]; then
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    94
  DB="$DATABASE.$PLATFORM"
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    95
  [ ! -w "$DB" ] && READONLY=true
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    96
elif [ -f "$DATABASE" ]; then
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    97
  DB="$DATABASE"
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    98
  [ ! -w "$DB" ] && READONLY=true
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
    99
else
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
   100
  if [ `basename "$DATABASE"` = `basename "$DATABASE" "$PLATFORM"` ]; then
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
   101
    DB="$DATABASE.$PLATFORM"
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
   102
  else
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
   103
    DB="$DATABASE"
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
   104
  fi
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
   105
  [ -n "$READONLY" ] && fail "Bad database: \"$DB\""
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
   106
  echo "PolyML.make_database \"$DB\"; PolyML.quit();" | \
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
   107
    "$POLY" -r "$SUPER/$PLATFORM/ML_dbase"
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
   108
  [ -f "$DB" ] || fail "Failed to prepare database: \"$DB\""
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
   109
fi
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
   110
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
   111
DB_BASE=`basename "$DB"`
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
   112
DB_DIR=`dirname "$DB"`; DB_DIR=`cd "$DB_DIR"; pwd`
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
   113
FULL_DB="$DB_DIR/$DB_BASE"
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
   114
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
   115
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
   116
# run Poly/ML session
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
   117
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
   118
POLY_OPTIONS="$PASS_ARGS"
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
   119
[ -n "$READONLY" ] && POLY_OPTIONS="-r $POLY_OPTIONS"
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
   120
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
   121
INFO=`ls -l "$DB"`
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
   122
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
   123
"$POLY" $POLY_OPTIONS "$FULL_DB"
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
   124
RC="$?"
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
   125
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
   126
NEW_INFO=`ls -l "$DB"`
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
   127
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
   128
[ -z "$READONLY" -a -f "$DB" -a "$INFO" != "$NEW_INFO" -a -n "$COMPRESS" ] \
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
   129
  && "$POLY" -d -c "$DB"
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
   130
e45b136716f5 polyml multiplatform setup;
wenzelm
parents:
diff changeset
   131
exit "$RC"