# Copyright (C) The c-ares project and its contributors
# SPDX-License-Identifier: MIT

image: Previous Visual Studio 2022

# Github/Bitbucket only: get source code for one particular commit as zip archive, instead of git clone'ing.
shallow_clone: true

# Github/Bitbucket only: per-file commit filtering
skip_commits:
  files:
    - .gitignore
    - '**/*.md'
    - .travis.yml
    - .cirrus.yml
    - '.github/**'

# List of build configurations to test.
configuration:
  - DEBUG

# Note: You can set extra cmake args for a particular matrix entry with CMAKE_EXTRA_OPTIONS. For example:
#     CMAKE_EXTRA_OPTIONS: -DOPENSSL_ROOT_DIR=C:/OpenSSL-Win32
environment:
  matrix:
    # MSVC 2022, 32-bit x86 (cmake)
    - COMPILER: MSVC
      CONFTOOL: CMAKE
      SYSTEM: CONSOLE
      SKIP_TESTS: no
      MSVC_SETUP_ARG: x86
      MSVC_SETUP_PATH: C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars32.bat
      CMAKE_EXTRA_OPTIONS: -GNinja -DCARES_BUILD_TESTS=ON -DGTEST_ROOT=C:\projects\googletest -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreadedDebugDLL
      TOOLSDIR: ./build/bin
      TESTDIR: ./build/bin
      BUILD_GOOGLETEST: yes
      GTEST_INSTALL_FAILURE_SIGNAL_HANDLER: 1

    # MSVC 2022, 64-bit x64 (cmake)
    - COMPILER: MSVC
      CONFTOOL: CMAKE
      SYSTEM: CONSOLE
      SKIP_TESTS: no
      MSVC_SETUP_ARG: x64
      MSVC_SETUP_PATH: C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat
      TOOLSDIR: ./build/bin
      TESTDIR: ./build/bin
      CMAKE_EXTRA_OPTIONS: -GNinja -DCARES_BUILD_TESTS=ON -DGTEST_ROOT=C:\projects\googletest -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreadedDebugDLL
      BUILD_GOOGLETEST: yes
      GTEST_INSTALL_FAILURE_SIGNAL_HANDLER: 1

    # MSVC 2022, 64-bit x86 (nmake)
    - COMPILER: MSVC
      CONFTOOL: NMAKE
      SYSTEM: CONSOLE
      SKIP_TESTS: no
      MSVC_SETUP_ARG: x64
      MSVC_SETUP_PATH: C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat
      BUILD_GOOGLETEST: yes
      GTEST_INSTALL_FAILURE_SIGNAL_HANDLER: 1

    # MSVC 2022, 32-bit x86 (nmake)
    - COMPILER: MSVC
      CONFTOOL: NMAKE
      SYSTEM: CONSOLE
      SKIP_TESTS: no
      MSVC_SETUP_ARG: x86
      MSVC_SETUP_PATH: C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars32.bat
      BUILD_GOOGLETEST: yes
      GTEST_INSTALL_FAILURE_SIGNAL_HANDLER: 1

    # MinGW, 32-bit x86 (makefiles)
    - COMPILER: MINGW
      CONFTOOL: MAKE
      SYSTEM: CONSOLE
      SKIP_TESTS: no
      PATH: C:\mingw-w64\i686-8.1.0-posix-dwarf-rt_v6-rev0\mingw32\bin;%PATH%
      BUILD_GOOGLETEST: yes
      GTEST_INSTALL_FAILURE_SIGNAL_HANDLER: 1

    # MinGW, 32-bit x86 (cmake static only)
    - COMPILER: MINGW
      CONFTOOL: CMAKE
      SYSTEM: CONSOLE
      SKIP_TESTS: no
      TOOLSDIR: ./build/bin
      TESTDIR: ./build/bin
      PATH: C:\mingw-w64\i686-8.1.0-posix-dwarf-rt_v6-rev0\mingw32\bin;%PATH%
      CMAKE_EXTRA_OPTIONS: -DCARES_SHARED=OFF -GNinja -DCARES_BUILD_TESTS=ON -DGTEST_ROOT=C:\projects\googletest
      BUILD_GOOGLETEST: yes
      GTEST_INSTALL_FAILURE_SIGNAL_HANDLER: 1

# Disabled until AppVeyor updates their Visual Studio with this patch:
# https://developercommunity.visualstudio.com/t/clexe-compiler-error-C1007-when-compili/10486219
#    # MSVC 2022, UWP (cmake)
#    - COMPILER: MSVC
#      CONFTOOL: CMAKE
#      SYSTEM: CONSOLE
#      SKIP_TESTS: yes
#      MSVC_SETUP_ARG: x64 store
#      MSVC_SETUP_PATH: C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat
#      CMAKE_EXTRA_OPTIONS: -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=10.0 -A x64


install:
  - if "%COMPILER%" == "MINGW" rename "C:\Program Files\Git\usr\bin\sh.exe" "sh2.exe"

before_build:
  # Setup build environment for the selected compiler (not all compilers need to do anything here).
  #  -- Visual Studio --
  - if "%COMPILER%" == "MSVC" call "%MSVC_SETUP_PATH%" %MSVC_SETUP_ARG%
  - if "%BUILD_GOOGLETEST%" == "yes" git clone --depth=1 https://github.com/google/googletest googletest
  - if "%BUILD_GOOGLETEST%" == "yes" cd googletest
  - if "%BUILD_GOOGLETEST%" == "yes" cmake -DCMAKE_INSTALL_PREFIX=C:\projects\googletest -DCMAKE_POLICY_DEFAULT_CMP0091:STRING=NEW -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreadedDebugDLL -GNinja -Bbuild
  - if "%BUILD_GOOGLETEST%" == "yes" cmake --build build --config Debug
  - if "%BUILD_GOOGLETEST%" == "yes" cmake --install build --config Debug
  - if "%BUILD_GOOGLETEST%" == "yes" cd ..

