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@34282: General/exn.scala wenzelm@40672: General/timing.scala wenzelm@34282: General/linear_set.scala wenzelm@34282: General/markup.scala wenzelm@44473: General/path.scala wenzelm@34282: General/position.scala wenzelm@36721: General/pretty.scala wenzelm@34282: General/scan.scala wenzelm@38791: General/sha1.scala wenzelm@34282: General/symbol.scala wenzelm@34282: General/xml.scala wenzelm@38565: General/xml_data.scala wenzelm@34282: General/yxml.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@38801: PIDE/isar_document.scala wenzelm@38797: PIDE/markup_tree.scala wenzelm@38684: PIDE/text.scala wenzelm@34282: System/cygwin.scala wenzelm@36714: System/download.scala wenzelm@38687: System/event_bus.scala wenzelm@34282: System/gui_setup.scala wenzelm@44397: System/isabelle_charset.scala wenzelm@34282: System/isabelle_process.scala wenzelm@34282: System/isabelle_syntax.scala wenzelm@34282: System/isabelle_system.scala wenzelm@34282: System/platform.scala wenzelm@34874: System/session.scala wenzelm@34282: System/session_manager.scala wenzelm@34282: System/standard_system.scala wenzelm@36714: System/swing_thread.scala wenzelm@34282: Thy/completion.scala wenzelm@34282: Thy/html.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@34282: library.scala wenzelm@43633: package.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@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: [ -z "$SCALA_HOME" ] && fail "Unknown SCALA_HOME -- Scala unavailable" wenzelm@44202: wenzelm@44202: wenzelm@44202: ## process command line wenzelm@44202: wenzelm@44202: # options wenzelm@44202: wenzelm@44202: FRESH="" wenzelm@44202: wenzelm@44202: while getopts "f" OPT wenzelm@44202: do wenzelm@44202: case "$OPT" in wenzelm@44202: f) wenzelm@44202: FRESH=true wenzelm@44202: ;; 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@44202: wenzelm@44403: # build wenzelm@44202: wenzelm@34284: TARGET_DIR="$ISABELLE_HOME/lib/classes" wenzelm@44403: TARGET="$TARGET_DIR/ext/Pure.jar" wenzelm@34282: 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@34876: echo "### Building Isabelle/Scala layer ..." 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@36035: "$SCALA_HOME/bin/scalac" -unchecked -deprecation -d classes -target:jvm-1.5 "${SOURCES[@]}" || \ wenzelm@34282: fail "Failed to compile sources" wenzelm@44403: mkdir -p "$TARGET_DIR/ext" || fail "Failed to create directory $TARGET_DIR/ext" 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@44403: jar cfe "$(jvmpath "$TARGET")" isabelle.GUI_Setup META-INF isabelle || \ wenzelm@44403: fail "Failed to produce $TARGET" wenzelm@44160: wenzelm@44403: cp "$SCALA_HOME/lib/scala-swing.jar" "$SCALA_HOME/lib/scala-library.jar" "$TARGET_DIR/ext" wenzelm@44401: wenzelm@44160: popd >/dev/null wenzelm@44160: wenzelm@34282: rm -rf classes wenzelm@34282: fi