name: Build furnace

on:
  push:
    branches: master
  pull_request:
    branches: master

defaults:
  run:
    shell: bash

env:
  BUILD_TYPE: Release

jobs:
  build:
    strategy:
      matrix:
        config:
          - { name: 'Windows MSVC', os: windows-latest, compiler: msvc, shell: bash }
          - { name: 'Windows MinGW', os: windows-latest, compiler: mingw, shell: 'msys2 {0}' }
          - { name: 'macOS', os: macos-latest, shell: bash }
          - { name: 'Ubuntu', os: ubuntu-18.04, shell: bash }
      fail-fast: false

    name: ${{ matrix.config.name }}
    runs-on: ${{ matrix.config.os }}
    defaults:
      run:
        shell: ${{ matrix.config.shell }}

    steps:
    - name: Checkout
      uses: actions/checkout@v2
      with:
        submodules: recursive

    - name: Setup Toolchain [Windows MSVC]
      if: ${{ runner.os == 'Windows' && matrix.config.compiler == 'msvc' }}
      uses: seanmiddleditch/gha-setup-vsdevenv@v3

    - name: Setup Toolchain [Windows MinGW]
      if: ${{ runner.os == 'Windows' && matrix.config.compiler == 'mingw' }}
      uses: msys2/setup-msys2@v2
      with:
        msystem: MINGW64
        update: true
        install: |
          mingw-w64-x86_64-toolchain
          mingw-w64-x86_64-cmake
          make

    - name: Install Dependencies [macOS]
      if: ${{ runner.os == 'macOS' }}
      run: |
        export HOMEBREW_NO_INSTALL_CLEANUP=1
        brew update
        brew install \
          pkg-config \
          sdl2 \
          libsndfile \
          zlib \
          jack

    - name: Install Dependencies [Ubuntu]
      if: ${{ runner.os == 'Linux' }}
      run: |
        sudo apt update
        sudo apt install \
          libsdl2-dev \
          libsndfile1-dev \
          zlib1g-dev \
          libjack-jackd2-dev

    - name: Configure
      run: |
        export USE_WAE=ON
        export CMAKE_EXTRA_ARGS=()
        if [ '${{ runner.os }}' == 'Windows' ]; then
          if [ '${{ matrix.config.compiler }}' == 'mingw' ]; then
            CMAKE_EXTRA_ARGS+=('-G' 'MSYS Makefiles')
          elif [ '${{ matrix.config.compiler }}' == 'msvc' ]; then
            # We don't want all the MSVC warnings to cause errors yet
            export USE_WAE=OFF
          fi
        fi

        cmake \
          -B ${PWD}/build \
          -DCMAKE_INSTALL_PREFIX=${PWD}/target \
          -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \
          -DWARNINGS_ARE_ERRORS=${USE_WAE} \
          "${CMAKE_EXTRA_ARGS[@]}"

    - name: Build
      run: |
        export VERBOSE=1
        cmake \
          --build ${PWD}/build \
          --config ${{ env.BUILD_TYPE }} \
          --parallel 2

    - name: Install
      run: |
        cmake \
          --install ${PWD}/build \
          --config ${{ env.BUILD_TYPE }}
