---
version: 2.2.0.{build}

os:
  - Visual Studio 2017
  - Visual Studio 2019
platform:
  - x64

branches:
  except:
    - /.*travis.*/
    - /.*linux.*/
    - /.*freebsd.*/
    - /.*osx.*/
    - /.*bitrise.*/
skip_commits:
  message: /travis/
  files:
    - .travis.yml

environment:
  global:
    APPVEYOR_SAVE_CACHE_ON_ERROR: true
    OPENSSL_ROOT: C:/OpenSSL-Win64
    PYTHON3: C:/Python37-x64/python.exe
    MPATH: C:/mingw-w64/x86_64-7.2.0-posix-seh-rt_v5-rev1/mingw64/bin;C:/msys64/usr/bin
    EVENT_TESTS_PARALLEL: 20
    EVENT_BUILD_PARALLEL: 10
  matrix:
    - EVENT_BUILD_METHOD: "cmake"
      EVENT_CMAKE_OPTIONS: ""
      APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2017"
    - EVENT_BUILD_METHOD: "cmake"
      EVENT_CMAKE_OPTIONS: "-DEVENT__LIBRARY_TYPE=STATIC"
      APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2017"
    - EVENT_BUILD_METHOD: "autotools"
      EVENT_CONFIGURE_OPTIONS: ""
      APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2017"
    - EVENT_BUILD_METHOD: "autotools"
      EVENT_CONFIGURE_OPTIONS: "--disable-openssl"
      APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2017"
    - EVENT_BUILD_METHOD: "autotools"
      EVENT_CONFIGURE_OPTIONS: "--disable-thread-support"
      APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2017"
    - EVENT_BUILD_METHOD: "autotools"
      EVENT_CONFIGURE_OPTIONS: "--disable-debug-mode"
      APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2017"
    - EVENT_BUILD_METHOD: "autotools"
      EVENT_CONFIGURE_OPTIONS: "--disable-malloc-replacement"
      APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2017"
    - EVENT_BUILD_METHOD: "cmake"
      EVENT_CMAKE_OPTIONS: "-DEVENT__DISABLE_OPENSSL=ON"
      APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2017"
    - EVENT_BUILD_METHOD: "cmake"
      EVENT_CMAKE_OPTIONS: "-DEVENT__DISABLE_THREAD_SUPPORT=ON"
      APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2017"
    - EVENT_BUILD_METHOD: "cmake"
      EVENT_CMAKE_OPTIONS: "-DEVENT__DISABLE_DEBUG_MODE=ON"
      APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2017"
    - EVENT_BUILD_METHOD: "cmake"
      EVENT_CMAKE_OPTIONS: "-DEVENT__DISABLE_MM_REPLACEMENT=ON"
      APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2017"
    - EVENT_BUILD_METHOD: "cmake"
      EVENT_CMAKE_OPTIONS: "-DCMAKE_C_FLAGS='-DUNICODE -D_UNICODE'"
      APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2017"
    - EVENT_BUILD_METHOD: "cmake"
      EVENT_CMAKE_OPTIONS: ""
      APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2019"
    - EVENT_BUILD_METHOD: "cmake"
      EVENT_CMAKE_OPTIONS: "-DEVENT__DISABLE_TESTS=ON -DEVENT__DISABLE_SAMPLES=ON"
      APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2017"
      TEST_EXPORT: "SHARED"
    - EVENT_BUILD_METHOD: "cmake"
      EVENT_CMAKE_OPTIONS: "-DEVENT__LIBRARY_TYPE=STATIC -DEVENT__DISABLE_TESTS=ON -DEVENT__DISABLE_SAMPLES=ON"
      APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2017"
      TEST_EXPORT: "STATIC"

matrix:
  exclude:
    - os: Visual Studio 2019
      APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2017"
    - os: Visual Studio 2017
      APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2019"
  fast_finish: true

init:
  - 'echo Repo build branch is: %APPVEYOR_REPO_BRANCH%'
  - 'echo Build folder is: %APPVEYOR_BUILD_FOLDER%'
  - 'echo Repo build commit is: %APPVEYOR_REPO_COMMIT%'
  - 'echo PATH is: %PATH%'

build_script:
  - ps: |
      if ($env:EVENT_BUILD_METHOD -eq 'autotools') {
        $env:PATH="$env:MPATH;$env:OPENSSL_ROOT/bin;$env:PATH"
        $env:LDFLAGS="-L$($env:OPENSSL_ROOT)/lib -L$($env:OPENSSL_ROOT)"
        $env:CFLAGS="-I$($env:OPENSSL_ROOT)/include"

        $script='
        ./autogen.sh 2>&1 3>&1
        [[ $? -ne 0 ]] && exit 1

        mkdir build-autotools 2>/dev/null
        cd build-autotools
        [[ $? -ne 0 ]] && exit 1

        ../configure $EVENT_CONFIGURE_OPTIONS 2>&1
        [[ $? -ne 0 ]] && exit 1
        make -j $EVENT_BUILD_PARALLEL 2>&1
        [[ $? -ne 0 ]] && exit 1
        make verify -j $EVENT_TESTS_PARALLEL 2>&1 '

        bash -c $script

      } else {
        if ($env:APPVEYOR_BUILD_WORKER_IMAGE -eq 'Visual Studio 2017') {
          $env:BUILD_DIR="build-cmake"
        }
        if ($env:APPVEYOR_BUILD_WORKER_IMAGE -eq 'Visual Studio 2019') {
          $env:BUILD_DIR="build-cmake-vs2019"
        }
        md $env:BUILD_DIR 2> $null
        cd $env:BUILD_DIR
        if ($LastExitCode -ne 0) { $host.SetShouldExit($LastExitCode)  }
        if ($env:APPVEYOR_BUILD_WORKER_IMAGE -eq 'Visual Studio 2017') {
          cmake -G "Visual Studio 15 2017 Win64" .. $env:EVENT_CMAKE_OPTIONS
        }
        if ($env:APPVEYOR_BUILD_WORKER_IMAGE -eq 'Visual Studio 2019') {
          cmake -G "Visual Studio 16 2019" -A x64 .. $env:EVENT_CMAKE_OPTIONS
        }
        if ($LastExitCode -ne 0) { $host.SetShouldExit($LastExitCode)  }
        cmake --build . -j $env:EVENT_BUILD_PARALLEL -- /nologo /verbosity:minimal
        if ($LastExitCode -ne 0) { $host.SetShouldExit($LastExitCode)  }
        if ($env:TEST_EXPORT -eq 'STATIC') {
          &$env:PYTHON3 ../test-export/test-export.py static
        } elseif ($env:TEST_EXPORT -eq 'SHARED') {
          &$env:PYTHON3 ../test-export/test-export.py shared
        } else {
          ctest --output-on-failure -j $env:EVENT_TESTS_PARALLEL
        }
      }

cache:
  - build-cmake
  - build-cmake-vs2019
  - build-autotools

on_failure:
  - 7z a libevent.zip .
  - appveyor PushArtifact libevent.zip
