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

env:
    - QTVER=5.10.1

before_install:
  - if [ "$TRAVIS_OS_NAME" = "linux" ] && [ "$CXX" = "g++" ]; then
      export CXX="g++-5" CC="gcc-5" CXXFLAGS="-Wno-format-security";
    fi;

install:
  # 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;
    fi;
  # Download pre-compiled LLVM libs
  -  if [ "$TRAVIS_OS_NAME" = "linux" ]; then
        wget https://github.com/RPCS3/llvm/releases/download/continuous-linux-release_60/llvmlibs-linux.tar.gz;
        mkdir llvmlibs;
        tar -xzf ./llvmlibs-linux.tar.gz -C llvmlibs;
     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 3rdparty/xxHash Vulkan/glslang Vulkan/Vulkan-LoaderAndValidationLayers
  - mkdir build ; cd build
  - export CMAKE_PREFIX_PATH=~/Qt/${QTVER}/gcc_64/lib/cmake
  - 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 -DLLVM_DIR=../llvmlibs/lib/cmake/llvm/ -DUSE_NATIVE_INSTRUCTIONS=OFF -G Ninja;

script:
  - ninja -j 2

after_script:
  - cd build
  - # AppImage generation
  - if [ -n "$UPLOAD_URL" ] && [ "$TRAVIS_BRANCH" = "master" ] && [ "$CC" = "clang" ] && [ "$TRAVIS_PULL_REQUEST" = false ]; then
      source /opt/qt510/bin/qt510-env.sh ;
      echo $LD_LIBRARY_PATH ;
      export LD_LIBRARY_PATH=/opt/qt510/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/$QTVER/gcc_64/bin/:${PATH} ;
      ./linuxdeployqt*.AppImage ./appdir/usr/share/applications/*.desktop -bundle-non-qt-libs ;
      rm ./appdir/usr/lib/libfreetype.so.6 ;
      rm ./appdir/usr/lib/libglapi.so.0 ;
      rm -r ./appdir/usr/share/doc ;
      rm -r ./appdir/usr/share/man ;
      rm -r ./appdir/usr/include ;
      export PATH=${TRAVIS_BUILD_DIR}/build/squashfs-root/usr/bin/:${PATH} ;

      echo "Embed newer libstdc++ for distros that don't come with it (ubuntu 14.04)";
      mkdir -p appdir/usr/optional/ ; mkdir -p appdir/usr/optional/libstdc++/ ;
      cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6 ./appdir/usr/optional/libstdc++/ ;
      rm ./appdir/AppRun ;
      wget -c https://github.com/RPCS3/AppImageKit-checkrt/releases/download/continuous/AppRun-patched-x86_64 -O ./appdir/AppRun ;
      chmod a+x ./appdir/AppRun ;
      wget -c https://github.com/RPCS3/AppImageKit-checkrt/releases/download/continuous/exec-x86_64.so -O ./appdir/usr/optional/exec.so ;

      echo "Package it up and send it off" ;
      ./linuxdeployqt*.AppImage --appimage-extract ;
      ./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 ;
      COMM_TAG="$(git describe --tags $(git rev-list --tags --max-count=1))" ;
      COMM_COUNT="$(git rev-list --count HEAD)" ;
      curl "${UPLOAD_URL}${TRAVIS_COMMIT:0:8}&t=${COMM_TAG}&a=${COMM_COUNT}" --upload-file ./RPCS3*.AppImage;
   fi;
addons:
  apt:
    sources:
      - ubuntu-toolchain-r-test
      - sourceline: 'ppa:jonathonf/binutils' # We need to update binutils to a newer version to link against the ffmpeg libs on.
      - sourceline: 'ppa:beineri/opt-qt-5.10.1-trusty' # <<WARNING>>: This needs to be updated manually whenever the QT Version changes. Add QT PPA since the installer is quite bad.
    packages:
      - binutils
      - cmake
      - ninja-build
      - libasound2-dev
      - libopenal-dev
      - freeglut3-dev
      #- libglew-dev
      #- libvulkan1
      #- libvulkan-dev
      - libc6-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
      # From the beineri PPA
      - qt510-meta-minimal # <<WARNING>>: This needs to be updated manually whenever the QT Version changes.
      - libudev-dev
      - libevdev-dev
      - libpulse-dev