name: Meson build

on: [push, pull_request]

jobs:
  build:
    name: (Meson) ${{ matrix.config.name }}
    runs-on: ${{ matrix.config.os }}
    strategy:
      fail-fast: false
      matrix:
        config:
        - {
            name: "Windows Latest MSVC",
            os: windows-latest,
            cc: "cl", cxx: "cl",
            extra_path: "",
            requires_msvc: true,
          }
        - {
            name: "Windows Latest MinGW",
            os: windows-latest,
            cc: "gcc", cxx: "g++",
            extra_path: "C:\\ProgramData\\chocolatey\\lib\\mingw\\tools\\install\\mingw64\\bin",
          }
        - {
            name: "Windows Latest Clang",
            os: windows-latest,
            cc: "clang", cxx: "clang++", c_ld: "lld-link", cxx_ld: "lld-link",
            extra_path: "",
          }
        - {
            name: "Ubuntu Latest GCC",
            os: ubuntu-latest,
            cc: "gcc", cxx: "g++",
            extra_path: ""
          }
        - {
            name: "Ubuntu Latest Clang",
            os: ubuntu-latest,
            cc: "clang", cxx: "clang++", c_ld: "lld", cxx_ld: "lld",
            extra_path: ""
          }
        - {
            name: "macOS Latest Clang",
            os: macos-latest,
            cc: "clang", cxx: "clang++",
            extra_path: ""
          }

    steps:
    - uses: actions/checkout@v4
    # use msvc-dev-cmd to setup the environment for MSVC if needed
    - name: setup MSVC
      if: matrix.config.requires_msvc
      uses: ilammy/msvc-dev-cmd@v1
    - name: extra_path
      shell: bash
      run: echo "${{matrix.config.extra_path}}" >> $GITHUB_PATH
    - name: install prerequisites
      run: |
        # asuming that python and pipx are already installed
        pipx install meson ninja
    - name: setup meson project
      env: # set proper compilers and linkers for meson
        CC: ${{matrix.config.cc}}
        CXX: ${{matrix.config.cxx}}
        C_LD: ${{matrix.config.c_ld}}
        CXX_LD: ${{matrix.config.cxx_ld}}
      run: |
        # setup the build directory with tests and examples enabled
        meson setup builddir -DSQLITECPP_BUILD_TESTS=true -DSQLITECPP_BUILD_EXAMPLES=true --force-fallback-for=sqlite3
    - name: build meson project
      run: |
        # build the project
        meson compile -C builddir
    - name: test
      run: |
        # run the tests
        meson test -C builddir
