# NB: don't set `language: haskell` here

# The following enables several GHC versions to be tested; often it's enough to
# test only against the last release in a major GHC version. Feel free to omit
# lines listings versions you don't need/want testing for.
env:
 - GHCVER=7.4.2
 - GHCVER=7.6.3
 - GHCVER=7.8.4
 - GHCVER=7.10.3
 - GHCVER=8.0.1
 # TODO add PARSEC_BUNDLED=YES when it's so
 - GHCVER=head

# Note: the distinction between `before_install` and `install` is not important.
before_install:
 - travis_retry sudo add-apt-repository -y ppa:hvr/ghc
 - travis_retry sudo apt-get update
 - travis_retry sudo apt-get install cabal-install-1.24 ghc-$GHCVER-prof ghc-$GHCVER-dyn happy
 - export PATH=$HOME/.cabal/bin:/opt/ghc/$GHCVER/bin:/opt/cabal/1.24/bin:$PATH
 - git version

install:
 - cabal update
 # We intentionally do not install anything before trying to build Cabal because
 # it should build with each supported GHC version out-of-the-box.

# Here starts the actual work to be performed for the package under test; any
# command which exits with a non-zero exit code causes the build to fail. Using
# ./dist/setup/setup here instead of cabal-install to avoid breakage when the
# build config format changed.
script:
 # We depend on parsec nowadays, which isn't distributed with GHC <8.0
 - if [ "$PARSEC_BUNDLED" != "YES" ]; then cabal install parsec; fi

# Cabal
 - cd Cabal
# Test if gen-extra-source-files.sh was run recently enough
 - ./misc/gen-extra-source-files.sh Cabal.cabal
 - ./misc/travis-diff-files.sh
 - mkdir -p ./dist/setup
 - cp Setup.hs ./dist/setup/setup.hs
 - ghc --make -odir ./dist/setup -hidir ./dist/setup -i -i. ./dist/setup/setup.hs -o ./dist/setup/setup -Wall -Werror -threaded  # the command cabal-install would use to build setup

# Install test dependencies only after setup is built
 - cabal install --only-dependencies --enable-tests --enable-benchmarks
 - ./dist/setup/setup configure --user --ghc-option=-Werror --enable-tests --enable-benchmarks -v2 # -v2 provides useful information for debugging
 - ./dist/setup/setup build   # this builds all libraries and executables (including tests/benchmarks)
 - ./dist/setup/setup haddock # see https://github.com/haskell/cabal/issues/2198
 - ./dist/setup/setup test --show-details=streaming --test-option=--hide-successes
 - cabal check
 - cabal sdist   # tests that a source-distribution can be generated

# The following scriptlet checks that the resulting source distribution can be
# built & installed.
 - function install_from_tarball {
   export SRC_TGZ=$(cabal info . | awk '{print $2 ".tar.gz";exit}') ;
   if [ -f "dist/$SRC_TGZ" ]; then
      cabal install -j1 "dist/$SRC_TGZ" -v2;
   else
      echo "expected 'dist/$SRC_TGZ' not found";
      exit 1;
   fi
   }

 - install_from_tarball

# Also build cabal-install.
 - cd ../cabal-install
 - ../Cabal/misc/gen-extra-source-files.sh cabal-install.cabal
 - ../Cabal/misc/travis-diff-files.sh

 - cabal install --only-dependencies --enable-tests --enable-benchmarks
 - cabal configure --user --ghc-option=-Werror --enable-tests --enable-benchmarks -v2 # -v2 provides useful information for debugging
 - cabal build
 - cabal haddock # see https://github.com/haskell/cabal/issues/2198
 - cabal test --show-details=streaming --test-option=--hide-successes
 - cabal check
 - cabal sdist
 - install_from_tarball

# Check what we got
 - $HOME/.cabal/bin/cabal --version

matrix:
  allow_failures:
   - env: GHCVER=head
