generate distribution classpath for cold-start application wrappers;
authorwenzelm
Thu, 12 Sep 2013 15:37:09 +0200
changeset 53581 c0ad478abf50
parent 53580 ffc926553ec5
child 53582 8533b4cb8dd7
generate distribution classpath for cold-start application wrappers;
Admin/Linux/Isabelle
Admin/Windows/WinRun4J/Isabelle.ini
Admin/lib/Tools/makedist_bundle
--- a/Admin/Linux/Isabelle	Thu Sep 12 14:32:02 2013 +0200
+++ b/Admin/Linux/Isabelle	Thu Sep 12 15:37:09 2013 +0200
@@ -19,11 +19,9 @@
 
 # main
 
-declare -a JAVA_ARGS
-JAVA_ARGS=({JAVA_ARGS})
-
 exec "$ISABELLE_HOME/contrib/jdk/${ISABELLE_PLATFORM64:-$ISABELLE_PLATFORM32}/bin/java" \
-  -classpath "$ISABELLE_HOME/lib/classes/ext/Pure.jar:$ISABELLE_HOME/lib/classes/ext/scala-compiler.jar:$ISABELLE_HOME/lib/classes/ext/scala-library.jar:$ISABELLE_HOME/lib/classes/ext/scala-swing.jar:$ISABELLE_HOME/lib/classes/ext/scala-actors.jar:$ISABELLE_HOME/lib/classes/ext/scala-reflect.jar:$ISABELLE_HOME/src/Tools/jEdit/dist/jedit.jar" \
-  "${JAVA_ARGS[@]}" "-Disabelle.home=$ISABELLE_HOME" \
+  "-Disabelle.home=$ISABELLE_HOME" \
+  {JAVA_ARGS} \
+  -classpath "{CLASSPATH}" \
   isabelle.Main "$@"
 
--- a/Admin/Windows/WinRun4J/Isabelle.ini	Thu Sep 12 14:32:02 2013 +0200
+++ b/Admin/Windows/WinRun4J/Isabelle.ini	Thu Sep 12 15:37:09 2013 +0200
@@ -1,11 +1,4 @@
 main.class=isabelle.Main
-classpath.1=lib\classes\ext\Pure.jar
-classpath.2=lib\classes\ext\scala-compiler.jar
-classpath.3=lib\classes\ext\scala-library.jar
-classpath.4=lib\classes\ext\scala-swing.jar
-classpath.5=lib\classes\ext\scala-actors.jar
-classpath.6=lib\classes\ext\scala-reflect.jar
-classpath.7=src\Tools\jEdit\dist\jedit.jar
 vm.location=contrib\jdk\x86-cygwin\jre\bin\server\jvm.dll
 splash.image=lib\logo\isabelle.bmp
 vmarg.1=-Disabelle.home=%INI_DIR%
--- a/Admin/lib/Tools/makedist_bundle	Thu Sep 12 14:32:02 2013 +0200
+++ b/Admin/lib/Tools/makedist_bundle	Thu Sep 12 15:37:09 2013 +0200
@@ -51,6 +51,30 @@
 tar -C "$TMP" -x -z -f "$ARCHIVE" || exit 2
 
 
+# distribution classpath (based on educated guesses)
+
+splitarray ":" "$ISABELLE_CLASSPATH"; CLASSPATH_ENTRIES=("${SPLITARRAY[@]}")
+declare -a DISTRIBITION_CLASSPATH=()
+
+for ENTRY in "${CLASSPATH_ENTRIES[@]}"
+do
+  ENTRY=$(echo "$ENTRY" | perl -n -e "
+    if (m,$ISABELLE_HOME/(.*)\$,) { print qq{\$1}; }
+    elsif (m,$USER_HOME/.isabelle/contrib/(.*)\$,) { print qq{contrib/\$1}; }
+    else { print; };
+    print qq{\n};")
+  DISTRIBITION_CLASSPATH["${#DISTRIBITION_CLASSPATH[@]}"]="$ENTRY"
+done
+
+DISTRIBITION_CLASSPATH["${#DISTRIBITION_CLASSPATH[@]}"]="src/Tools/jEdit/dist/jedit.jar"
+
+echo "classpath"
+for ENTRY in "${DISTRIBITION_CLASSPATH[@]}"
+do
+  echo "  $ENTRY"
+done
+
+
 # bundled components
 
 init_component "$JEDIT_HOME"
@@ -128,9 +152,19 @@
 case "$PLATFORM_FAMILY" in
   linux)
     purge_contrib '-name "x86*-darwin" -o -name "x86*-cygwin" -o -name "x86*-windows"'
