Make typed Android generation self-contained

ober

0660f17d02faa9344e172a4768a5c14ccbea192d

diff --git a/Makefile b/Makefile
index a115d44..78da1ae 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,5 @@
-JERBOA ?= jerboa
+JERBOA_SOURCE_DIR ?= ../jerboa
+JERBOA ?= scripts/run-jandroid.sh
 BUILD_DIR ?= build/counter
 CLIENT_BUILD_DIR ?= build/client
 EXAMPLE ?= examples/counter/app.ss
diff --git a/scripts/run-jandroid.sh b/scripts/run-jandroid.sh
new file mode 100755
index 0000000..33c8f03
--- /dev/null
+++ b/scripts/run-jandroid.sh
@@ -0,0 +1,33 @@
+#!/bin/sh
+set -eu
+
+repo=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd -P)
+jerboa_source=${JERBOA_RUNTIME_SOURCE_DIR:-${JERBOA_SOURCE_DIR:-"$repo/../jerboa"}}
+typed_source="$jerboa_source/lib/jerboa/typed"
+parser="$typed_source/parser.so"
+
+if [ ! -f "$parser" ]; then
+    printf '%s\n' "compiled Jerboa typed runtime not found at $parser" >&2
+    printf '%s\n' "build the pinned Jerboa source before generating Android clients" >&2
+    exit 1
+fi
+
+if command -v sha256sum >/dev/null 2>&1; then
+    runtime_id=$(sha256sum "$parser" | awk '{print $1}')
+else
+    runtime_id=$(shasum -a 256 "$parser" | awk '{print $1}')
+fi
+
+runtime="$repo/build/jerboa-typed-runtime-$runtime_id"
+if [ ! -f "$runtime/jerboa/typed/parser.so" ]; then
+    mkdir -p "$runtime/jerboa"
+    cp -R "$typed_source" "$runtime/jerboa/typed"
+fi
+
+case ${1:-} in
+    jandroid.ss|*/jandroid.ss) shift ;;
+esac
+
+jerboa_home=$(jerbuild --jerboa-home)
+exec jerbuild exec --libdirs "$repo:$runtime:$jerboa_home/lib" \
+    "$repo/jandroid.ss" "$@"
diff --git a/templates/sample-client.ss b/templates/sample-client.ss
index 1d64808..c4db81d 100644
--- a/templates/sample-client.ss
+++ b/templates/sample-client.ss
@@ -6,5 +6,4 @@
         (export SampleClient)
         (object SampleClient
           (val marker : String
-            "generated named client"
-            (modifiers const)))))))
+            "generated named client"))))))