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