language: rust
# sudo is required to enable kcov to use the personality syscall
sudo: required
dist: trusty
cache: cargo

rust:
  - nightly
  - beta
  - stable
  - 1.44.0

env:
  matrix:
    - FEATURES='--features "regexp"'

before_script:
  - eval git pull --rebase https://github.com/Geal/nom master
  - eval git log --pretty=oneline HEAD~5..HEAD

matrix:
  include:
    - rust: stable
      env: FEATURES='--features "std lexical regexp"'
      before_script:
        - export PATH=$HOME/.cargo/bin:$PATH
        - cargo install cargo-update || echo "cargo-update already installed"
        - cargo install cargo-tarpaulin || echo "cargo tarpaulin already installed"
        - cargo install-update -a
      script:
        cargo tarpaulin --ciserver travis-ci --coveralls $TRAVIS_JOB_ID
    - rust: stable
      env: FEATURES=''
    - rust: stable
      env: FEATURES='--no-default-features'
      # still compatible with 1.36.0 if not using lexical-core
    - rust: 1.37.0
      env: FEATURES='--no-default-features --features "regexp lexical"'
    - rust: stable
      env: FEATURES='--no-default-features --features "alloc"'
    - rust: nightly
      env: FEATURES=''
    - rust: nightly
      env: FEATURES='--no-default-features'
    - rust: nightly
      env: FEATURES='--no-default-features --features "alloc"'
    - rust: nightly
      env: DOC_FEATURES='--features "std lexical regexp" --no-default-features'
      before_script:
        - export PATH=$HOME/.cargo/bin:$PATH
      script:
        - eval cargo doc --verbose $DOC_FEATURES

  allow_failures:
    - rust: stable
      env: FEATURES=''
      before_script:
        - export PATH=$HOME/.cargo/bin:$PATH
        - rustup component add rustfmt-preview
      script:
        - eval cargo fmt -- --write-mode=diff

notifications:
  webhooks:
    urls:
      - https://webhooks.gitter.im/e/9c035a194ac4fd4cc061
    on_success: change
    on_failure: always
    on_start: false


addons:
  apt:
    packages:
      - libcurl4-openssl-dev
      - libelf-dev
      - libdw-dev
      - binutils-dev
      - cmake
    sources:
      - kalakris-cmake

cache:
  directories:
    - /home/travis/.cargo

before_cache:
  - rm -rf /home/travis/.cargo/registry

script:
  - eval cargo build --verbose $FEATURES
  - eval cargo test --verbose $FEATURES

after_success: |
  case "$TRAVIS_RUST_VERSION" in
    nightly)
      if [ "${TRAVIS_PULL_REQUEST_BRANCH:-$TRAVIS_BRANCH}" != "master" ]; then
        git fetch &&
        git checkout master &&
        cargo bench --verbose
      fi

      if [ "$FEATURES" == '--features "regexp"' ]; then
        cargo bench --verbose
      fi
      ;;

    *)
      ;;
  esac
