name: Continuous Integration

on:
  push:
    branches: [ "master" ]
    tags-ignore: ['*']
    paths-ignore: ['**.md']
  pull_request:
    branches: [ "master" ]
    paths-ignore: ['**.md']

jobs:
  build:
    name: ${{ matrix.config.name }}
    runs-on: ${{ matrix.config.os }}
    defaults:
      run:
        shell: ${{ matrix.config.shell }}
    strategy:
      fail-fast: false
      matrix:
        config:
          - {
              name: Linux GCC,
              os: ubuntu-latest,
              compiler: gcc,
              shell: bash,
            }
          - {
              name: macOS Clang,
              os: macos-latest,
              compiler: clang,
              shell: bash,
            }
          - {
              name: MSYS2 UCRT64,
              os: windows-latest,
              compiler: gcc,
              shell: 'msys2 {0}',
              msystem: ucrt64,
              msys-env: mingw-w64-ucrt-x86_64,
            }

    steps:

      - name: Install dependencies (macOS)
        if: runner.os == 'macOS'
        env:
          HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1
        run: |
          brew update || true
          brew install \
            autoconf \
            automake \
            libtool

      - name: Install dependencies (MSYS2)
        if: matrix.config.shell == 'msys2 {0}'
        uses: msys2/setup-msys2@v2
        with:
          msystem: ${{ matrix.config.msystem }}
          update: false
          install: >-
            ${{ matrix.config.msys-env }}-autotools
            ${{ matrix.config.msys-env }}-gcc

      - uses: actions/checkout@v3

      - name: Build
        env:
          CC: ${{ matrix.config.compiler }}
          CFLAGS: -Wall
        run: |
          autoreconf -fiv
          ./configure
          make
          mkdir -p temp
          make install DESTDIR=$(realpath temp)

      - name: Upload artifacts (Windows)
        uses: actions/upload-artifact@v4
        if: runner.os == 'Windows'
        with:
          name: faac-${{ github.sha }}-win64
          path: temp/ucrt64

  cppcheck:
    name: Cppcheck
    runs-on: ubuntu-latest

    steps:
      - name: Install dependencies
        run: |
          sudo apt-get update
          sudo apt-get install cppcheck

      - uses: actions/checkout@v3

      - name: Run cppcheck
        shell: bash
        run: |
          cppcheck --version
          cppcheck --error-exitcode=1 -j4 -q --check-level=exhaustive -Iinclude/ libfaac/ frontend/
