#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#

# build Apache Thrift on Travis CI - https://travis-ci.org/

language: cpp

cache:
 - apt
 - npm
 - maven

env:
  global:
    - TEST_NAME=""
    - CONFIG=""
    - GHCVER=7.8.3

matrix:
  include:
    - env:
        - TEST_NAME="compiler (gcc, automake)"
          CONFIG="--disable-libs"
      compiler: gcc
      before_install:
       - sh contrib/installCXXDependencies.sh;
      script:
       - sh bootstrap.sh;
       - sh configure $CONFIG;
       - make check -j2;

    - env:
        - TEST_NAME="compiler (gcc, CMake + CPack)"
          CONFIG="-DBUILD_COMPILER=ON -DBUILD_LIBRARIES=OFF -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF"
      compiler: gcc
      before_install:
       - sh contrib/installCXXDependencies.sh;
      script:
       - mkdir build_native && cd build_native && cmake $CONFIG .. && make -j4 && cpack && cd ..;

    - env:
        - TEST_NAME="compiler (clang, automake)"
          CONFIG="--disable-libs"
      compiler: clang
      before_install:
       - sh contrib/installCXXDependencies.sh;
      script:
       - sh bootstrap.sh;
       - sh configure $CONFIG;
       - make check -j2;

    - env:
        - TEST_NAME="compiler (clang, CMake + CPack)"
          CONFIG="-DBUILD_COMPILER=ON -DBUILD_LIBRARIES=OFF -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF"
      compiler: clang
      before_install:
       - sh contrib/installCXXDependencies.sh;
      script:
       - mkdir build_native && cd build_native && cmake $CONFIG .. && make -j4 && cpack && cd ..;

    - env:
        - TEST_NAME="compiler (mingw32-gcc, CMake + CPack)"
          CONFIG="-DCMAKE_TOOLCHAIN_FILE=../contrib/mingw32-toolchain.cmake -DBUILD_COMPILER=ON -DBUILD_LIBRARIES=OFF -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF"
      before_install:
       - sh contrib/installCXXDependencies.sh;
       - sudo apt-get install nsis
      script:
       - mkdir build_mingw32 && cd build_mingw32 && cmake $CONFIG .. && make -j4 && cpack && cd ..;

    - env:
        - TEST_NAME="all (gcc, automake)"
          CONFIG="--without-erlang --without-python --without-go --without-lua"
      compiler: gcc
      before_install:
       - sh contrib/installCXXDependencies.sh;
       - sh contrib/installDependencies.sh 1> /dev/null;
       - export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/1.20/bin:$PATH
       - cabal update
      script:
       - sh bootstrap.sh;
       - sh configure $CONFIG;
       - make check -j2;


    - env:
        - TEST_NAME="C & C++ & Haskell (gcc, automake)"
          CONFIG="--without-csharp --without-java --without-erlang --without-nodejs --without-lua --without-python --without-perl --without-php --without-php-extension --without-ruby --without-go --without-d"
      compiler: gcc
      before_install:
       - sh contrib/installCXXDependencies.sh;
       - sh contrib/installDependencies.sh 1> /dev/null;
       - export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/1.20/bin:$PATH
       - cabal update
      script:
       - sh bootstrap.sh;
       - sh configure $CONFIG;
       - make check -j2;

    - env:
        - TEST_NAME="all (gcc, CMake + CPack)"
          CONFIG=""
      compiler: gcc
      before_install:
       - sh contrib/installCXXDependencies.sh;
       - sh contrib/installDependencies.sh 1> /dev/null;
      script:
       - mkdir build_cmake && cd build_cmake && cmake $CONFIG .. && make -j4 && cpack && cd ..;

    - env:
        - TEST_NAME="Small Set (gcc, automake)"
          CONFIG="--without-erlang --without-haskell --without-python --without-go --without-lua --without-d --without-ruby --without-nodejs --without-java"
      compiler: gcc
      before_install:
       - sh contrib/installCXXDependencies.sh;
       - sh contrib/installDependencies.sh 1> /dev/null;
       - export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/1.20/bin:$PATH
       - cabal update
      script:
       - sh bootstrap.sh;
       - sh configure $CONFIG;
       - make check -j2;

    - env:
        - TEST_NAME="dist (gcc, automake)"
          CONFIG=""
      compiler: gcc
      before_install:
       - sh contrib/installCXXDependencies.sh;
       - sh contrib/installDependencies.sh 1> /dev/null;
      script:
       - sh bootstrap.sh;
       - sh configure $CONFIG;
       - make dist -j2;

    - env:
        - TEST_NAME="make cross (gcc, automake)"
          CONFIG="--without-python"
      compiler: gcc
      before_install:
       - sh contrib/installCXXDependencies.sh;
       - sh contrib/installDependencies.sh 1> /dev/null;
       - export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/1.20/bin:$PATH
       - cabal update
      script:
       - sh bootstrap.sh;
       - sh configure $CONFIG;
       - make cross -j2;

    - env:
        - TEST_NAME="Debian Packages"
      compiler: gcc
      before_install:
       - sh contrib/installCXXDependencies.sh;
       - sh contrib/installDependencies.sh 1> /dev/null;
       - sudo apt-get install build-essential mono-gmcs mono-devel libmono-system-web2.0-cil erlang-base ruby1.8-dev python-all python-all-dev python-all-dbg php5 php5-dev
      script:
       - dpkg-buildpackage -tc -us -uc
       - ls -al ..



    # QA jobs for code analytics and metrics

    # static code analysis with cppcheck (we can add --enable=all later)
    - env:    TEST_NAME="cppcheck (compiler) error"
      script: cppcheck --force --quiet --inline-suppr --error-exitcode=1 -j2 compiler/cpp/src
      before_install: sudo apt-get install cppcheck
    - env:    TEST_NAME="cppcheck (cpp) error"
      script: cppcheck --force --quiet --inline-suppr --error-exitcode=1 -j2 lib/cpp/src lib/cpp/test test/cpp tutorial/cpp
      before_install: sudo apt-get install cppcheck
    - env:    TEST_NAME="cppcheck (c_glib) error"
      script: cppcheck --force --quiet --inline-suppr --error-exitcode=1 -j2 lib/c_glib/src lib/c_glib/test test/c_glib/src tutorial/c_glib
      before_install: sudo apt-get install cppcheck
    # add --error-exitcode=1 as soon as everything is fixed
    - env:    TEST_NAME="cppcheck (compiler) all"
      script: cppcheck --force --quiet --inline-suppr --enable=all -j2 compiler/cpp/src
      before_install: sudo apt-get install cppcheck
    - env:    TEST_NAME="cppcheck (cpp) all"
      script: cppcheck --force --quiet --inline-suppr --enable=all -j2 lib/cpp/src lib/cpp/test test/cpp tutorial/cpp
      before_install: sudo apt-get install cppcheck
    - env:    TEST_NAME="cppcheck (c_glib) all"
      script: cppcheck --force --quiet --inline-suppr --enable=all -j2 lib/c_glib/src lib/c_glib/test test/c_glib/src tutorial/c_glib
      before_install: sudo apt-get install cppcheck

    # TODO use findbugs for Java
    # TODO use fxcop for C#

    # TODO do style checks

    # search for TODO within source tree
    - env:    TEST_NAME="TODO"
      script: grep -r TODO *
    # search for FIXME within source tree
    - env:    TEST_NAME="FIXME"
      script: grep -r FIXME *
    # search for HACK within source tree
    - env:    TEST_NAME="HACK"
      script: grep -r HACK *
    # some statistics about the code base
    - env:    TEST_NAME="sloccount"
      script: sloccount .
      before_install: sudo apt-get install sloccount
    # some info about the build machine
    - env:    TEST_NAME="info"
      script:
       - dpkg -l
       - uname -a

# TODO make it perfect ;-r
