# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

language: cpp
cache: 
  ccache: true
  directories:
  - $HOME/Library/Caches/Homebrew
  - $TRAVIS_BUILD_DIR/bison-3.0.5
  timeout: 300

env:
   global:
      CMAKE_BUILD_OPTIONS="-DENABLE_PCAP=TRUE"

matrix:
    include:
    - os: linux
      dist: xenial
      sudo: required
      addons:
        apt:
          sources:
          - ubuntu-toolchain-r-test
          packages:
          - gcc-4.8
          - g++-4.8
          - bison
          - flex
          - libboost-all-dev
          - uuid-dev
          - doxygen
          - openssl
          - libcurl4-openssl-dev
          - ccache
          - libpython3-dev
          - liblua5.1-0-dev
          - libusb-1.0-0-dev
          - libpng12-dev
          - libpcap-dev
          - libssh2-1-dev
      before_install:
        # Establish updated toolchain as default
        - sudo unlink /usr/bin/gcc && sudo ln -s /usr/bin/gcc-4.8 /usr/bin/gcc
        - sudo unlink /usr/bin/g++ && sudo ln -s /usr/bin/g++-4.8 /usr/bin/g++
      script:
        - ./bootstrap.sh -e -t && cd build  && cmake -DUSE_SHARED_LIBS= -DCMAKE_BUILD_TYPE=Release -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_RULE_MESSAGES=OFF -DSTRICT_GSL_CHECKS=ON .. && cmake --build . --parallel 4   && sudo make test ARGS="-j2 --output-on-failure"
    - os: linux
      dist: trusty
      sudo: required
      addons:
        apt:
          sources:
          - ubuntu-toolchain-r-test
          packages:
          - gcc-4.8
          - g++-4.8
          - bison
          - flex
          - libboost-all-dev
          - uuid-dev
          - doxygen
          - openssl
          - libcurl4-openssl-dev
          - ccache
          - libpython3-dev
          - liblua5.1-0-dev
          - libusb-1.0-0-dev
          - libpng12-dev
          - libpcap-dev
          - libssh2-1-dev
      before_install:
        # Establish updated toolchain as default
        - sudo unlink /usr/bin/gcc && sudo ln -s /usr/bin/gcc-4.8 /usr/bin/gcc
        - sudo unlink /usr/bin/g++ && sudo ln -s /usr/bin/g++-4.8 /usr/bin/g++
      script:
        - ./bootstrap.sh -e -t && cd build  && cmake -DUSE_SHARED_LIBS= -DSTRICT_GSL_CHECKS=ON .. && make -j4 VERBOSE=1  && sudo make test ARGS="-j2 --output-on-failure"
    - os: linux
      name: trusty static build with tests
      dist: trusty
      sudo: required
      script:
        - ./bootstrap.sh -e -t && cd build  && cmake -DUSE_SHARED_LIBS= -DSTRICT_GSL_CHECKS=ON .. && make -j4 VERBOSE=1  && sudo make test ARGS="-j2 --output-on-failure"
    - os: linux
      name: xenial shared build with tests
      dist: xenial
      sudo: required
      addons:
        apt:
          sources:
          - ubuntu-toolchain-r-test
          packages:
          - openjdk-8-jdk
          - maven
      script:
        - ./bootstrap.sh -e -t && cd build  && cmake -DUSE_SHARED_LIBS= -DENABLE_LIBRDKAFKA=ON -DENABLE_OPC=ON -DENABLE_SFTP=ON -DENABLE_MQTT=ON -DENABLE_COAP=ON -DENABLE_PYTHON=ON -DSTRICT_GSL_CHECKS=AUDIT .. &&  cmake --build . --parallel 4  && sudo make test ARGS="-j8 --output-on-failure"
    - os: linux
      name: debian static package build
      dist: bionic
      sudo: required
      services:
        - docker
      script:
        - mkdir -p build && cd build && cmake -DSTRICT_GSL_CHECKS=ON .. && make debian
    - os: linux
      name: centos static package biuld
      dist: bionic
      sudo: required
      services:
        - docker
      script:
        - mkdir -p build && cd build && cmake -DSTRICT_GSL_CHECKS=ON .. && make centos
    - os: linux
      name: fedora static package build
      dist: bionic
      sudo: required
      services:
        - docker
      script:
        - mkdir -p build && cd build && cmake -DSTRICT_GSL_CHECKS=ON .. && make fedora
    - os: linux
      name: bionic static package build
      dist: bionic
      sudo: required
      services:
        - docker
      script:
        - mkdir -p build && cd build && cmake -DSTRICT_GSL_CHECKS=ON .. && make u18
    - os: linux
      dist: xenial
      sudo: required
      script:
        - ./bootstrap.sh -e -t && cd build  && cmake -DUSE_SHARED_LIBS=ON -DSTRICT_GSL_CHECKS=AUDIT .. &&  cmake --build . --parallel 4  && sudo make test ARGS="-j4 --output-on-failure"
    - os: osx
      osx_image: xcode10.3
      addons:
        homebrew:
          packages:
          - ossp-uuid
          - boost
          - flex
          - openssl
          - doxygen
          - graphviz
          - python
          - lua
          - libusb
          - libpng
          - libpcap
          - xz
          - libssh2
      env:
        - CMAKE_BUILD_OPTIONS="${CMAKE_BUILD_OPTIONS} -DENABLE_LUA_SCRIPTING=1"
      script:
        - ./bootstrap.sh -e -t && cd build  && cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_RULE_MESSAGES=OFF -DSTRICT_GSL_CHECKS=ON .. && cmake --build . --parallel 4 && sudo make test ARGS="-j4 --output-on-failure" && make linter
    - os: osx
      osx_image: xcode11.2
      addons:
        homebrew:
          packages:
          - ossp-uuid
          - boost
          - flex
          - openssl
          - doxygen
          - graphviz
          - python
          - lua
          - libusb
          - libpng
          - libpcap
          - xz
          - libssh2
      env:
        - CMAKE_BUILD_OPTIONS="${CMAKE_BUILD_OPTIONS} -DENABLE_LUA_SCRIPTING=1"
      script:
        - ./bootstrap.sh -e -t && cd build  && cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_RULE_MESSAGES=OFF -DSTRICT_GSL_CHECKS=ON .. && cmake --build . --parallel 4 && sudo make test ARGS="-j4 --output-on-failure" && make linter
