language: cpp
dist: trusty

addons:
    apt:
        packages:
        - tclsh
        - pkg-config
        - cmake
        - libssl-dev
        - build-essential
    sonarcloud:
        organization: "haivision"
        token:
            secure: "wJZC0kyyjuf4SZyonZ6p/5Ga9asEqSnKWF9NpRbu6S6ceERO7vbebuSJF5qX3A6ivPuw0TTk5WASOdnvIyfA28FU/D0MWRdH8K7T3w77wdE9EgAEYTUXzdrbzJY18+9pxjljHwWXWALPSGf3MClg4irWrdk1e6uHK+68R39+ZvBGBFpWeeZy/+at9+xwhtAGKBlSHe8zc+3wPxuYdvviLVJ25qbpNmnzkUR0X89G+UBl90raCPSN32EHFdImHZ5DxfEQQJgZFRjzQUY4EW/iYwaMel7jufAq0ClgV4psKujl9Lz8cPqx3WgqRfJyiIthOMTsac7G4zAw8LK2CI0VsssBp0JalLXaumi6vG7o6c3rIwKckzSKccq3pHa7h45praIVVn9s3nq+Q/JGA11FMkKQxdQtmwgFsLhbi6ZxabgsUi5KtWoWY2z6MgpJuROuAjNxZi9XJzUoJs7zSTUtRRW7V8Q2lRiOnknYh25N6TCA5bpyy1EZmRdJErm071YNI9P01gbFz5137FWJFiJzro9TGF0KoHSGiCIdUt3WlMzwr/i/wFLxFBQOZQ2rjTXvhs4hxONxMZV3gzxA1NdLaf9i5Mh6jxVMV+ujaRSV7JmPGzxqiAlpT9cJUhTCYuar9diLLeDrpe7RawEZR8V1xVDQ7yT8ruDNQ78VbSn/sC0="
    homebrew:
        update: true  # TODO: this should be removed once this bug is fixed: https://travis-ci.community/t/macos-build-fails-because-of-homebrew-bundle-unknown-command/7296
        packages:
        - openssl

matrix:
    include:
        - os: linux
          env:
          - BUILD_TYPE=Debug
          - BUILD_OPTS=-DENABLE_CODE_COVERAGE=ON
          - RUN_SONARCUBE=1
        - env:
          - BUILD_TYPE=Debug
          - BUILD_OPTS='-DENABLE_LOGGING=OFF -DENABLE_MONOTONIC_CLOCK=ON'
        - os: linux
          env: BUILD_TYPE=Release
        - os: osx
          osx_image: xcode10.2
          env: BUILD_TYPE=Debug
        - os: osx
          osx_image: xcode10.2
          env: BUILD_TYPE=Release
        - os: linux
          compiler: x86_64-w64-mingw32-g++
          addons:
            apt:
              packages:
                - gcc-mingw-w64-base
                - binutils-mingw-w64-x86-64
                - gcc-mingw-w64-x86-64
                - gcc-mingw-w64
                - g++-mingw-w64-x86-64
          before_script:
            - git clone -b OpenSSL_1_1_1-stable https://github.com/openssl/openssl.git openssl
            - cd openssl
            - ./Configure --cross-compile-prefix=x86_64-w64-mingw32- mingw64
            - make
            - cd ..
          env: BUILD_TYPE=Release
script:
    - if [ "$TRAVIS_COMPILER" == "x86_64-w64-mingw32-g++" ]; then
        export CC="x86_64-w64-mingw32-gcc";
        export CXX="x86_64-w64-mingw32-g++";
        cmake . -DCMAKE_BUILD_TYPE=$BUILD_TYPE $BUILD_OPTS -DENABLE_UNITTESTS="ON" -DUSE_OPENSSL_PC="OFF" -DOPENSSL_ROOT_DIR="$PWD/openssl" -DCMAKE_SYSTEM_NAME="Windows";
      elif [ "$TRAVIS_OS_NAME" == "linux" ]; then
        cmake . -DCMAKE_BUILD_TYPE=$BUILD_TYPE $BUILD_OPTS -DENABLE_UNITTESTS="ON";
      elif [ "$TRAVIS_OS_NAME" == "osx" ]; then
        export PKG_CONFIG_PATH=$(brew --prefix openssl)"/lib/pkgconfig";
        cmake . -DCMAKE_BUILD_TYPE=$BUILD_TYPE $BUILD_OPTS -DENABLE_UNITTESTS="ON";
      fi
    - echo "TRAVIS_REPO_SLUG=$TRAVIS_REPO_SLUG"
    - echo "TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST"
    - if [[ "$TRAVIS_REPO_SLUG" != "Haivision/srt" || "$TRAVIS_PULL_REQUEST" -gt 0 ]]; then
        export RUN_SONARCUBE=0;
      fi
    - echo "RUN_SONARCUBE=$RUN_SONARCUBE"
    - if (( "$RUN_SONARCUBE" )); then
        build-wrapper-linux-x86-64 --out-dir bw-output make;
      else
        make -j$(nproc);
      fi
    - if [ "$TRAVIS_COMPILER" != "x86_64-w64-mingw32-g++" ]; then
        ./test-srt --gtest_filter="-TestMuxer.IPv4_and_IPv6";
      fi
    - if (( "$RUN_SONARCUBE" )); then source ./scripts/collect-gcov.sh; fi
    - if (( "$RUN_SONARCUBE" )); then sonar-scanner -D"sonar.cfamily.gcov.reportPath=."; fi
