# Maintainer: Martell Malone < martell malone at g mail dot com >
# Contributor: Ray Donnelly <mingw.android@gmail.com>

_realname=go
pkgbase=mingw-w64-${_realname}
pkgname=("${MINGW_PACKAGE_PREFIX}-${_realname}")
pkgver=1.11.4
pkgrel=1
pkgdesc="Go Lang (mingw-w64)"
arch=('any')
license=('BSD')
makedepends=("${MINGW_PACKAGE_PREFIX}-gcc")
url="https://www.golang.org/"
depends=()
makedepends=("${MINGW_PACKAGE_PREFIX}-${_realname}")
options=('!strip')
source=("https://storage.googleapis.com/golang/go${pkgver}.src.tar.gz"
        0010-go1.7-proper-go-binary-path.patch
        0011-add-GO_BUILD_VERBOSE.patch)
sha256sums=('4cfd42720a6b1e79a8024895fa6607b69972e8e32446df76d6ce79801bbadb15'
            'af2c10300635ac84e6d870cb40a6481ccb57487fb7a6efad781f20088bec4de8'
            'c7f9a39a4b29668276d5836d2c1e1d5c8017c6dd66b976f519e9f5e85383ab85')

# Helper macros to help make tasks easier #
apply_patch_with_msg() {
  for _patch in "$@"
  do
    msg2 "Applying $_patch"
    patch -Nbp1 -i "${srcdir}/$_patch"
  done
}

del_file_exists() {
  for _fname in "$@"
  do
    if [ -f $_fname ]; then
      rm -rf $_fname
    fi
  done
}
# =========================================== #

prepare() {
  [[ -d "${srcdir}"/${_realname}-${pkgver} ]] && rm -rf "${srcdir}"/${_realname}-${pkgver}
  mv "${srcdir}"/${_realname} "${srcdir}"/${_realname}-${pkgver}

  cd "${srcdir}/${_realname}-${pkgver}"
#  apply_patch_with_msg \
#    0010-go1.7-proper-go-binary-path.patch
#    0011-add-GO_BUILD_VERBOSE.patch
}

build() {
  cd "${srcdir}"/${_realname}-${pkgver}/src
  export GOROOT_BOOTSTRAP=/`echo ${MSYSTEM} | tr '[:upper:]' '[:lower:]'`/lib/go
  export GOROOT="${srcdir}/${_realname}-${pkgver}"
  export GOBIN="${GOROOT}/bin"
  export GOPATH="${srcdir}/"
  export GOROOT_FINAL=${MINGW_PREFIX}/lib/go
  export GO_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1"
  export CFLAGS="-D__USE_MINGW_ANSI_STDIO=1"
  export GO_BUILD_VERBOSE=1

  # Prepare create origin windows build environment
  mkdir -p "${GOROOT_BOOTSTRAP}"/bin
  del_file_exists \
      "${GOROOT_BOOTSTRAP}"/bin/go.exe \
      "${GOROOT_BOOTSTRAP}"/bin/gofmt.exe
  ln -s ../../../bin/go.exe "${GOROOT_BOOTSTRAP}"/bin/go.exe
  ln -s ../../../bin/gofmt.exe "${GOROOT_BOOTSTRAP}"/bin/gofmt.exe

  # I have no idea why we need this to be run from a completely seperate
  # MSDOS shell, but it does. Without this, the build exits with no info
  # about what went wrong.
  echo "cd $(cygpath -w $PWD)"                    > /tmp/bootstrap_go.bat
  echo "start /wait \"\" cmd.exe /c .\\make.bat" >> /tmp/bootstrap_go.bat
  /tmp/bootstrap_go.bat

  # ./make.bat

  # Clean prepare, maybe it could be dangerous.
  # rm -fr "${GOROOT_BOOTSTRAP}"/bin
}

