equal
deleted
inserted
replaced
|
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" |