language: cpp
dist: bionic
services:
  - docker
matrix:
  include:
  - os: linux                           # Linux GCC, make
    compiler: gcc
    env: >-
      TRAVIS_OS_NAME=linux
      TRAVIS_COMPILER_NAME=gcc
      TRAVIS_BUILD_SYSTEM=Makefile
      HYPERROGUE_USE_GLEW=1
      HYPERROGUE_USE_PNG=1
  - os: linux                           # Linux GCC, make, no libpng
    compiler: gcc
    env: >-
      TRAVIS_OS_NAME=linux
      TRAVIS_COMPILER_NAME=gcc
      TRAVIS_BUILD_SYSTEM=Makefile
      HYPERROGUE_USE_GLEW=1
      HYPERROGUE_USE_PNG=0
  - os: linux                           # Linux GCC, make, Rogueviz
    compiler: gcc
    env: >-
      TRAVIS_OS_NAME=linux
      TRAVIS_COMPILER_NAME=gcc
      TRAVIS_BUILD_SYSTEM=Makefile
      HYPERROGUE_USE_GLEW=1
      HYPERROGUE_USE_PNG=1
      HYPERROGUE_USE_ROGUEVIZ=1
  - os: linux                           # Linux Clang, make
    compiler: clang
    env: >-
      TRAVIS_OS_NAME=linux
      TRAVIS_COMPILER_NAME=clang
      TRAVIS_BUILD_SYSTEM=Makefile
      HYPERROGUE_USE_GLEW=1
      HYPERROGUE_USE_PNG=1
  - os: linux                           # Linux Clang, make, Rogueviz
    compiler: clang
    env: >-
      TRAVIS_OS_NAME=linux
      TRAVIS_COMPILER_NAME=clang
      TRAVIS_BUILD_SYSTEM=Makefile
      HYPERROGUE_USE_GLEW=1
      HYPERROGUE_USE_PNG=1
      HYPERROGUE_USE_ROGUEVIZ=1
  - os: osx                             # OSX, make
    osx_image: xcode12u
    compiler: clang
    env: >-
      TRAVIS_OS_NAME=osx
      TRAVIS_COMPILER_NAME=clang
      TRAVIS_BUILD_SYSTEM=Makefile
      HYPERROGUE_USE_GLEW=1
      HYPERROGUE_USE_PNG=1
  - os: osx                             # OSX, make, no libpng
    osx_image: xcode11.6
    compiler: clang
    env: >-
      TRAVIS_OS_NAME=osx
      TRAVIS_COMPILER_NAME=clang
      TRAVIS_BUILD_SYSTEM=Makefile
      HYPERROGUE_USE_GLEW=1
      HYPERROGUE_USE_PNG=0
  - os: osx                             # OSX, make, Rogueviz
    osx_image: xcode11.5
    compiler: clang
    env: >-
      TRAVIS_OS_NAME=osx
      TRAVIS_COMPILER_NAME=clang
      TRAVIS_BUILD_SYSTEM=Makefile
      HYPERROGUE_USE_GLEW=1
      HYPERROGUE_USE_PNG=1
      HYPERROGUE_USE_ROGUEVIZ=1
  - os: linux                           # Linux GCC, mymake
    compiler: gcc
    env: >-
      TRAVIS_OS_NAME=linux
      TRAVIS_COMPILER_NAME=gcc
      TRAVIS_BUILD_SYSTEM=mymake
      HYPERROGUE_USE_GLEW=1
      HYPERROGUE_USE_PNG=1
  - os: linux                           # Linux GCC, mymake, Rogueviz
    compiler: gcc
    env: >-
      TRAVIS_OS_NAME=linux
      TRAVIS_COMPILER_NAME=gcc
      TRAVIS_BUILD_SYSTEM=mymake
      HYPERROGUE_USE_GLEW=1
      HYPERROGUE_USE_PNG=1
      HYPERROGUE_USE_ROGUEVIZ=1
  - os: osx                             # OSX, mymake
    osx_image: xcode11.4
    compiler: clang
    env: >-
      TRAVIS_OS_NAME=osx
      TRAVIS_COMPILER_NAME=clang
      TRAVIS_BUILD_SYSTEM=mymake
      HYPERROGUE_USE_GLEW=1
      HYPERROGUE_USE_PNG=1
  - os: osx                             # OSX, mymake, Rogueviz
    osx_image: xcode11.3
    compiler: clang
    env: >-
      TRAVIS_OS_NAME=osx
      TRAVIS_COMPILER_NAME=clang
      TRAVIS_BUILD_SYSTEM=mymake
      HYPERROGUE_USE_GLEW=1
      HYPERROGUE_USE_PNG=1
      HYPERROGUE_USE_ROGUEVIZ=1
  - os: linux                           # Emscripten
    env: >-
      TRAVIS_OS_NAME=linux
      TRAVIS_COMPILER_NAME=emscripten
      TRAVIS_BUILD_SYSTEM=emscripten

before_install:
- |-
  # Install SDL
  if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
    sudo apt-get update -qq
    sudo apt-get install -qq libsdl1.2-dev libsdl-gfx1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev
  elif [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
    brew update
    brew install sdl sdl_gfx sdl_mixer sdl_ttf
    # work around https://stackoverflow.com/questions/51034399/ for now
    (cd /usr/local/include && ln -sf SDL/SDL.h)
  else
    exit 'Unsupported OS'
  fi
- |-
  # Install GLEW if asked for
  if [[ "$HYPERROGUE_USE_GLEW" == "1" ]]; then
    if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
      sudo apt-get install -qq libglew-dev
    elif [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
      brew install glew
    else
      exit 'Unsupported OS'
    fi
  fi
- |-
  # Install libpng if asked for
  if [[ "$HYPERROGUE_USE_PNG" == "1" ]]; then
    if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
      echo 'libpng is installed by default'
    elif [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
      brew install libpng
    else
      exit 'Unsupported OS'
    fi
  fi

script:
- |-
  make clean
  if [[ "$(git status --porcelain)" ]]; then
    git status
    exit 'A build artifact was committed; git rm it and try again'
  fi
- |-
  # Build hyperrogue.
  export CXXFLAGS_EARLY=-Werror
  if [[ "$TRAVIS_BUILD_SYSTEM" == "Makefile" ]]; then
    make
  elif [[ "$TRAVIS_BUILD_SYSTEM" == "mymake" ]]; then
    make mymake
    if [[ "$HYPERROGUE_USE_ROGUEVIZ" == "1" ]]; then
      ./mymake -rv
    else
      ./mymake
    fi
    mv hyper hyperrogue
  elif [[ "$TRAVIS_BUILD_SYSTEM" == "emscripten" ]]; then
    docker run --rm -v $(pwd):/src trzeci/emscripten make emscripten
  else
    exit 'Unsupported build system'
  fi
- |-
  # Test hyperrogue.
  if [[ "$TRAVIS_BUILD_SYSTEM" == "emscripten" ]]; then
    ls -lAF hyper.html hyper.js hyper.wasm
  else
    ./hyperrogue --help
  fi
- |-
  make clean
  if [[ "$(git status --porcelain)" ]]; then
    git status
    exit 'make clean did not return the repository to its pre-build state'
  fi