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

jobs:
  include:
  - os: linux
    dist: xenial
    language: cpp
    compiler: gcc
    env:
    - OPENSSL_ia32cap='0x00000000'
  - os: linux
    dist: xenial
    language: cpp
    compiler: clang
    env:
    - OPENSSL_ia32cap='0x00000000'
    # c-threaderciser test hangs on older clang
    - QPID_PROTON_CMAKE_ARGS='-DENABLE_LINKTIME_OPTIMIZATION=OFF'
    - QPID_PROTON_CTEST_ARGS="--exclude-regex 'c-threaderciser'"
  - name: static libs
    os: linux
    dist: focal
    language: cpp
    compiler: gcc
    env:
    - PYTHON=python3
    - QPID_PROTON_CMAKE_ARGS='-DBUILD_STATIC_LIBS=ON'
  - name: benchmarks
    os: linux
    dist: focal
    language: cpp
    compiler: gcc
    env:
    - PYTHON=python3
    - QPID_PROTON_CMAKE_ARGS='-DENABLE_BENCHMARKS=ON -DRUNTIME_CHECK=OFF'
    before_install:
    - sudo apt-get install -y libbenchmark-dev
  - name: gcc asan
    os: linux
    dist: focal
    before_install:
    - sudo apt-get install -y gcc-10 g++-10
    env:
    - CC=gcc-10
    - CXX=g++-10
    - PYTHON=python3
    # python-tox-test fails and ruby tests segfault
    - QPID_PROTON_CMAKE_ARGS='-DRUNTIME_CHECK=asan -DENABLE_TOX_TEST=OFF'
    - QPID_PROTON_CTEST_ARGS='-E ^ruby.*'
  - name: clang asan
    os: linux
    dist: focal
    before_install:
    - sudo apt-get install -y clang-10
    env:
    - CC=clang-10
    - CXX=clang++-10
    - PYTHON=python3
    - QPID_PROTON_CMAKE_ARGS='-DRUNTIME_CHECK=asan -DENABLE_LINKTIME_OPTIMIZATION=OFF -DENABLE_TOX_TEST=OFF'
    # otherwise, on Travis ldd gives `libclang_rt.asan-x86_64.so => not found` and binaries don't work
    - LD_LIBRARY_PATH=/usr/lib/llvm-10/lib/clang/10.0.0/lib/linux/
  - name: gcc tsan
    os: linux
    dist: focal
    before_install:
    - sudo apt-get install -y gcc-10 g++-10
    env:
    - CC=gcc-10
    - CXX=g++-10
    - PYTHON=python3
    # python-test, python-integration-test, and python-tox-test segfault
    - QPID_PROTON_CMAKE_ARGS='-DRUNTIME_CHECK=tsan -DENABLE_TOX_TEST=OFF'
    - QPID_PROTON_CTEST_ARGS="-E 'python-test|python-integration-test'"
  - name: coverage
    os: linux
    dist: bionic
    language: cpp
    compiler: gcc
    env:
    - QPID_PROTON_CMAKE_ARGS='-DCMAKE_BUILD_TYPE=Coverage'
    after_success:
    - bash <(curl -s https://codecov.io/bash)

  - os: osx
    osx_image: xcode9.4
    language: cpp
    compiler: clang
    env:
    - PATH="/usr/local/opt/python/libexec/bin:/usr/local/bin:$PATH"
    - PKG_CONFIG_PATH='/usr/local/opt/openssl@1.1/lib/pkgconfig'
    - QPID_PROTON_CMAKE_ARGS='-DCMAKE_OSX_DEPLOYMENT_TARGET=10.13'
    # c-threaderciser test hangs on older clang
    # python-tox-test segfaults and ruby tests do not start due to dynamic library issues
    - QPID_PROTON_CTEST_ARGS="--exclude-regex 'c-threaderciser|python-tox-test|ruby.*'"

  - os: osx
    osx_image: xcode11.3
    language: cpp
    compiler: clang
    env:
    - PATH="/usr/local/opt/python/libexec/bin:/usr/local/bin:$PATH"
    - PKG_CONFIG_PATH='/usr/local/opt/openssl@1.1/lib/pkgconfig'
    - QPID_PROTON_CMAKE_ARGS='-DCMAKE_OSX_DEPLOYMENT_TARGET=10.14'
    # TODO PROTON-2225: c-threaderciser sometimes fails with assertion error
    # python-tox-test segfaults and ruby tests do not start due to dynamic library issues
    - QPID_PROTON_CTEST_ARGS="--exclude-regex 'c-threaderciser|python-tox-test|ruby.*'"

addons:
  # Ubuntu APT dependencies, https://packages.ubuntu.com/
  apt:
    packages:
    - cmake
    - libssl-dev
    - libsasl2-dev
    - sasl2-bin
    - swig
    - python-dev
    - valgrind
    - ruby
    - ruby-dev
    - python3-dev
    - golang
    - lcov
    - libjsoncpp-dev
  # macOS Homebrew dependencies, https://formulae.brew.sh/
  homebrew:
    packages:
      - jsoncpp
      - libuv
      - swig
# update:true workaround as of Feb. 22/20 as per
# https://travis-ci.community/t/macos-build-fails-because-of-homebrew-bundle-unknown-command/7296/10
    update: true

install:
- echo "Using PYTHON=${PYTHON:=python}"
# use older version of virtualenv to workaround https://github.com/pypa/virtualenv/issues/1873
- ${PYTHON} -m pip install --user --upgrade pip
- ${PYTHON} -m pip install --user coverage setuptools wheel tox virtualenv==20.0.23
# PROTON-2125 suppress annoying deprecation warning from Minitest in Ruby tests
- gem install minitest:4.3.2 simplecov codecov

before_script:
- mkdir build
- cd build
- cmake .. -DCMAKE_INSTALL_PREFIX=$PWD/install -DPYTHON_EXECUTABLE="$(which ${PYTHON})" ${QPID_PROTON_CMAKE_ARGS}

script:
- cmake --build . --target install -- -j$(nproc) && eval ctest -V ${QPID_PROTON_CTEST_ARGS}
