cannam@153: #!/bin/bash cannam@153: cannam@153: set -eu cannam@153: cannam@153: mydir=$(dirname "$0") cannam@153: cannam@153: case "$mydir" in cannam@153: /*) ;; cannam@153: *) mydir=$(pwd)/"$mydir";; cannam@153: esac cannam@153: cannam@153: parent_dir=$(echo "$mydir/../..") cannam@153: cannam@153: sibling_dir() { cannam@153: local name="$1" cannam@153: local dir=$parent_dir/"$name" cannam@153: local simplified="" cannam@153: while true; do cannam@153: simplified=$(echo "$dir" | sed 's,/[a-z][a-z-]*/../,/,') cannam@153: simplified=$(echo "$simplified" | sed 's,/./,/,') cannam@153: if [ "$simplified" = "$dir" ]; then break cannam@153: else dir="$simplified" cannam@153: fi cannam@153: done cannam@153: echo "$dir" cannam@153: } cannam@153: cannam@153: explain_and_exit() { cannam@153: cat 1>&2 <&2 cannam@153: echo "*** Failed to find sibling directory $sibling" 1>&2 cannam@153: echo "*** (expected in full path: $dir)" 1>&2 cannam@153: explain_and_exit cannam@153: fi cannam@153: done cannam@153: cannam@161: if ! em++ -v >/dev/null 2>&1 ; then cannam@161: em++ -v cannam@161: echo 1>&2 cannam@161: echo "*** Failed to find or run required program em++" 1>&2 cannam@161: explain_and_exit cannam@161: fi cannam@161: cannam@161: if ! nodejs -v >/dev/null 2>&1 ; then cannam@161: if ! node -v >/dev/null 2>&1 ; then cannam@161: nodejs -v cannam@161: node -v cannam@153: echo 1>&2 cannam@161: echo "*** Failed to find or run required program node (as either nodejs or node)" 1>&2 cannam@153: explain_and_exit cannam@153: fi cannam@161: fi cannam@153: cannam@153: