1#!/usr/bin/env bash 2# 3# Author: Makarius 4# 5# build-jars - build Isabelle/Scala 6# 7# Requires proper Isabelle settings environment. 8 9## sources 10 11declare -a SOURCES=( 12 Admin/afp.scala 13 Admin/build_cygwin.scala 14 Admin/build_doc.scala 15 Admin/build_history.scala 16 Admin/build_jdk.scala 17 Admin/build_log.scala 18 Admin/build_polyml.scala 19 Admin/build_release.scala 20 Admin/build_status.scala 21 Admin/check_sources.scala 22 Admin/ci_profile.scala 23 Admin/isabelle_cronjob.scala 24 Admin/isabelle_devel.scala 25 Admin/jenkins.scala 26 Admin/news.scala 27 Admin/other_isabelle.scala 28 Admin/remote_dmg.scala 29 Concurrent/consumer_thread.scala 30 Concurrent/counter.scala 31 Concurrent/event_timer.scala 32 Concurrent/future.scala 33 Concurrent/mailbox.scala 34 Concurrent/par_list.scala 35 Concurrent/standard_thread.scala 36 Concurrent/synchronized.scala 37 GUI/color_value.scala 38 GUI/gui.scala 39 GUI/gui_thread.scala 40 GUI/popup.scala 41 GUI/wrap_panel.scala 42 General/antiquote.scala 43 General/bytes.scala 44 General/cache.scala 45 General/codepoint.scala 46 General/comment.scala 47 General/completion.scala 48 General/csv.scala 49 General/date.scala 50 General/exn.scala 51 General/file.scala 52 General/file_watcher.scala 53 General/graph.scala 54 General/graph_display.scala 55 General/graphics_file.scala 56 General/http.scala 57 General/json.scala 58 General/linear_set.scala 59 General/logger.scala 60 General/long_name.scala 61 General/mercurial.scala 62 General/multi_map.scala 63 General/output.scala 64 General/path.scala 65 General/position.scala 66 General/pretty.scala 67 General/properties.scala 68 General/scan.scala 69 General/sha1.scala 70 General/sql.scala 71 General/ssh.scala 72 General/symbol.scala 73 General/time.scala 74 General/timing.scala 75 General/untyped.scala 76 General/url.scala 77 General/utf8.scala 78 General/value.scala 79 General/word.scala 80 General/xz.scala 81 Isar/document_structure.scala 82 Isar/keyword.scala 83 Isar/line_structure.scala 84 Isar/outer_syntax.scala 85 Isar/parse.scala 86 Isar/token.scala 87 ML/ml_console.scala 88 ML/ml_lex.scala 89 ML/ml_process.scala 90 ML/ml_statistics.scala 91 ML/ml_syntax.scala 92 PIDE/command.scala 93 PIDE/command_span.scala 94 PIDE/document.scala 95 PIDE/document_id.scala 96 PIDE/editor.scala 97 PIDE/line.scala 98 PIDE/markup.scala 99 PIDE/markup_tree.scala 100 PIDE/protocol.scala 101 PIDE/protocol_handlers.scala 102 PIDE/protocol_message.scala 103 PIDE/prover.scala 104 PIDE/query_operation.scala 105 PIDE/rendering.scala 106 PIDE/resources.scala 107 PIDE/session.scala 108 PIDE/text.scala 109 PIDE/xml.scala 110 PIDE/yxml.scala 111 ROOT.scala 112 System/bash.scala 113 System/command_line.scala 114 System/cygwin.scala 115 System/distribution.scala 116 System/getopts.scala 117 System/invoke_scala.scala 118 System/isabelle_charset.scala 119 System/isabelle_process.scala 120 System/isabelle_system.scala 121 System/isabelle_tool.scala 122 System/numa.scala 123 System/options.scala 124 System/platform.scala 125 System/posix_interrupt.scala 126 System/process_result.scala 127 System/progress.scala 128 System/system_channel.scala 129 System/tty_loop.scala 130 Thy/bibtex.scala 131 Thy/export.scala 132 Thy/export_theory.scala 133 Thy/html.scala 134 Thy/latex.scala 135 Thy/present.scala 136 Thy/sessions.scala 137 Thy/thy_header.scala 138 Thy/thy_resources.scala 139 Thy/thy_syntax.scala 140 Tools/dump.scala 141 Tools/build.scala 142 Tools/build_docker.scala 143 Tools/check_keywords.scala 144 Tools/debugger.scala 145 Tools/doc.scala 146 Tools/imports.scala 147 Tools/main.scala 148 Tools/mkroot.scala 149 Tools/print_operation.scala 150 Tools/profiling_report.scala 151 Tools/server.scala 152 Tools/server_commands.scala 153 Tools/simplifier_trace.scala 154 Tools/spell_checker.scala 155 Tools/task_statistics.scala 156 Tools/update_cartouches.scala 157 Tools/update_comments.scala 158 Tools/update_header.scala 159 Tools/update_then.scala 160 Tools/update_theorems.scala 161 library.scala 162 term.scala 163 term_xml.scala 164 ../Tools/Graphview/graph_file.scala 165 ../Tools/Graphview/graph_panel.scala 166 ../Tools/Graphview/graphview.scala 167 ../Tools/Graphview/layout.scala 168 ../Tools/Graphview/main_panel.scala 169 ../Tools/Graphview/metrics.scala 170 ../Tools/Graphview/model.scala 171 ../Tools/Graphview/mutator.scala 172 ../Tools/Graphview/mutator_dialog.scala 173 ../Tools/Graphview/mutator_event.scala 174 ../Tools/Graphview/popups.scala 175 ../Tools/Graphview/shapes.scala 176 ../Tools/Graphview/tree_panel.scala 177 ../Tools/VSCode/src/build_vscode.scala 178 ../Tools/VSCode/src/channel.scala 179 ../Tools/VSCode/src/document_model.scala 180 ../Tools/VSCode/src/dynamic_output.scala 181 ../Tools/VSCode/src/grammar.scala 182 ../Tools/VSCode/src/preview_panel.scala 183 ../Tools/VSCode/src/protocol.scala 184 ../Tools/VSCode/src/server.scala 185 ../Tools/VSCode/src/state_panel.scala 186 ../Tools/VSCode/src/vscode_javascript.scala 187 ../Tools/VSCode/src/vscode_rendering.scala 188 ../Tools/VSCode/src/vscode_resources.scala 189 ../Tools/VSCode/src/vscode_spell_checker.scala 190) 191 192 193## diagnostics 194 195PRG="$(basename "$0")" 196 197function usage() 198{ 199 echo 200 echo "Usage: isabelle $PRG [OPTIONS]" 201 echo 202 echo " Options are:" 203 echo " -f fresh build" 204 echo 205 exit 1 206} 207 208function fail() 209{ 210 echo "$1" >&2 211 exit 2 212} 213 214[ -z "$ISABELLE_HOME" ] && fail "Missing Isabelle settings environment" 215 216 217## process command line 218 219# options 220 221FRESH="" 222 223while getopts "f" OPT 224do 225 case "$OPT" in 226 f) 227 FRESH=true 228 ;; 229 \?) 230 usage 231 ;; 232 esac 233done 234 235shift $(($OPTIND - 1)) 236 237 238# args 239 240[ "$#" -ne 0 ] && usage 241 242 243## build 244 245TARGET_DIR="$ISABELLE_HOME/lib/classes" 246TARGET="$TARGET_DIR/Pure.jar" 247 248declare -a UPDATED=() 249 250if [ -n "$FRESH" ]; then 251 OUTDATED=true 252else 253 OUTDATED=false 254 if [ ! -e "$TARGET" ]; then 255 OUTDATED=true 256 else 257 for DEP in "${SOURCES[@]}" 258 do 259 [ ! -e "$DEP" ] && fail "Missing file: $DEP" 260 [ "$DEP" -nt "$TARGET" ] && { 261 OUTDATED=true 262 UPDATED["${#UPDATED[@]}"]="$DEP" 263 } 264 done 265 fi 266fi 267 268if [ "$OUTDATED" = true ] 269then 270 echo "### Building Isabelle/Scala ..." 271 272 [ "${#UPDATED[@]}" -gt 0 ] && { 273 echo "Changed files:" 274 for FILE in "${UPDATED[@]}" 275 do 276 echo " $FILE" 277 done 278 } 279 280 rm -f "$TARGET" 281 rm -rf classes && mkdir classes 282 283 SCALAC_OPTIONS="$ISABELLE_SCALAC_OPTIONS -d classes" 284 285 ( 286 classpath "$JAVA_HOME/lib/jfxrt.jar" 287 classpath classes 288 export CLASSPATH="$(platform_path "$ISABELLE_CLASSPATH")" 289 290 isabelle_scala scalac $SCALAC_OPTIONS "${SOURCES[@]}" || \ 291 fail "Failed to compile sources" 292 ) || exit "$?" 293 294 mkdir -p "$TARGET_DIR" || fail "Failed to create directory $TARGET_DIR" 295 296 pushd classes >/dev/null 297 298 CHARSET_SERVICE="META-INF/services/java.nio.charset.spi.CharsetProvider" 299 mkdir -p "$(dirname "$CHARSET_SERVICE")" 300 echo isabelle.Isabelle_Charset_Provider > "$CHARSET_SERVICE" 301 302 cp "$ISABELLE_HOME/lib/logo/isabelle_transparent-32.gif" isabelle/. 303 cp "$ISABELLE_HOME/lib/logo/isabelle_transparent.gif" isabelle/. 304 305 isabelle_jdk jar cfe "$(platform_path "$TARGET")" isabelle.Main META-INF isabelle || \ 306 fail "Failed to produce $TARGET" 307 308 popd >/dev/null 309 310 rm -rf classes 311fi 312