# Define the building environment
language: c

matrix:
  fast_finish: true

compiler:
  - clang
  - gcc

env:
  matrix:
    # Test the last version of Python and Ruby together, with some linkers
    - PYVER=python3.7 RUBYLIBVER=2.5.1
    - PYVER=python3.7 RUBYLIBVER=2.5.1 TEST_FLAGS_OVERRIDE=1
    - PYVER=python3.7 RUBYLIBVER=2.5.1 LINKER=gold
    - PYVER=python3.7 RUBYLIBVER=2.5.1 LINKER=bfd

    # Test several Python versions
    - PYVER=python2.7 RUBYLIBVER=2.5.1
    - PYVER=python3.5 RUBYLIBVER=2.5.1
    - PYVER=python3.6 RUBYLIBVER=2.5.1
    # pypy2.7 seems not to be available in Travis-CI Xenial template yet.
    # https://github.com/travis-ci/travis-ci/issues/9542
    #- PYVER=pypy RUBYLIBVER=2.5.1
    - PYVER=pypy3.5 RUBYLIBVER=2.5.1

    # Test several Ruby versions
    - PYVER=python3.7 RUBYLIBVER=2.4
    - PYVER=python3.7 RUBYLIBVER=2.3
    - PYVER=python3.7 RUBYLIBVER=2.2

matrix:
  exclude:
    - compiler: clang
      env: PYVER=python3.7 RUBYLIBVER=2.5.1 LINKER=gold
    - compiler: clang
      env: PYVER=python3.7 RUBYLIBVER=2.5.1 LINKER=bfd

# Use Travis-CI Ubuntu 16.04 Xenial Xerus infrastructure, "full image" variant
sudo: required
dist: xenial

# Install SELinux userspace utilities dependencies
addons:
  apt:
    packages:
    - bison
    - flex
    - gawk
    - gettext
    - libaudit-dev
    - libbz2-dev
    - libcap-dev
    - libcap-ng-dev # This package is not whitelisted for the container infrastructure (https://github.com/travis-ci/apt-package-whitelist/issues/1096)
    - libcunit1-dev
    - libdbus-glib-1-dev
    - libncurses5-dev
    - libpcre3-dev
    - patch
    - python3-dev
    - python-dev
    - swig
    - xmlto

install:
  # Download refpolicy Makefile for sepolgen tests
  - sudo mkdir -p /usr/share/selinux/default
  - sudo curl --retry 10 -o /usr/share/selinux/default/Makefile 'https://raw.githubusercontent.com/SELinuxProject/refpolicy/RELEASE_2_20180114/support/Makefile.devel'
  - sudo sed "s,^PREFIX :=.*,PREFIX := $TRAVIS_BUILD_DIR/installdir/usr," -i /usr/share/selinux/default/Makefile
  - sudo mkdir -p /usr/share/selinux/refpolicy/include
  - sudo curl --retry 10 -o /usr/share/selinux/refpolicy/include/build.conf 'https://raw.githubusercontent.com/SELinuxProject/refpolicy/RELEASE_2_20180114/build.conf'
  - sudo mkdir -p /etc/selinux
  - echo 'SELINUXTYPE=refpolicy' | sudo tee /etc/selinux/config

  # Make sepolgen tests work without really installing anything in the real root (doing this would conflict with Ubuntu packages)
  - sed -e "s,\"\(/usr/bin/[cs]\),\"$TRAVIS_BUILD_DIR/installdir\1," -i python/sepolgen/src/sepolgen/module.py

  # Download the required python version if it is not installed
  - VIRTUAL_ENV="$HOME/virtualenv/$PYVER"
  - if ! [ -d "$VIRTUAL_ENV" ] ; then
        curl --retry 10 -o python.tar.bz2 "https://s3.amazonaws.com/travis-python-archives/binaries/ubuntu/16.04/x86_64/${PYVER/python/python-}.tar.bz2" &&
        sudo tar xjf python.tar.bz2 --directory / &&
        rm python.tar.bz2 ;
    fi

  # Install flake8 for the given python version
  - $VIRTUAL_ENV/bin/pip install flake8

