lib/Tools/components
author wenzelm
Tue, 24 Sep 2024 17:31:12 +0200
changeset 80937 bdb63d71bf07
parent 77056 f60dd8d76515
permissions -rwxr-xr-x
tuned;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
48840
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
     1
#!/usr/bin/env bash
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
     2
#
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
     3
# Author: Makarius
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
     4
#
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
     5
# DESCRIPTION: resolve Isabelle components
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
     6
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
     7
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
     8
## diagnostics
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
     9
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    10
PRG="$(basename "$0")"
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    11
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    12
function usage()
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    13
{
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    14
  echo
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    15
  echo "Usage: isabelle $PRG [OPTIONS] [COMPONENTS ...]"
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    16
  echo
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    17
  echo "  Options are:"
50653
5c85f8b80b95 simplified quick start via "isabelle components -I";
wenzelm
parents: 48841
diff changeset
    18
  echo "    -I           init user settings"
48840
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    19
  echo "    -R URL       component repository (default \$ISABELLE_COMPONENT_REPOSITORY)"
53435
wenzelm
parents: 53314
diff changeset
    20
  echo "    -a           resolve all missing components"
48840
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    21
  echo "    -l           list status"
73308
f73c691bd679 clarified message;
wenzelm
parents: 73172
diff changeset
    22
  echo "    -u DIR       update \$ISABELLE_HOME_USER/etc/components: add directory"
f73c691bd679 clarified message;
wenzelm
parents: 73172
diff changeset
    23
  echo "    -x DIR       update \$ISABELLE_HOME_USER/etc/components: remove directory"
48840
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    24
  echo
73172
fc828f64da5b support isabelle components -u and -x;
wenzelm
parents: 72524
diff changeset
    25
  echo "  Resolve Isabelle components via download and installation: given COMPONENTS"
fc828f64da5b support isabelle components -u and -x;
wenzelm
parents: 72524
diff changeset
    26
  echo "  are identified via base name. Further operations manage etc/settings and"
fc828f64da5b support isabelle components -u and -x;
wenzelm
parents: 72524
diff changeset
    27
  echo "  etc/components in \$ISABELLE_HOME_USER."
48840
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    28
  echo
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    29
  echo "  ISABELLE_COMPONENT_REPOSITORY=\"$ISABELLE_COMPONENT_REPOSITORY\""
73172
fc828f64da5b support isabelle components -u and -x;
wenzelm
parents: 72524
diff changeset
    30
  echo "  ISABELLE_HOME_USER=\"$ISABELLE_HOME_USER\""
48840
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    31
  echo
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    32
  exit 1
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    33
}
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    34
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    35
function fail()
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    36
{
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    37
  echo "$1" >&2
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    38
  exit 2
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    39
}
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    40
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    41
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    42
## process command line
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    43
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    44
#options
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    45
50653
5c85f8b80b95 simplified quick start via "isabelle components -I";
wenzelm
parents: 48841
diff changeset
    46
INIT_SETTINGS=""
48840
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    47
COMPONENT_REPOSITORY="$ISABELLE_COMPONENT_REPOSITORY"
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    48
ALL_MISSING=""
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    49
LIST_ONLY=""
73172
fc828f64da5b support isabelle components -u and -x;
wenzelm
parents: 72524
diff changeset
    50
declare -a UPDATE_COMPONENTS=()
48840
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    51
73172
fc828f64da5b support isabelle components -u and -x;
wenzelm
parents: 72524
diff changeset
    52
while getopts "IR:alu:x:" OPT
48840
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    53
do
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    54
  case "$OPT" in
50653
5c85f8b80b95 simplified quick start via "isabelle components -I";
wenzelm
parents: 48841
diff changeset
    55
    I)
5c85f8b80b95 simplified quick start via "isabelle components -I";
wenzelm
parents: 48841
diff changeset
    56
      INIT_SETTINGS="true"
5c85f8b80b95 simplified quick start via "isabelle components -I";
wenzelm
parents: 48841
diff changeset
    57
      ;;
48840
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    58
    R)
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    59
      COMPONENT_REPOSITORY="$OPTARG"
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    60
      ;;
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    61
    a)
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    62
      ALL_MISSING="true"
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    63
      ;;
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    64
    l)
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    65
      LIST_ONLY="true"
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    66
      ;;
73172
fc828f64da5b support isabelle components -u and -x;
wenzelm
parents: 72524
diff changeset
    67
    u)
