install_vim() {
  local URL=https://github.com/vim/vim
  local tag=$1
  local ext=$([[ $tag == "HEAD" ]] && echo "" || echo "-b $tag")
  local tmp="$(mktemp -d)"
  local out="$HOME/cache/vim-$tag"
  local ncpu=$(awk '/^processor/{n+=1}END{print n}' /proc/cpuinfo)
  git clone --depth 1 --single-branch $ext $URL $tmp
  cd $tmp
  ./configure --prefix=$out \
      --enable-fail-if-missing \
      --with-features=huge \
      --enable-pythoninterp \
      --enable-python3interp \
      --enable-luainterp
  make -j$ncpu
  make install
  ln -s $out $HOME/vim
}

install_nvim() {
  local URL=https://github.com/neovim/neovim
  local tag=$1
  local ext=$([[ $tag == "HEAD" ]] && echo "" || echo "-b $tag")
  local tmp="$(mktemp -d)"
  local out="$HOME/cache/nvim-$tag"
  local ncpu=$(awk '/^processor/{n+=1}END{print n}' /proc/cpuinfo)
  git clone --depth 1 --single-branch $ext $URL $tmp
  cd $tmp
  make deps
  make -j$ncpu \
    CMAKE_BUILD_TYPE=Release \
    CMAKE_EXTRA_FLAGS="-DTRAVIS_CI_BUILD=ON -DCMAKE_INSTALL_PREFIX:PATH=$out"
  make install
  python -m pip install --user neovim
  python3 -m pip install --user neovim
  ln -sf $out $HOME/vim
}

install() {
  local vim=$1
  local tag=$2

  [[ -d $HOME/vim ]] && rm -f $HOME/vim
  if [[ $tag != "HEAD" ]] && [[ -d "$HOME/cache/$vim-$tag" ]]; then
    echo "Use a cached version '$HOME/cache/$vim-$tag'."
    ln -sf $HOME/cache/$vim-$tag $HOME/vim
    return
  fi
  if [[ $vim == "nvim" ]]; then
    install_nvim $tag
  else
    install_vim $tag
  fi
}
