wenzelm@34282: #!/usr/bin/env bash wenzelm@34282: # wenzelm@34282: # Author: Makarius wenzelm@34282: # wenzelm@42899: # build-jars - build Isabelle/Scala wenzelm@34282: # wenzelm@34282: # Requires proper Isabelle settings environment. wenzelm@34282: wenzelm@43320: ## sources wenzelm@43320: wenzelm@43320: declare -a SOURCES=( wenzelm@64161: Admin/build_doc.scala wenzelm@64160: Admin/build_history.scala wenzelm@64160: Admin/build_log.scala wenzelm@64202: Admin/build_release.scala wenzelm@64161: Admin/build_stats.scala wenzelm@64161: Admin/check_sources.scala wenzelm@64160: Admin/ci_api.scala wenzelm@64160: Admin/ci_profile.scala wenzelm@64148: Admin/isabelle_cronjob.scala wenzelm@64188: Admin/other_isabelle.scala wenzelm@64161: Admin/remote_dmg.scala wenzelm@56695: Concurrent/consumer_thread.scala wenzelm@43660: Concurrent/counter.scala wenzelm@56768: Concurrent/event_timer.scala wenzelm@43320: Concurrent/future.scala wenzelm@56693: Concurrent/mailbox.scala wenzelm@59136: Concurrent/par_list.scala wenzelm@61556: Concurrent/standard_thread.scala wenzelm@56685: Concurrent/synchronized.scala wenzelm@57647: GUI/color_value.scala wenzelm@57647: GUI/gui.scala wenzelm@57647: GUI/gui_thread.scala wenzelm@57647: GUI/html5_panel.scala wenzelm@57908: GUI/jfx_gui.scala wenzelm@57647: GUI/popup.scala wenzelm@57647: GUI/wrap_panel.scala wenzelm@55511: General/antiquote.scala wenzelm@54439: General/bytes.scala wenzelm@55673: General/completion.scala wenzelm@64056: General/date.scala wenzelm@62508: General/exn.scala wenzelm@48411: General/file.scala wenzelm@46611: General/graph.scala wenzelm@59244: General/graph_display.scala wenzelm@51098: General/graphics_file.scala wenzelm@63823: General/http_server.scala wenzelm@63644: General/json.scala wenzelm@43320: General/linear_set.scala wenzelm@56800: General/long_name.scala wenzelm@63997: General/mercurial.scala wenzelm@52975: General/multi_map.scala wenzelm@56782: General/output.scala wenzelm@43600: General/path.scala wenzelm@43320: General/position.scala wenzelm@43320: General/pretty.scala wenzelm@43780: General/properties.scala wenzelm@43320: General/scan.scala wenzelm@43320: General/sha1.scala wenzelm@63788: General/sql.scala wenzelm@63788: General/sqlite.scala wenzelm@64123: General/ssh.scala wenzelm@43320: General/symbol.scala wenzelm@45674: General/time.scala wenzelm@45666: General/timing.scala wenzelm@57647: General/untyped.scala wenzelm@56501: General/url.scala wenzelm@63805: General/value.scala wenzelm@56599: General/word.scala wenzelm@64000: General/xz.scala wenzelm@63604: Isar/document_structure.scala wenzelm@43320: Isar/keyword.scala wenzelm@63603: Isar/line_structure.scala wenzelm@43320: Isar/outer_syntax.scala wenzelm@43320: Isar/parse.scala wenzelm@43320: Isar/token.scala wenzelm@55497: ML/ml_lex.scala wenzelm@62528: ML/ml_syntax.scala wenzelm@59362: PIDE/batch_session.scala wenzelm@43320: PIDE/command.scala wenzelm@57905: PIDE/command_span.scala wenzelm@43320: PIDE/document.scala wenzelm@52530: PIDE/document_id.scala wenzelm@52971: PIDE/editor.scala wenzelm@45670: PIDE/markup.scala wenzelm@43320: PIDE/markup_tree.scala wenzelm@45709: PIDE/protocol.scala wenzelm@59713: PIDE/protocol_message.scala wenzelm@56385: PIDE/prover.scala wenzelm@52981: PIDE/query_operation.scala wenzelm@56208: PIDE/resources.scala wenzelm@56210: PIDE/session.scala wenzelm@43320: PIDE/text.scala wenzelm@44698: PIDE/xml.scala wenzelm@44698: PIDE/yxml.scala wenzelm@57647: ROOT.scala wenzelm@62584: System/bash.scala wenzelm@61925: System/command_line.scala wenzelm@61282: System/cygwin.scala wenzelm@62845: System/distribution.scala wenzelm@62431: System/getopts.scala wenzelm@43744: System/invoke_scala.scala wenzelm@43517: System/isabelle_charset.scala wenzelm@43320: System/isabelle_process.scala wenzelm@43320: System/isabelle_system.scala wenzelm@62829: System/isabelle_tool.scala wenzelm@64264: System/numa.scala wenzelm@48365: System/options.scala wenzelm@43320: System/platform.scala wenzelm@56860: System/posix_interrupt.scala wenzelm@62400: System/process_result.scala wenzelm@61276: System/progress.scala wenzelm@45027: System/system_channel.scala wenzelm@50203: System/utf8.scala wenzelm@43320: Thy/html.scala wenzelm@50707: Thy/present.scala wenzelm@62631: Thy/sessions.scala wenzelm@43320: Thy/thy_header.scala wenzelm@43651: Thy/thy_info.scala wenzelm@43320: Thy/thy_syntax.scala wenzelm@58523: Tools/bibtex.scala wenzelm@57647: Tools/build.scala wenzelm@59891: Tools/check_keywords.scala wenzelm@60749: Tools/debugger.scala wenzelm@52444: Tools/doc.scala wenzelm@50687: Tools/main.scala wenzelm@62559: Tools/ml_console.scala wenzelm@62586: Tools/ml_process.scala wenzelm@50981: Tools/ml_statistics.scala wenzelm@62114: Tools/news.scala wenzelm@56864: Tools/print_operation.scala wenzelm@64342: Tools/profiling_report.scala wenzelm@54730: Tools/simplifier_trace.scala wenzelm@50980: Tools/task_statistics.scala wenzelm@58610: Tools/update_cartouches.scala wenzelm@58872: Tools/update_header.scala wenzelm@61216: Tools/update_then.scala wenzelm@61337: Tools/update_theorems.scala wenzelm@43320: library.scala wenzelm@43730: term.scala wenzelm@43779: term_xml.scala wenzelm@59441: "../Tools/Graphview/graph_file.scala" wenzelm@59202: "../Tools/Graphview/graph_panel.scala" wenzelm@59459: "../Tools/Graphview/graphview.scala" wenzelm@59232: "../Tools/Graphview/layout.scala" wenzelm@59202: "../Tools/Graphview/main_panel.scala" wenzelm@59290: "../Tools/Graphview/metrics.scala" wenzelm@59202: "../Tools/Graphview/model.scala" wenzelm@59392: "../Tools/Graphview/mutator.scala" wenzelm@59202: "../Tools/Graphview/mutator_dialog.scala" wenzelm@59202: "../Tools/Graphview/mutator_event.scala" wenzelm@59202: "../Tools/Graphview/popups.scala" wenzelm@59202: "../Tools/Graphview/shapes.scala" wenzelm@59392: "../Tools/Graphview/tree_panel.scala" wenzelm@43320: ) wenzelm@43320: wenzelm@34282: wenzelm@34282: ## diagnostics wenzelm@34282: wenzelm@43280: PRG="$(basename "$0")" wenzelm@43280: wenzelm@43280: function usage() wenzelm@43280: { wenzelm@43280: echo wenzelm@43280: echo "Usage: isabelle $PRG [OPTIONS]" wenzelm@43280: echo wenzelm@43280: echo " Options are:" wenzelm@43280: echo " -f fresh build" wenzelm@47408: echo " -t test separate compilation of PIDE" wenzelm@43280: echo wenzelm@43280: exit 1 wenzelm@43280: } wenzelm@43280: wenzelm@34282: function fail() wenzelm@34282: { wenzelm@34282: echo "$1" >&2 wenzelm@34282: exit 2 wenzelm@34282: } wenzelm@34282: wenzelm@42899: [ -z "$ISABELLE_HOME" ] && fail "Missing Isabelle settings environment" wenzelm@34282: wenzelm@34282: wenzelm@43280: ## process command line wenzelm@43280: wenzelm@43280: # options wenzelm@43280: wenzelm@43280: FRESH="" wenzelm@47408: TEST_PIDE="" wenzelm@43280: wenzelm@47408: while getopts "ft" OPT wenzelm@43280: do wenzelm@43280: case "$OPT" in wenzelm@43280: f) wenzelm@43280: FRESH=true wenzelm@43280: ;; wenzelm@47408: t) wenzelm@47408: TEST_PIDE=true wenzelm@47408: ;; wenzelm@43280: \?) wenzelm@43280: usage wenzelm@43280: ;; wenzelm@43280: esac wenzelm@43280: done wenzelm@43280: wenzelm@43280: shift $(($OPTIND - 1)) wenzelm@43280: wenzelm@43280: wenzelm@43280: # args wenzelm@43280: wenzelm@43280: [ "$#" -ne 0 ] && usage wenzelm@43280: wenzelm@43280: wenzelm@49558: ## build wenzelm@34282: wenzelm@34284: TARGET_DIR="$ISABELLE_HOME/lib/classes" wenzelm@53577: TARGET="$TARGET_DIR/Pure.jar" wenzelm@34282: wenzelm@45673: declare -a PIDE_SOURCES=() wenzelm@45673: declare -a PURE_SOURCES=() wenzelm@45673: wenzelm@45673: for DEP in "${SOURCES[@]}" wenzelm@45673: do wenzelm@45673: if grep "Module:.*PIDE" "$DEP" >/dev/null wenzelm@45673: then wenzelm@45673: PIDE_SOURCES["${#PIDE_SOURCES[@]}"]="$DEP" wenzelm@45673: else wenzelm@45673: PURE_SOURCES["${#PURE_SOURCES[@]}"]="$DEP" wenzelm@45673: fi wenzelm@45673: done wenzelm@45673: wenzelm@43405: declare -a UPDATED=() wenzelm@43405: wenzelm@43280: if [ -n "$FRESH" ]; then wenzelm@43280: OUTDATED=true wenzelm@43280: else wenzelm@43280: OUTDATED=false wenzelm@43523: if [ ! -e "$TARGET" ]; then wenzelm@43523: OUTDATED=true wenzelm@43523: else wenzelm@43405: for DEP in "${SOURCES[@]}" wenzelm@43280: do wenzelm@43405: [ ! -e "$DEP" ] && fail "Missing file: $DEP" wenzelm@43523: [ "$DEP" -nt "$TARGET" ] && { wenzelm@43523: OUTDATED=true wenzelm@43523: UPDATED["${#UPDATED[@]}"]="$DEP" wenzelm@43523: } wenzelm@43280: done wenzelm@43405: fi wenzelm@43280: fi wenzelm@34282: wenzelm@34284: if [ "$OUTDATED" = true ] wenzelm@34284: then wenzelm@49173: echo "### Building Isabelle/Scala ..." wenzelm@34282: wenzelm@43405: [ "${#UPDATED[@]}" -gt 0 ] && { wenzelm@43405: echo "Changed files:" wenzelm@43405: for FILE in "${UPDATED[@]}" wenzelm@43405: do wenzelm@43405: echo " $FILE" wenzelm@43405: done wenzelm@43405: } wenzelm@43405: wenzelm@34282: rm -rf classes && mkdir classes wenzelm@45673: wenzelm@47009: SCALAC_OPTIONS="$ISABELLE_SCALA_BUILD_OPTIONS -d classes" wenzelm@45673: wenzelm@50689: ( wenzelm@58791: classpath "$JAVA_HOME/lib/jfxrt.jar" wenzelm@53576: classpath classes wenzelm@61294: export CLASSPATH="$(platform_path "$ISABELLE_CLASSPATH")" wenzelm@50689: wenzelm@50689: if [ "$TEST_PIDE" = true ]; then wenzelm@50689: isabelle_scala scalac $SCALAC_OPTIONS "${PIDE_SOURCES[@]}" || \ wenzelm@50689: fail "Failed to compile PIDE sources" wenzelm@50689: isabelle_scala scalac $SCALAC_OPTIONS "${PURE_SOURCES[@]}" || \ wenzelm@50689: fail "Failed to compile Pure sources" wenzelm@50689: else wenzelm@50689: isabelle_scala scalac $SCALAC_OPTIONS "${PIDE_SOURCES[@]}" "${PURE_SOURCES[@]}" || \ wenzelm@50689: fail "Failed to compile sources" wenzelm@50689: fi wenzelm@51508: ) || exit "$?" wenzelm@45673: wenzelm@53577: mkdir -p "$TARGET_DIR" || fail "Failed to create directory $TARGET_DIR" wenzelm@43280: wenzelm@43285: pushd classes >/dev/null wenzelm@43280: wenzelm@43517: CHARSET_SERVICE="META-INF/services/java.nio.charset.spi.CharsetProvider" wenzelm@43517: mkdir -p "$(dirname "$CHARSET_SERVICE")" wenzelm@43517: echo isabelle.Isabelle_Charset_Provider > "$CHARSET_SERVICE" wenzelm@43517: wenzelm@54676: cp "$ISABELLE_HOME/lib/logo/isabelle_transparent-32.gif" isabelle/. wenzelm@54709: cp "$ISABELLE_HOME/lib/logo/isabelle_transparent.gif" isabelle/. wenzelm@53452: wenzelm@61294: isabelle_jdk jar cfe "$(platform_path "$TARGET")" isabelle.Main META-INF isabelle || \ wenzelm@43523: fail "Failed to produce $TARGET" wenzelm@34282: wenzelm@43280: popd >/dev/null wenzelm@43280: wenzelm@34282: rm -rf classes wenzelm@34282: fi