diff options
Diffstat (limited to 'hadrian/build-cabal')
-rwxr-xr-x | hadrian/build-cabal | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/hadrian/build-cabal b/hadrian/build-cabal new file mode 100755 index 0000000000..c385542410 --- /dev/null +++ b/hadrian/build-cabal @@ -0,0 +1,48 @@ +#!/usr/bin/env bash + +CABAL=cabal +CABFLAGS="--disable-documentation --disable-profiling --disable-library-profiling $CABFLAGS" + +# It is currently more robust to pass Cabal an absolute path to the project file. +PROJ="$PWD/hadrian/cabal.project" + +set -euo pipefail + +if ! [ -f "$PROJ" ]; then + echo "Current working directory must be GHC's top-level folder" + exit 2 +fi + +if ! type "$CABAL" > /dev/null; then + echo "Please make sure 'cabal' is in your PATH" + exit 2 +fi + +CABVERSTR=$("$CABAL" --numeric-version) +CABVER=( ${CABVERSTR//./ } ) + +build_failed() { + ( ghc --info | grep -s '("Support SMP","YES")' > /dev/null ) \ + || cat <<EOF +Your compiler does not support the threaded runtime system. +Please disable the \`threaded\` Cabal flag in project.cabal.local +by running: + + echo -e "package hadrian\n flags: -threaded" >> project.cabal.local + +EOF + exit 1 +} + +if [ "${CABVER[0]}" -gt 2 -o "${CABVER[0]}" -eq 2 -a "${CABVER[1]}" -ge 2 ]; +then + "$CABAL" --project-file="$PROJ" new-build $CABFLAGS -j exe:hadrian + # use new-exec instead of new-run to make sure that the build-tools (alex & happy) are in PATH + "$CABAL" --project-file="$PROJ" new-exec $CABFLAGS hadrian -- \ + --directory "$PWD" \ + "$@" \ + || build_failed +else + echo "Cabal version is too old; you need at least cabal-install 2.2" + exit 2 +fi |