# Maintainer: Quinton Miller <nicetas.c@gmail.com>

_bootstrap=0
_realname=crystal
pkgbase="mingw-w64-${_realname}"
pkgname="${MINGW_PACKAGE_PREFIX}-${_realname}"
pkgver=1.21.0
pkgrel=1
pkgdesc="Fast and statically typed, compiled language with Ruby-like syntax (mingw-w64)"
arch=('any')
mingw_arch=('ucrt64' 'mingw64' 'clang64' 'clangarm64')
url="https://crystal-lang.org/"
msys2_repository_url="https://github.com/crystal-lang/crystal"
msys2_documentation_url="https://crystal-lang.org/reference/${pkgver%.*}/"
msys2_changelog_url="https://github.com/crystal-lang/crystal/blob/release/${pkgver%.*}/doc/changelogs/v${pkgver%.*}.md"
msys2_references=(
  "archlinux: crystal"
  "gentoo: dev-lang/crystal"
)
license=('spdx:Apache-2.0 WITH Swift-exception')
depends=(
  "${MINGW_PACKAGE_PREFIX}-cc"
  "${MINGW_PACKAGE_PREFIX}-gc"
  "${MINGW_PACKAGE_PREFIX}-pcre2"
  "${MINGW_PACKAGE_PREFIX}-gmp"
  "${MINGW_PACKAGE_PREFIX}-libffi"
  "${MINGW_PACKAGE_PREFIX}-libiconv"
  "${MINGW_PACKAGE_PREFIX}-libxml2"
  "${MINGW_PACKAGE_PREFIX}-libyaml"
  "${MINGW_PACKAGE_PREFIX}-llvm-libs"
  "${MINGW_PACKAGE_PREFIX}-openssl"
  "${MINGW_PACKAGE_PREFIX}-zlib"
)
makedepends=(
  "${MINGW_PACKAGE_PREFIX}-asciidoctor"
  "${MINGW_PACKAGE_PREFIX}-llvm"
  $( (( _bootstrap )) || echo "${MINGW_PACKAGE_PREFIX}-crystal")
  "git"
)
checkdepends=(
  "${MINGW_PACKAGE_PREFIX}-lld" # needed for linking std_spec
)
source=("${_realname}::git+${msys2_repository_url}.git#tag=${pkgver}")
sha256sums=('b00a794b3ab7699e2f402e8ce7d30ab7837201b0f10e73c908dc13d309f2304a')

if (( _bootstrap )); then
  # stage 0 compiler
  if [[ ${MSYSTEM} == CLANGARM64 ]]; then
    source+=("https://github.com/crystal-lang/crystal/releases/download/1.21.0/crystal-1.21.0-windows-aarch64-gnu-unsupported.zip")
    sha256sums+=('f5d11da3b1727ef49e4acffabcebab6229a631886f6164a94475be1f1390ae83')
  else
    source+=("https://github.com/crystal-lang/crystal/releases/download/1.21.0/crystal-1.21.0-windows-x86_64-gnu-unsupported.zip")
    sha256sums+=('d0f6f50b16720b240a4c49563c7670ddf1a790fd84c04b29d09818cd9b20608f')
  fi
fi

prepare() {
  cd "${_realname}"

  if test true != "$(git config core.symlinks)"; then
    git config core.symlinks true &&
    MSYS='winsymlinks:nativestrict' git restore --source=HEAD :/
  fi
}

build() {
  cd "${_realname}"
  if (( _bootstrap )); then
    CRYSTAL="$srcdir/bin/crystal.exe" make interpreter=1 release=1
  else
    make interpreter=1 release=1
  fi
}

check() {
  cd "${_realname}"
  # the full suite is run on the crystal-lang/crystal repo's own CI
  CRYSTAL_SPEC_COMPILER_BIN="$(pwd)/.build/crystal.exe" make std_spec
}

package() {
  cd "${_realname}"
  make install DESTDIR="$pkgdir" PREFIX="${MINGW_PREFIX}" deref_symlinks=1
}
