parameters:
  CXXVersions: [ 14, 17, 20 ]
  buildTypes: [ 'Debug', 'Release' ]
  image: ''

  compiler: ''
  compilerVersions: ["default"] # if default value, simply uses whatever version is on the machine.
                                # the text of this default value doesn't actually matter.
  setupfile: ''
  extraCmakeArgs: ''

jobs:
- ${{ each compilerVersion in parameters.compilerVersions }}:
  - ${{ each CXXVersion in parameters.CXXVersions }}:
    - ${{ each buildType in parameters.buildTypes }}:
      - job:
        displayName: ${{ format('{0} {1} C++{2} {3}', parameters.compiler, compilerVersion, CXXVersion, buildType) }}
        pool:
            vmImage: ${{ parameters.image }}
        continueOnError: false

        steps:
          - ${{ if not(eq(parameters.setupfile, '')) }}:
            - template: ${{ parameters.setupfile }}
              parameters:
                version: ${{ compilerVersion }}

          - task: CMake@1
            name: Configure
            inputs:
              workingDirectory: build
              cmakeArgs: '-DGSL_CXX_STANDARD=${{ CXXVersion }} -DCMAKE_BUILD_TYPE=${{ buildType }} -DCI_TESTING:BOOL=ON -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -Werror=dev ${{ parameters.extraCmakeArgs }} .. '

          - task: CMake@1
            name: Build
            inputs:
              workingDirectory: build
              cmakeArgs: '--build . '

          - script: ctest . --output-on-failure --no-compress-output
            name: CTest
            workingDirectory: build
            failOnStderr: true