name: Build

on: [push, pull_request]

jobs:
  Build:
    name: ${{ matrix.platform.name }}
    runs-on: ${{ matrix.platform.os }}

    defaults:
      run:
        shell: ${{ matrix.platform.shell }}

    strategy:
      fail-fast: false
      matrix:
        platform:
        - { name: Windows (mingw32),        os: windows-latest, shell: 'msys2 {0}', msystem: mingw32, msys-env: mingw-w64-i686, cc: gcc }
        - { name: Windows (mingw64+clang),  os: windows-latest, shell: 'msys2 {0}', msystem: mingw64, msys-env: mingw-w64-x86_64, cc: clang }
        - { name: Linux (CMake),            os: ubuntu-20.04,   shell: sh,    flags: true }
        - { name: Linux (autotools),        os: ubuntu-20.04,   shell: sh,    autotools: true }
        - { name: MacOS (CMake),            os: macos-latest,   shell: sh }
        - { name: MacOS (autotools),        os: macos-latest,   shell: sh,    autotools: true }

    steps:
    - name: Set up MSYS2
      if: matrix.platform.shell == 'msys2 {0}'
      uses: msys2/setup-msys2@v2
      with:
        msystem: ${{ matrix.platform.msystem }}
        install: >-
          ${{ matrix.platform.msys-env }}-${{ matrix.platform.cc }}
          ${{ matrix.platform.msys-env }}-cmake
          ${{ matrix.platform.msys-env }}-ninja
          ${{ matrix.platform.msys-env }}-pkg-config
    - name: Configure MSYS2 compiler
      if: matrix.platform.shell == 'msys2 {0}'
      run: |
        if test x${{ matrix.platform.cc}} == xgcc; then
          echo "CC=gcc" >> $GITHUB_ENV
          echo "CXX=g++" >> $GITHUB_ENV
        fi
        if test x${{ matrix.platform.cc}} == xclang; then
          echo "CC=clang" >> $GITHUB_ENV
          echo "CXX=clang++" >> $GITHUB_ENV
        fi

    - name: Setup Linux dependencies
      if: runner.os == 'Linux'
      run: |
        sudo apt-get update
        sudo apt-get install \
          autoconf \
          gnome-desktop-testing \
          wayland-protocols \
          pkg-config \
          ninja-build \
          libasound2-dev \
          libdbus-1-dev \
          libegl1-mesa-dev \
          libgl1-mesa-dev \
          libgles2-mesa-dev \
          libglu1-mesa-dev \
          libibus-1.0-dev \
          libpulse-dev \
          libsdl2-2.0-0 \
          libsndio-dev \
          libudev-dev \
          libwayland-dev \
          libwayland-client++0 \
          wayland-scanner++ \
          libwayland-cursor++0 \
          libx11-dev \
          libxcursor-dev \
          libxext-dev \
          libxi-dev \
          libxinerama-dev \
          libxkbcommon-dev \
          libxrandr-dev \
          libxss-dev \
          libxt-dev \
          libxv-dev \
          libxxf86vm-dev \
          libdrm-dev \
          libgbm-dev\
          libpulse-dev \
          libpango1.0-dev
        sudo apt install meson
        git clone --depth 1 https://gitlab.gnome.org/jadahl/libdecor.git --branch 0.1.0
        cd libdecor
        meson build --buildtype release -Ddemo=false -Ddbus=disabled
        ninja -v -C build
        sudo meson install -C build
    - name: Setup Macos dependencies
      if: runner.os == 'macOS'
      run: |
        brew install \
          ninja
    - uses: actions/checkout@v2
    - name: Check that versioning is consistent
      # We only need to run this once: arbitrarily use the Linux/CMake build
      if: "runner.os == 'Linux' && ! matrix.platform.autotools"
      run: ./test/versioning.sh
    - name: Configure (CMake)
      if: "! matrix.platform.autotools"
      run: |
        cmake -S . -B build -G Ninja \
        -DSDL_TESTS=ON \
        -DSDL_INSTALL_TESTS=ON \
        -DCMAKE_INSTALL_PREFIX=cmake_prefix \
        -DCMAKE_BUILD_TYPE=Release
    - name: Build (CMake)
      if: "! matrix.platform.autotools"
      run: |
        cmake --build build/ --config Release --verbose --parallel
    - name: Run build-time tests (CMake)
      if: "! matrix.platform.autotools"
      run: |
        set -eu
        export SDL_TESTS_QUICK=1
        ctest -VV --test-dir build/
    - name: Install (CMake)
      if: "! matrix.platform.autotools"
      run: |
        set -eu
        cmake --install build/ --config Release
        echo "SDL2_DIR=$(pwd)/cmake_prefix" >> $GITHUB_ENV
        ( cd cmake_prefix; find ) | LC_ALL=C sort -u
    - name: Configure (Autotools)
      if: matrix.platform.autotools
      run: |
        set -eu
        rm -fr build-autotools
        mkdir build-autotools
        ./autogen.sh
        (
          cd build-autotools
          ${{ github.workspace }}/configure \
            --prefix=${{ github.workspace }}/autotools_prefix \
        )
        if test "${{ runner.os }}" != "macOS" ; then
          curdir="$(pwd)"
          multiarch="$(dpkg-architecture -qDEB_HOST_MULTIARCH)"
          (
            mkdir -p build-autotools/test
            cd build-autotools/test
            ${{ github.workspace }}/test/configure \
              --x-includes=/usr/include \
              --x-libraries="/usr/lib/${multiarch}" \
              --prefix=${{ github.workspace }}/autotools_prefix \
              SDL_CFLAGS="-I${curdir}/include" \
              SDL_LIBS="-L${curdir}/build-autotools/build/.libs -lSDL2" \
              ac_cv_lib_SDL2_ttf_TTF_Init=no \
              ${NULL+}
          )
        fi
    - name: Build (Autotools)
      if: matrix.platform.autotools
      run: |
        set -eu
        parallel="$(getconf _NPROCESSORS_ONLN)"
        make -j"${parallel}" -C build-autotools V=1
        if test "${{ runner.os }}" != "macOS" ; then
          make -j"${parallel}" -C build-autotools/test V=1
        fi
    - name: Run build-time tests (Autotools)
      if: ${{ matrix.platform.autotools && (runner.os != 'macOS') }}
      run: |
        set -eu
        curdir="$(pwd)"
        parallel="$(getconf _NPROCESSORS_ONLN)"
        export SDL_TESTS_QUICK=1
        make -j"${parallel}" -C build-autotools/test check LD_LIBRARY_PATH="${curdir}/build-autotools/build/.libs"
    - name: Install (Autotools)
      if: matrix.platform.autotools
      run: |
        set -eu
        curdir="$(pwd)"
        parallel="$(getconf _NPROCESSORS_ONLN)"
        make -j"${parallel}" -C build-autotools install V=1
        if test "${{ runner.os }}" != "macOS" ; then
          make -j"${parallel}" -C build-autotools/test install V=1
        fi
        ( cd autotools_prefix; find . ) | LC_ALL=C sort -u
        echo "SDL2_DIR=$(pwd)/autotools_prefix" >> $GITHUB_ENV
    - name: Verify CMake configuration files
      run: |
        cmake -S cmake/test -B cmake_config_build -G Ninja \
          -DCMAKE_BUILD_TYPE=Release \
          -DCMAKE_PREFIX_PATH=${{ env.SDL2_DIR }}
        cmake --build cmake_config_build --verbose
    - name: Distcheck (Autotools)
      if: matrix.platform.autotools
      run: |
        set -eu
        parallel="$(getconf _NPROCESSORS_ONLN)"
        make -j"${parallel}" -C build-autotools dist V=1
        # Similar to Automake `make distcheck`: check that the tarball
        # release is sufficient to do a new build
        mkdir distcheck
        tar -C distcheck -zxf build-autotools/SDL2-*.tar.gz
        ( cd distcheck/SDL2-* && ./configure )
        make -j"${parallel}" -C distcheck/SDL2-*
    - name: Run installed-tests (Autotools)
      if: "runner.os == 'Linux' && matrix.platform.autotools"
      run: |
        set -eu
        parallel="$(getconf _NPROCESSORS_ONLN)"
        sudo make -j"${parallel}" -C build-autotools install
        sudo make -j"${parallel}" -C build-autotools/test install
        export SDL_TESTS_QUICK=1
        # We need to set LD_LIBRARY_PATH because it isn't in the default
        # linker search path. We don't need to set XDG_DATA_DIRS for
        # ginsttest-runner, because /usr/local/share *is* in the default
        # search path for that.
        env --chdir=/ \
            LD_LIBRARY_PATH=/usr/local/lib \
            SDL_AUDIODRIVER=dummy \
            SDL_VIDEODRIVER=dummy \
            ginsttest-runner --tap SDL2
