# This setting is to prevent travis to launch duplicate builds on PRs
branches:
  only:
    - master
    - /^v.*$/

# Use 'generic' to be able to override CC/CXX for clang
language: generic

# Use a release with a longer normal LTS
dist: xenial

matrix:
  include:
    - compiler: mingw-x86
      addons: true
      env: CROSS_COMPILE=i686-w64-mingw32- CFLAGS="-D_WIN32_WINNT=0x0501"
    - compiler: mingw-x86
      addons: true
      env: C89_BUILD=1 CROSS_COMPILE=i686-w64-mingw32- CFLAGS="-D_WIN32_WINNT=0x0501"
    - compiler: mingw-x86
      addons: true
      env: CXX_BUILD=1 CROSS_COMPILE=i686-w64-mingw32- CFLAGS="-D_WIN32_WINNT=0x0501"
    - compiler: mingw-x64
      addons: true
      env: CROSS_COMPILE=x86_64-w64-mingw32- CFLAGS="-D_WIN32_WINNT=0x0501"
    - compiler: mingw-x64
      addons: true
      env: C89_BUILD=1 CROSS_COMPILE=x86_64-w64-mingw32- CFLAGS="-D_WIN32_WINNT=0x0501"
    - compiler: mingw-x64
      addons: true
      env: CXX_BUILD=1 CROSS_COMPILE=x86_64-w64-mingw32- CFLAGS="-D_WIN32_WINNT=0x0501"
    - compiler: gcc
      env: CC=gcc-8 CXX=g++-8
    - compiler: gcc
      env: CC="gcc-8 --sysroot=/" CXX="g++-8 --sysroot=/"
    - compiler: gcc
      env: C89_BUILD=1 CC=gcc-8 CXX=g++-8
    - compiler: gcc
      env: CXX_BUILD=1 CC=gcc-8 CXX=g++-8
    - compiler: gcc
      env: DISABLE_MENU=1 CC=gcc-8 CXX=g++-8
    - compiler: gcc
      env: DISABLE_NETWORKING=1 CC=gcc-8 CXX=g++-8
    - compiler: gcc
      env: DISABLE_OVERLAY=1 CC=gcc-8 CXX=g++-8
    - compiler: gcc
      env: DISABLE_CDROM=1 CC=gcc-8 CXX=g++-8
    - compiler: gcc
      env: DISABLE_VIDEO_LAYOUT=1 CC=gcc-8 CXX=g++-8
    - compiler: gcc
      env: DISABLE_THREADS=1 CC=gcc-8 CXX=g++-8
    - compiler: gcc
      env: DISABLE_AUDIOMIXER=1 CC=gcc-8 CXX=g++-8
    - compiler: gcc
      env: ENABLE_GLES=1 CC=gcc-8 CXX=g++-8
    - compiler: gcc
      env: ENABLE_GLES=1 ENABLE_GLES3=1 CC=gcc-8 CXX=g++-8
    - compiler: clang
      env: CC=clang-6.0 CXX=clang++-6.0
    - compiler: clang
      env: C89_BUILD=1 CC=clang-6.0 CXX=clang++-6.0
    - compiler: clang
      env: CXX_BUILD=1 CC=clang-6.0 CXX=clang++-6.0
    - os: osx
      env: CC=clang CXX=clang++
    - name: OSX OpenGL Make
      os: osx
      osx_image: xcode11.2
      script:
        - ./configure --enable-opengl --disable-metal
        - make
    - language: android
      # Android builds are only supported on Trusty
      dist: trusty
      android:
        components:
          - tools
          - build-tools-29.0.3
          - android-29
      install:
        - echo y | sdkmanager "ndk-bundle"
      before_script:
        - export ANDROID_NDK_HOME=$ANDROID_HOME/ndk-bundle
      script:
        - cd pkg/android/phoenix
        - ./gradlew assembleNormalRelease

jobs:
  allow_failure:
    - os: osx

before_install:
  - |
     if [[ "$CC" =~ ^gcc-8.* ]]; then
       # Install a more recent gcc than the default
       sudo apt-get install -y g++-8
     elif [ "$CC" = clang-6.0 ]; then
       # Install a more recent clang than the default
       sudo apt-get install -y clang-6.0
     elif [ "$CROSS_COMPILE" = i686-w64-mingw32- ]; then
       sudo update-alternatives --set i686-w64-mingw32-g++ /usr/bin/i686-w64-mingw32-g++-posix
     elif [ "$CROSS_COMPILE" = x86_64-w64-mingw32- ]; then
       sudo update-alternatives --set x86_64-w64-mingw32-g++ /usr/bin/x86_64-w64-mingw32-g++-posix
     fi

before_script:
  - |
     if [ -n "$CROSS_COMPILE" ]; then
       ARGS="$ARGS --disable-d3d8 --disable-d3d9 --disable-d3d10 --disable-d3d11 --disable-d3d12"
     fi
  - |
     if [ -n "$DISABLE_MENU" ]; then
       ARGS="$ARGS --disable-menu"
     fi
  - |
     if [ -n "$DISABLE_OVERLAY" ]; then
       ARGS="$ARGS --disable-overlay"
     fi
  - |
     if [ -n "$DISABLE_NETWORKING" ]; then
       ARGS="$ARGS --disable-networking"
     fi
  - |
     if [ -n "$DISABLE_CDROM" ]; then
       ARGS="$ARGS --disable-cdrom"
     fi
  - |
     if [ -n "$DISABLE_VIDEO_LAYOUT" ]; then
       ARGS="$ARGS --disable-video_layout"
     fi
  - |
     if [ -n "$DISABLE_THREADS" ]; then
       ARGS="$ARGS --disable-threads --disable-glslang"
     fi
  - |
     if [ -n "$DISABLE_AUDIOMIXER" ]; then
       ARGS="$ARGS --disable-audiomixer"
     fi
  - |
     if [ -n "$ENABLE_GLES" ]; then
       ARGS="$ARGS --enable-opengles"
     fi
  - |
     if [ -n "$ENABLE_GLES3" ]; then
       ARGS="$ARGS --enable-opengles3"
     fi
  - echo "Configure arguments = $ARGS"

script:
  - ./configure $ARGS
  - |
     if [ -n "$C89_BUILD" ]; then
       make C89_BUILD=1
     elif [ -n "$CXX_BUILD" ]; then
       make CXX_BUILD=1
     else
       make
     fi

env:
  global:
   - ARGS=""
   - MAKEFLAGS="-j2"
   - secure: "qc91ReC3OlzSh2gFaSH6TYzC2qIQvgA2AZff6J13eaH8xijAhuMzttZ0rMQJ0DWCIhPeUb0kIzVyaGoe4MwPALzpw1C1AznIWiZJ53HN+hWCOcS/af7YVPk6HPySnwqrS+Wv3AIIvIKFV2mxv21F/JbT/N+pArlRrp904Xj+KPo="
addons:
  apt:
    packages:
      - libsdl2-dev
      - libusb-1.0-0-dev
      - qtbase5-dev
      - qtdeclarative5-dev
    sources:
      - ubuntu-toolchain-r-test
      - llvm-toolchain-xenial
  coverity_scan:
    project:
      name: "RetroArch"
      description: "RetroArch is the official reference frontend for the libretro API."
    notification_email: libretro@gmail.com
    build_command_prepend: "./configure; make clean"
    build_command:   "make"
    branch_pattern: coverity_scan
notifications:
  email: true