version: 0.10.3.{build}

environment:
  matrix:
    - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
      CMAKE_GENERATOR: Visual Studio 14 2015
      TOOLSET: 140
    - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
      CMAKE_GENERATOR: Visual Studio 16 2019
      TOOLSET: 142
      MDBX_BUILD_SHARED_LIBRARY: OFF
      MDBX_WITHOUT_MSVC_CRT: OFF
    - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
      CMAKE_GENERATOR: Visual Studio 16 2019
      TOOLSET: 142
      MDBX_BUILD_SHARED_LIBRARY: ON
      MDBX_WITHOUT_MSVC_CRT: ON
    - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
      CMAKE_GENERATOR: Visual Studio 16 2019
      TOOLSET: 142
      MDBX_BUILD_SHARED_LIBRARY: OFF
      MDBX_WITHOUT_MSVC_CRT: ON
    - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
      CMAKE_GENERATOR: Visual Studio 16 2019
      TOOLSET: 142
      MDBX_BUILD_SHARED_LIBRARY: ON
      MDBX_WITHOUT_MSVC_CRT: OFF
    - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
      CMAKE_GENERATOR: Visual Studio 15 2017
      TOOLSET: 141

branches:
  except:
    - coverity_scan

configuration:
- Debug
# MSVC-2019 hangs during code generation/optimization due to its own internal errors.
# I have found out that the problem occurs because of the /Ob2 option (see https://github.com/erthink/libmdbx/issues/116).
# So the simplest workaround is to using RelWithDebiInfo configuration for testing (cmake will uses /Ob1 option), instead of Release.
# - Release
- RelWithDebInfo

platform:
- Win32
- x64

# MSVC-2019 may hang up during code generation/optimization due to its own internal errors.
matrix:
  allow_failures:
    - image: Visual Studio 2019
      configuration: Release

# Enable RDP for troubleshooting
#init:
#  - ps: iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))

before_build:
- git clean -x -f -d
- git submodule sync
- git fetch --tags --prune --force
- git submodule update --init --recursive
- git submodule foreach --recursive git fetch --tags --prune --force
- cmake --version

build_script:
- ps: |
    Write-Output "*******************************************************************************"
    Write-Output "Configuration: $env:CONFIGURATION"
    Write-Output "Platform: $env:PLATFORM"
    Write-Output "Toolchain: $env:CMAKE_GENERATOR v$env:TOOLSET"
    Write-Output "Options: MDBX_WITHOUT_MSVC_CRT=$env:MDBX_WITHOUT_MSVC_CRT MDBX_BUILD_SHARED_LIBRARY=$env:MDBX_BUILD_SHARED_LIBRARY"
    Write-Output "*******************************************************************************"

    md _build -Force | Out-Null
    cd _build

    $generator = $env:CMAKE_GENERATOR
    if ($env:TOOLSET -lt 142) {
        if ($env:PLATFORM -eq "x64") {
            $generator = "$generator Win64"
        }
        & cmake -G "$generator" -D CMAKE_CONFIGURATION_TYPES="Debug;Release;RelWithDebInfo" -D MDBX_WITHOUT_MSVC_CRT:BOOL=$env:MDBX_WITHOUT_MSVC_CRT -D MDBX_BUILD_SHARED_LIBRARY:BOOL=$env:MDBX_BUILD_SHARED_LIBRARY ..
    } else {
        & cmake -G "$generator" -A $env:PLATFORM -D CMAKE_CONFIGURATION_TYPES="Debug;Release;RelWithDebInfo" -DMDBX_WITHOUT_MSVC_CRT:BOOL=$env:MDBX_WITHOUT_MSVC_CRT -D MDBX_BUILD_SHARED_LIBRARY:BOOL=$env:MDBX_BUILD_SHARED_LIBRARY ..
    }
    if ($LastExitCode -ne 0) {
        throw "Exec: $ErrorMessage"
    }
    Write-Output "*******************************************************************************"

    & cmake --build . --config $env:CONFIGURATION
    if ($LastExitCode -ne 0) {
        throw "Exec: $ErrorMessage"
    }
    Write-Output "*******************************************************************************"

test_script:
- ps: |
    if (($env:PLATFORM -ne "ARM") -and ($env:PLATFORM -ne "ARM64")) {
        & ./$env:CONFIGURATION/mdbx_test.exe --progress --console=no --pathname=test.db --dont-cleanup-after basic > test.log
        Get-Content test.log | Select-Object -last 42
        if ($LastExitCode -ne 0) {
            throw "Exec: $ErrorMessage"
        } else {
            & ./$env:CONFIGURATION/mdbx_chk.exe -nvv test.db | Tee-Object -file chk.log | Select-Object -last 42
        }
    }

on_failure:
- ps: Push-AppveyorArtifact \projects\libmdbx\_build\test.log
- ps: Push-AppveyorArtifact \projects\libmdbx\_build\test.db
- ps: Push-AppveyorArtifact \projects\libmdbx\_build\chk.log