@@ -13,8 +13,6 @@ function speak (){
13 echo "-----> $(date -u '+%Y-%m-%d_%H:%M:%S') $1"
13 echo "-----> $(date -u '+%Y-%m-%d_%H:%M:%S') $1"
18BLACKLIST_REGEX="^(PATH|GIT_DIR|CPATH|CPPATH|LD_PRELOAD|LIBRARY_PATH)$"
16BLACKLIST_REGEX="^(PATH|GIT_DIR|CPATH|CPPATH|LD_PRELOAD|LIBRARY_PATH)$"
19if [ -d "$ENV_DIR" ]; then
17if [ -d "$ENV_DIR" ]; then
20 speak "Exporting config vars"
18 speak "Exporting config vars"
@@ -26,7 +24,7 @@ if [ -d "$ENV_DIR" ]; then
28WORK_DIR=/app
26WORK_DIR=/app
29−cp -Rp "$BUILD_DIR/." "$WORK_DIR"
27+mkdir -p "$WORK_DIR/vendor"
30mkdir -p "$WORK_DIR/vendor/bin"
28mkdir -p "$WORK_DIR/vendor/bin"
31mkdir -p "$WORK_DIR/vendor/ghc-libs"
29mkdir -p "$WORK_DIR/vendor/ghc-libs"
@@ -45,10 +43,9 @@ function set-default-env (){
47export LANG=en_US.UTF-8
45export LANG=en_US.UTF-8
48−export LIBRARY_PATH=$WORK_DIR/vendor/ghc-libs:$WORK_DIR/vendor/lib:/usr/lib:$LIBRARY_PATH
46+export LIBRARY_PATH=$WORK_DIR/vendor/ghc-libs:/usr/lib:$LIBRARY_PATH
49export LD_LIBRARY_PATH=$LIBRARY_PATH
47export LD_LIBRARY_PATH=$LIBRARY_PATH
50export PATH=$WORK_DIR/.local/bin:$WORK_DIR/vendor/bin:$PATH
48export PATH=$WORK_DIR/.local/bin:$WORK_DIR/vendor/bin:$PATH
51−export STACK_ROOT=$CACHE_DIR/.stack
53########## gmp #####################################################
50########## gmp #####################################################
54LIBGMP_VER=${LIBGMP_VER:-6.0.0a}
51LIBGMP_VER=${LIBGMP_VER:-6.0.0a}
@@ -60,63 +57,44 @@ if [ ! -e "$LIBGMP_DIR" ]; then
60 curl -# -L "$LIBGMP_URL" | tar xz -C "$LIBGMP_DIR"
57 curl -# -L "$LIBGMP_URL" | tar xz -C "$LIBGMP_DIR"
62speak "Restoring $LIBGMP_VER files from cache"
59speak "Restoring $LIBGMP_VER files from cache"
60+find "$LIBGMP_DIR/ghc-libs/" -exec cp -rP '{}' "$WORK_DIR/vendor/ghc-libs/" \;
63−cp -Rp "$LIBGMP_DIR/ghc-libs/." "$WORK_DIR/vendor/ghc-libs"
61+#cp -ur "$LIBGMP_DIR/ghc-libs/" "$WORK_DIR/vendor/ghc-libs/"
65########## stack exe ###############################################
63########## stack exe ###############################################
66−STACK_VER=${STACK_VER:-2.1.3}
64+STACK_VER=${STACK_VER:-0.1.3.1}
67−STACK_URL=${STACK_URL:-https://github.com/commercialhaskell/stack/releases/download/v"$STACK_VER"/stack-"$STACK_VER"-linux-x86_64.tar.gz}
65+STACK_URL=${STACK_URL:-https://github.com/commercialhaskell/stack/releases/download/v"$STACK_VER"/stack-"$STACK_VER"-x86_64-linux.gz}
68−STACK_DIR="$CACHE_DIR/stack-$STACK_VER"
66+STACK_EXE="$CACHE_DIR/stack-$STACK_VER"
69−STACK_EXE="$STACK_DIR/stack"
70if [ ! -e "$STACK_EXE" ]; then
67if [ ! -e "$STACK_EXE" ]; then
71 speak "Downloading stack-$STACK_VER"
68 speak "Downloading stack-$STACK_VER"
72− mkdir -p "$STACK_DIR"
69+ curl -# -L "$STACK_URL" | gunzip > "$STACK_EXE"
73− curl -# -L "$STACK_URL" | tar xz -C "$STACK_DIR" --strip-components=1
75speak "Restoring stack-$STACK_VER"
71speak "Restoring stack-$STACK_VER"
76−cp "$STACK_EXE" "$WORK_DIR/vendor/bin/stack"
72+cp -u "$STACK_EXE" "$WORK_DIR/vendor/bin/stack"
77chmod a+x "$WORK_DIR/vendor/bin/stack"
73chmod a+x "$WORK_DIR/vendor/bin/stack"
79−########## stack vars ##############################################
75+########## stack dir ###############################################
76+STACK_DIR="$CACHE_DIR/.stack"
80−if [ -d "$ENV_DIR" ]; then
77+if [ -e "$STACK_DIR" ]; then
81− speak "Substituting stack vars"
78+ speak "Restoring .stack"
82− perl -p -i -e 's/\{\{([^}]+)\}\}/defined$ENV{$1}?$ENV{$1}:$&/eg' "$BUILD_DIR/stack.yaml"
79+ cp -ur "$STACK_DIR" "$WORK_DIR"
85########## project build ###########################################
82########## project build ###########################################
86−SANDBOX_DIR="$CACHE_DIR/.stack-work"
87−if [ -e "$SANDBOX_DIR" ]; then
88− speak "Restoring .stack-work"
89− cp -Rp "$SANDBOX_DIR" "$WORK_DIR"
91− mkdir -p "$SANDBOX_DIR"
94speak "Running stack"
83speak "Running stack"
96−# Makefile support (if you need other build tools than Stack that you need to use in conjunction)
97−if [ -f "$BUILD_DIR/Makefile" ]; then
84+cd "$BUILD_DIR"
98− speak "Makefile detected"
102− stack setup
85+stack setup
104− stack build --ghc-options='-O2' --copy-bins
86+stack build --copy-bins
88+speak "Caching .stack"
89+cp -ur "$WORK_DIR/.stack" "$CACHE_DIR"
107# Set context environment variables.
91# Set context environment variables.
108−set-env PATH "$WORK_DIR/.local/bin:$WORK_DIR/vendor/bin:\$PATH"
92+set-env PATH "/app/.local/bin:$PATH"
109−set-default-env LIBRARY_PATH "$WORK_DIR/vendor/ghc-libs:$WORK_DIR/vendor/lib:/usr/lib"
93+set-default-env LIBRARY_PATH /app/vendor/ghc-libs:/usr/lib
110−set-default-env LD_LIBRARY_PATH "$WORK_DIR/vendor/ghc-libs:$WORK_DIR/vendor/lib:/usr/lib"
94+set-default-env LD_LIBRARY_PATH /app/vendor/ghc-libs:/usr/lib
112speak "Making stack binaries available"
96speak "Making stack binaries available"
113mkdir -p "$BUILD_DIR/vendor"
97mkdir -p "$BUILD_DIR/vendor"
114mkdir -p "$BUILD_DIR/.local"
98mkdir -p "$BUILD_DIR/.local"
115mv "$WORK_DIR/vendor/ghc-libs" "$BUILD_DIR/vendor"
99mv "$WORK_DIR/vendor/ghc-libs" "$BUILD_DIR/vendor"
116mv "$WORK_DIR/.local/bin" "$BUILD_DIR/.local"
100mv "$WORK_DIR/.local/bin" "$BUILD_DIR/.local"
118−speak "Caching .stack-work"
119−rsync -avq "$WORK_DIR/.stack-work/" "$SANDBOX_DIR"
120−cp -Rp "$WORK_DIR/.stack-work" "$BUILD_DIR"