#!/bin/bash

_cleanup(){
  rm -rf dist shellcheck || true
}

build_linux() {
  # Linux Docker image
  name="$DOCKER_BASE"
  DOCKER_BUILDS="$DOCKER_BUILDS $name"
  docker build -t "$name:current" .
  docker run "$name:current" --version
  printf '%s\n' "#!/bin/sh" "echo 'hello world'" > myscript
  docker run -v "$PWD:/mnt" "$name:current" myscript

  # Copy static executable from docker image
  id=$(docker create "$name:current")
  docker cp "$id:/bin/shellcheck" "shellcheck"
  docker rm "$id"
  ls -l shellcheck
  ./shellcheck myscript
  for tag in $TAGS
  do 
    cp "shellcheck" "deploy/shellcheck-$tag.linux-x86_64"; 
  done

  # Linux Alpine based Docker image
  name="$DOCKER_BASE-alpine"
  DOCKER_BUILDS="$DOCKER_BUILDS $name"
  sed -e '/DELETE-MARKER/,$d' Dockerfile > Dockerfile.alpine
  docker build -f Dockerfile.alpine -t "$name:current" .
  docker run "$name:current" sh -c 'shellcheck --version'
  _cleanup
}

build_aarch64() {
  # Linux aarch64 static executable
  docker run -v "$PWD:/mnt" koalaman/aarch64-builder 'buildsc'
  for tag in $TAGS
  do
    cp "shellcheck" "deploy/shellcheck-$tag.linux-aarch64"
  done
}


build_armv6hf() {
  # Linux armv6hf static executable
  docker run -v "$PWD:/mnt" koalaman/armv6hf-builder -c 'compile-shellcheck'
  for tag in $TAGS
  do 
    cp "shellcheck" "deploy/shellcheck-$tag.linux-armv6hf"; 
  done
  _cleanup
}

build_windows() {
  # Windows .exe
  docker run --user="$UID" -v "$PWD:/appdata" koalaman/winghc cuib
  for tag in $TAGS
  do 
    cp "dist/build/ShellCheck/shellcheck.exe" "deploy/shellcheck-$tag.exe"; 
  done
  _cleanup
}

build_osx() {
  # Darwin x86_64 static executable
  brew install cabal-install pandoc gnu-tar
  sudo ln -s /usr/local/bin/gsha512sum /usr/local/bin/sha512sum
  sudo ln -s /usr/local/bin/gtar /usr/local/bin/tar
  export PATH="/usr/local/bin:$PATH"

  cabal update
  cabal install --dependencies-only
  cabal build shellcheck
  for tag in $TAGS
  do 
    cp "dist/build/shellcheck/shellcheck" "deploy/shellcheck-$tag.darwin-x86_64";
  done
  _cleanup
}