fc828f64da5b support isabelle components -u and -x;
wenzelm
parents: 72524
diff changeset
    68
      UPDATE_COMPONENTS["${#UPDATE_COMPONENTS[@]}"]="+$OPTARG"
fc828f64da5b support isabelle components -u and -x;
wenzelm
parents: 72524
diff changeset
    69
      ;;
fc828f64da5b support isabelle components -u and -x;
wenzelm
parents: 72524
diff changeset
    70
    x)
fc828f64da5b support isabelle components -u and -x;
wenzelm
parents: 72524
diff changeset
    71
      UPDATE_COMPONENTS["${#UPDATE_COMPONENTS[@]}"]="-$OPTARG"
fc828f64da5b support isabelle components -u and -x;
wenzelm
parents: 72524
diff changeset
    72
      ;;
48840
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    73
    \?)
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    74
      usage
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    75
      ;;
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    76
  esac
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    77
done
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    78
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    79
shift $(($OPTIND - 1))
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    80
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    81
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    82
# args
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    83
73172
fc828f64da5b support isabelle components -u and -x;
wenzelm
parents: 72524
diff changeset
    84
[ "$#" -eq 0 -a -z "$INIT_SETTINGS" -a -z "$ALL_MISSING" -a -z "$LIST_ONLY" -a "${#UPDATE_COMPONENTS[@]}" -eq 0 ] && usage
48840
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    85
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    86
if [ -z "$ALL_MISSING" ]; then
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    87
  splitarray ":" "$@"
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    88
else
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    89
  splitarray ":" "$ISABELLE_COMPONENTS_MISSING" "$@"
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    90
fi
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    91
declare -a SELECTED_COMPONENTS=("${SPLITARRAY[@]}")
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    92
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    93
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    94
## main
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    95
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    96
splitarray ":" "$ISABELLE_COMPONENTS"; declare -a AVAILABLE_COMPONENTS=("${SPLITARRAY[@]}")
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    97
splitarray ":" "$ISABELLE_COMPONENTS_MISSING"; declare -a MISSING_COMPONENTS=("${SPLITARRAY[@]}")
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
    98
50653
5c85f8b80b95 simplified quick start via "isabelle components -I";
wenzelm
parents: 48841
diff changeset
    99
if [ -n "$INIT_SETTINGS" ]; then
5c85f8b80b95 simplified quick start via "isabelle components -I";
wenzelm
parents: 48841
diff changeset
   100
  SETTINGS="$ISABELLE_HOME_USER/etc/settings"
73484
4f8849357ba7 more robust: idempotent;
wenzelm
parents: 73402
diff changeset
   101
  SETTINGS_CONTENT='init_components "${ISABELLE_COMPONENTS_BASE:-$USER_HOME/.isabelle/contrib}" "$ISABELLE_HOME/Admin/components/main"'
4f8849357ba7 more robust: idempotent;
wenzelm
parents: 73402
diff changeset
   102
  if [ ! -e "$SETTINGS" ]; then
4f8849357ba7 more robust: idempotent;
wenzelm
parents: 73402
diff changeset
   103
    echo "Initializing \"$SETTINGS\""
4f8849357ba7 more robust: idempotent;
wenzelm
parents: 73402
diff changeset
   104
    mkdir -p "$(dirname "$SETTINGS")"
4f8849357ba7 more robust: idempotent;
wenzelm
parents: 73402
diff changeset
   105
    {
4f8849357ba7 more robust: idempotent;
wenzelm
parents: 73402
diff changeset
   106
      echo "#-*- shell-script -*- :mode=shellscript:"
4f8849357ba7 more robust: idempotent;
wenzelm
parents: 73402
diff changeset
   107
      echo
4f8849357ba7 more robust: idempotent;
wenzelm
parents: 73402
diff changeset
   108
      echo "$SETTINGS_CONTENT"
4f8849357ba7 more robust: idempotent;
wenzelm
parents: 73402
diff changeset
   109
    } > "$SETTINGS"
4f8849357ba7 more robust: idempotent;
wenzelm
parents: 73402
diff changeset
   110
  elif grep "init_components.*components/main" "$SETTINGS" >/dev/null 2>/dev/null
4f8849357ba7 more robust: idempotent;
wenzelm
parents: 73402
diff changeset
   111
  then
4f8849357ba7 more robust: idempotent;
wenzelm
parents: 73402
diff changeset
   112
    :
