os: - linux - osx # Use travis docker infrastructure sudo: false # Use a recent OSX image # cf. # https://docs.travis-ci.com/user/languages/objective-c/#Supported-OS-X-iOS-SDK-versions osx_image: xcode7.2 language: cpp cache: ccache env: global: - PREFIX=$HOME/prefix - MY_CMAKE_OPTIONS="-DCMAKE_PREFIX_PATH=$PREFIX -DCMAKE_INSTALL_PREFIX=$HOME/install" - OSX_CMAKE_OPTIONS="-DBUILD_TESTING=OFF -DPYTHON_BINDINGS=OFF -DCLIENT_SIMULATOR=OFF" - CTEST_OUTPUT_ON_FAILURE=1 - LINUX=false - OSX=false compiler: - gcc - clang matrix: exclude: - os: osx compiler: gcc # Install a recent gcc and gcov, # it will not be necessary once travis worker is based on ubuntu > 12.04. # Install SWIG for bindings generation # Install valgrind for memcheck tests # Adding george-edison55-precise-backports ppa for for cmake 3.x. # Install python3-dev for the client simulator addons: apt: # Travis white list of ppa # https://github.com/travis-ci/apt-source-whitelist/blob/master/ubuntu.json sources: - ubuntu-toolchain-r-test - george-edison55-precise-backports - llvm-toolchain-precise-3.8 # Travis white list of dpkg packages # https://github.com/travis-ci/apt-package-whitelist/blob/master/ubuntu-precise packages: - swig - valgrind - g++-4.8 - cmake-data - cmake - python3-dev - clang-format-3.8 before_install: # OS detection # TODO: an explicit build matrix may be better but it has limitation, e.g. # each matrix entry may only define a single env variable. - if [ $TRAVIS_OS_NAME = linux ]; then export LINUX=true; fi - if [ $TRAVIS_OS_NAME = osx ]; then export OSX=true; fi install: - wget https://codecov.io/bash -O $HOME/codecov; chmod +x $HOME/codecov # This version of catch is known to work. - wget --directory-prefix $PREFIX/include https://raw.github.com/philsquared/Catch/v1.2.1/single_include/catch.hpp - wget -O asio-1.10.6.tar.gz https://github.com/chriskohlhoff/asio/archive/asio-1-10-6.tar.gz - tar xf asio-1.10.6.tar.gz -C $PREFIX --strip-components=2 asio-asio-1-10-6/asio # Current limitations on OSX builds: no testing, no client-simulator # (because we haven't found a straightforward way to have CMake find the # python libraries (find_package(PythonLibs)). - if $OSX; then brew update; for package in cmake; do if brew list $package; then brew outdated $package || brew upgrade $package; else brew install $package; fi; done; fi before_script: - coverage=OFF # Force the manualy installed 4.8 version as it is not the default # Only enable coverage on gcc as clang segfault on coverage file write # Workaround a bug with the ccache/g++-4.8.1 combination - if [ "$CC" = "gcc" ]; then export CC=gcc-4.8 CXX=g++-4.8; coverage=ON; export CCACHE_CPP2=1; fi - if $OSX; then export MY_CMAKE_OPTIONS+=" -DBUILD_TESTING=OFF -DPYTHON_BINDINGS=OFF"; fi # how to build script: # Check coding style - if $LINUX; then (git ls-files | grep -E '\.[ch](pp)?$' | xargs clang-format-3.8 -i && git diff --exit-code || { git reset --hard; false; }); fi - ( mkdir build_debug && cd build_debug && cmake $MY_CMAKE_OPTIONS -DCMAKE_BUILD_TYPE=Debug -DCOVERAGE=${coverage} .. && make -j$(nproc) && (if $LINUX; then make ExperimentalTest ExperimentalMemCheck; fi) ) - ( mkdir build && cd build && cmake $MY_CMAKE_OPTIONS -DCMAKE_BUILD_TYPE=Release .. && make -j$(nproc) && (if $LINUX; then make test; fi) && make install && (if $LINUX; then cpack --verbose -G DEB && dpkg --info *.deb; fi) ) - ( cd skeleton-subsystem && cmake $MY_CMAKE_OPTIONS -DCMAKE_BUILD_TYPE=Release . && make -j$(nproc) && (if $LINUX; then make ExperimentalTest ExperimentalMemCheck; fi) && make install ) - if $LINUX; then ( cd tools/clientSimulator && echo "TODO - install the generated .deb instead of using \$HOME/install." "This would permit to test the packaging" && cmake $MY_CMAKE_OPTIONS . && make && make install ); fi # Check that all installed files are in a component (no "unspecified # component" archive created) - (cd build && cpack -G TGZ -D CPACK_ARCHIVE_COMPONENT_INSTALL=ON && [ ! -e "*-Unspecified.tar.gz" ]) # Keep this last - ( mkdir build_less_features && cd build_less_features && rm -rf $PREFIX/asio-1.10.6 && cmake $MY_CMAKE_OPTIONS -DCMAKE_BUILD_TYPE=Debug -DNETWORKING=OFF -DPYTHON_BINDINGS=OFF -DC_BINDINGS=OFF .. && make -j$(nproc) && (if $LINUX; then make test; fi) ) after_success: # Push coverage info on codecov.io. # Ignore generated files, samples and tests - if [ "${coverage}" = "ON" ]; then $HOME/codecov -g "*/build_debug/bindings/python/*" -g "*/build_debug/CMakeFiles/*" -g "*/build/*" -g "*/install/*" -g "*/skeleton-subsystem/*" -g "*/tools/clientSimulator/*" -g "*/test/test-subsystem/*" -g "*/test/introspection-subsystem/*" -g "*/test/functional-tests/*" -g "*/test/tmpfile/*" -g "*/test/tokenizer/*" -g "*/bindings/c/Test.cpp" -g "*/utility/test/*" -x /usr/bin/gcov-4.8 -a '\--long-file-names --preserve-paths'; fi notifications: irc: - "chat.freenode.net#parameter-framework"