Admin/makebundle
changeset 33907 473f859e1c29
child 37315 af2adf0ae97d
equal deleted inserted replaced
33906:1eebf19b773e 33907:473f859e1c29
       
     1 #!/usr/bin/env bash
       
     2 #
       
     3 # makebundle -- re-package with add-on components
       
     4 
       
     5 ## global settings
       
     6 
       
     7 TMP="/var/tmp/isabelle-makebundle$$"
       
     8 
       
     9 
       
    10 ## diagnostics
       
    11 
       
    12 PRG=$(basename "$0")
       
    13 
       
    14 function usage()
       
    15 {
       
    16   echo
       
    17   echo "Usage: $PRG ARCHIVE COMPONENTS"
       
    18   echo
       
    19   echo "  Re-package Isabelle distribution with add-on components."
       
    20   echo
       
    21   exit 1
       
    22 }
       
    23 
       
    24 function fail()
       
    25 {
       
    26   echo "$1" >&2
       
    27   exit 2
       
    28 }
       
    29 
       
    30 
       
    31 ## process command line
       
    32 
       
    33 [ "$#" -lt 1 ] && usage
       
    34 
       
    35 ARCHIVE="$1"; shift
       
    36 
       
    37 declare -a COMPONENTS
       
    38 COMPONENTS=("$@")
       
    39 
       
    40 
       
    41 ## main
       
    42 
       
    43 mkdir "$TMP" || fail "Cannot create directory $TMP"
       
    44 
       
    45 ARCHIVE_DIR="$(cd $(dirname "$ARCHIVE"); echo "$PWD")"
       
    46 ISABELLE_NAME="$(basename "$ARCHIVE" .tar.gz)"
       
    47 ISABELLE_HOME="$TMP/$ISABELLE_NAME"
       
    48 
       
    49 [ ! -f "$ARCHIVE" ] && fail "Bad archive file $ARCHIVE"
       
    50 tar -C "$TMP" -x -z -f "$ARCHIVE"
       
    51 
       
    52 echo "#bundled components" >> "$ISABELLE_HOME/etc/components"
       
    53 
       
    54 for COMPONENT in "${COMPONENTS[@]}"
       
    55 do
       
    56   tar -C "$ISABELLE_HOME/contrib" -x -z -f "$COMPONENT"
       
    57   NAME="$(basename "$COMPONENT" .tar.gz)"
       
    58   [ -d "$ISABELLE_HOME/contrib/$NAME" ] || fail "Bad archive content $COMPONENT"
       
    59 
       
    60   if [ -e "$ISABELLE_HOME/contrib/$NAME/etc/settings" ]; then
       
    61     echo "component $NAME"
       
    62     echo "contrib/$NAME" >> "$ISABELLE_HOME/etc/components"
       
    63   else
       
    64     echo "package $NAME"
       
    65   fi
       
    66 done
       
    67 
       
    68 tar -C "$TMP" -c -z \
       
    69   -f "${ARCHIVE_DIR}/${ISABELLE_NAME}_bundle.tar.gz" \
       
    70   Isabelle "$ISABELLE_NAME"
       
    71 
       
    72 
       
    73 # clean up
       
    74 cd /tmp
       
    75 rm -rf "$TMP"