4f8849357ba7 more robust: idempotent;
wenzelm
parents: 73402
diff changeset
   113
  else
50653
5c85f8b80b95 simplified quick start via "isabelle components -I";
wenzelm
parents: 48841
diff changeset
   114
    echo "User settings file already exists!"
5c85f8b80b95 simplified quick start via "isabelle components -I";
wenzelm
parents: 48841
diff changeset
   115
    echo
5c85f8b80b95 simplified quick start via "isabelle components -I";
wenzelm
parents: 48841
diff changeset
   116
    echo "Edit \"$SETTINGS\" manually"
5c85f8b80b95 simplified quick start via "isabelle components -I";
wenzelm
parents: 48841
diff changeset
   117
    echo "and add the following line near its start:"
5c85f8b80b95 simplified quick start via "isabelle components -I";
wenzelm
parents: 48841
diff changeset
   118
    echo
5c85f8b80b95 simplified quick start via "isabelle components -I";
wenzelm
parents: 48841
diff changeset
   119
    echo "  $SETTINGS_CONTENT"
5c85f8b80b95 simplified quick start via "isabelle components -I";
wenzelm
parents: 48841
diff changeset
   120
    echo
5c85f8b80b95 simplified quick start via "isabelle components -I";
wenzelm
parents: 48841
diff changeset
   121
  fi
5c85f8b80b95 simplified quick start via "isabelle components -I";
wenzelm
parents: 48841
diff changeset
   122
elif [ -n "$LIST_ONLY" ]; then
48840
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
   123
  echo
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
   124
  echo "Available components:"
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
   125
  for NAME in "${AVAILABLE_COMPONENTS[@]}"; do echo "  $NAME"; done
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
   126
  echo
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
   127
  echo "Missing components:"
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
   128
  for NAME in "${MISSING_COMPONENTS[@]}"; do echo "  $NAME"; done
73172
fc828f64da5b support isabelle components -u and -x;
wenzelm
parents: 72524
diff changeset
   129
elif [ "${#UPDATE_COMPONENTS[@]}" -ne 0 ]; then
74038
b4f57bfe82e7 more robust "isabelle build_scala" as separate tool;
wenzelm
parents: 74017
diff changeset
   130
  isabelle scala_build || exit $?
73172
fc828f64da5b support isabelle components -u and -x;
wenzelm
parents: 72524
diff changeset
   131
  exec isabelle java isabelle.Components "${UPDATE_COMPONENTS[@]}"
48840
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
   132
else
77053
c839b84ee66f more modular shell script;
wenzelm
parents: 74499
diff changeset
   133
  source "$ISABELLE_HOME/lib/scripts/download_file"
48840
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
   134
  for NAME in "${SELECTED_COMPONENTS[@]}"
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
   135
  do
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
   136
    BASE_NAME="$(basename "$NAME")"
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
   137
    FULL_NAME=""
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
   138
    for X in "${AVAILABLE_COMPONENTS[@]}" "${MISSING_COMPONENTS[@]}"
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
   139
    do
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
   140
      [ -z "$FULL_NAME" -a "$BASE_NAME" = "$(basename "$X")" ] && FULL_NAME="$X"
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
   141
    done
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
   142
    if [ -z "$FULL_NAME" ]; then
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
   143
      echo "Ignoring irrelevant component \"$NAME\""
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
   144
    elif [ -d "$FULL_NAME" ]; then
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
   145
      echo "Skipping existing component \"$FULL_NAME\""
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
   146
    else
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
   147
      if [ ! -e "${FULL_NAME}.tar.gz" ]; then
77053
c839b84ee66f more modular shell script;
wenzelm
parents: 74499
diff changeset
   148
        download_file "$COMPONENT_REPOSITORY/${BASE_NAME}.tar.gz" "${FULL_NAME}.tar.gz" || exit $?
48840
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
   149
      fi
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
   150
      if [ -e "${FULL_NAME}.tar.gz" ]; then
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
   151
        echo "Unpacking \"${FULL_NAME}.tar.gz\""
77056
f60dd8d76515 more accurate options (amending 7e19dc018db9);
wenzelm
parents: 77053
diff changeset
   152
        tar -C "$(dirname "$FULL_NAME")" -x -z -f "${FULL_NAME}.tar.gz" || exit 2
48840
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
   153
      fi
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
   154
    fi
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
   155
  done
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
   156
fi
7e19dc018db9 added "isabelle components" tool;
wenzelm
parents:
diff changeset
   157