# Workaround for the issue found in the stable image promoted on Dec 1, 2016.
# See https://github.com/travis-ci/travis-ci/issues/6928#issuecomment-264227708
group: deprecated

notifications:
  email: false
language: c #NOTE: this will set CC=gcc which might cause trouble
before_script:
  - WGET="travis_retry wget --continue --tries=20 --waitretry=10 --retry-connrefused --no-dns-cache --timeout 300"
  - sudo apt-get -qq update

  ## Support building a binary that is identical to the CI
  - echo -n "Contiki will be compiled with RELSTR=" ; git --git-dir .git describe --tags --always

  ## Install doxygen
  - if [ ${BUILD_CATEGORY:-0} = doxygen ] ; then
      sudo add-apt-repository ppa:libreoffice/libreoffice-4-4 -y && sudo apt-get -qq update &&
      sudo apt-get --no-install-suggests --no-install-recommends -qq install doxygen  &&
      doxygen --version ;
    fi

  ## Install msp430 toolchain
  - sudo apt-get -qq install lib32z1
  - $WGET http://simonduq.github.io/resources/mspgcc-4.7.2-compiled.tar.bz2 &&
    tar xjf mspgcc*.tar.bz2 -C /tmp/ &&
    sudo cp -f -r /tmp/msp430/* /usr/local/ &&
    rm -rf /tmp/msp430 mspgcc*.tar.bz2 &&
    msp430-gcc --version

  ## Install avr toolchain
  - $WGET http://atiselsts.github.io/resources/avr-gcc-4.9.2-compiled.tar.bz2 &&
    tar xjf avr-gcc*.tar.bz2 -C /tmp/ &&
    sudo cp -f -r /tmp/avr-gcc/* /usr/local/ &&
    rm -rf /tmp/avr-gcc avr-gcc*.tar.bz2 &&
    avr-gcc --version

  ## Install 32-bit compatibility libraries
  - sudo apt-get -qq install libc6:i386 libgcc1:i386 gcc-4.6-base:i386
      libstdc++5:i386 libstdc++6:i386

  ## Install old APCS ARM toolchain for mc1233x and mbxxx
  - if [ ${BUILD_ARCH:-0} = arm-apcs ] ; then
      $WGET https://raw.githubusercontent.com/wiki/malvira/libmc1322x/files/arm-2008q3-66-arm-none-eabi-i686-pc-linux-gnu.tar.bz2 &&
      tar xjf arm-2008q3*.tar.bz2 -C /tmp/ &&
      sudo cp -f -r /tmp/arm-2008q3/* /usr/ &&
      rm -rf /tmp/arm-2008q3 arm-2008q3*.tar.bz2 &&
      sudo apt-get -qq install libconfig-dev uuid-dev libqrencode-dev &&
      arm-none-eabi-gcc --version ;
    fi

  ## Install mainline ARM toolchain and srecord.
  - if [ ${BUILD_ARCH:-0} = arm-aapcs ] ; then
      sudo apt-get -qq install srecord &&
      $WGET https://launchpad.net/gcc-arm-embedded/5.0/5-2015-q4-major/+download/gcc-arm-none-eabi-5_2-2015q4-20151219-linux.tar.bz2 &&
      tar xjf gcc-arm-none-eabi-5_2-2015q4-20151219-linux.tar.bz2 -C /tmp/ &&
      sudo cp -f -r /tmp/gcc-arm-none-eabi-5_2-2015q4/* /usr/local/ &&
      rm -rf /tmp/gcc-arm-none-eabi-* gcc-arm-none-eabi-*-linux.tar.bz2 &&
      arm-none-eabi-gcc --version ;
    fi

  ## Install RL78 GCC toolchain
  - sudo apt-get install libncurses5:i386 zlib1g:i386
  - $WGET http://adamdunkels.github.io/contiki-fork/gnurl78-v13.02-elf_1-2_i386.deb &&
    sudo dpkg -i gnurl78*.deb

  ## Install SDCC from a purpose-built bundle
  - if [ ${BUILD_ARCH:-0} = 8051 ] ; then
      $WGET https://raw.githubusercontent.com/wiki/g-oikonomou/contiki-sensinode/files/sdcc.tar.gz &&
      tar xzf sdcc.tar.gz -C /tmp/ &&
      sudo cp -f -r /tmp/sdcc/* /usr/local/ &&
      rm -rf /tmp/sdcc sdcc.tar.gz &&
      sdcc --version &&
      sudo apt-get -qq install srecord ;
    fi

  ## Clone and build cc65 when testing 6502 ports
  - if [ ${BUILD_ARCH:-0} = 6502 ] ; then
      git clone https://github.com/cc65/cc65 /tmp/cc65 &&
      make -C /tmp/cc65 bin apple2enh atarixl c64 c128 &&
      sudo make -C /tmp/cc65 avail &&
      cc65 --version ;
    fi

  ## Install NXP toolchain
  - if [ ${BUILD_ARCH:-0} = jn516x ] ; then
      $WGET http://simonduq.github.io/resources/ba-elf-gcc-4.7.4-part1.tar.bz2 &&
      $WGET http://simonduq.github.io/resources/ba-elf-gcc-4.7.4-part2.tar.bz2 &&
      $WGET http://simonduq.github.io/resources/jn516x-sdk-4163-1416.tar.bz2 &&
      mkdir /tmp/jn516x-sdk /tmp/ba-elf-gcc &&
      tar xjf jn516x-sdk-*.tar.bz2 -C /tmp/jn516x-sdk &&
      tar xjf ba-elf-gcc-*part1.tar.bz2 -C /tmp/ba-elf-gcc &&
      tar xjf ba-elf-gcc-*part2.tar.bz2 -C /tmp/ba-elf-gcc &&
      sudo cp -f -r /tmp/jn516x-sdk /usr/ &&
      sudo cp -f -r /tmp/ba-elf-gcc /usr/ &&
      export PATH=/usr/ba-elf-gcc/bin:$PATH &&
      rm -rf /tmp/ba-elf-gcc* /tmp/jn516x-sdk* &&
      ba-elf-gcc --version ;
    fi
    
  ## Install mainline ARM toolchain and download nRF52 SDK
  - if [ ${BUILD_ARCH:-0} = nrf52dk ] ; then
      sudo add-apt-repository -y ppa:team-gcc-arm-embedded/ppa &&
      sudo apt-get -qq update &&
      sudo apt-get -qq install gcc-arm-embedded srecord &&
      arm-none-eabi-gcc --version &&
      $WGET https://developer.nordicsemi.com/nRF5_IoT_SDK/nRF5_IoT_SDK_v0.9.x/nrf5_iot_sdk_3288530.zip &&
      mkdir /tmp/nrf52-sdk &&
      unzip nrf5_iot_sdk_3288530.zip -d /tmp/nrf52-sdk &&
      export NRF52_SDK_ROOT=/tmp/nrf52-sdk ;
    fi

  ## Compile cooja.jar only when it's going to be needed
  - if [ ${BUILD_CATEGORY:-sim} = sim ] ; then
      java -version &&
      ant -q -f tools/cooja/build.xml jar &&
      sudo java -Xshare:dump -version ;
    fi

script:
  ## regression-tests/Makefile handles most of generic logic
  - "make -C regression-tests/??-$BUILD_TYPE RUNALL=true summary"

after_script:
  ## Print cooja test logs
  - "[ ${BUILD_CATEGORY:-sim} = sim ] && tail regression-tests/??-$BUILD_TYPE/*.testlog"
  ## Print a basic summary
  - "echo 'Summary:'; cat regression-tests/??-$BUILD_TYPE/summary"
  - "FAILS=`grep -c  ' FAIL ' regression-tests/??-$BUILD_TYPE/summary`"
  ## This will detect whether the build should pass or fail
  - "test $FAILS -eq 0; exit $?"


env:
  ## This magically kick-off parallel jobs for each of the for the sets
  ## of environment variable defined below
  - BUILD_TYPE='doxygen'  BUILD_CATEGORY='doxygen'
  - BUILD_TYPE='compile-base' BUILD_CATEGORY='compile'
  - BUILD_TYPE='compile-tools' BUILD_CATEGORY='compile'
  - BUILD_TYPE='collect'
  - BUILD_TYPE='collect-lossy'
  - BUILD_TYPE='rpl'
  - BUILD_TYPE='rpl-non-storing'
  - BUILD_TYPE='large-rpl'
  - BUILD_TYPE='rime'
  - BUILD_TYPE='ipv6'
  - BUILD_TYPE='ip64' MAKE_TARGETS='cooja'
  - BUILD_TYPE='hello-world'
  - BUILD_TYPE='base'
# XXX: netperf disabled b/c it's flaky
#  - BUILD_TYPE='netperf' MAKE_TARGETS='cooja'
  - BUILD_TYPE='shell'
  - BUILD_TYPE='elfloader'
# Tests under the ipv4 dir are individually disabled. Thus the entire job can be off
#  - BUILD_TYPE='ipv4'
  - BUILD_TYPE='ipv6-apps'
  - BUILD_TYPE='compile-8051-ports' BUILD_CATEGORY='compile' BUILD_ARCH='8051'
  - BUILD_TYPE='compile-arm-apcs-ports' BUILD_CATEGORY='compile' BUILD_ARCH='arm-apcs'
  - BUILD_TYPE='compile-6502-ports' BUILD_CATEGORY='compile' BUILD_ARCH='6502'
  - BUILD_TYPE='compile-arm-ports' BUILD_CATEGORY='compile' BUILD_ARCH='arm-aapcs'
  - BUILD_TYPE='compile-nxp-ports' BUILD_CATEGORY='compile' BUILD_ARCH='jn516x'
  - BUILD_TYPE='compile-nrf52-ports' BUILD_CATEGORY='compile' BUILD_ARCH='nrf52dk'
  - BUILD_TYPE='slip-radio' MAKE_TARGETS='cooja'
  - BUILD_TYPE='llsec' MAKE_TARGETS='cooja'
  - BUILD_TYPE='compile-avr' BUILD_CATEGORY='compile' BUILD_ARCH='avr-rss2'
  - BUILD_TYPE='ieee802154'
  - BUILD_TYPE='tsch'