112 lines
3.3 KiB
Bash
112 lines
3.3 KiB
Bash
#!/bin/sh
|
|
#
|
|
# Install and setup a Vim or Neovim for running tests.
|
|
# This should work on both Travis and people's desktop computers, and be 100%
|
|
# independent from any system installed Vim.
|
|
#
|
|
# It will echo the full path to a Vim binary, e.g.:
|
|
# /some/path/src/vim
|
|
|
|
set -euC
|
|
|
|
vimgodir=$(cd -P "$(dirname "$0")/.." > /dev/null && pwd)
|
|
cd "$vimgodir"
|
|
|
|
vim=${1:-}
|
|
|
|
case "$vim" in
|
|
"vim-7.4")
|
|
# This is what the most recent Ubuntu LTS (16.04) ships with.
|
|
tag="v7.4.1689"
|
|
giturl="https://github.com/vim/vim"
|
|
;;
|
|
|
|
"vim-8.0")
|
|
# This follows the version in Arch Linux. Vim's master branch isn't always
|
|
# stable, and we don't want to have the build fail because Vim introduced a
|
|
# bug.
|
|
tag="v8.0.1542"
|
|
giturl="https://github.com/vim/vim"
|
|
;;
|
|
|
|
"nvim")
|
|
# Use latest stable version.
|
|
tag="v0.2.0"
|
|
giturl="https://github.com/neovim/neovim"
|
|
;;
|
|
|
|
*)
|
|
echo "unknown version: '${1:-}'"
|
|
echo "First argument must be 'vim-7.4', 'vim-8.0', or 'nvim'."
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
srcdir="/tmp/vim-go-test/$1-src"
|
|
installdir="/tmp/vim-go-test/$1-install"
|
|
|
|
# Use cached installdir.
|
|
if [ -d "$installdir" ]; then
|
|
echo "$installdir exists; skipping build."
|
|
|
|
# The ./scripts/test script relies on this.
|
|
echo "installed to: $installdir"
|
|
exit 0
|
|
fi
|
|
|
|
mkdir -p "$srcdir"
|
|
cd "$srcdir"
|
|
|
|
# Neovim build requires more deps than Vim and is annoying, so we use the
|
|
# binary.
|
|
# 0.2.0 doesn't have a binary build for Linux, so we use 0.2.1-dev for now.
|
|
if [ "$1" = "nvim" ]; then
|
|
|
|
# TODO: Use macOS binaries on macOS
|
|
curl -Ls https://github.com/neovim/neovim/releases/download/nightly/nvim-linux64.tar.gz |
|
|
tar xzf - -C /tmp/vim-go-test/
|
|
mv /tmp/vim-go-test/nvim-linux64 /tmp/vim-go-test/nvim-install
|
|
mkdir -p "$installdir/share/nvim/runtime/pack/vim-go/start"
|
|
ln -s "$vimgodir" "$installdir/share/nvim/runtime/pack/vim-go/start/vim-go"
|
|
|
|
# Consistent paths makes calling things easier.
|
|
mv "$installdir/bin/nvim" "$installdir/bin/vim"
|
|
mkdir -p "$installdir/share/vim/vimgo/pack"
|
|
ln -s "$installdir/share/nvim/runtime/pack/vim-go" "$installdir/share/vim/vimgo/pack/vim-go"
|
|
|
|
# Build Vim from source.
|
|
else
|
|
if [ -d "$srcdir/.git" ]; then
|
|
echo "Skipping clone as $srcdir/.git exists"
|
|
else
|
|
echo "Cloning $tag from $giturl"
|
|
git clone --branch "$tag" --depth 1 "$giturl" "$srcdir"
|
|
fi
|
|
|
|
./configure --prefix="$installdir" --with-features=huge --disable-gui
|
|
make install
|
|
mkdir -p "$installdir/share/vim/vimgo/pack/vim-go/start"
|
|
ln -s "$vimgodir" "$installdir/share/vim/vimgo/pack/vim-go/start/vim-go"
|
|
fi
|
|
|
|
# Make sure all Go tools and other dependencies are installed.
|
|
echo "Installing Go binaries"
|
|
export GOPATH=$installdir
|
|
export PATH=${GOPATH}/bin:$PATH
|
|
"$vimgodir/scripts/run-vim" $vim +':silent :GoUpdateBinaries' +':qa'
|
|
|
|
echo "Installing lint tools"
|
|
(
|
|
mkdir -p "$installdir/share/vim/vimgo/pack/vim-go/start/"
|
|
cd "$installdir/share/vim/vimgo/pack/vim-go/start/"
|
|
[ -d "vim-vimhelplint" ] || git clone --depth 1 --quiet https://github.com/machakann/vim-vimhelplint
|
|
[ -d "vim-vimlparser" ] || git clone --depth 1 --quiet https://github.com/ynkdir/vim-vimlparser
|
|
[ -d "vim-vimlint" ] || git clone --depth 1 --quiet https://github.com/syngan/vim-vimlint
|
|
)
|
|
|
|
# Don't really need source after successful install.
|
|
rm -rf "$srcdir"
|
|
|
|
echo "installed to: $installdir"
|
|
|
|
# vim:ts=2:sts=2:sw=2:et
|