Make sure build scripts can be run from outside Hadrian directory
authorAndrey Mokhov <andrey.mokhov@gmail.com>
Fri, 3 Nov 2017 23:24:53 +0000 (23:24 +0000)
committerAndrey Mokhov <andrey.mokhov@gmail.com>
Fri, 3 Nov 2017 23:24:53 +0000 (23:24 +0000)
See #440

build.bat
build.sh

index 18cf6cb..01a869f 100644 (file)
--- a/build.bat
+++ b/build.bat
@@ -1,4 +1,6 @@
 @echo off
+setlocal
+cd %~dp0
 
 rem By default on Windows we build Hadrian using Stack
 ./build.stack.bat %*
index 8e58b66..ad502b3 100755 (executable)
--- a/build.sh
+++ b/build.sh
@@ -1,5 +1,35 @@
 #!/usr/bin/env bash
 
+set -euo pipefail
+
+# readlink on os x, doesn't support -f, to prevent the
+# need of installing coreutils (e.g. through brew, just
+# for readlink, we use the follownig substitute.
+#
+# source: http://stackoverflow.com/a/1116890
+function rl {
+    TARGET_FILE="$1"
+
+    cd "$(dirname "$TARGET_FILE")"
+    TARGET_FILE="$(basename "$TARGET_FILE")"
+
+    # Iterate down a (possible) chain of symlinks
+    while [ -L "$TARGET_FILE" ]
+    do
+        TARGET_FILE="$(readlink "$TARGET_FILE")"
+        cd "$(dirname "$TARGET_FILE")"
+        TARGET_FILE="$(basename "$TARGET_FILE")"
+    done
+
+    # Compute the canonicalized name by finding the physical path
+    # for the directory we're in and appending the target file.
+    PHYS_DIR="$(pwd -P)"
+    RESULT="$PHYS_DIR/$TARGET_FILE"
+    echo "$RESULT"
+}
+
+root="$(dirname "$(rl "$0")")"
+
 # By default on Linux/MacOS we build Hadrian using Cabal
-chmod a+x ./build.cabal.sh
-(. ./build.cabal.sh "$@")
+chmod a+x "$root/build.cabal.sh"
+(. "$root/build.cabal.sh" "$@")