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