build_script:
  - if "%SYSTEM%" == "CONSOLE" if "%CONFTOOL%" == "NMAKE"     copy .\include\ares_build.h.dist .\include\ares_build.h
  - if "%SYSTEM%" == "CONSOLE" if "%CONFTOOL%" == "NMAKE"     nmake /NOLOGO /f .\Makefile.msvc
  - if "%SYSTEM%" == "CONSOLE" if "%CONFTOOL%" == "CMAKE"     cmake -DCMAKE_BUILD_TYPE=%configuration% -DCMAKE_INSTALL_PREFIX=C:\projects\build-cares\test_install -DCARES_STATIC=ON -DCARES_STATIC_PIC=ON %CMAKE_EXTRA_OPTIONS% -Bbuild
  - if "%SYSTEM%" == "CONSOLE" if "%CONFTOOL%" == "CMAKE"     cmake --build build --config Debug
  - if "%SYSTEM%" == "CONSOLE" if "%CONFTOOL%" == "CMAKE"     cmake --install build --config Debug
  - if "%SYSTEM%" == "CONSOLE" if "%CONFTOOL%" == "MAKE"      copy .\include\ares_build.h.dist .\include\ares_build.h
  - if "%SYSTEM%" == "CONSOLE" if "%CONFTOOL%" == "MAKE"      mingw32-make.exe -f Makefile.m32 demos

test_script:
  # We can't use powershell for tests due to treating stderr as an error
  - if "%SYSTEM%" == "CONSOLE" if "%CONFTOOL%" == "NMAKE" if not "%SKIP_TESTS%" == "yes" cd test
  - if "%SYSTEM%" == "CONSOLE" if "%CONFTOOL%" == "NMAKE" if not "%SKIP_TESTS%" == "yes" nmake GTEST_ROOT=C:\projects\googletest /NOLOGO /f .\Makefile.msvc vtest
  - if "%SYSTEM%" == "CONSOLE" if "%CONFTOOL%" == "NMAKE" if not "%SKIP_TESTS%" == "yes" nmake GTEST_ROOT=C:\projects\googletest /NOLOGO /f .\Makefile.msvc aresfuzz aresfuzzname dnsdump
  - if "%SYSTEM%" == "CONSOLE" if "%CONFTOOL%" == "NMAKE" if not "%SKIP_TESTS%" == "yes" .\msvc\arestest\lib-debug\dnsdump.exe fuzzinput\answer_a fuzzinput\answer_aaaa
  - if "%SYSTEM%" == "CONSOLE" if "%CONFTOOL%" == "MAKE"  if not "%SKIP_TESTS%" == "yes" cd test
  - if "%SYSTEM%" == "CONSOLE" if "%CONFTOOL%" == "MAKE"  if not "%SKIP_TESTS%" == "yes" mingw32-make.exe GTEST_ROOT=C:\projects\googletest -f Makefile.m32 vtest
  - if "%SYSTEM%" == "CONSOLE" if "%CONFTOOL%" == "MAKE"  if not "%SKIP_TESTS%" == "yes" mingw32-make.exe GTEST_ROOT=C:\projects\googletest -f Makefile.m32 aresfuzz.exe aresfuzzname.exe dnsdump.exe
  - if "%SYSTEM%" == "CONSOLE" if "%CONFTOOL%" == "MAKE"  if not "%SKIP_TESTS%" == "yes" .\dnsdump.exe fuzzinput\answer_a fuzzinput\answer_aaaa
  - if "%SYSTEM%" == "CONSOLE" if "%CONFTOOL%" == "CMAKE" if not "%SKIP_TESTS%" == "yes" cd %TESTDIR%
  - if "%SYSTEM%" == "CONSOLE" if "%CONFTOOL%" == "CMAKE" if not "%SKIP_TESTS%" == "yes" .\adig.exe www.google.com
  - if "%SYSTEM%" == "CONSOLE" if "%CONFTOOL%" == "CMAKE" if not "%SKIP_TESTS%" == "yes" .\ahost.exe www.google.com
  - if "%SYSTEM%" == "CONSOLE" if "%CONFTOOL%" == "CMAKE" if not "%SKIP_TESTS%" == "yes" .\arestest.exe -4 -v --gtest_filter=-*LiveSearchTXT*:*LiveSearchANY*:*LiveGetLocalhostByAddr*
  - if "%SYSTEM%" == "CONSOLE" if "%CONFTOOL%" == "CMAKE" if not "%SKIP_TESTS%" == "yes" .\dnsdump.exe "%APPVEYOR_BUILD_FOLDER%\test\fuzzinput\answer_a" "%APPVEYOR_BUILD_FOLDER%\test\fuzzinput\answer_aaaa"

#on_finish:
#  - cd C:\projects\build-cares\test
#  - dir /B *.log > list.txt
#  - cmake -E tar cfv all_tests.zip --format=zip --files-from=list.txt
#  - appveyor PushArtifact all_tests.zip
#  - ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
# Force build worker to stay open after build is done, so we can RDP into it.

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