src/Tools/jEdit/jedit_build/Tools/jedit
changeset 42900 4a26abd3d57b
child 42906 7438ee56b89a
equal deleted inserted replaced
42899:108e815fdc8e 42900:4a26abd3d57b
       
     1 #!/usr/bin/env bash
       
     2 #
       
     3 # Author: Makarius
       
     4 #
       
     5 # DESCRIPTION: build and run Isabelle/jEdit on the spot
       
     6 
       
     7 ## diagnostics
       
     8 
       
     9 function fail()
       
    10 {
       
    11   echo "$1" >&2
       
    12   exit 2
       
    13 }
       
    14 
       
    15 function failed()
       
    16 {
       
    17   fail "Failed!"
       
    18 }
       
    19 
       
    20 
       
    21 ## dependencies
       
    22 
       
    23 [ -z "$ISABELLE_HOME" ] && fail "Missing Isabelle settings environment"
       
    24 [ -z "$SCALA_HOME" ] && fail "Unknown SCALA_HOME -- Scala unavailable"
       
    25 
       
    26 [ -z "$ISABELLE_JEDIT_BUILD_HOME" ] && \
       
    27   fail "Unknown ISABELLE_JEDIT_BUILD_HOME -- missing auxiliary component"
       
    28 
       
    29 [ -e "$ISABELLE_HOME/Admin/build" ] && \
       
    30   { "$ISABELLE_HOME/Admin/build" jars || exit $?; }
       
    31 
       
    32 
       
    33 # sources
       
    34 
       
    35 SRC_DIR="$ISABELLE_HOME/src/Tools/jEdit"
       
    36 
       
    37 declare -a SOURCES=(
       
    38   "$SRC_DIR/src/jedit/dockable.scala"
       
    39   "$SRC_DIR/src/jedit/document_model.scala"
       
    40   "$SRC_DIR/src/jedit/document_view.scala"
       
    41   "$SRC_DIR/src/jedit/html_panel.scala"
       
    42   "$SRC_DIR/src/jedit/isabelle_encoding.scala"
       
    43   "$SRC_DIR/src/jedit/isabelle_hyperlinks.scala"
       
    44   "$SRC_DIR/src/jedit/isabelle_markup.scala"
       
    45   "$SRC_DIR/src/jedit/isabelle_options.scala"
       
    46   "$SRC_DIR/src/jedit/isabelle_sidekick.scala"
       
    47   "$SRC_DIR/src/jedit/output_dockable.scala"
       
    48   "$SRC_DIR/src/jedit/plugin.scala"
       
    49   "$SRC_DIR/src/jedit/protocol_dockable.scala"
       
    50   "$SRC_DIR/src/jedit/raw_output_dockable.scala"
       
    51   "$SRC_DIR/src/jedit/scala_console.scala"
       
    52   "$SRC_DIR/src/jedit/session_dockable.scala"
       
    53 )
       
    54 
       
    55 declare -a PLUGIN_FILES=(
       
    56   "$SRC_DIR/plugin/actions.xml"
       
    57   "$SRC_DIR/plugin/dockables.xml"
       
    58   "$SRC_DIR/plugin/Isabelle.props"
       
    59   "$SRC_DIR/plugin/services.xml"
       
    60 )
       
    61 
       
    62 JEDIT_JAR="$ISABELLE_JEDIT_BUILD_HOME/contrib/$ISABELLE_JEDIT_BUILD_VERSION/jedit.jar"
       
    63 
       
    64 JEDIT_JARS=(
       
    65   "$ISABELLE_JEDIT_BUILD_HOME/contrib/Console.jar"
       
    66   "$ISABELLE_JEDIT_BUILD_HOME/contrib/ErrorList.jar"
       
    67   "$ISABELLE_JEDIT_BUILD_HOME/contrib/Hyperlinks.jar"
       
    68   "$ISABELLE_JEDIT_BUILD_HOME/contrib/SideKick.jar"
       
    69   "$ISABELLE_JEDIT_BUILD_HOME/contrib/cobra.jar"
       
    70   "$ISABELLE_JEDIT_BUILD_HOME/contrib/js.jar"
       
    71 )
       
    72 
       
    73 SCALA_JARS=(
       
    74   "$SCALA_HOME/lib/scala-compiler.jar"
       
    75   "$SCALA_HOME/lib/scala-library.jar"
       
    76   "$SCALA_HOME/lib/scala-swing.jar"
       
    77 )
       
    78 
       
    79 
       
    80 # target
       
    81 
       
    82 TARGET_DIR="$ISABELLE_JEDIT_BUILD_HOME/${ISABELLE_JEDIT_BUILD_VERSION}_Isabelle-$("$ISABELLE_TOOL" version -i)"
       
    83 TARGET="$TARGET_DIR/jars/Isabelle-jEdit.jar"
       
    84 
       
    85 OUTDATED=false
       
    86 for SOURCE in "${SOURCES[@]}" "${PLUGIN_FILES[@]}" "$JEDIT_JAR" "${JEDIT_JARS[@]}"
       
    87 do
       
    88   [ ! -e "$SOURCE" ] && fail "Missing file: $SOURCE"
       
    89   [ ! -e "$TARGET" -o "$SOURCE" -nt "$TARGET" ] && OUTDATED=true
       
    90 done
       
    91 
       
    92 
       
    93 ## main
       
    94 
       
    95 if [ "$OUTDATED" = true ]
       
    96 then
       
    97   echo "###"
       
    98   echo "### Building Isabelle/jEdit ..."
       
    99   echo "###"
       
   100 
       
   101   rm -rf "$TARGET_DIR" || failed
       
   102   mkdir -p "$TARGET_DIR" "$TARGET_DIR/classes" || failed
       
   103   cp -a "$ISABELLE_JEDIT_BUILD_HOME/contrib/$ISABELLE_JEDIT_BUILD_VERSION/." "$TARGET_DIR/."
       
   104 
       
   105   cp -a "${PLUGIN_FILES[@]}" "$TARGET_DIR/classes/."
       
   106   cp -a "$SRC_DIR/dist-template/." "$TARGET_DIR/."
       
   107   cp -a "$SRC_DIR/README" "$TARGET_DIR/."
       
   108 
       
   109   perl -i -e 'while (<>) { if (m/NAME="javacc"/) {
       
   110     print qq,<MODE NAME="isabelle" FILE="isabelle.xml" FILE_NAME_GLOB="*.thy"/>\n\n,;
       
   111     print qq,<MODE NAME="isabelle-session" FILE="isabelle-session.xml" FILE_NAME_GLOB="session.root"/>\n\n,; }
       
   112     print; }' "$TARGET_DIR/modes/catalog"
       
   113 
       
   114   (
       
   115     for JAR in "$JEDIT_JAR" "${JEDIT_JARS[@]}" "$SCALA_HOME/lib/scala-compiler.jar"
       
   116     do
       
   117       CLASSPATH="$CLASSPATH:$JAR"
       
   118     done
       
   119 
       
   120     cp -a "${JEDIT_JARS[@]}" "${SCALA_JARS[@]}" "$ISABELLE_HOME/lib/classes/Pure.jar" \
       
   121       "$TARGET_DIR/jars/." || failed
       
   122 
       
   123     CLASSPATH="$(jvmpath "$CLASSPATH")"
       
   124     "$SCALA_HOME/bin/scalac" -unchecked -deprecation \
       
   125       -d "$TARGET_DIR/classes" -target:jvm-1.5 "${SOURCES[@]}" || \
       
   126       fail "Failed to compile sources"
       
   127 
       
   128     cd "$TARGET_DIR/classes"
       
   129     jar cf "../jars/Isabelle-jEdit.jar" * || failed
       
   130     cd ..
       
   131     rm -rf classes
       
   132   )
       
   133 fi
       
   134 
       
   135 set -o allexport
       
   136 init_component "$TARGET_DIR"
       
   137 set +o allexport
       
   138 
       
   139 exec "$TARGET_DIR/lib/Tools/jedit" "$@"