language: cpp
sudo: required

os:
  - linux
  #- osx

# osx_image: xcode6.4

compiler:
  - clang
  - gcc

cache:
  ccache: true
  directories:
    - $HOME/hombebrew_cache

matrix:
  exclude:
    - os: osx
      compiler: gcc

git:
  depth: false # Unshallow clone to obtain proper GIT_VERSION
  submodules: false

before_install:
  - if [ "$TRAVIS_OS_NAME" = "linux" ] && [ "$CXX" = "g++" ]; then
      export CXX="g++-5" CC="gcc-5" CXXFLAGS="-Wno-format-security";
    fi;
  - if [ "$TRAVIS_OS_NAME" = "linux" ]; then
      wget http://download.qt.io/official_releases/online_installers/qt-unified-linux-x64-online.run ;
      chmod a+x ./qt-unified-linux-x64-online.run ;
      export QT_QPA_PLATFORM=minimal ;
      travis_wait 60 ./qt-unified-linux-x64-online.run --script qt-installer-noninteractive.qs --no-force-installations --verbose ;
    fi;

  # Install updated libglew-dev since the version provided by trusty is outdated
  - if [ "$TRAVIS_OS_NAME" = "linux" ]; then
      wget https://mirrors.kernel.org/ubuntu/pool/universe/g/glew/libglew-dev_2.0.0-5_amd64.deb;
      wget https://mirrors.kernel.org/ubuntu/pool/universe/g/glew/libglew2.0_2.0.0-5_amd64.deb;
      wget https://mirrors.kernel.org/ubuntu/pool/universe/v/vulkan/libvulkan1_1.0.61.1+dfsg1-1ubuntu1~16.04.1_amd64.deb;
      wget https://mirrors.kernel.org/ubuntu/pool/universe/v/vulkan/libvulkan-dev_1.0.61.1+dfsg1-1ubuntu1~16.04.1_amd64.deb;
      sudo dpkg -i libglew2.0_2.0.0-5_amd64.deb libglew-dev_2.0.0-5_amd64.deb libvulkan1_1.0.61.1+dfsg1-1ubuntu1~16.04.1_amd64.deb libvulkan-dev_1.0.61.1+dfsg1-1ubuntu1~16.04.1_amd64.deb;
    else
      brew update;
      brew install ccache glew llvm40;
    fi;

before_script:
  - git submodule update --init asmjit 3rdparty/ffmpeg 3rdparty/pugixml 3rdparty/GSL 3rdparty/libpng Utilities/yaml-cpp 3rdparty/cereal 3rdparty/hidapi 3rdparty/Optional Vulkan/glslang Vulkan/Vulkan-LoaderAndValidationLayers
  - mkdir build
  - cd build
  - export CMAKE_PREFIX_PATH=~/Qt/5.10.0/gcc_64/lib/cmake
  - export CXXFLAGS="$CXXFLAGS -DTRAVIS=true";
  - if [ "$TRAVIS_PULL_REQUEST" = false ]; then
      export CXXFLAGS="$CXXFLAGS -DBRANCH=$TRAVIS_REPO_SLUG/$TRAVIS_BRANCH";
    else
      export CXXFLAGS="$CXXFLAGS -DBRANCH=$TRAVIS_REPO_SLUG/$TRAVIS_BRANCH/#$TRAVIS_PULL_REQUEST";
    fi;
  - cmake .. -DCMAKE_INSTALL_PREFIX=/usr -G Ninja;
  - ninja
  - # AppImage generation
  - if [ -n "$UPLOAD_URL" ] && [ "$TRAVIS_BRANCH" = "master" ] && [ "$CC" = "clang" ] && [ "$TRAVIS_PULL_REQUEST" = false ]; then
      export LD_LIBRARY_PATH=~/Qt/5.10.0/gcc_64/lib;
      DESTDIR=appdir ninja install ; find appdir/ ;
      find ../bin ;
      wget -c "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage" ;
      chmod a+x linuxdeployqt*.AppImage ;
      export PATH=~/Qt/5.10.0/gcc_64/bin/:${PATH} ;
      ./linuxdeployqt*.AppImage --appimage-extract ;
      ./linuxdeployqt*.AppImage ./appdir/usr/share/applications/*.desktop -bundle-non-qt-libs ;
      mkdir ./appdir/usr/plugins/xcbglintegrations/ ;
      mkdir ./appdir/usr/plugins/imageformats/ ;
      cp ~/Qt/5.10.0/gcc_64/lib/libQt5Svg.so.5 ./appdir/usr/lib/ ;
      cp ~/Qt/5.10.0/gcc_64/plugins/xcbglintegrations/* ./appdir/usr/plugins/xcbglintegrations/ ;
      cp ~/Qt/5.10.0/gcc_64/plugins/imageformats/* ./appdir/usr/plugins/imageformats/ ;
      cp ~/Qt/5.10.0/gcc_64/plugins/platforms/* ./appdir/usr/plugins/platforms/ ;
      export PATH=${TRAVIS_BUILD_DIR}/build/squashfs-root/usr/bin/:${PATH} ;
      ./squashfs-root/usr/bin/appimagetool ${TRAVIS_BUILD_DIR}/build/appdir ;
      find ./appdir -executable -type f -exec ldd {} \; | grep " => /usr" | cut -d " " -f 2-3 | sort | uniq ;
      curl ${UPLOAD_URL}${TRAVIS_COMMIT:0:7}-${TRAVIS_BUILD_NUMBER}_linux64 --upload-file ./RPCS3*.AppImage;
   fi;

script:
  # Add a command to show all the variables. May be useful for debugging Travis.
  #- echo "--Shell Export Lists START--" ; export -p; echo "--Shell Export Lists STOP--";
  # And to ensure the versions of toolchain
  - echo "--CXX version?"; "$CXX" --version; echo "--CXX version confirmed";

addons:
  apt:
    sources:
      - ubuntu-toolchain-r-test
      - llvm-toolchain-trusty-4.0
      - sourceline: 'ppa:jonathonf/binutils' # We need to update binutils to a newer version to link against the ffmpeg libs on.
    packages:
      - binutils
      - cmake
      - ninja-build
      - libasound2-dev
      - libopenal-dev
      - freeglut3-dev
      #- libglew-dev
      #- libvulkan1
      #- libvulkan-dev
      - libc6-dev
      - llvm-4.0
      - llvm-4.0-dev
      # Clang 5.0 is now bundled in travis, so we no longer need the ppa version.
      #- clang-4.0
      - libedit-dev
      - g++-5
      - gcc-5
      - libstdc++-5-dev
      - lib32stdc++6
      - zlib1g-dev
      # We need to install qt 5.10.0 manually because the version trusty provides is too old.
      #- qtbase5-dev
      - libudev-dev
      - libevdev-dev
      - libpulse-dev