#
# 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



## Build matrix:
env:
 # Small Set
 - CONFIG="--without-erlang --without-haskell --without-python --without-go --without-lua --without-d --without-ruby --without-nodejs --without-java"

 # C & C++ & Haskell (for some reason qt4 is required)
 - 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" GHCVER=7.8.3

 # Build All
 # TODO: fix these languages
 - CONFIG="--without-erlang --without-python --without-go --without-lua" GHCVER=7.8.3


matrix:
  include:
    - compiler: gcc
      env: CONFIG="--disable-libs"
      before_install:
       - sh contrib/installCXXDependencies.sh;
      script:
       - make check -j4;
       - mkdir build_native && cd build_native && cmake ../compiler/cpp/ && make -j4 && cd ..;
       - mkdir build_mingw32 && cd build_mingw32 && cmake -DCMAKE_TOOLCHAIN_FILE=../contrib/mingw32-toolchain.cmake ../compiler/cpp/ && make -j4 && cd ..;

    - compiler: clang
      env: CONFIG="--disable-libs"
      before_install:
       - sh contrib/installCXXDependencies.sh;
      script:
       - make check -j4;



## Default build sequence:
before_install:
 - sh contrib/installDependencies.sh 1> /dev/null;
 - export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/1.20/bin:$PATH
 - cabal update

install:
 - sh bootstrap.sh;
 - sh configure $CONFIG;

script:
 - make -j4 && make dist;
 - make cross -j4;
# TODO: add these steps
#  - sh bootstrap.sh ; dpkg-buildpackage -tc
