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

# see what we need: http://thrift.apache.org/docs/install/ubuntu
before_install:
 - sudo apt-add-repository "deb http://archive.ubuntu.com/ubuntu/ trusty main restricted" -y
 - sudo apt-get update -qq
 - sudo apt-get install -qq libboost-dev libboost-test-dev libboost-program-options-dev libevent-dev automake libtool flex bison pkg-config g++ libssl-dev bc 
 - dpkg -S /usr/include/boost/version.hpp
# Java
 - sudo apt-get install -qq ant
# Ruby
 - gem install bundler -v 1.3.5 || true
# Python
# - sudo apt-get install -qq python-all python-all-dev python-all-dbg
# Perl
 - sudo apt-get install -qq libbit-vector-perl libclass-accessor-class-perl
# PHP
 - sudo apt-get install -qq php5-dev php5-cli phpunit php-pear
 - sudo pear channel-discover pear.phpunit.de
 - sudo pear channel-discover pear.symfony.com
# - sudo pear channel-discover components.ez.no
 - sudo pear update-channels
 - sudo pear upgrade-all
 - sudo pear install --alldeps phpunit/PHPUnit
# c_glib
 - sudo apt-get install -qq libglib2.0-dev
# Erlang
# - sudo apt-get install -qq erlang-base erlang-eunit erlang-dev
# Csharp
 - sudo apt-get install -qq mono-gmcs mono-devel libmono-system-web2.0-cil nunit nunit-console
# Haskell
# - sudo apt-get install -qq ghc6 cabal-install libghc6-binary-dev libghc6-network-dev libghc6-http-dev
# Thrift Compiler for Windows
 - sudo apt-get install -qq mingw32
# node.js
 - sudo apt-get install -qq nodejs npm
 - sudo npm install nodeunit -g || true

install:
  - sh bootstrap.sh

script:
# TODO: fix these languages
  - sh configure --without-erlang --without-haskell --without-python --without-go --without-lua
  - make -j4 && make dist
  - make cross -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 ..
# TODO: add these steps
#  - sh bootstrap.sh ; dpkg-buildpackage -tc
