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

# 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 apt-get upgrade -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 
# Java
 - sudo apt-get install -qq libcommons-lang3-java ant
# TODO: fix ruby support
# Ruby
# - sudo apt-get install -qq ruby1.9.1-full ruby1.9.1-dev ruby-rspec rake rubygems libdaemons-ruby libgemplugin-ruby mongrel
# - sudo /usr/bin/gem1.9.1 install bundler
# - sudo /usr/bin/gem1.9.1 install rack-test
# 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
# 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 ruby support
#  - export PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/var/lib/gems/1.9.1/bin
#  - sh configure RUBY=/usr/bin/ruby1.9.1 RAKE=/usr/bin/rake1.9.1
# TODO: fix these languages
  - sh configure --without-ruby --without-haskell --without-perl --without-php  --without-python
  - make -j$NUM_CPU && make dist
  - make check -j$NUM_CPU && sh test/test.sh
# TODO: add these steps
#  - sh bootstrap.sh ; sh contrib/mingw-cross-compile.sh
#  - sh bootstrap.sh ; dpkg-buildpackage -tc
