dist: trusty sudo: false language: c addons: apt: # Define the required packages without libjansson so we can do a # build without libjansson. packages-without-jansson: &packages-without-jansson - libpcre3 - libpcre3-dbg - libpcre3-dev - build-essential - autoconf - automake - libtool - libpcap-dev - libnet1-dev - libyaml-0-2 - libyaml-dev - zlib1g - zlib1g-dev - libcap-ng-dev - libcap-ng0 - make - libmagic-dev - libnetfilter-queue-dev - libnetfilter-queue1 - libnfnetlink-dev - libnfnetlink0 - libhiredis-dev - libjansson-dev - libevent-dev - libevent-pthreads-2.0-5 # Now define the default set of packages which is those above, and # libjansson. packages: &packages - *packages-without-jansson - libjansson-dev # Define the default CFLAGS used by all builds as a YAML anchor. default-cflags: &default-cflags CFLAGS="-Wall -Wextra -Werror -Wno-unused-parameter -Wno-unused-function" matrix: allow_failures: # Allow the rust-stable build to fail. These entries must match # the env entry in the build matrix exactly. - env: - NAME="linux,gcc,rust-stable" - *default-cflags - ENABLE_RUST="yes" - RUST_VERSION="stable" - ARGS="--enable-rust --enable-rust-strict" - DO_CHECK_SETUP_SCRIPTS="yes" - DO_DISTCHECK="yes" include: # Linux, gcc, coccinelle. - os: linux compiler: gcc env: - NAME="linux,gcc,cocci" - *default-cflags addons: apt: sources: - sourceline: ppa:npalix/coccinelle packages: - *packages - coccinelle # Linux, gcc, Rust (latest stable). # This is allowed to fail, update allow_failures if the env changes. - os: linux compiler: gcc env: - NAME="linux,gcc,rust-stable" - *default-cflags - ENABLE_RUST="yes" - RUST_VERSION="stable" - ARGS="--enable-rust --enable-rust-strict" - DO_CHECK_SETUP_SCRIPTS="yes" - DO_DISTCHECK="yes" # Linux, gcc, Rust. # - Rust 1.23.0, the latest known working version. - os: linux compiler: gcc env: - NAME="linux,gcc,rust-1.23.0" - *default-cflags - ENABLE_RUST="yes" - RUST_VERSION="1.23.0" - ARGS="--enable-rust --enable-rust-strict" - DO_DISTCHECK="yes" # Linux, gcc, Rust (1.21.0 - oldest supported). - os: linux compiler: gcc env: - NAME="linux,gcc,rust-1.21.0" - *default-cflags - ENABLE_RUST="yes" - RUST_VERSION="1.21.0" - ARGS="--enable-rust --enable-rust-strict" - DO_DISTCHECK="yes" # Linux, gcc, -DNDEBUG. - os: linux compiler: gcc env: - NAME="linux,gcc,ndebug" - *default-cflags - EXTRA_CFLAGS="-DNDEBUG" # Linux, clang. For this build we'll also enable -Wshadow. - os: linux compiler: clang env: - NAME="linux,clang" - *default-cflags - EXTRA_CFLAGS="-Wshadow" # Linux, gcc, profiling. - os: linux compiler: gcc env: - NAME="linux,gcc,profiling" - *default-cflags - ARGS="--enable-profiling" # Linux, gcc, debug. - os: linux compiler: gcc env: - NAME="linux,gcc,debug" - *default-cflags - ARGS="--enable-debug" - ENABLE_DEBUG="yes" # Linux, gcc, no jansson. - os: linux compiler: gcc env: - NAME="linux,gcc,no-json" - *default-cflags addons: apt: packages: - *packages-without-jansson # OSX 10.12, XCode 8.1 - os: osx compiler: gcc osx_image: xcode8.1 sudo: true env: - NAME="osx,gcc" - *default-cflags script: - sh ./autogen.sh - | if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then export CFLAGS="${CFLAGS} ${EXTRA_CFLAGS}" ./configure --enable-nfqueue --enable-unittests --enable-hiredis ${ARGS} fi - | if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then export CFLAGS="${CFLAGS} ${EXTRA_CFLAGS}" ./configure --enable-unittests --enable-hiredis --enable-ipfw \ --enable-lua --with-libpcre-includes=/usr/local/include \ --with-libpcre-includes=/usr/local/include \ --with-libpcre-libraries=/usr/local/lib \ --with-libnss-includes=/usr/local/opt/nss/include/nss \ --with-libnss-libraries=/usr/local/opt/nss/lib \ --with-libnspr-includes=/usr/local/opt/nspr/include/nspr \ --with-libnspr-libraries=/usr/local/opt/nspr/lib fi - | # Linux container builds have 2 cores, make use of them. if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then j="-j 2" fi make ${j} - | # Like "make check", but fail on first error. We redirect the output # so Travis doesn't fail the build with a too much output error. mkdir -p ./qa/log ./src/suricata -u -l ./qa/log --fatal-unittests > unittests.log 2>&1 if [[ $? -ne 0 ]]; then echo "Unit tests failed, last 500 lines of output are:" tail -n 500 unittests.log exit 1 fi - | if [[ "$DO_DISTCHECK" == "yes" ]]; then make distcheck DISTCHECK_CONFIGURE_FLAGS="${ARGS}" fi - | if [[ "$DO_CHECK_SETUP_SCRIPTS" == "yes" ]]; then (cd scripts && ./check-setup.sh) fi before_install: - export PATH=$HOME/.cargo/bin:$PATH - | if [[ "$ENABLE_RUST" == "yes" ]]; then curl https://sh.rustup.rs -sSf | sh -s -- -y if [[ "$RUST_VERSION" != "" ]]; then rustup override set $RUST_VERSION fi rustc --version fi - | if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update # Unlink and install each dependency to avoid errors where a # formula might already be installed but is not the current # version. packages="" packages="$packages pkg-config" packages="$packages libmagic" packages="$packages libyaml" packages="$packages nss" packages="$packages nspr" packages="$packages jansson" packages="$packages libnet" packages="$packages lua" packages="$packages pcre" packages="$packages hiredis" for package in $packages; do if brew ls $package --versions > /dev/null; then brew unlink $package fi done # Now install. brew install $packages # Now relink, becuase if a newer version of a package wasn't # installed above, it will remain unlinked. brew link $packages fi - ./qa/travis-libhtp.sh