# build format
version: "{build}"

skip_branch_with_pr: true
skip_commits:
  files:
  - .git*
  - .travis.yml
  - _config.yml
  - LICENSE
  - '*.md'
  - '*.png'
  - '*.sh'

# configurations to add to build matrix
configuration:
  #- Debug
  - Release

environment:
  appveyor_yml_disable_ps_linux: true
  matrix:
    - job_name: clang, C++14
      appveyor_build_worker_image: Ubuntu
      CC: clang
      CXX: clang++
      SQLITE_ORM_CXX_STANDARD: "-DSQLITE_ORM_ENABLE_CXX_14=ON"
      cmake_build_parallel: --parallel

    - job_name: gcc, C++14
      appveyor_build_worker_image: Ubuntu
      CC: gcc
      CXX: g++
      SQLITE_ORM_CXX_STANDARD: "-DSQLITE_ORM_ENABLE_CXX_14=ON"
      # gcc was stuck with a parallel build
      cmake_build_parallel: ""

    # Representative for C++14
    - job_name: Visual Studio 2017, x64, C++14
      appveyor_build_worker_image: Visual Studio 2017
      platform: x64
      SQLITE_ORM_CXX_STANDARD: ""

    - job_name: clang, C++17
      appveyor_build_worker_image: Ubuntu
      CC: clang
      CXX: clang++
      SQLITE_ORM_CXX_STANDARD: "-DSQLITE_ORM_ENABLE_CXX_17=ON"
      cmake_build_parallel: --parallel

    - job_name: gcc, C++17
      appveyor_build_worker_image: Ubuntu
      CC: gcc
      CXX: g++
      SQLITE_ORM_CXX_STANDARD: "-DSQLITE_ORM_ENABLE_CXX_17=ON"
      cmake_build_parallel: ""

    - job_name: clang, C++20 (with examples)
      appveyor_build_worker_image: Ubuntu
      CC: clang
      CXX: clang++
      SQLITE_ORM_CXX_STANDARD: "-DSQLITE_ORM_ENABLE_CXX_20=ON"
      # clang was stuck with a parallel build of examples
      cmake_build_parallel: ""
      cmake_build_examples: "-DBUILD_EXAMPLES=ON"

    - job_name: gcc, C++20
      appveyor_build_worker_image: Ubuntu
      CC: gcc
      CXX: g++
      SQLITE_ORM_CXX_STANDARD: "-DSQLITE_ORM_ENABLE_CXX_20=ON"
      cmake_build_parallel: ""

    - job_name: Visual Studio 2022, x64, C++17
      appveyor_build_worker_image: Visual Studio 2022
      platform: x64
      SQLITE_ORM_CXX_STANDARD: "-DSQLITE_ORM_ENABLE_CXX_17=ON"

    - job_name: Visual Studio 2022, x64, C++20
      appveyor_build_worker_image: Visual Studio 2022
      platform: x64
      SQLITE_ORM_CXX_STANDARD: "-DSQLITE_ORM_ENABLE_CXX_20=ON"

    - job_name: Visual Studio 2022, x86, C++20
      appveyor_build_worker_image: Visual Studio 2022
      platform: x86
      SQLITE_ORM_CXX_STANDARD: "-DSQLITE_ORM_ENABLE_CXX_20=ON"

matrix:
  fast_finish: true

for:
-
  # Windows
  matrix:
    only:
      - appveyor_build_worker_image: Visual Studio 2017
      - appveyor_build_worker_image: Visual Studio 2022
  init:
    - |-
      echo %appveyor_build_worker_image% - %platform% - %configuration%
      cmake --version
      if "%platform%"=="x64" (set architecture=-A x64)
      if "%platform%"=="x86" (set architecture=-A Win32)
      if "%appveyor_build_worker_image%"=="Visual Studio 2022" (set generator="Visual Studio 17 2022" %architecture%)
      if "%appveyor_build_worker_image%"=="Visual Studio 2017" (set generator="Visual Studio 15 2017" %architecture%)
  install:
    - |-
      cd C:\Tools\vcpkg
      git fetch --tags && git checkout 2023.01.09
      cd %APPVEYOR_BUILD_FOLDER%
      C:\Tools\vcpkg\bootstrap-vcpkg.bat -disableMetrics
      C:\Tools\vcpkg\vcpkg integrate install
      set VCPKG_DEFAULT_TRIPLET=%platform%-windows
      vcpkg install sqlite3
      rem The Visual Studio 2017 build worker image comes with CMake 3.16 only, and sqlite_orm will build the Catch2 dependency from source
      if not "%appveyor_build_worker_image%"=="Visual Studio 2017" (vcpkg install catch2)
  before_build:
    - |-
      mkdir compile
      cd compile
      cmake %SQLITE_ORM_CXX_STANDARD% -G %generator% -DCMAKE_TOOLCHAIN_FILE=C:/Tools/vcpkg/scripts/buildsystems/vcpkg.cmake ..
  # build examples, and run tests (ie make & make test)
  build_script:
    - |-
      cmake --build . --config %configuration% -- /m
      ctest --verbose --output-on-failure --build-config %configuration%

-
  # Linux
  matrix:
    only:
      - appveyor_build_worker_image: Ubuntu
  init:
    - |-
      echo $appveyor_build_worker_image
      $CXX --version
      cmake --version
  # using custom vcpkg triplets for building and linking dynamic dependent libraries
  install:
    - |-
      pushd $HOME/vcpkg
      git fetch --tags && git checkout 2023.01.09
      popd
      $HOME/vcpkg/bootstrap-vcpkg.sh -disableMetrics
      $HOME/vcpkg/vcpkg integrate install --overlay-triplets=vcpkg/triplets
      vcpkg install sqlite3 catch2 --overlay-triplets=vcpkg/triplets
  before_build:
    - |-
      mkdir compile
      cd compile
      cmake $SQLITE_ORM_CXX_STANDARD $cmake_build_examples --toolchain $HOME/vcpkg/scripts/buildsystems/vcpkg.cmake ..
  # build examples, and run tests (ie make & make test)
  build_script:
    - |-
      cmake --build . $cmake_build_parallel
      ctest --verbose --output-on-failure
-
  # macOS
  matrix:
    only:
      - appveyor_build_worker_image: macOS
  init:
    - |-
      echo $appveyor_build_worker_image
      $CXX --version
      cmake --version
  # using custom vcpkg triplets for building and linking dynamic dependent libraries
  install:
    - |-
      git clone --depth 1 --branch 2023.01.09 https://github.com/microsoft/vcpkg.git $HOME/vcpkg
      $HOME/vcpkg/bootstrap-vcpkg.sh -disableMetrics
      $HOME/vcpkg/vcpkg integrate install --overlay-triplets=vcpkg/triplets
      vcpkg install sqlite3 catch2 --overlay-triplets=vcpkg/triplets
  before_build:
    - |-
      mkdir compile
      cd compile
      cmake $SQLITE_ORM_CXX_STANDARD --toolchain $HOME/vcpkg/scripts/buildsystems/vcpkg.cmake ..
  # build examples, and run tests (ie make & make test)
  build_script:
    - |-
      cmake --build . --parallel
      ctest --verbose --output-on-failure
