src/Tools/jEdit/lib/Tools/jedit
author wenzelm
Wed, 04 Dec 2013 18:59:20 +0100
changeset 55316 4dd08fe126ba
parent 55315 391ba1e12360
child 56018 6b2ca4850b71
permissions -rwxr-xr-x
remove junk;
     1 #!/usr/bin/env bash
     2 #
     3 # Author: Makarius
     4 #
     5 # DESCRIPTION: Isabelle/jEdit interface wrapper
     6 
     7 
     8 ## sources
     9 
    10 declare -a SOURCES=(
    11   "src/active.scala"
    12   "src/completion_popup.scala"
    13   "src/dockable.scala"
    14   "src/document_model.scala"
    15   "src/document_view.scala"
    16   "src/documentation_dockable.scala"
    17   "src/find_dockable.scala"
    18   "src/fold_handling.scala"
    19   "src/graphview_dockable.scala"
    20   "src/info_dockable.scala"
    21   "src/isabelle.scala"
    22   "src/isabelle_encoding.scala"
    23   "src/isabelle_logic.scala"
    24   "src/isabelle_options.scala"
    25   "src/isabelle_sidekick.scala"
    26   "src/jedit_editor.scala"
    27   "src/jedit_lib.scala"
    28   "src/jedit_options.scala"
    29   "src/jedit_thy_load.scala"
    30   "src/monitor_dockable.scala"
    31   "src/output_dockable.scala"
    32   "src/plugin.scala"
    33   "src/pretty_text_area.scala"
    34   "src/pretty_tooltip.scala"
    35   "src/process_indicator.scala"
    36   "src/protocol_dockable.scala"
    37   "src/raw_output_dockable.scala"
    38   "src/rendering.scala"
    39   "src/rich_text_area.scala"
    40   "src/scala_console.scala"
    41   "src/sledgehammer_dockable.scala"
    42   "src/symbols_dockable.scala"
    43   "src/syslog_dockable.scala"
    44   "src/text_overview.scala"
    45   "src/theories_dockable.scala"
    46   "src/timing_dockable.scala"
    47   "src/token_markup.scala"
    48 )
    49 
    50 declare -a RESOURCES=(
    51   "src/actions.xml"
    52   "src/dockables.xml"
    53   "src/Isabelle.props"
    54   "src/jEdit.props"
    55   "src/services.xml"
    56   "src/modes/isabelle-news.xml"
    57   "src/modes/isabelle-options.xml"
    58   "src/modes/isabelle-root.xml"
    59   "src/modes/isabelle.xml"
    60 )
    61 
    62 
    63 ## diagnostics
    64 
    65 PRG="$(basename "$0")"
    66 
    67 function usage()
    68 {
    69   echo
    70   echo "Usage: isabelle $PRG [OPTIONS] [FILES ...]"
    71   echo
    72   echo "  Options are:"
    73   echo "    -J OPTION    add JVM runtime option"
    74   echo "                 (default JEDIT_JAVA_OPTIONS=$JEDIT_JAVA_OPTIONS)"
    75   echo "    -b           build only"
    76   echo "    -d DIR       include session directory"
    77   echo "    -f           fresh build"
    78   echo "    -j OPTION    add jEdit runtime option"
    79   echo "                 (default JEDIT_OPTIONS=$JEDIT_OPTIONS)"
    80   echo "    -l NAME      logic session name"
    81   echo "    -m MODE      add print mode for output"
    82   echo "    -n           no build dialog for session image on startup"
    83   echo "    -s           system build mode for session image"
    84   echo
    85   echo "Start jEdit with Isabelle plugin setup and open theory FILES"
    86   echo "(default \"$USER_HOME/Scratch.thy\")."
    87   echo
    88   exit 1
    89 }
    90 
    91 function fail()
    92 {
    93   echo "$1" >&2
    94   exit 2
    95 }
    96 
    97 function failed()
    98 {
    99   fail "Failed!"
   100 }
   101 
   102 
   103 ## process command line
   104 
   105 # options
   106 
   107 BUILD_ONLY=false
   108 BUILD_JARS="jars"
   109 JEDIT_SESSION_DIRS=""
   110 JEDIT_LOGIC=""
   111 JEDIT_PRINT_MODE=""
   112 JEDIT_BUILD_MODE="normal"
   113 
   114 function getoptions()
   115 {
   116   OPTIND=1
   117   while getopts "J:bd:fj:l:m:ns" OPT
   118   do
   119     case "$OPT" in
   120       J)
   121         JAVA_ARGS["${#JAVA_ARGS[@]}"]="$OPTARG"
   122         ;;
   123       b)
   124         BUILD_ONLY=true
   125         ;;
   126       d)
   127         if [ -z "$JEDIT_SESSION_DIRS" ]; then
   128           JEDIT_SESSION_DIRS="$OPTARG"
   129         else
   130           JEDIT_SESSION_DIRS="$JEDIT_SESSION_DIRS:$OPTARG"
   131         fi
   132         ;;
   133       f)
   134         BUILD_JARS="jars_fresh"
   135         ;;
   136       j)
   137         ARGS["${#ARGS[@]}"]="$OPTARG"
   138         ;;
   139       l)
   140         JEDIT_LOGIC="$OPTARG"
   141         ;;
   142       m)
   143         if [ -z "$JEDIT_PRINT_MODE" ]; then
   144           JEDIT_PRINT_MODE="$OPTARG"
   145         else
   146           JEDIT_PRINT_MODE="$JEDIT_PRINT_MODE,$OPTARG"
   147         fi
   148         ;;
   149       n)
   150         JEDIT_BUILD_MODE="none"
   151         ;;
   152       s)
   153         JEDIT_BUILD_MODE="system"
   154         ;;
   155       \?)
   156         usage
   157         ;;
   158     esac
   159   done
   160 }
   161 
   162 declare -a JAVA_ARGS; eval "JAVA_ARGS=($JEDIT_JAVA_OPTIONS $JEDIT_SYSTEM_OPTIONS)"
   163 
   164 declare -a ARGS=()
   165 
   166 declare -a OPTIONS; eval "OPTIONS=($ISABELLE_JEDIT_OPTIONS)"
   167 getoptions "${OPTIONS[@]}"
   168 
   169 getoptions "$@"
   170 shift $(($OPTIND - 1))
   171 
   172 
   173 # args
   174 
   175 if [ "$#" -eq 0 ]; then
   176   ARGS["${#ARGS[@]}"]="$(jvmpath "$USER_HOME/Scratch.thy")"
   177 else
   178   while [ "$#" -gt 0 ]; do
   179     ARGS["${#ARGS[@]}"]="$(jvmpath "$1")"
   180     shift
   181   done
   182 fi
   183 
   184 
   185 ## dependencies
   186 
   187 if [ -e "$ISABELLE_HOME/Admin/build" ]; then
   188   "$ISABELLE_TOOL" browser -b || exit $?
   189   if [ "$BUILD_JARS" = jars_fresh ]; then
   190     "$ISABELLE_TOOL" graphview -b -f || exit $?
   191   else
   192     "$ISABELLE_HOME/Admin/build" "$BUILD_JARS" || exit $?
   193     "$ISABELLE_TOOL" graphview -b || exit $?
   194   fi
   195 fi
   196 
   197 PURE_JAR="$ISABELLE_HOME/lib/classes/Pure.jar"
   198 GRAPHVIEW_JAR="$ISABELLE_HOME/lib/classes/Graphview.jar"
   199 
   200 pushd "$JEDIT_HOME" >/dev/null || failed
   201 
   202 JEDIT_JAR="$ISABELLE_JEDIT_BUILD_HOME/contrib/$ISABELLE_JEDIT_BUILD_VERSION/jedit.jar"
   203 
   204 JEDIT_JARS=(
   205   "$ISABELLE_JEDIT_BUILD_HOME/contrib/Console.jar"
   206   "$ISABELLE_JEDIT_BUILD_HOME/contrib/ErrorList.jar"
   207   "$ISABELLE_JEDIT_BUILD_HOME/contrib/Highlight.jar"
   208   "$ISABELLE_JEDIT_BUILD_HOME/contrib/MacOSX.jar"
   209   "$ISABELLE_JEDIT_BUILD_HOME/contrib/SideKick.jar"
   210   "$ISABELLE_JEDIT_BUILD_HOME/contrib/idea-icons.jar"
   211   "$ISABELLE_JEDIT_BUILD_HOME/contrib/jsr305-2.0.0.jar"
   212 )
   213 
   214 
   215 # target
   216 
   217 TARGET="dist/jars/Isabelle-jEdit.jar"
   218 
   219 declare -a UPDATED=()
   220 
   221 if [ "$BUILD_JARS" = jars_fresh ]; then
   222   OUTDATED=true
   223 else
   224   OUTDATED=false
   225   if [ ! -e "$TARGET" ]; then
   226     OUTDATED=true
   227   else
   228     if [ -n "$ISABELLE_JEDIT_BUILD_HOME" ]; then
   229       declare -a DEPS=(
   230         "$JEDIT_JAR" "${JEDIT_JARS[@]}" "$PURE_JAR" "$GRAPHVIEW_JAR"
   231         "${SOURCES[@]}" "${RESOURCES[@]}"
   232       )
   233     elif [ -e "$ISABELLE_HOME/Admin/build" ]; then
   234       declare -a DEPS=("$PURE_JAR" "$GRAPHVIEW_JAR" "${SOURCES[@]}" "${RESOURCES[@]}")
   235     else
   236       declare -a DEPS=()
   237     fi
   238     for DEP in "${DEPS[@]}"
   239     do
   240       [ ! -e "$DEP" ] && fail "Missing file: $DEP"
   241       [ "$DEP" -nt "$TARGET" ] && {
   242         OUTDATED=true
   243         UPDATED["${#UPDATED[@]}"]="$DEP"
   244       }
   245     done
   246   fi
   247 fi
   248 
   249 
   250 # build
   251 
   252 if [ "$OUTDATED" = true ]
   253 then
   254   echo "### Building Isabelle/jEdit ..."
   255 
   256   [ "${#UPDATED[@]}" -gt 0 ] && {
   257     echo "Changed files:"
   258     for FILE in "${UPDATED[@]}"
   259     do
   260       echo "  $FILE"
   261     done
   262   }
   263 
   264   [ -z "$ISABELLE_JEDIT_BUILD_HOME" ] && \
   265     fail "Unknown ISABELLE_JEDIT_BUILD_HOME -- missing auxiliary component"
   266 
   267   rm -rf dist || failed
   268   mkdir -p dist dist/classes || failed
   269 
   270   cp -p -R -f "$ISABELLE_JEDIT_BUILD_HOME/contrib/$ISABELLE_JEDIT_BUILD_VERSION/." dist/.
   271   cp -p -R -f "${RESOURCES[@]}" dist/classes/.
   272   cp src/jEdit.props dist/properties/.
   273   cp -p -R -f src/modes/. dist/modes/.
   274 
   275   perl -i -e 'while (<>) {
   276     if (m/NAME="javacc"/) {
   277       print qq,<MODE NAME="isabelle" FILE="isabelle.xml" FILE_NAME_GLOB="*.thy"/>\n\n,;
   278       print qq,<MODE NAME="isabelle-news" FILE="isabelle-news.xml"/>\n\n,;
   279       print qq,<MODE NAME="isabelle-options" FILE="isabelle-options.xml"/>\n\n,;
   280       print qq,<MODE NAME="isabelle-root" FILE="isabelle-root.xml" FILE_NAME_GLOB="ROOT"/>\n\n,; }
   281     print; }' dist/modes/catalog
   282 
   283   cd dist
   284   isabelle_jdk jar xf jedit.jar
   285   cp "$ISABELLE_HOME/lib/logo/isabelle-32.gif" \
   286     "org/gjt/sp/jedit/icons/themes/classic/32x32/apps/isabelle.gif" || failed
   287   cp "$ISABELLE_HOME/lib/logo/isabelle-32.gif" \
   288     "org/gjt/sp/jedit/icons/themes/tango/32x32/apps/isabelle.gif" || failed
   289   isabelle_jdk jar cfe jedit.jar org.gjt.sp.jedit.jEdit org || failed
   290   rm -rf META-INF org
   291   cd ..
   292 
   293   cp -p -R -f "${JEDIT_JARS[@]}" dist/jars/. || failed
   294   (
   295     #workaround for scalac 2.10.2
   296     function stty() { :; }
   297     export -f stty
   298 
   299     for JAR in "$JEDIT_JAR" "${JEDIT_JARS[@]}" "$PURE_JAR" "$GRAPHVIEW_JAR"
   300     do
   301       classpath "$JAR"
   302     done
   303     export CLASSPATH="$(jvmpath "$ISABELLE_CLASSPATH")"
   304     exec "$SCALA_HOME/bin/scalac" $ISABELLE_SCALA_BUILD_OPTIONS -d dist/classes "${SOURCES[@]}"
   305   ) || fail "Failed to compile sources"
   306 
   307   cd dist/classes
   308   isabelle_jdk jar cf "../jars/Isabelle-jEdit.jar" * || failed
   309   cd ../..
   310   rm -rf dist/classes
   311 fi
   312 
   313 popd >/dev/null
   314 
   315 
   316 ## main
   317 
   318 if [ "$BUILD_ONLY" = false ]
   319 then
   320   export JEDIT_SESSION_DIRS JEDIT_LOGIC JEDIT_PRINT_MODE JEDIT_BUILD_MODE
   321   classpath "$JEDIT_HOME/dist/jedit.jar"
   322   exec "$ISABELLE_TOOL" java "${JAVA_ARGS[@]}" isabelle.Main "${ARGS[@]}"
   323 fi