src/Tools/Graphview/lib/Tools/graphview
author wenzelm
Thu, 12 Sep 2013 13:23:54 +0200
changeset 53576 793a429c63e7
parent 53451 fb74a9cb699c
child 53577 d033bc00b762
permissions -rwxr-xr-x
maintain classpath in more elementary manner: turn ISABELLE_CLASSPATH into -classpath option, so that all jars are covered by sun.misc.Launcher.AppClassLoader (e.g. relevant for loading add-on resources); ignore $ISABELLE_JAVA_EXT -- do not change java.ext.dirs;

#!/usr/bin/env bash
#
# Author: Markus Kaiser, TU Muenchen
# Author: Makarius
#
# DESCRIPTION: graphview command-line tool wrapper

## sources

declare -a SOURCES=(
  "src/graph_panel.scala"
  "src/graphview.scala"
  "src/layout_pendulum.scala"
  "src/main_panel.scala"
  "src/model.scala"
  "src/mutator_dialog.scala"
  "src/mutator_event.scala"
  "src/mutator.scala"
  "src/popups.scala"
  "src/shapes.scala"
  "src/visualizer.scala"
)


## diagnostics

PRG="$(basename "$0")"

function usage()
{
  echo
  echo "Usage: isabelle $PRG [OPTIONS] GRAPH_FILE"
  echo
  echo "  Options are:"
  echo "    -b           build only"
  echo "    -c           cleanup -- remove GRAPH_FILE after use"
  echo "    -f           fresh build"
  echo
  exit 1
}

function fail()
{
  echo "$1" >&2
  exit 2
}

function failed()
{
  fail "Failed!"
}


## process command line

# options

BUILD_ONLY="false"
CLEAN="false"
BUILD_JARS="jars"

while getopts "bcf" OPT
do
  case "$OPT" in
    b)
      BUILD_ONLY="true"
      ;;
    c)
      CLEAN="true"
      ;;
    f)
      BUILD_JARS="jars_fresh"
      ;;
    \?)
      usage
      ;;
  esac
done

shift $(($OPTIND - 1))


# args

GRAPH_FILE=""
[ "$#" -gt 0 ] && { GRAPH_FILE="$1"; shift; }
[ "$#" -ne 0 ] && usage
[ -z "$GRAPH_FILE" -a "$BUILD_ONLY" = false ] && usage


## build

isabelle_admin_build "$BUILD_JARS" || exit $?

pushd "$GRAPHVIEW_HOME" >/dev/null || failed

PURE_JAR="$ISABELLE_HOME/lib/classes/ext/Pure.jar"

TARGET_DIR="$ISABELLE_HOME/lib/classes"
TARGET="$TARGET_DIR/ext/Graphview.jar"

declare -a UPDATED=()

if [ "$BUILD_JARS" = jars_fresh ]; then
  OUTDATED=true
else
  OUTDATED=false
  if [ ! -e "$TARGET" ]; then
    OUTDATED=true
  else
    if [ -e "$ISABELLE_HOME/Admin/build" ]; then
      declare -a DEPS=("$PURE_JAR" "${SOURCES[@]}")
    else
      declare -a DEPS=()
    fi
    for DEP in "${DEPS[@]}"
    do
      [ ! -e "$DEP" ] && fail "Missing file: $DEP"
      [ "$DEP" -nt "$TARGET" ] && {
        OUTDATED=true
        UPDATED["${#UPDATED[@]}"]="$DEP"
      }
    done
  fi
fi

if [ "$OUTDATED" = true ]
then
  echo "### Building Isabelle/Graphview ..."

  [ "${#UPDATED[@]}" -gt 0 ] && {
    echo "Changed files:"
    for FILE in "${UPDATED[@]}"
    do
      echo "  $FILE"
    done
  }

  rm -rf classes && mkdir classes

  (
    #workaround for scalac
    function stty() { :; }
    export -f stty

    classpath "$PURE_JAR"
    export CLASSPATH="$(jvmpath "$ISABELLE_CLASSPATH")"
    exec "$SCALA_HOME/bin/scalac" $ISABELLE_SCALA_BUILD_OPTIONS -d classes "${SOURCES[@]}"
  ) || fail "Failed to compile sources"

  cd classes
  isabelle_jdk jar cf "$(jvmpath "$TARGET")" * || failed
  cd ..
  rm -rf classes
fi

popd >/dev/null


## run

if [ "$BUILD_ONLY" = false ]; then
  PRIVATE_FILE="${ISABELLE_TMP:-/tmp}/$$""$(basename "$GRAPH_FILE")"
  if [ "$CLEAN" = "true" ]; then
    mv -f "$GRAPH_FILE" "$PRIVATE_FILE" || fail "Cannot move file: $GRAPH_FILE"
  else
    cp -f "$GRAPH_FILE" "$PRIVATE_FILE" || fail "Cannot copy file: $GRAPH_FILE"
  fi

  "$ISABELLE_TOOL" java $GRAPHVIEW_JAVA_OPTIONS isabelle.graphview.Graphview "$PRIVATE_FILE"
  RC="$?"

  rm -f "$PRIVATE_FILE"
  echo "$RC"
fi