name: Compiler Integration Tests

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
  cancel-in-progress: true

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

# These jobs are correlated with the officially supported compilers
# and toolsets. If you change any versions, please update README.md.

jobs:
  gcc:
    strategy:
      matrix:
        gcc_version: [ 12, 13, 14 ]
        build_type: [ Debug, Release ]
        cxx_version: [ 14, 17, 20, 23 ]
        exclude:
          # https://github.com/google/googletest/issues/4232
          # Looks like GoogleTest is not interested in making version 1.14
          # work with gcc-12.
          - gcc_version: 12
            cxx_version: 20
          - gcc_version: 12
            cxx_version: 23
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Run CMake (configure, build, test)
        uses: ./.github/workflows/cmake
        with:
          cmake_build_type: ${{ matrix.build_type }}
          cmake_cxx_compiler: g++-${{ matrix.gcc_version }}
          gsl_cxx_standard: ${{ matrix.cxx_version }}
          
  clang:
    strategy:
      matrix:
        clang_version: [ 16, 17, 18 ]
        build_type: [ Debug, Release ]
        cxx_version: [ 14, 17, 20, 23 ]
        exclude:
          # https://github.com/llvm/llvm-project/issues/93734
          # Looks like clang fixed this issue in clang-18, but won't backport
          # the fix.
          - clang_version: 17
            cxx_version: 23
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
     
      - name: Run CMake (configure, build, test)
        uses: ./.github/workflows/cmake
        with:
          cmake_build_type: ${{ matrix.build_type }}
          cmake_cxx_compiler: clang++-${{ matrix.clang_version }}
          gsl_cxx_standard: ${{ matrix.cxx_version }}

  xcode:
    strategy:
      matrix:
        xcode_version: [ '15.4' ]
        build_type: [ Debug, Release ]
        cxx_version: [ 14, 17, 20, 23 ]
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v4

      - name: select xcode version
        run: sudo xcode-select -s /Applications/Xcode_${{ matrix.xcode_version }}.app

      - name: Run CMake (configure, build, test)
        uses: ./.github/workflows/cmake
        with:
          cmake_build_type: ${{ matrix.build_type }}
          cmake_cxx_compiler: clang++
          gsl_cxx_standard: ${{ matrix.cxx_version }}

  VisualStudio:
    strategy:
      matrix:
        generator: [ 'Visual Studio 16 2019', 'Visual Studio 17 2022' ]
        image: [ windows-2019, windows-2022 ]
        build_type: [ Debug, Release ]
        extra_args: [ '', '-T ClangCL' ]
        cxx_version: [ 14, 17, 20, 23 ]
        exclude:
          - generator: 'Visual Studio 17 2022'
            image: windows-2019
          - generator: 'Visual Studio 16 2019'
            image: windows-2022
          - generator: 'Visual Studio 16 2019'
            cxx_version: 23
    runs-on: ${{ matrix.image }}
    steps:
      - uses: actions/checkout@v4
      - uses: microsoft/setup-msbuild@v2

      - name: Run CMake (configure, build, test)
        uses: ./.github/workflows/cmake
        with:
          cmake_generator: ${{ matrix.generator }}
          cmake_build_type: ${{ matrix.build_type }}
          gsl_cxx_standard: ${{ matrix.cxx_version }}
          extra_cmake_args: ${{ matrix.extra_args }}
          build_cmd: msbuild GSL.sln
          test_cmd: ctest . --output-on-failure --no-compress-output
          shell: pwsh

