From 332995096bfb671e8e3a2a7d49fe1273cf664d0c Mon Sep 17 00:00:00 2001 From: Jonathan Li Date: Thu, 26 Nov 2015 11:22:21 +0000 Subject: [PATCH] ci: Add .travis.yml for trusty Build with gcc-5 (whatever the ubuntu toolchain ppa uses - currently gcc-5.2), gcc-4.9 and clang-3.7. Instead of adding everything into the yml file, I've split off most of the work into a separate shell script. It's easier to maintain and extend that way, and Travis CI also recommends to do it this way. --- .travis.yml | 23 ++++++++++++++++ travis.sh | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 .travis.yml create mode 100755 travis.sh diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000000..f8d8091189 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,23 @@ +language: cpp + +sudo: required +dist: trusty + +matrix: + include: +# Version 5 seems to be whatever is latest - for now it's 5.2 + - env: VERSION=5 + compiler: gcc + os: linux + - env: VERSION=4.9 + compiler: gcc + os: linux + - env: VERSION=3.7 + compiler: clang + os: linux + +before_install: + - ./travis.sh before_install + +script: + - ./travis.sh script diff --git a/travis.sh b/travis.sh new file mode 100755 index 0000000000..f986e8ebca --- /dev/null +++ b/travis.sh @@ -0,0 +1,79 @@ +#!/bin/sh + +set -ex + +linux_before_install() { + # Build worker is 64-bit only by default it seems. + sudo dpkg --add-architecture i386 + + # Compilers + if [ "${CXX}" = "clang++" ]; then + sudo apt-key adv --fetch-keys http://llvm.org/apt/llvm-snapshot.gpg.key + sudo add-apt-repository -y "deb http://llvm.org/apt/trusty/ llvm-toolchain-trusty-${VERSION} main" + # g++-4.8-multilib is necessary for compiler dependencies. Well, I think + # the specific dependency is probably lib32gcc-4.8-dev. + COMPILER_PACKAGE="clang-${VERSION} g++-4.8-multilib" + fi + if [ "${CXX}" = "g++" ]; then + sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test + COMPILER_PACKAGE="g++-${VERSION}-multilib" + fi + + sudo apt-get -qq update + + # The 64-bit versions of the first 7 dependencies are part of the initial + # build image. libgtk2.0-dev:i386 and libsdl2-dev:i386 require the 32-bit + # versions of the dependencies, and the 2 versions conflict. So those + # dependencies must be explicitly installed. + sudo apt-get -qq -y install \ + gir1.2-freedesktop:i386 \ + gir1.2-gdkpixbuf-2.0:i386 \ + gir1.2-glib-2.0:i386 \ + libcairo2-dev:i386 \ + libgdk-pixbuf2.0-dev:i386 \ + libgirepository-1.0-1:i386 \ + libglib2.0-dev:i386 \ + libaio-dev:i386 \ + libasound2-dev:i386 \ + libgl1-mesa-dev:i386 \ + libgtk2.0-dev:i386 \ + liblzma-dev:i386 \ + libpng12-dev:i386 \ + libsdl2-dev:i386 \ + libsoundtouch-dev:i386 \ + libwxgtk3.0-dev:i386 \ + libxext-dev:i386 \ + portaudio19-dev:i386 \ + zlib1g-dev:i386 \ + ${COMPILER_PACKAGE} + + # libpng++-dev is noarch but doesn't install nicely. + apt-get download libpng++-dev + sudo dpkg --force-all -i $(ls | grep 'libpng++-dev') +} + +linux_script() { + mkdir build + cd build + + export CC=${CC}-${VERSION} CXX=${CXX}-${VERSION} + cmake \ + -DCMAKE_TOOLCHAIN_FILE=cmake/linux-compiler-i386-multilib.cmake \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_REPLAY_LOADERS=TRUE \ + -DCMAKE_BUILD_PO=FALSE \ + .. + + # Documentation says 1.5 cores, so 2 or 3 threads should work ok. + make -j3 install +} + +# Just in case I do manual testing and accidentally insert "rm -rf /" +case "${1}" in +before_install|script) + ${TRAVIS_OS_NAME}_${1} + ;; +*) + echo "Unknown command" && false + ;; +esac