wenzelm@34282: #!/usr/bin/env bash wenzelm@34282: # wenzelm@34282: # Author: Makarius wenzelm@34282: # wenzelm@43774: # build-jars - build Isabelle/Scala wenzelm@34282: # wenzelm@34282: # Requires proper Isabelle settings environment. wenzelm@34282: wenzelm@44202: ## sources wenzelm@34282: wenzelm@34282: declare -a SOURCES=( wenzelm@44531: Concurrent/counter.scala wenzelm@34282: Concurrent/future.scala wenzelm@38895: Concurrent/simple_thread.scala wenzelm@39098: Concurrent/volatile.scala wenzelm@55812: General/bytes.scala wenzelm@34282: General/exn.scala wenzelm@49426: General/file.scala wenzelm@47482: General/graph.scala wenzelm@52235: General/graphics_file.scala wenzelm@34282: General/linear_set.scala wenzelm@54112: General/multi_map.scala wenzelm@44473: General/path.scala wenzelm@34282: General/position.scala wenzelm@36721: General/pretty.scala wenzelm@44654: General/properties.scala wenzelm@34282: General/scan.scala wenzelm@38791: General/sha1.scala wenzelm@34282: General/symbol.scala wenzelm@46549: General/time.scala wenzelm@46537: General/timing.scala wenzelm@53808: General/xz_file.scala wenzelm@54920: GUI/color_value.scala wenzelm@54920: GUI/gui.scala wenzelm@54920: GUI/html5_panel.scala wenzelm@54920: GUI/jfx_thread.scala wenzelm@54920: GUI/popup.scala wenzelm@54920: GUI/swing_thread.scala wenzelm@54920: GUI/system_dialog.scala wenzelm@54920: GUI/wrap_panel.scala wenzelm@54416: Isar/completion.scala wenzelm@36947: Isar/keyword.scala wenzelm@34282: Isar/outer_syntax.scala wenzelm@36948: Isar/parse.scala wenzelm@36966: Isar/token.scala wenzelm@36714: PIDE/command.scala wenzelm@36714: PIDE/document.scala wenzelm@53667: PIDE/document_id.scala wenzelm@54108: PIDE/editor.scala wenzelm@46545: PIDE/markup.scala wenzelm@38797: PIDE/markup_tree.scala wenzelm@46587: PIDE/protocol.scala wenzelm@54118: PIDE/query_operation.scala wenzelm@38684: PIDE/text.scala wenzelm@45575: PIDE/xml.scala wenzelm@45575: PIDE/yxml.scala wenzelm@49361: System/command_line.scala wenzelm@38687: System/event_bus.scala wenzelm@52387: System/interrupt.scala wenzelm@44620: System/invoke_scala.scala wenzelm@44397: System/isabelle_charset.scala wenzelm@52751: System/isabelle_font.scala wenzelm@34282: System/isabelle_process.scala wenzelm@34282: System/isabelle_system.scala wenzelm@49380: System/options.scala wenzelm@34282: System/platform.scala wenzelm@34874: System/session.scala wenzelm@45919: System/system_channel.scala wenzelm@51218: System/utf8.scala wenzelm@34282: Thy/html.scala wenzelm@51722: Thy/present.scala wenzelm@34282: Thy/thy_header.scala wenzelm@44528: Thy/thy_info.scala wenzelm@44528: Thy/thy_load.scala wenzelm@34282: Thy/thy_syntax.scala wenzelm@51701: Tools/build.scala wenzelm@53581: Tools/doc.scala wenzelm@53576: Tools/keywords.scala wenzelm@51702: Tools/main.scala wenzelm@51996: Tools/ml_statistics.scala wenzelm@54192: Tools/sledgehammer_params.scala wenzelm@51995: Tools/task_statistics.scala wenzelm@34282: library.scala wenzelm@43633: package.scala wenzelm@44612: term.scala wenzelm@44653: term_xml.scala wenzelm@34282: ) wenzelm@34282: wenzelm@44202: wenzelm@44202: ## diagnostics wenzelm@44202: wenzelm@44202: PRG="$(basename "$0")" wenzelm@44202: wenzelm@44202: function usage() wenzelm@44202: { wenzelm@44202: echo wenzelm@44202: echo "Usage: isabelle $PRG [OPTIONS]" wenzelm@44202: echo wenzelm@44202: echo " Options are:" wenzelm@44202: echo " -f fresh build" wenzelm@48279: echo " -t test separate compilation of PIDE" wenzelm@44202: echo wenzelm@44202: exit 1 wenzelm@44202: } wenzelm@44202: wenzelm@44202: function fail() wenzelm@44202: { wenzelm@44202: echo "$1" >&2 wenzelm@44202: exit 2 wenzelm@44202: } wenzelm@44202: wenzelm@44202: [ -z "$ISABELLE_HOME" ] && fail "Missing Isabelle settings environment" wenzelm@44202: wenzelm@44202: wenzelm@44202: ## process command line wenzelm@44202: wenzelm@44202: # options wenzelm@44202: wenzelm@44202: FRESH="" wenzelm@48279: TEST_PIDE="" wenzelm@44202: wenzelm@48279: while getopts "ft" OPT wenzelm@44202: do wenzelm@44202: case "$OPT" in wenzelm@44202: f) wenzelm@44202: FRESH=true wenzelm@44202: ;; wenzelm@48279: t) wenzelm@48279: TEST_PIDE=true wenzelm@48279: ;; wenzelm@44202: \?) wenzelm@44202: usage wenzelm@44202: ;; wenzelm@44202: esac wenzelm@44202: done wenzelm@44202: wenzelm@44202: shift $(($OPTIND - 1)) wenzelm@44202: wenzelm@44202: wenzelm@44202: # args wenzelm@44202: wenzelm@44202: [ "$#" -ne 0 ] && usage wenzelm@44202: wenzelm@44202: wenzelm@50573: ## build wenzelm@44202: wenzelm@34284: TARGET_DIR="$ISABELLE_HOME/lib/classes" wenzelm@54714: TARGET="$TARGET_DIR/Pure.jar" wenzelm@34282: wenzelm@46548: declare -a PIDE_SOURCES=() wenzelm@46548: declare -a PURE_SOURCES=() wenzelm@46548: wenzelm@46548: for DEP in "${SOURCES[@]}" wenzelm@46548: do wenzelm@46548: if grep "Module:.*PIDE" "$DEP" >/dev/null wenzelm@46548: then wenzelm@46548: PIDE_SOURCES["${#PIDE_SOURCES[@]}"]="$DEP" wenzelm@46548: else wenzelm@46548: PURE_SOURCES["${#PURE_SOURCES[@]}"]="$DEP" wenzelm@46548: fi wenzelm@46548: done wenzelm@46548: wenzelm@44277: declare -a UPDATED=() wenzelm@44277: wenzelm@44160: if [ -n "$FRESH" ]; then wenzelm@44160: OUTDATED=true wenzelm@44160: else wenzelm@44160: OUTDATED=false wenzelm@44403: if [ ! -e "$TARGET" ]; then wenzelm@44403: OUTDATED=true wenzelm@44403: else wenzelm@44277: for DEP in "${SOURCES[@]}" wenzelm@44160: do wenzelm@44277: [ ! -e "$DEP" ] && fail "Missing file: $DEP" wenzelm@44403: [ "$DEP" -nt "$TARGET" ] && { wenzelm@44403: OUTDATED=true wenzelm@44403: UPDATED["${#UPDATED[@]}"]="$DEP" wenzelm@44403: } wenzelm@44160: done wenzelm@44277: fi wenzelm@44160: fi wenzelm@34282: wenzelm@34284: if [ "$OUTDATED" = true ] wenzelm@34284: then wenzelm@50188: echo "### Building Isabelle/Scala ..." wenzelm@34282: wenzelm@44277: [ "${#UPDATED[@]}" -gt 0 ] && { wenzelm@44277: echo "Changed files:" wenzelm@44277: for FILE in "${UPDATED[@]}" wenzelm@44277: do wenzelm@44277: echo " $FILE" wenzelm@44277: done wenzelm@44277: } wenzelm@44277: wenzelm@34282: rm -rf classes && mkdir classes wenzelm@46548: wenzelm@47880: SCALAC_OPTIONS="$ISABELLE_SCALA_BUILD_OPTIONS -d classes" wenzelm@46548: wenzelm@51704: ( wenzelm@54713: classpath "$ISABELLE_JDK_HOME/jre/lib/jfxrt.jar" wenzelm@54713: classpath classes wenzelm@54713: export CLASSPATH="$(jvmpath "$ISABELLE_CLASSPATH")" wenzelm@51704: wenzelm@51704: if [ "$TEST_PIDE" = true ]; then wenzelm@51704: isabelle_scala scalac $SCALAC_OPTIONS "${PIDE_SOURCES[@]}" || \ wenzelm@51704: fail "Failed to compile PIDE sources" wenzelm@51704: isabelle_scala scalac $SCALAC_OPTIONS "${PURE_SOURCES[@]}" || \ wenzelm@51704: fail "Failed to compile Pure sources" wenzelm@51704: else wenzelm@51704: isabelle_scala scalac $SCALAC_OPTIONS "${PIDE_SOURCES[@]}" "${PURE_SOURCES[@]}" || \ wenzelm@51704: fail "Failed to compile sources" wenzelm@51704: fi wenzelm@52645: ) || exit "$?" wenzelm@46548: wenzelm@54714: mkdir -p "$TARGET_DIR" || fail "Failed to create directory $TARGET_DIR" wenzelm@34282: wenzelm@44165: pushd classes >/dev/null wenzelm@34282: wenzelm@44397: CHARSET_SERVICE="META-INF/services/java.nio.charset.spi.CharsetProvider" wenzelm@44397: mkdir -p "$(dirname "$CHARSET_SERVICE")" wenzelm@44397: echo isabelle.Isabelle_Charset_Provider > "$CHARSET_SERVICE" wenzelm@44397: wenzelm@55308: cp "$ISABELLE_HOME/lib/logo/isabelle-32.gif" isabelle/. wenzelm@54589: wenzelm@54978: isabelle_jdk jar cfe "$(jvmpath "$TARGET")" isabelle.Main META-INF isabelle || \ wenzelm@44403: fail "Failed to produce $TARGET" wenzelm@44160: wenzelm@50464: cp "$SCALA_HOME/lib/scala-compiler.jar" \ wenzelm@49010: "$SCALA_HOME/lib/scala-library.jar" \ wenzelm@54714: "$SCALA_HOME/lib/scala-swing.jar" \ wenzelm@54714: "$SCALA_HOME/lib/scala-actors.jar" \ wenzelm@54714: "$SCALA_HOME/lib/scala-reflect.jar" \ wenzelm@54714: "$TARGET_DIR" wenzelm@50970: wenzelm@44160: popd >/dev/null wenzelm@44160: wenzelm@34282: rm -rf classes wenzelm@34282: fi