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

cache:
 - apt
 - npm

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