# 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.5 RUBYLIBVER=2.3
    - PYVER=python3.5 RUBYLIBVER=2.3 LINKER=gold
    - PYVER=python3.5 RUBYLIBVER=2.3 LINKER=bfd

    # Test several Python versions
    - PYVER=python2.7 RUBYLIBVER=2.3
    - PYVER=python3.3 RUBYLIBVER=2.3
    - PYVER=python3.4 RUBYLIBVER=2.3
    - PYVER=pypy RUBYLIBVER=2.3
    #- PYVER=pypy3 RUBYLIBVER=2.3 # PyPy3 5.5.0 provides the Python2 form of some structures, which makes it incompatible with SWIG

    # Test several Ruby versions
    - PYVER=python3.5 RUBYLIBVER=2.0
    - PYVER=python3.5 RUBYLIBVER=2.1
    - PYVER=python3.5 RUBYLIBVER=2.2

# Use Travis-CI Ubuntu 14.04 Trusty infrastructure
sudo: required
dist: trusty

# 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 -o /usr/share/selinux/default/Makefile 'https://raw.githubusercontent.com/TresysTechnology/refpolicy/RELEASE_2_20170204/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 -o /usr/share/selinux/refpolicy/include/build.conf 'https://raw.githubusercontent.com/TresysTechnology/refpolicy/RELEASE_2_20170204/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

before_script:
  # clang on Travis-CI 14.04 environment is too old to support -Wdouble-promotion
  - if "$CC" --version |grep -q clang; then sed 's/ -Wdouble-promotion / /' -i libselinux/src/Makefile libselinux/utils/Makefile ; fi

  # 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
  # Python virtualenvs do not support "import site; print(site.getsitepackages()[0]"
  # cf. https://github.com/pypa/virtualenv/issues/355#issuecomment-10250452
  - export PYSITEDIR="$DESTDIR/usr/lib/$($PYTHON -c 'import sys;print("python%d.%d" % sys.version_info[:2])')/site-packages"

  # Find the Ruby executable with version $RUBYLIBVER
  - 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

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

  # Now that everything is installed, run "make all" to build everything which may have not been built
  - make all -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="$PYSITEDIR"
  - 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

  # 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()'

  # 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
  - |-
    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
