author | wenzelm |
Wed, 04 Dec 2013 18:59:20 +0100 | |
changeset 55316 | 4dd08fe126ba |
parent 55315 | 391ba1e12360 |
child 56018 | 6b2ca4850b71 |
permissions | -rwxr-xr-x |
wenzelm@34336 | 1 |
#!/usr/bin/env bash |
wenzelm@34336 | 2 |
# |
wenzelm@34667 | 3 |
# Author: Makarius |
wenzelm@34667 | 4 |
# |
wenzelm@34667 | 5 |
# DESCRIPTION: Isabelle/jEdit interface wrapper |
wenzelm@34667 | 6 |
|
wenzelm@34336 | 7 |
|
wenzelm@44165 | 8 |
## sources |
wenzelm@44165 | 9 |
|
wenzelm@44202 | 10 |
declare -a SOURCES=( |
wenzelm@51465 | 11 |
"src/active.scala" |
wenzelm@54160 | 12 |
"src/completion_popup.scala" |
wenzelm@44165 | 13 |
"src/dockable.scala" |
wenzelm@44165 | 14 |
"src/document_model.scala" |
wenzelm@44165 | 15 |
"src/document_view.scala" |
wenzelm@53582 | 16 |
"src/documentation_dockable.scala" |
wenzelm@53983 | 17 |
"src/find_dockable.scala" |
wenzelm@51557 | 18 |
"src/fold_handling.scala" |
wenzelm@50585 | 19 |
"src/graphview_dockable.scala" |
wenzelm@50741 | 20 |
"src/info_dockable.scala" |
wenzelm@51223 | 21 |
"src/isabelle.scala" |
wenzelm@44165 | 22 |
"src/isabelle_encoding.scala" |
wenzelm@50261 | 23 |
"src/isabelle_logic.scala" |
wenzelm@44165 | 24 |
"src/isabelle_options.scala" |
wenzelm@44165 | 25 |
"src/isabelle_sidekick.scala" |
wenzelm@54108 | 26 |
"src/jedit_editor.scala" |
wenzelm@50421 | 27 |
"src/jedit_lib.scala" |
wenzelm@51217 | 28 |
"src/jedit_options.scala" |
wenzelm@45464 | 29 |
"src/jedit_thy_load.scala" |
wenzelm@51448 | 30 |
"src/monitor_dockable.scala" |
wenzelm@44165 | 31 |
"src/output_dockable.scala" |
wenzelm@44165 | 32 |
"src/plugin.scala" |
wenzelm@50413 | 33 |
"src/pretty_text_area.scala" |
wenzelm@50717 | 34 |
"src/pretty_tooltip.scala" |
wenzelm@54071 | 35 |
"src/process_indicator.scala" |
wenzelm@44165 | 36 |
"src/protocol_dockable.scala" |
wenzelm@44165 | 37 |
"src/raw_output_dockable.scala" |
wenzelm@51217 | 38 |
"src/rendering.scala" |
wenzelm@50426 | 39 |
"src/rich_text_area.scala" |
wenzelm@44165 | 40 |
"src/scala_console.scala" |
wenzelm@54045 | 41 |
"src/sledgehammer_dockable.scala" |
immler@51158 | 42 |
"src/symbols_dockable.scala" |
wenzelm@49036 | 43 |
"src/syslog_dockable.scala" |
wenzelm@47443 | 44 |
"src/text_overview.scala" |
wenzelm@51314 | 45 |
"src/theories_dockable.scala" |
wenzelm@52670 | 46 |
"src/timing_dockable.scala" |
wenzelm@44288 | 47 |
"src/token_markup.scala" |
wenzelm@44165 | 48 |
) |
wenzelm@44165 | 49 |
|
wenzelm@44202 | 50 |
declare -a RESOURCES=( |
wenzelm@44166 | 51 |
"src/actions.xml" |
wenzelm@44166 | 52 |
"src/dockables.xml" |
wenzelm@44166 | 53 |
"src/Isabelle.props" |
wenzelm@51321 | 54 |
"src/jEdit.props" |
wenzelm@44166 | 55 |
"src/services.xml" |
wenzelm@53677 | 56 |
"src/modes/isabelle-news.xml" |
wenzelm@53677 | 57 |
"src/modes/isabelle-options.xml" |
wenzelm@53677 | 58 |
"src/modes/isabelle-root.xml" |
wenzelm@53677 | 59 |
"src/modes/isabelle.xml" |
wenzelm@44165 | 60 |
) |
wenzelm@44165 | 61 |
|
wenzelm@44165 | 62 |
|
wenzelm@34336 | 63 |
## diagnostics |
wenzelm@34336 | 64 |
|
wenzelm@34667 | 65 |
PRG="$(basename "$0")" |
wenzelm@34667 | 66 |
|
wenzelm@44164 | 67 |
function usage() |
wenzelm@34336 | 68 |
{ |
wenzelm@34336 | 69 |
echo |
wenzelm@34667 | 70 |
echo "Usage: isabelle $PRG [OPTIONS] [FILES ...]" |
wenzelm@34336 | 71 |
echo |
wenzelm@34336 | 72 |
echo " Options are:" |
wenzelm@34336 | 73 |
echo " -J OPTION add JVM runtime option" |
wenzelm@34412 | 74 |
echo " (default JEDIT_JAVA_OPTIONS=$JEDIT_JAVA_OPTIONS)" |
wenzelm@44165 | 75 |
echo " -b build only" |
wenzelm@49806 | 76 |
echo " -d DIR include session directory" |
wenzelm@44165 | 77 |
echo " -f fresh build" |
wenzelm@34336 | 78 |
echo " -j OPTION add jEdit runtime option" |
wenzelm@34336 | 79 |
echo " (default JEDIT_OPTIONS=$JEDIT_OPTIONS)" |
wenzelm@51418 | 80 |
echo " -l NAME logic session name" |
wenzelm@34336 | 81 |
echo " -m MODE add print mode for output" |
wenzelm@51420 | 82 |
echo " -n no build dialog for session image on startup" |
wenzelm@51388 | 83 |
echo " -s system build mode for session image" |
wenzelm@34336 | 84 |
echo |
wenzelm@51565 | 85 |
echo "Start jEdit with Isabelle plugin setup and open theory FILES" |
wenzelm@51129 | 86 |
echo "(default \"$USER_HOME/Scratch.thy\")." |
wenzelm@34336 | 87 |
echo |
wenzelm@34336 | 88 |
exit 1 |
wenzelm@34336 | 89 |
} |
wenzelm@34336 | 90 |
|
wenzelm@44164 | 91 |
function fail() |
wenzelm@34336 | 92 |
{ |
wenzelm@34336 | 93 |
echo "$1" >&2 |
wenzelm@34336 | 94 |
exit 2 |
wenzelm@34336 | 95 |
} |
wenzelm@34336 | 96 |
|
wenzelm@44164 | 97 |
function failed() |
wenzelm@44164 | 98 |
{ |
wenzelm@44164 | 99 |
fail "Failed!" |
wenzelm@44164 | 100 |
} |
wenzelm@44164 | 101 |
|
wenzelm@34336 | 102 |
|
wenzelm@34336 | 103 |
## process command line |
wenzelm@34336 | 104 |
|
wenzelm@34336 | 105 |
# options |
wenzelm@34336 | 106 |
|
wenzelm@44165 | 107 |
BUILD_ONLY=false |
wenzelm@44165 | 108 |
BUILD_JARS="jars" |
wenzelm@49806 | 109 |
JEDIT_SESSION_DIRS="" |
wenzelm@51418 | 110 |
JEDIT_LOGIC="" |
wenzelm@34336 | 111 |
JEDIT_PRINT_MODE="" |
wenzelm@54586 | 112 |
JEDIT_BUILD_MODE="normal" |
wenzelm@34336 | 113 |
|
wenzelm@44164 | 114 |
function getoptions() |
wenzelm@34783 | 115 |
{ |
wenzelm@34783 | 116 |
OPTIND=1 |
wenzelm@51420 | 117 |
while getopts "J:bd:fj:l:m:ns" OPT |
wenzelm@34783 | 118 |
do |
wenzelm@34783 | 119 |
case "$OPT" in |
wenzelm@34783 | 120 |
J) |
wenzelm@34783 | 121 |
JAVA_ARGS["${#JAVA_ARGS[@]}"]="$OPTARG" |
wenzelm@34783 | 122 |
;; |
wenzelm@44165 | 123 |
b) |
wenzelm@44165 | 124 |
BUILD_ONLY=true |
wenzelm@44165 | 125 |
;; |
wenzelm@49806 | 126 |
d) |
wenzelm@49806 | 127 |
if [ -z "$JEDIT_SESSION_DIRS" ]; then |
wenzelm@49806 | 128 |
JEDIT_SESSION_DIRS="$OPTARG" |
wenzelm@49806 | 129 |
else |
wenzelm@49806 | 130 |
JEDIT_SESSION_DIRS="$JEDIT_SESSION_DIRS:$OPTARG" |
wenzelm@49806 | 131 |
fi |
wenzelm@49806 | 132 |
;; |
wenzelm@44165 | 133 |
f) |
wenzelm@44165 | 134 |
BUILD_JARS="jars_fresh" |
wenzelm@44165 | 135 |
;; |
wenzelm@34783 | 136 |
j) |
wenzelm@34783 | 137 |
ARGS["${#ARGS[@]}"]="$OPTARG" |
wenzelm@34783 | 138 |
;; |
wenzelm@34783 | 139 |
l) |
wenzelm@34783 | 140 |
JEDIT_LOGIC="$OPTARG" |
wenzelm@34783 | 141 |
;; |
wenzelm@34783 | 142 |
m) |
wenzelm@34783 | 143 |
if [ -z "$JEDIT_PRINT_MODE" ]; then |
wenzelm@34783 | 144 |
JEDIT_PRINT_MODE="$OPTARG" |
wenzelm@34783 | 145 |
else |
wenzelm@34783 | 146 |
JEDIT_PRINT_MODE="$JEDIT_PRINT_MODE,$OPTARG" |
wenzelm@34783 | 147 |
fi |
wenzelm@34783 | 148 |
;; |
wenzelm@51420 | 149 |
n) |
wenzelm@54586 | 150 |
JEDIT_BUILD_MODE="none" |
wenzelm@51420 | 151 |
;; |
wenzelm@51388 | 152 |
s) |
wenzelm@54586 | 153 |
JEDIT_BUILD_MODE="system" |
wenzelm@51388 | 154 |
;; |
wenzelm@34783 | 155 |
\?) |
wenzelm@34783 | 156 |
usage |
wenzelm@34783 | 157 |
;; |
wenzelm@34783 | 158 |
esac |
wenzelm@34783 | 159 |
done |
wenzelm@34783 | 160 |
} |
wenzelm@34584 | 161 |
|
wenzelm@38555 | 162 |
declare -a JAVA_ARGS; eval "JAVA_ARGS=($JEDIT_JAVA_OPTIONS $JEDIT_SYSTEM_OPTIONS)" |
wenzelm@34846 | 163 |
|
wenzelm@54583 | 164 |
declare -a ARGS=() |
wenzelm@34336 | 165 |
|
wenzelm@34783 | 166 |
declare -a OPTIONS; eval "OPTIONS=($ISABELLE_JEDIT_OPTIONS)" |
wenzelm@34783 | 167 |
getoptions "${OPTIONS[@]}" |
wenzelm@34783 | 168 |
|
wenzelm@34783 | 169 |
getoptions "$@" |
wenzelm@34336 | 170 |
shift $(($OPTIND - 1)) |
wenzelm@34336 | 171 |
|
wenzelm@34336 | 172 |
|
wenzelm@34336 | 173 |
# args |
wenzelm@34336 | 174 |
|
wenzelm@45406 | 175 |
if [ "$#" -eq 0 ]; then |
wenzelm@51135 | 176 |
ARGS["${#ARGS[@]}"]="$(jvmpath "$USER_HOME/Scratch.thy")" |
wenzelm@45406 | 177 |
else |
wenzelm@45406 | 178 |
while [ "$#" -gt 0 ]; do |
wenzelm@45406 | 179 |
ARGS["${#ARGS[@]}"]="$(jvmpath "$1")" |
wenzelm@45406 | 180 |
shift |
wenzelm@45406 | 181 |
done |
wenzelm@45406 | 182 |
fi |
wenzelm@34336 | 183 |
|
wenzelm@34336 | 184 |
|
wenzelm@44164 | 185 |
## dependencies |
wenzelm@44164 | 186 |
|
wenzelm@50968 | 187 |
if [ -e "$ISABELLE_HOME/Admin/build" ]; then |
wenzelm@51797 | 188 |
"$ISABELLE_TOOL" browser -b || exit $? |
wenzelm@50968 | 189 |
if [ "$BUILD_JARS" = jars_fresh ]; then |
wenzelm@50968 | 190 |
"$ISABELLE_TOOL" graphview -b -f || exit $? |
wenzelm@50968 | 191 |
else |
wenzelm@50581 | 192 |
"$ISABELLE_HOME/Admin/build" "$BUILD_JARS" || exit $? |
wenzelm@50968 | 193 |
"$ISABELLE_TOOL" graphview -b || exit $? |
wenzelm@50968 | 194 |
fi |
wenzelm@50968 | 195 |
fi |
wenzelm@44287 | 196 |
|
wenzelm@54714 | 197 |
PURE_JAR="$ISABELLE_HOME/lib/classes/Pure.jar" |
wenzelm@54714 | 198 |
GRAPHVIEW_JAR="$ISABELLE_HOME/lib/classes/Graphview.jar" |
wenzelm@44287 | 199 |
|
wenzelm@44165 | 200 |
pushd "$JEDIT_HOME" >/dev/null || failed |
wenzelm@44164 | 201 |
|
wenzelm@44164 | 202 |
JEDIT_JAR="$ISABELLE_JEDIT_BUILD_HOME/contrib/$ISABELLE_JEDIT_BUILD_VERSION/jedit.jar" |
wenzelm@44164 | 203 |
|
wenzelm@44164 | 204 |
JEDIT_JARS=( |
wenzelm@54582 | 205 |
"$ISABELLE_JEDIT_BUILD_HOME/contrib/Console.jar" |
wenzelm@54582 | 206 |
"$ISABELLE_JEDIT_BUILD_HOME/contrib/ErrorList.jar" |
wenzelm@54582 | 207 |
"$ISABELLE_JEDIT_BUILD_HOME/contrib/Highlight.jar" |
wenzelm@55020 | 208 |
"$ISABELLE_JEDIT_BUILD_HOME/contrib/MacOSX.jar" |
wenzelm@54582 | 209 |
"$ISABELLE_JEDIT_BUILD_HOME/contrib/SideKick.jar" |
wenzelm@54582 | 210 |
"$ISABELLE_JEDIT_BUILD_HOME/contrib/idea-icons.jar" |
wenzelm@54582 | 211 |
"$ISABELLE_JEDIT_BUILD_HOME/contrib/jsr305-2.0.0.jar" |
wenzelm@44164 | 212 |
) |
wenzelm@44164 | 213 |
|
wenzelm@44164 | 214 |
|
wenzelm@44164 | 215 |
# target |
wenzelm@44164 | 216 |
|
wenzelm@44164 | 217 |
TARGET="dist/jars/Isabelle-jEdit.jar" |
wenzelm@44164 | 218 |
|
wenzelm@44256 | 219 |
declare -a UPDATED=() |
wenzelm@44256 | 220 |
|
wenzelm@44165 | 221 |
if [ "$BUILD_JARS" = jars_fresh ]; then |
wenzelm@44165 | 222 |
OUTDATED=true |
wenzelm@44165 | 223 |
else |
wenzelm@44165 | 224 |
OUTDATED=false |
wenzelm@44239 | 225 |
if [ ! -e "$TARGET" ]; then |
wenzelm@44239 | 226 |
OUTDATED=true |
wenzelm@44256 | 227 |
else |
wenzelm@44256 | 228 |
if [ -n "$ISABELLE_JEDIT_BUILD_HOME" ]; then |
wenzelm@50581 | 229 |
declare -a DEPS=( |
wenzelm@54713 | 230 |
"$JEDIT_JAR" "${JEDIT_JARS[@]}" "$PURE_JAR" "$GRAPHVIEW_JAR" |
wenzelm@54713 | 231 |
"${SOURCES[@]}" "${RESOURCES[@]}" |
wenzelm@50581 | 232 |
) |
wenzelm@48543 | 233 |
elif [ -e "$ISABELLE_HOME/Admin/build" ]; then |
wenzelm@50581 | 234 |
declare -a DEPS=("$PURE_JAR" "$GRAPHVIEW_JAR" "${SOURCES[@]}" "${RESOURCES[@]}") |
wenzelm@44256 | 235 |
else |
wenzelm@48543 | 236 |
declare -a DEPS=() |
wenzelm@44256 | 237 |
fi |
wenzelm@44256 | 238 |
for DEP in "${DEPS[@]}" |
wenzelm@44239 | 239 |
do |
wenzelm@44256 | 240 |
[ ! -e "$DEP" ] && fail "Missing file: $DEP" |
wenzelm@44256 | 241 |
[ "$DEP" -nt "$TARGET" ] && { |
wenzelm@44256 | 242 |
OUTDATED=true |
wenzelm@44256 | 243 |
UPDATED["${#UPDATED[@]}"]="$DEP" |
wenzelm@44256 | 244 |
} |
wenzelm@44239 | 245 |
done |
wenzelm@44239 | 246 |
fi |
wenzelm@44165 | 247 |
fi |
wenzelm@44164 | 248 |
|
wenzelm@44164 | 249 |
|
wenzelm@44164 | 250 |
# build |
wenzelm@44164 | 251 |
|
wenzelm@44164 | 252 |
if [ "$OUTDATED" = true ] |
wenzelm@44164 | 253 |
then |
wenzelm@44277 | 254 |
echo "### Building Isabelle/jEdit ..." |
wenzelm@44277 | 255 |
|
wenzelm@44256 | 256 |
[ "${#UPDATED[@]}" -gt 0 ] && { |
wenzelm@44277 | 257 |
echo "Changed files:" |
wenzelm@44256 | 258 |
for FILE in "${UPDATED[@]}" |
wenzelm@44256 | 259 |
do |
wenzelm@44256 | 260 |
echo " $FILE" |
wenzelm@44256 | 261 |
done |
wenzelm@44256 | 262 |
} |
wenzelm@44256 | 263 |
|
wenzelm@44164 | 264 |
[ -z "$ISABELLE_JEDIT_BUILD_HOME" ] && \ |
wenzelm@44164 | 265 |
fail "Unknown ISABELLE_JEDIT_BUILD_HOME -- missing auxiliary component" |
wenzelm@44164 | 266 |
|
wenzelm@44164 | 267 |
rm -rf dist || failed |
wenzelm@44164 | 268 |
mkdir -p dist dist/classes || failed |
wenzelm@44167 | 269 |
|
wenzelm@47374 | 270 |
cp -p -R -f "$ISABELLE_JEDIT_BUILD_HOME/contrib/$ISABELLE_JEDIT_BUILD_VERSION/." dist/. |
wenzelm@47374 | 271 |
cp -p -R -f "${RESOURCES[@]}" dist/classes/. |
wenzelm@44167 | 272 |
cp src/jEdit.props dist/properties/. |
wenzelm@47374 | 273 |
cp -p -R -f src/modes/. dist/modes/. |
wenzelm@44164 | 274 |
|
wenzelm@44266 | 275 |
perl -i -e 'while (<>) { |
wenzelm@44266 | 276 |
if (m/NAME="javacc"/) { |
wenzelm@44266 | 277 |
print qq,<MODE NAME="isabelle" FILE="isabelle.xml" FILE_NAME_GLOB="*.thy"/>\n\n,; |
wenzelm@53676 | 278 |
print qq,<MODE NAME="isabelle-news" FILE="isabelle-news.xml"/>\n\n,; |
wenzelm@49381 | 279 |
print qq,<MODE NAME="isabelle-options" FILE="isabelle-options.xml"/>\n\n,; |
wenzelm@49590 | 280 |
print qq,<MODE NAME="isabelle-root" FILE="isabelle-root.xml" FILE_NAME_GLOB="ROOT"/>\n\n,; } |
wenzelm@44164 | 281 |
print; }' dist/modes/catalog |
wenzelm@44164 | 282 |
|
wenzelm@55309 | 283 |
cd dist |
wenzelm@55309 | 284 |
isabelle_jdk jar xf jedit.jar |
wenzelm@55309 | 285 |
cp "$ISABELLE_HOME/lib/logo/isabelle-32.gif" \ |
wenzelm@55309 | 286 |
"org/gjt/sp/jedit/icons/themes/classic/32x32/apps/isabelle.gif" || failed |
wenzelm@55309 | 287 |
cp "$ISABELLE_HOME/lib/logo/isabelle-32.gif" \ |
wenzelm@55309 | 288 |
"org/gjt/sp/jedit/icons/themes/tango/32x32/apps/isabelle.gif" || failed |
wenzelm@55315 | 289 |
isabelle_jdk jar cfe jedit.jar org.gjt.sp.jedit.jEdit org || failed |
wenzelm@55316 | 290 |
rm -rf META-INF org |
wenzelm@55309 | 291 |
cd .. |
wenzelm@55309 | 292 |
|
wenzelm@54582 | 293 |
cp -p -R -f "${JEDIT_JARS[@]}" dist/jars/. || failed |
wenzelm@44164 | 294 |
( |
wenzelm@54715 | 295 |
#workaround for scalac 2.10.2 |
wenzelm@54588 | 296 |
function stty() { :; } |
wenzelm@54588 | 297 |
export -f stty |
wenzelm@54588 | 298 |
|
wenzelm@54713 | 299 |
for JAR in "$JEDIT_JAR" "${JEDIT_JARS[@]}" "$PURE_JAR" "$GRAPHVIEW_JAR" |
wenzelm@44164 | 300 |
do |
wenzelm@54713 | 301 |
classpath "$JAR" |
wenzelm@44164 | 302 |
done |
wenzelm@54713 | 303 |
export CLASSPATH="$(jvmpath "$ISABELLE_CLASSPATH")" |
wenzelm@47880 | 304 |
exec "$SCALA_HOME/bin/scalac" $ISABELLE_SCALA_BUILD_OPTIONS -d dist/classes "${SOURCES[@]}" |
wenzelm@44164 | 305 |
) || fail "Failed to compile sources" |
wenzelm@44164 | 306 |
|
wenzelm@44164 | 307 |
cd dist/classes |
wenzelm@47986 | 308 |
isabelle_jdk jar cf "../jars/Isabelle-jEdit.jar" * || failed |
wenzelm@44164 | 309 |
cd ../.. |
wenzelm@44164 | 310 |
rm -rf dist/classes |
wenzelm@44164 | 311 |
fi |
wenzelm@44164 | 312 |
|
wenzelm@44164 | 313 |
popd >/dev/null |
wenzelm@44164 | 314 |
|
wenzelm@44164 | 315 |
|
wenzelm@44164 | 316 |
## main |
wenzelm@44164 | 317 |
|
wenzelm@54713 | 318 |
if [ "$BUILD_ONLY" = false ] |
wenzelm@54713 | 319 |
then |
wenzelm@54586 | 320 |
export JEDIT_SESSION_DIRS JEDIT_LOGIC JEDIT_PRINT_MODE JEDIT_BUILD_MODE |
wenzelm@54713 | 321 |
classpath "$JEDIT_HOME/dist/jedit.jar" |
wenzelm@54713 | 322 |
exec "$ISABELLE_TOOL" java "${JAVA_ARGS[@]}" isabelle.Main "${ARGS[@]}" |
wenzelm@51431 | 323 |
fi |