diff --git a/bin/compile b/bin/compile index 8daa19a..4a512ab 100755 --- a/bin/compile +++ b/bin/compile @@ -5,45 +5,58 @@ set -e source $(dirname $0)/../scripts/functions -loginfo() { echo "Info: $*"; } -error() { echo "Error: $*" >&2; exit 1; } - BUILD_DIR=$1 -echo "Info: BUILD_DIR=$BUILD_DIR" +loginfo "BUILD_DIR=$BUILD_DIR" CACHE_DIR=$2 -echo "Info: CACHE_DIR=$CACHE_DIR" +loginfo "CACHE_DIR=$CACHE_DIR" + ## CHECK BUILDPACK_GHC_BASE_URL is set -if [ "$BUILDPACK_GHC_BASE_URL" = "" ]; then - BUILDPACK_GHC_BASE_URL="http://www.haskell.org/ghc/dist" - loginfo "BUILDPACK_GHC_BASE_URL is not set; use $BUILDPACK_GHC_BASE_URL" -fi - -## CHECK GHC_BOOTSTRAP_VERSION is set -if [ "$GHC_BOOTSTRAP_VERSION" == "" ]; then - GHC_BOOTSTRAP_VERSION="7.0.4" - loginfo "GHC_BOOTSTRAP_VERSION is not set; use $GHC_BOOTSTRAP_VERSION" -fi +setIfUnset BUILDPACK_GHC_BASE_URL "http://www.haskell.org/ghc/dist" +setIfUnset GHC_BOOTSTRAP_VERSION "7.0.4" +setIfUnset HASKELL_PLATFORM_BASE_URL "http://lambda.haskell.org/platform/download" +setIfUnset HASKELL_PLATFORM_VERSION "2011.4.0.0" arch=$(uname -m) ghcver=$GHC_BOOTSTRAP_VERSION bsdir=$CACHE_DIR/bootstrap -ghcurl="$BUILDPACK_GHC_BASE_URL/$ghcver/ghc-$ghcver-$arch-unknown-linux.tar.bz2" +ghcurl="$BUILDPACK_GHC_BASE_URL/$ghcver/ghc-$ghcver-$arch-unknown-linux.tar.gz" +platformver="$HASKELL_PLATFORM_VERSION" +platformurl="$HASKELL_PLATFORM_BASE_URL/$platver/haskell-platform-$platformver-tar.gz" loginfo "bootstrap directory: ${bsdir}"; loginfo "bootstrap URL: $ghcurl"; -if [ -f "$bsdir.downloaded" ]; then +if [ -f "$bsdir.ghc.downloaded" ]; then loginfo "already downloaded GHC bootstrap version ${ghcver}"; else loginfo "downloading GHC $ghcver from $ghcurl"; $(downloadAndExtract $bsdir $ghcurl) && \ - touch $bsdir.downloaded; + touch $bsdir.ghc.downloaded; fi +# GHC source is downloaded -if [ -f "$bsdir.compiled" ]; then +if [ -f "$bsdir.ghc.compiled" ]; then loginfo "already compiled GHC bootstrap version ${ghcver}"; else $(configureMakeInstall $bsdir/ghc-$ghcver $BUILD_DIR/bootstrap/ghc-$ghcver) && \ - touch $bsdir.compiled; + touch $bsdir.ghc.compiled; fi +# GHC is compiled + +if [ -f "$bsdir.platform.downloaded" ]; then + loginfo "already downloaded GHC bootstrap version ${platformver}"; +else + loginfo "downloading GHC $platformver from $platformurl"; + $(downloadAndExtract $bsdir $platformurl) && \ + touch $bsdir.platform.downloaded; +fi +# Haskell Platform source is downloaded + +if [ -f "$bsdir.platform.compiled" ]; then + loginfo "already compiled GHC bootstrap version ${platformver}"; +else + $(configureMakeInstall $bsdir/platform-$platformver $BUILD_DIR/bootstrap/platform-$platformver) && \ + touch $bsdir.platform.compiled; +fi +# Haskell platform is compiled is compiled diff --git a/scripts/functions b/scripts/functions index dc9869f..8208f1c 100644 --- a/scripts/functions +++ b/scripts/functions @@ -1,3 +1,13 @@ +#!/bin/bash + +loginfo() { echo "Info: $*"; } +error() { echo "Error: $*" >&2; exit 1; } + +setIfUnset() { + varname="$1" + defaultValue="$2" + eval "if [ \"\$$varname\" = \"\" ]; then $varname=$defaultValue; loginfo \"$varname unset; use \$$varname\"; fi" +} function indent() { c='s/^/ /' @@ -17,6 +27,8 @@ function downloadAndExtract() { function configureMakeInstall() { pushd $1; + # create build directory + mkdir -p $2 cmd="./configure --prefix=$2 && make && make install" echo -n "Info: $cmd"; eval $cmd @@ -30,3 +42,4 @@ function mkCompilerDir() { echo $compilerDir; } +