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

sudo: false
language: cpp
compiler:
- gcc
- clang
env:
- OPENSSL_ia32cap='0x00000000'

matrix:
  include:
  - os: linux
    dist: bionic
    compiler: gcc
    env:
    # 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.*'
  - os: linux
    dist: bionic
    compiler: clang
    env:
    - QPID_PROTON_CMAKE_ARGS='-DRUNTIME_CHECK=asan -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/local/clang-7.0.0/lib/clang/7.0.0/lib/linux/
  - os: linux
    dist: bionic
    env:
    # python-test and python-tox-test segfault
    - QPID_PROTON_CMAKE_ARGS='-DRUNTIME_CHECK=tsan -DENABLE_TOX_TEST=OFF'
    - QPID_PROTON_CTEST_ARGS='-E python-test'
  - os: linux
    env:
    - QPID_PROTON_CMAKE_ARGS='-DCMAKE_BUILD_TYPE=Coverage'
    after_success:
    - bash <(curl -s https://codecov.io/bash)

  - os: osx
    osx_image: xcode9.4
    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'
    # python-tox-test segfaults and ruby tests do not start due to dynamic library issues
    - QPID_PROTON_CTEST_ARGS="--exclude-regex 'python-tox-test|ruby.*'"

  - os: osx
    osx_image: xcode11.3
    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'
    # python-tox-test segfaults and ruby tests do not start due to dynamic library issues
    - QPID_PROTON_CTEST_ARGS="--exclude-regex 'python-tox-test|ruby.*'"

addons:
  # Ubuntu 16.04 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:
- python -m pip install --user --upgrade pip
- python -m pip install --user coverage setuptools wheel tox
- gem install minitest

before_script:
- mkdir build
- cd build
- cmake .. -DCMAKE_INSTALL_PREFIX=$PWD/install ${QPID_PROTON_CMAKE_ARGS}

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