#
# 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: ruby
rvm:
  - 1.9.3

# see what we need: http://thrift.apache.org/docs/install/ubuntu
before_install:
 - export NUM_CPU="`grep processor /proc/cpuinfo | wc -l`"; echo $NUM_CPU
 - sudo apt-get update -qq
 - sudo DEBIAN_FRONTEND=noninteractive apt-get -qq -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
 - 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 
# Java
 - sudo apt-get install -qq ant
# Ruby
 - gem uninstall bundler -I -x
 - gem install bundler -v 1.3.5
# 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
 - sudo apt-get upgrade 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 mingw32-binutils mingw32-runtime
# node.js
 - sudo apt-get install -qq nodejs npm
 - sudo npm install nodeunit -g || true
# TODO: move npm install to nodejs Makefile
 - cd lib/nodejs; npm install & cd ../..

install:
  - sh bootstrap.sh

script:
# TODO: fix these languages
  - sh configure --without-erlang --without-haskell --without-python
  - make -j$NUM_CPU && make dist
  - make check -j$NUM_CPU && sh test/test.sh
  - sh bootstrap.sh ; sh contrib/mingw-cross-compile.sh
# TODO: add these steps
#  - sh bootstrap.sh ; dpkg-buildpackage -tc
