#!/usr/bin/env bash
#
# DESCRIPTION: produce pre-canned Cygwin distribution for Isabelle

## global parameters

CYGWIN_MIRROR="http://isabelle.in.tum.de/cygwin_2014"


## diagnostics

PRG=$(basename "$0")

function usage()
{
  echo
  echo "Usage: isabelle $PRG"
  echo
  echo "  Produce pre-canned Cygwin distribution for Isabelle."
  echo
  exit 1
}

function fail()
{
  echo "$1" >&2
  exit 2
}


## arguments

[ "$#" -ne 0 ] && usage


## main

TARGET="$PWD/cygwin"


# download

[ ! -e "$TARGET" ] || fail "Target already exists: \"$TARGET\""
mkdir -p "$TARGET/isabelle" || fail "Failed to create target directory: \"$TARGET\""

perl -MLWP::Simple -e "getprint '$CYGWIN_MIRROR/setup-x86.exe';" > "$TARGET/isabelle/cygwin.exe"
chmod +x "$TARGET/isabelle/cygwin.exe"

"$TARGET/isabelle/cygwin.exe" -h </dev/null >/dev/null || exit 2


# install

"$TARGET/isabelle/cygwin.exe" \
  --site "$CYGWIN_MIRROR" --no-verify \
  --local-package-dir 'C:\temp' \
  --root "$(cygpath -w "$TARGET")" \
  --packages libgmp3,perl,perl_vendor,rlwrap,unzip,vim \
  --no-shortcuts --no-startmenu --no-desktop --quiet-mode

[ "$?" = 0 -a -e "$TARGET/etc" ] || exit 2


# patches

for NAME in hosts protocols services networks passwd group
do
  rm "$TARGET/etc/$NAME"
done

ln -s cygperl5_14.dll "$TARGET/bin/cygperl5_14_2.dll"

rm "$TARGET/Cygwin.bat"


# archive

DATE=$(date +%Y%m%d)
tar -C "$TARGET/.." -cz -f "cygwin-${DATE}.tar.gz" cygwin

