#!/bin/bash
set -e
E=/private/var/folders/ft/fkt3bwqd01g7f54wvyz9wgjc0000gn/T/opencode/dlopen-exp
S=/private/var/folders/ft/fkt3bwqd01g7f54wvyz9wgjc0000gn/T/opencode/size-exp
cd "$S"
printf 'void dummy(void){}\n' > iso.c
mkent() { cat > "$1" <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"><dict>$2</dict></plist>
EOF
}
LV='<key>com.apple.security.cs.disable-library-validation</key><true/>'
JIT='<key>com.apple.security.cs.allow-jit</key><true/>'
UNS='<key>com.apple.security.cs.allow-unsigned-executable-memory</key><true/>'
GT='<key>com.apple.security.get-task-allow</key><true/>'
mkent lv.entitlements "$LV"
mkent lv_jit.entitlements "$LV$JIT"
mkent lv_uns.entitlements "$LV$UNS"
mkent lv_gt.entitlements "$LV$GT"
mkent lv_jit_gt.entitlements "$LV$JIT$GT"
mkent all.entitlements "$LV$JIT$UNS$GT"

cd /Users/oscar/.worktree/hot-reload/labs/hot-reload
PLAIN=target/debug/server
run_case() {
  local label="$1" ent="$2"
  local host="$S/host_$label"
  cp "$PLAIN" "$host"
  codesign -f -s - --options runtime --entitlements "$S/$ent" "$host" >/dev/null 2>&1
  head -c 30000 /dev/urandom > "$S/pad_$label"
  cc -dynamiclib -o "$S/dy_$label.dylib" "$S/iso.c" -Wl,-sectcreate,__DATA,__pad,"$S/pad_$label"
  sleep 2
  echo -n "$label: "
  KAN_HOT_TIMING=1 KAN_HOT_LIBRARY="$S/dy_$label.dylib" KAN_HOT_EXAMPLE_ONCE=1 "$host" 2>&1 \
    | grep -E "kan-hot timing: dlopen|Library not loaded|failed to load" | head -2 | tr '\n' ' '
  echo
}
run_case lv lv.entitlements
run_case lv_jit lv_jit.entitlements
run_case lv_uns lv_uns.entitlements
run_case lv_gt lv_gt.entitlements
run_case lv_jit_gt lv_jit_gt.entitlements
run_case all all.entitlements
