re-package Isabelle distribution with add-on components;
authorwenzelm
Fri, 27 Nov 2009 00:11:56 +0100
changeset 33907 473f859e1c29
parent 33906 1eebf19b773e
child 33908 7c473c4d42f4
re-package Isabelle distribution with add-on components;
Admin/makebundle
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Admin/makebundle	Fri Nov 27 00:11:56 2009 +0100
@@ -0,0 +1,75 @@
+#!/usr/bin/env bash
+#
+# makebundle -- re-package with add-on components
+
+## global settings
+
+TMP="/var/tmp/isabelle-makebundle$$"
+
+
+## diagnostics
+
+PRG=$(basename "$0")
+
+function usage()
+{
+  echo
+  echo "Usage: $PRG ARCHIVE COMPONENTS"
+  echo
+  echo "  Re-package Isabelle distribution with add-on components."
+  echo
+  exit 1
+}
+
+function fail()
+{
+  echo "$1" >&2
+  exit 2
+}
+
+
+## process command line
+
+[ "$#" -lt 1 ] && usage
+
+ARCHIVE="$1"; shift
+
+declare -a COMPONENTS
+COMPONENTS=("$@")
+
+
+## main
+
+mkdir "$TMP" || fail "Cannot create directory $TMP"
+
+ARCHIVE_DIR="$(cd $(dirname "$ARCHIVE"); echo "$PWD")"
+ISABELLE_NAME="$(basename "$ARCHIVE" .tar.gz)"
+ISABELLE_HOME="$TMP/$ISABELLE_NAME"
+
+[ ! -f "$ARCHIVE" ] && fail "Bad archive file $ARCHIVE"
+tar -C "$TMP" -x -z -f "$ARCHIVE"
+
+echo "#bundled components" >> "$ISABELLE_HOME/etc/components"
+
+for COMPONENT in "${COMPONENTS[@]}"
+do
+  tar -C "$ISABELLE_HOME/contrib" -x -z -f "$COMPONENT"
+  NAME="$(basename "$COMPONENT" .tar.gz)"
+  [ -d "$ISABELLE_HOME/contrib/$NAME" ] || fail "Bad archive content $COMPONENT"
+
+  if [ -e "$ISABELLE_HOME/contrib/$NAME/etc/settings" ]; then
+    echo "component $NAME"
+    echo "contrib/$NAME" >> "$ISABELLE_HOME/etc/components"
+  else
+    echo "package $NAME"
+  fi
+done
+
+tar -C "$TMP" -c -z \
+  -f "${ARCHIVE_DIR}/${ISABELLE_NAME}_bundle.tar.gz" \
+  Isabelle "$ISABELLE_NAME"
+
+
+# clean up
+cd /tmp
+rm -rf "$TMP"