# Copyright (C) 2011 Urabe, Shyouhei.  All rights reserved.
#
# This file is  a part of the programming language  Ruby.  Permission is hereby
# granted,  to either  redistribute  or  modify this  file,  provided that  the
# conditions  mentioned in  the file  COPYING are  met.  Consult  the  file for
# details.

# This is  a Travis-CI  build configuration file.   The list  of configurations
# available is located in
#
#     http://about.travis-ci.org/docs/user/build-configuration/
#
# and as Ruby itself is a project written in C language,
#
#     http://about.travis-ci.org/docs/user/languages/c/
#
# is also a good place to look at.

# Language specification.
language: c

# Compilers.  Several  compilers are  provided in Travis,  so we try  them all.
# The value set here is visible via $CC environment variable.
compiler:
  - gcc
  - clang

os:
  - linux
  - osx

# Dependencies.  Some  header files are missing  in a Travis' worker  VM, so we
# have  to install  them.  The  "1.9.1" here  is OK.   It is  the  most adopted
# version string  for Debian/Ubuntu, and  no dependencies have been  changed so
# far since the 1.9.1 release.
before_install:
  - "CONFIG_FLAG="
  - "if [[ $TRAVIS_OS_NAME = 'linux' ]]; then sudo apt-get -qq update; fi"
  # Travis ships an outdated, broken version of libssl by default
  - "if [[ $TRAVIS_OS_NAME = 'linux' ]]; then sudo apt-get -qq --only-upgrade install '^libssl.*'; fi"
  - "if [[ $TRAVIS_OS_NAME = 'linux' ]]; then sudo apt-get -qq install $CC; fi" # upgrade if any
  - "if [[ $TRAVIS_OS_NAME = 'linux' ]]; then JOBS='-j'; fi"
  - "if [[ $TRAVIS_OS_NAME = 'osx' ]]; then brew install autoconf gdbm openssl; fi"
  - "if [[ $TRAVIS_OS_NAME = 'osx' ]]; then CONFIG_FLAG=\"$CONFIG_FLAG --with-gdbm-dir=`brew --prefix gdbm`\"; fi"
  - "if [[ $TRAVIS_OS_NAME = 'osx' ]]; then CONFIG_FLAG=\"$CONFIG_FLAG --with-openssl-dir=`brew --prefix openssl`\"; fi"
  - "if [[ $TRAVIS_OS_NAME = 'osx' && $CC = 'gcc' ]]; then CC='gcc-4.9'; fi"
install: "if [[ $TRAVIS_OS_NAME = 'linux' ]]; then sudo apt-get -qq build-dep ruby1.9.1 2>/dev/null; fi"

# Script is where the test runs.  Note  we just do "make test", not other tests
# like  test-all, test-rubyspec.   This is  because  they take  too much  time,
# enough for Travis to shut down the VM as being stalled.
before_script:
  - "if [[ $TRAVIS_OS_NAME = 'osx' ]]; then rm -f ~/Library/Logs/DiagnosticReports/ruby_*.crash; fi"
  - "uname -a"
  - "uname -r"
  - "rm -fr .ext autom4te.cache"
  - "make -f common.mk BASERUBY=ruby MAKEDIRS='mkdir -p' srcdir=. update-config_files"
  - "autoconf"
  - "mkdir config_1st config_2nd"
  - "./configure -C --disable-install-doc --with-gcc=$CC $CONFIG_FLAG"
  - "cp -pr config.status .ext/include config_1st"
  - "make reconfig"
  - "cp -pr config.status .ext/include config_2nd"
  - "diff -ru config_1st config_2nd"
  - "make after-update BASERUBY=ruby"
  - "make -s $JOBS encs"
  - "make -s $JOBS exts"
  - "make update-rubyspec"
  - "if [[ $TRAVIS_OS_NAME = 'osx' ]]; then echo 'exclude :test_deadlock_by_signal_at_forking, \"under investigation\"' >> test/excludes/TestProcess.rb; fi"
script:
  - "make test"
  - "make test-all TESTOPTS='-q -j2'"
  - "make test-rubyspec"
after_failure:
  - "if [[ $TRAVIS_OS_NAME = 'osx' ]]; then find ~/Library/Logs/DiagnosticReports -type f -name ruby_\\*.crash -ls -execdir cat {} \\; -delete; fi"

# Branch matrix.  Not all branches are Travis-ready so we limit branches here.
branches:
  only:
    - trunk
    - ruby_2_0_0
    - ruby_2_1
    - ruby_2_2

# We want to be notified when something happens.
notifications:
  irc:
    channels:
      - "irc.freenode.org#ruby-core"
      - "irc.freenode.org#ruby-ja"
    on_success: change # [always|never|change] # default: always
    on_failure: change # [always|never|change] # default: always
    template:
      - "%{message} by @%{author}: See %{build_url}"

  # Update ruby-head installed on Travis CI so other projects can test against it.
  webhooks:
    urls:
      - "https://rubies.travis-ci.org/rebuild/ruby-head"
    on_success: always
    on_failure: never

  email:
    - ko1c-failure@atdot.net
    - shibata.hiroshi@gmail.com

# Local Variables:
# mode: YAML
# coding: utf-8-unix
# indent-tabs-mode: nil
# tab-width: 4
# fill-column: 79
# default-justification: full
# End:
