# C/C++ with GCC
# Build your C/C++ project with GCC using make.
# Add steps that publish test results, save build artifacts, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/apps/c-cpp/gcc

trigger:
- master
- 'v*'

pr:
- master
- 'v*'

variables:
  cli11.single: ON
  cli11.std: 14
  cli11.build_type: Debug
  cli11.options: -DCLI11_EXAMPLES_JSON=ON
  CMAKE_BUILD_PARALLEL_LEVEL: 4

jobs:

- job: ClangTidy
  variables:
    CXX_FLAGS: "-Werror -Wcast-align -Wfloat-equal -Wimplicit-atomic-properties -Wmissing-declarations -Woverlength-strings -Wshadow -Wstrict-selector-match -Wundeclared-selector -Wunreachable-code -std=c++11"
    cli11.options: -DCLI11_CLANG_TIDY=ON -DCLI11_CLANG_TIDY_OPTIONS="-fix"
    cli11.std: 11
    cli11.single: OFF
    CMAKE_BUILD_PARALLEL_LEVEL: 1
  pool:
    vmImage: 'ubuntu-latest'
  container: silkeh/clang:8
  steps:
    - template: .ci/azure-cmake.yml
    - template: .ci/azure-build.yml
    - script: git diff --exit-code --color
      displayName: Check tidy

- job: CppLint
  pool:
    vmImage: 'ubuntu-latest'
  container: sharaku/cpplint:latest
  steps:
    - bash: cpplint --counting=detailed --recursive examples include/CLI tests
      displayName: Checking against google style guide

# TODO: Fix macOS error and windows warning in c++17 mode
- job: Native
  strategy:
    matrix:
      Linux14:
        vmImage: 'ubuntu-latest'
      macOS17:
        vmImage: 'macOS-latest'
        cli11.std: 17
      macOS11:
        vmImage: 'macOS-latest'
        cli11.std: 11
      Windows17:
        vmImage: 'vs2017-win2016'
        cli11.std: 17
      Windows11:
        vmImage: 'vs2017-win2016'
        cli11.std: 11
      Windowslatest:
        vmImage: 'windows-2019'
        cli11.std: 20
        cli11.options: -DCMAKE_CXX_FLAGS="/std:c++latest /EHsc"
      Linux17nortti:
        vmImage: 'ubuntu-latest'
        cli11.std: 17
        cli11.options: -DCMAKE_CXX_FLAGS="-fno-rtti"
  pool:
    vmImage: $(vmImage)
  steps:
    - template: .ci/azure-build.yml
    - template: .ci/azure-test.yml

- job: Meson
  pool:
    vmImage: 'ubuntu-latest'
  steps:
    - task: UsePythonVersion@0
      inputs:
        versionSpec: '3.6'
    - script: python3 -m pip install meson ninja
    - script: meson build
      displayName: Run meson to generate build
      workingDirectory: tests/mesonTest
    - script: ninja -C tests/mesonTest/build
      displayName: Build with Ninja
    - script: ./tests/mesonTest/build/main --help
      displayName: Run help

- job: Docker
  variables:
    cli11.single: OFF
  pool:
    vmImage: 'ubuntu-latest'
  strategy:
    matrix:
      gcc9:
        containerImage: gcc:9
        cli11.std: 17
      gcc8:
        containerImage: gcc:8
        cli11.std: 17
      gcc4.8:
        containerImage: gcc:4.8
        cli11.std: 11
        cli11.options:
      clang3.4:
        containerImage: silkeh/clang:3.4
        cli11.std: 11
      clang8:
        containerImage: silkeh/clang:8
        cli11.std: 14
        cli11.options: -DCLI11_FORCE_LIBCXX=ON
      clang8_17:
        containerImage: silkeh/clang:8
        cli11.std: 17
        cli11.options: -DCLI11_FORCE_LIBCXX=ON
      clang10_20:
        containerImage: silkeh/clang:10
        cli11.std: 20
        cli11.options: -DCLI11_FORCE_LIBCXX=ON -DCMAKE_CXX_FLAGS=-std=c++20
  container: $[ variables['containerImage'] ]
  steps:
    - template: .ci/azure-cmake.yml
    - template: .ci/azure-build.yml
    - template: .ci/azure-test.yml