before_script:
  # Build and install in a temporary directory to run tests
  - export DESTDIR="$TRAVIS_BUILD_DIR/installdir"

  # Configure the variables for Python parts
  - export VIRTUAL_ENV="$HOME/virtualenv/$PYVER"
  - export PYTHON="$VIRTUAL_ENV/bin/python"
  # Use the header files in /opt/python/... for Python because the virtualenvs do not provide Python.h
  - export PKG_CONFIG_PATH="/opt/python/$($PYTHON -c 'import sys;print("%d.%d.%d" % sys.version_info[:3])')/lib/pkgconfig"
  # PyPy does not provide a config file for pkg-config nor a pypy-c.so
  - if echo "$PYVER" | grep -q pypy ; then export PYINC=-I$($PYTHON -c 'import sys;print(sys.prefix)')/include PYLIBS= ; fi

  # Find the Ruby executable with version $RUBYLIBVER
  - rvm reinstall ruby-$RUBYLIBVER --binary
  - export RUBY="$(ls -d -1 "$HOME/.rvm/rubies/ruby-$RUBYLIBVER"*/bin/ruby | head -n 1)"

  # Set the linker in $CC so that it gets used everywhere
  - if [ -n "$LINKER" ]; then CC="$CC -fuse-ld=$LINKER" ; fi

  # Show variables and versions (to help debugging)
  - echo "$CC" ; $CC --version
  - echo "$PYTHON" ; $PYTHON --version
  - echo "$RUBY" ; $RUBY --version

  # If TEST_FLAGS_OVERRIDE is defined, test that overriding CFLAGS, LDFLAGS and other variables works fine
  - if [ -n "$TEST_FLAGS_OVERRIDE" ]; then EXPLICIT_MAKE_VARS="CFLAGS=-I$DESTDIR/usr/include LDFLAGS=-L$DESTDIR/usr/lib LDLIBS= CPPFLAGS=" ; fi

script:
  # Start by installing everything into $DESTDIR
  - make install $EXPLICIT_MAKE_VARS -k
  - make install-pywrap $EXPLICIT_MAKE_VARS -k
  - make install-rubywrap $EXPLICIT_MAKE_VARS -k

  # Now that everything is installed, run "make all" to build everything which may have not been built
  - make all $EXPLICIT_MAKE_VARS -k

  # Set up environment variables for the tests
  - export LD_LIBRARY_PATH="$DESTDIR/usr/lib:$DESTDIR/lib"
  - export PATH="$DESTDIR/usr/sbin:$DESTDIR/usr/bin:$DESTDIR/sbin:$DESTDIR/bin:$PATH"
  - export PYTHONPATH="$DESTDIR$($PYTHON -c "from distutils.sysconfig import *;print(get_python_lib(prefix='/usr'))")"
  - export RUBYLIB="$DESTDIR/$($RUBY -e 'puts RbConfig::CONFIG["vendorlibdir"]'):$DESTDIR/$($RUBY -e 'puts RbConfig::CONFIG["vendorarchdir"]')"

  # Show variables (to help debugging issues)
  - echo "$LD_LIBRARY_PATH"
  - echo "$PATH"
  - echo "$PYTHONPATH"
  - echo "$RUBYLIB"

  # Run tests
  - make test $EXPLICIT_MAKE_VARS

  # Test Python and Ruby wrappers
  - $PYTHON -c 'import selinux;import selinux.audit2why;import semanage;print(selinux.is_selinux_enabled())'
  - $RUBY -e 'require "selinux";require "semanage";puts Selinux::is_selinux_enabled()'

  # Run Python linter
  - PATH="$VIRTUAL_ENV/bin:$PATH" ./scripts/run-flake8

  # Remove every installed files
  - rm -rf "$DESTDIR"

  # Test that "git status" looks clean, or print a clear error message
  - |-
    git status --short | sed -n 's/^??/error: missing .gitignore entry for/p' | (! grep '^')

  # Clean up everything and show which file would be added to "make clean"
  - make clean distclean $EXPLICIT_MAKE_VARS
  - |-
    git ls-files --ignored --others --exclude-standard | sed 's/^/error: "make clean distclean" did not remove /' | (! grep '^')

# Do not spam by email so long as the build succeeds
notifications:
  email:
    on_success: never
