pkgname=hashicorp-vagrant
pkgver="${CLEAN_VAGRANT_VERSION:-main}"
pkgrel=1
pkgdesc="Build and distribute virtualized development environments"
arch=('x86_64')
url="https://www.vagrantup.com"
license=('MIT')
_pkg_ver="${VAGRANT_VERSION:-main}"
_installer_ver="${VAGRANT_INSTALLERS_VERSION:-main}"
source=("vagrant.tar.gz::https://github.com/hashicorp/vagrant/archive/${_pkg_ver}.tar.gz"
        "installer.tar.gz::https://github.com/hashicorp/vagrant-installers/archive/${_installer_ver}.tar.gz")
conflicts=('vagrant' 'vagrant-substrate')
options=('!emptydirs')
md5sums=('SKIP' 'SKIP')
depends=('libffi>=3.2.1' 'libxml2>=2.9.4' 'libxslt>=1.1.29'
         'libyaml' 'zlib>=1.2.11' 'xz>=5.2.3' 'readline>=6.3'
         'openssl>=1.0.2l' 'libssh2>=1.8.0' 'libarchive' 'curl>=7.54.0' 'ruby>=2.3.4'
         'rsync' 'autoconf' 'automake' 'binutils' 'bison' 'flex' 'gawk' 'gcc' 'gettext'
         'grep' 'groff' 'gzip' 'libtool' 'm4' 'make' 'patch' 'pkg-config' 'sed' 'util-linux'
         'which')
makedepends=('ruby' 'go')

prepare() {
  mkdir -p "${srcdir}/opt/vagrant/embedded/etc"
  mkdir -p "${srcdir}/opt/vagrant/bin"
}

build() {
  INSTALLERS_DIR="${srcdir}/vagrant-installers-${_installer_ver}"
  VAGRANT_DIR="${srcdir}/vagrant-${_pkg_ver}"
  INSTALL_DIR="${srcdir}/opt/vagrant"
  EMBEDDED_DIR="${INSTALL_DIR}/embedded"

  # Build the Vagrant gem
  pushd "${VAGRANT_DIR}"
  gem build vagrant.gemspec
  mv vagrant-*.gem "${srcdir}/vagrant.gem"
  popd

  # Install the required substrate items
  cp "${INSTALLERS_DIR}/substrate/common/gemrc" "${EMBEDDED_DIR}/etc/gemrc"

  # Install vagrant launcher
  pushd "${INSTALLERS_DIR}/substrate/launcher"
  go get github.com/mitchellh/osext
  go build -o "${INSTALL_DIR}/bin/vagrant"
  popd

  # Install Vagrant and the share plugin
  pushd "${srcdir}"
  export GEM_PATH="${EMBEDDED_DIR}/gems/${VAGRANT_VERSION}"
  export GEM_HOME="${GEM_PATH}"
  export GEMRC="${EMBEDDED_DIR}/etc/gemrc"

  gem install ./vagrant.gem --no-document
  cat <<EOF >${EMBEDDED_DIR}/plugins.json
{
    "version": "1",
    "installed": {
    }
}
EOF
  chmod 0644 ${EMBEDDED_DIR}/plugins.json
  cat <<EOF >${EMBEDDED_DIR}/manifest.json
{
    "vagrant_version": "${VAGRANT_VERSION}"
}
EOF
  chmod 0644 ${EMBEDDED_DIR}/manifest.json
  popd

}

package() {
  mkdir -p "${pkgdir}/opt"
  mv "${srcdir}/opt/vagrant" "${pkgdir}/opt/"
  mkdir -p "${pkgdir}/usr/bin"
  ln -s /opt/vagrant/bin/vagrant "${pkgdir}/usr/bin/vagrant"
}