package() {
  cd "${_realname}-${pkgver}"

  export GOROOT="${srcdir}/${_realname}-${pkgver}"
  export GOBIN="${GOROOT}/bin"

# install -Dm755 "${srcdir}/godoc" "${pkgdir}${MINGW_PREFIX}/bin/godoc"

  mkdir -p "${pkgdir}${MINGW_PREFIX}/share/licenses/go"
  install -Dm644 "${srcdir}"/${_realname}-${pkgver}/LICENSE \
    "${pkgdir}${MINGW_PREFIX}/share/licenses/go/LICENSE"

  mkdir -p \
    "${pkgdir}${MINGW_PREFIX}/"{share/go,lib/go,lib/go/src,lib/go/site/src}

  cp -r doc misc -t                  "${pkgdir}${MINGW_PREFIX}/share/go"
  cp -a bin                          "${pkgdir}${MINGW_PREFIX}"
  cp -a pkg                          "${pkgdir}${MINGW_PREFIX}/lib/go"
  cp -a "$GOROOT/src"                "${pkgdir}${MINGW_PREFIX}/lib/go/"
  cp -a "$GOROOT/src/cmd"            "${pkgdir}${MINGW_PREFIX}/lib/go/src/cmd"
  cp -a "$GOROOT/lib"                "${pkgdir}${MINGW_PREFIX}/lib/go/"

  install -Dm644 src/Make.* "${pkgdir}${MINGW_PREFIX}/lib/go/src"

  # Remove object files from target src dir
  find "${pkgdir}${MINGW_PREFIX}/lib/go/src/" -type f -name '*.[ao]' -delete

  # Fix for FS#32813
  find "${pkgdir}" -type f -name sql.go -exec chmod -x {} \;

  # Remove all executable source files
  find "${pkgdir}${MINGW_PREFIX}/lib/go/src" -type f -executable -delete

  # This is to make go get code.google.com/p/go-tour/gotour and
  # then running the gotour executable work out of the box.
  # ln -sf ${MINGW_PREFIX}/bin "${pkgdir}${MINGW_PREFIX}/lib/go/bin"

  # For FS#42660 / FS#42661 / gox
  install -Dm755 src/make.bash "${pkgdir}${MINGW_PREFIX}/lib/go/src/make.bash"
  install -Dm755 src/run.bash "${pkgdir}${MINGW_PREFIX}/lib/go/src/run.bash"
  cp -r misc/ "${pkgdir}${MINGW_PREFIX}/lib/go/"

  # For godoc
  install -Dm644 favicon.ico "${pkgdir}${MINGW_PREFIX}/lib/go/favicon.ico"

  rm -f "${pkgdir}${MINGW_PREFIX}/share/go/doc/articles/wiki/get.bin"

  install -Dm644 VERSION "${pkgdir}${MINGW_PREFIX}/lib/go/VERSION"

  find "${pkgdir}${MINGW_PREFIX}/"{lib/go/pkg,bin} -type f -exec touch '{}' +
 
  # install profile script 
  mkdir -p "${pkgdir}${MINGW_PREFIX}"/etc/profile.d
  echo "export GOROOT=${MINGW_PREFIX}/lib/go" > "${pkgdir}${MINGW_PREFIX}"/etc/profile.d/go.sh
  cp "${pkgdir}${MINGW_PREFIX}"/etc/profile.d/go.{sh,zsh}
}

# Please leave this debugging stuff here until someone gets to the bottom of the problem why ./make.bat fails.

# pushd ~/msys2/MINGW-packages/mingw-w64-go/src/go-1.7.4/src
# (export GOROOT_BOOTSTRAP=C:/msys64/mingw64/lib/go export CC_FOR_TARGET=gcc ; export GOROOT=/home/ray/msys2/MINGW-packages/mingw-w64-go/src/go-1.7.4 ; export GOBIN=C:/msys64/home/ray/msys2/MINGW-packages/mingw-w64-go/src/go-1.7.4/bin ; export GOARCH=amd64 ; export GOOS=windows ; export GOHOSTARCH=amd64 ; export GOHOSTOS=windows ; export GOTOOLDIR=/home/ray/msys2/MINGW-packages/mingw-w64-go/src/go-1.7.4/pkg/tool/windows_amd64 ; PATH=/home/ray/msys2/MINGW-packages/mingw-w64-go/src/go-1.7.4/bin:/mingw64/bin:$PATH .\\cmd\\dist\\dist bootstrap -a -v=5)

# From MSDOS:
# pushd C:\Users\ray\msys2\MINGW-packages\mingw-w64-go\src\go-1.7.4\src
# set GOROOT_BOOTSTRAP=C:/msys64/mingw64/lib/go
# set CC_FOR_TARGET=gcc
# set GOROOT=C:/msys64/home/ray/msys2/MINGW-packages/mingw-w64-go/src/go-1.7.4
# set GOBIN=C:/msys64/home/ray/msys2/MINGW-packages/mingw-w64-go/src/go-1.7.4/bin
# set GOARCH=amd64
# set GOOS=windows
# set GOHOSTARCH=amd64
# set GOHOSTOS=windows
# set GOTOOLDIR=C:/msys64/home/ray/msys2/MINGW-packages/mingw-w64-go/src/go-1.7.4/pkg/tool/windows_amd64
# set "PATH=C:/msys64/home/ray/msys2/MINGW-packages/mingw-w64-go/src/go-1.7.4/bin;C:/msys64/mingw64/bin;%PATH%"
# .\cmd\dist\dist bootstrap -a -v=5