+
+    LINUX_CLASSPATH=""
+    for ENTRY in "${DISTRIBITION_CLASSPATH[@]}"
+    do
+      if [ -z "$LINUX_CLASSPATH" ]; then
+        LINUX_CLASSPATH="\\\$ISABELLE_HOME/$ENTRY"
+      else
+        LINUX_CLASSPATH="$LINUX_CLASSPATH:\\\$ISABELLE_HOME/$ENTRY"
+      fi
+    done
     cat "$ISABELLE_HOME/Admin/Linux/Isabelle" | \
-      perl -p -e "s,{JAVA_ARGS},$JEDIT_JAVA_OPTIONS $JEDIT_SYSTEM_OPTIONS,g;" \
-        > "$ISABELLE_TARGET/$ISABELLE_NAME"
+      perl -p > "$ISABELLE_TARGET/$ISABELLE_NAME" \
+        -e "s,{JAVA_ARGS},$JEDIT_JAVA_OPTIONS $JEDIT_SYSTEM_OPTIONS,g; s,{CLASSPATH},$LINUX_CLASSPATH,;"
     chmod +x "$ISABELLE_TARGET/$ISABELLE_NAME"
     ;;
   macos)
@@ -151,6 +185,7 @@
 
     (
       cat "$ISABELLE_HOME/Admin/Windows/WinRun4J/Isabelle.ini"
+
       declare -a JAVA_ARGS=()
       eval "JAVA_ARGS=($ISABELLE_JAVA_SYSTEM_OPTIONS $JEDIT_JAVA_OPTIONS $JEDIT_SYSTEM_OPTIONS)"
       A=2
@@ -159,6 +194,14 @@
         echo -e "vmarg.$A=$ARG\r"
         A=$[ $A + 1 ]
       done
+
+      A=1
+      for ENTRY in "${DISTRIBITION_CLASSPATH[@]}"
+      do
+        ENTRY=$(echo "$ENTRY" | perl -p -e 's,/,\\\\,g;')
+        echo -e "classpath.$A=$ENTRY\r"
+        A=$[ $A + 1 ]
+      done
     ) > "$ISABELLE_TARGET/${ISABELLE_NAME}.ini"
 
     cp "$TMP/windows_app/Isabelle.exe" "$ISABELLE_TARGET/${ISABELLE_NAME}.exe"
@@ -233,11 +276,10 @@
           cat "$APP_TEMPLATE/Info.plist-part2"
         ) | perl -p -e "s,{ISABELLE_NAME},${ISABELLE_NAME},g;" > "$APP/Contents/Info.plist"
 
-        for NAME in Pure.jar scala-compiler.jar scala-library.jar scala-swing.jar scala-actors.jar scala-reflect.jar
+        for ENTRY in "${DISTRIBITION_CLASSPATH[@]}"
         do
-          ln -sf "../Resources/${ISABELLE_NAME}/lib/classes/ext/$NAME" "$APP/Contents/Java"
+          ln -sf "../Resources/${ISABELLE_NAME}/$ENTRY" "$APP/Contents/Java"
         done
-        ln -sf "../Resources/${ISABELLE_NAME}/src/Tools/jEdit/dist/jedit.jar" "$APP/Contents/Java"
 
         cp -R "$APP_TEMPLATE/Resources/." "$APP/Contents/Resources/."
         cp "$APP_TEMPLATE/../isabelle.icns" "$APP/Contents/Resources/."