#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is
# furnished to do so, under the terms of the COPYING file.
#
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
# KIND, either express or implied.
#
# SPDX-License-Identifier: curl
#
###########################################################################

version: 7.50.0.{build}

environment:
    matrix:
      # generated CMake-based Visual Studio Release builds
      - job_name: "CMake, VS2008, Release x86, Schannel"
        APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2015"
        BUILD_SYSTEM: CMake
        PRJ_GEN: "Visual Studio 9 2008"
        PRJ_CFG: Release
        OPENSSL: OFF
        SCHANNEL: ON
        ENABLE_UNICODE: OFF
        HTTP_ONLY: OFF
        TESTING: OFF
        SHARED: ON
        DISABLED_TESTS: ""
      - job_name: "CMake, VS2022, Release x64, OpenSSL, WebSockets"
        APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2022"
        BUILD_SYSTEM: CMake
        PRJ_GEN: "Visual Studio 17 2022"
        TARGET: "-A x64"
        PRJ_CFG: Release
        OPENSSL: ON
        SCHANNEL: OFF
        ENABLE_UNICODE: OFF
        HTTP_ONLY: OFF
        TESTING: OFF
        SHARED: ON
        DISABLED_TESTS: ""
        WEBSOCKETS: ON
      - job_name: "CMake, VS2022, Release arm64, Schannel, Static"
        APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2022"
        BUILD_SYSTEM: CMake
        PRJ_GEN: "Visual Studio 17 2022"
        TARGET: "-A ARM64"
        PRJ_CFG: Release
        OPENSSL: OFF
        SCHANNEL: ON
        ENABLE_UNICODE: OFF
        HTTP_ONLY: OFF
        TESTING: OFF
        SHARED: OFF
        DISABLED_TESTS: ""
      # generated CMake-based Visual Studio Debug builds
      - job_name: "CMake, VS2010, Debug x64, no SSL, Static"
        APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2015"
        BUILD_SYSTEM: CMake
        PRJ_GEN: "Visual Studio 10 2010 Win64"
        PRJ_CFG: Debug
        OPENSSL: OFF
        SCHANNEL: OFF
        ENABLE_UNICODE: OFF
        HTTP_ONLY: OFF
        TESTING: ON
        SHARED: OFF
        DISABLED_TESTS: "!1139 !1501 ~1056"
        ADD_PATH: "C:\\msys64\\usr\\bin"
      - job_name: "CMake, VS2022, Debug x64, Schannel, Static, Unicode"
        APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2022"
        BUILD_SYSTEM: CMake
        PRJ_GEN: "Visual Studio 17 2022"
        TARGET: "-A x64"
        PRJ_CFG: Debug
        OPENSSL: OFF
        SCHANNEL: ON
        ENABLE_UNICODE: ON
        HTTP_ONLY: OFF
        TESTING: ON
        SHARED: OFF
        DISABLED_TESTS: "~571 !1139 !1501 ~1056"
        ADD_PATH: "C:\\msys64\\usr\\bin"
      - job_name: "CMake, VS2022, Debug x64, no SSL, Static"
        APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2022"
        BUILD_SYSTEM: CMake
        PRJ_GEN: "Visual Studio 17 2022"
        TARGET: "-A x64"
        PRJ_CFG: Debug
        OPENSSL: OFF
        SCHANNEL: OFF
        ENABLE_UNICODE: OFF
        HTTP_ONLY: OFF
        TESTING: ON
        SHARED: OFF
        DISABLED_TESTS: "~571 !1139 !1501 ~1056"
        ADD_PATH: "C:\\msys64\\usr\\bin"
      - job_name: "CMake, VS2022, Debug x64, no SSL, Static, HTTP only"
        APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2022"
        BUILD_SYSTEM: CMake
        PRJ_GEN: "Visual Studio 17 2022"
        TARGET: "-A x64"
        PRJ_CFG: Debug
        OPENSSL: OFF
        SCHANNEL: OFF
        ENABLE_UNICODE: OFF
        HTTP_ONLY: ON
        TESTING: ON
        SHARED: OFF
        DISABLED_TESTS: "!1139 !1501 ~1056"
        ADD_PATH: "C:\\msys64\\usr\\bin"
      # generated CMake-based MSYS Makefiles builds (mingw cross-compiling)
      - job_name: "CMake, mingw-w64, Debug x64, Schannel, Static, Unicode"
        APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2015"
        BUILD_SYSTEM: CMake
        PRJ_GEN: "MSYS Makefiles"
        PRJ_CFG: Debug
        OPENSSL: OFF
        SCHANNEL: ON
        ENABLE_UNICODE: ON
        HTTP_ONLY: OFF
        TESTING: ON
        SHARED: OFF
        DISABLED_TESTS: "!1139 !1501 ~1056"
        ADD_PATH: "C:\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin;C:\\msys64\\usr\\bin"
        MSYS2_ARG_CONV_EXCL: "/*"
        BUILD_OPT: -k
      - job_name: "CMake, mingw-w64, Debug x64, Schannel, Static, Unicode"
        APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2017"
        BUILD_SYSTEM: CMake
        PRJ_GEN: "MSYS Makefiles"
        PRJ_CFG: Debug
        OPENSSL: OFF
        SCHANNEL: ON
        ENABLE_UNICODE: ON
        HTTP_ONLY: OFF
        TESTING: ON
        SHARED: OFF
        DISABLED_TESTS: "!1139 !1501 ~1056"
        ADD_PATH: "C:\\mingw-w64\\x86_64-7.2.0-posix-seh-rt_v5-rev1\\mingw64\\bin;C:\\msys64\\usr\\bin"
        MSYS2_ARG_CONV_EXCL: "/*"
        BUILD_OPT: -k
      - job_name: "CMake, mingw-w64, Debug x86, Schannel, Static"
        APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2015"
        BUILD_SYSTEM: CMake
        PRJ_GEN: "MSYS Makefiles"
        PRJ_CFG: Debug
        OPENSSL: OFF
        SCHANNEL: ON
        ENABLE_UNICODE: OFF
        HTTP_ONLY: OFF
        TESTING: ON
        SHARED: OFF
        DISABLED_TESTS: "!1139 !1501 ~1056"
        ADD_PATH: "C:\\mingw-w64\\i686-6.3.0-posix-dwarf-rt_v5-rev1\\mingw32\\bin;C:\\msys64\\usr\\bin"
        MSYS2_ARG_CONV_EXCL: "/*"
        BUILD_OPT: -k
      - job_name: "CMake, mingw, Debug x86, no SSL, Static"
        APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2022"
        BUILD_SYSTEM: CMake
        PRJ_GEN: "MSYS Makefiles"
        PRJ_CFG: Debug
        OPENSSL: OFF
        SCHANNEL: OFF
        ENABLE_UNICODE: OFF
        HTTP_ONLY: OFF
        TESTING: ON
        SHARED: OFF
        DISABLED_TESTS: "!1139 !1501 ~1056"
        ADD_PATH: "C:\\MinGW\\bin;C:\\msys64\\usr\\bin"
        MSYS2_ARG_CONV_EXCL: "/*"
        BUILD_OPT: -k
      # winbuild-based builds
      - job_name: "winbuild, VS2015, Debug"
        APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2015"
        BUILD_SYSTEM: winbuild_vs2015
        DEBUG: yes
        PATHPART: debug
        TESTING: OFF
        ENABLE_UNICODE: no
      - job_name: "winbuild, VS2015, Release"
        APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2015"
        BUILD_SYSTEM: winbuild_vs2015
        DEBUG: no
        PATHPART: release
        TESTING: OFF
        ENABLE_UNICODE: no
      - job_name: "winbuild, VS2017, Debug"
        APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2017"
        BUILD_SYSTEM: winbuild_vs2017
        DEBUG: yes
        PATHPART: debug
        TESTING: OFF
        ENABLE_UNICODE: no
      - job_name: "winbuild, VS2017, Release"
        APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2017"
        BUILD_SYSTEM: winbuild_vs2017
        DEBUG: no
        PATHPART: release
        TESTING: OFF
        ENABLE_UNICODE: no
      - job_name: "winbuild, VS2015, Debug, Unicode"
        APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2015"
        BUILD_SYSTEM: winbuild_vs2015
        DEBUG: yes
        PATHPART: debug
        TESTING: OFF
        ENABLE_UNICODE: yes
      - job_name: "winbuild, VS2015, Release, Unicode"
        APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2015"
        BUILD_SYSTEM: winbuild_vs2015
        DEBUG: no
        PATHPART: release
        TESTING: OFF
        ENABLE_UNICODE: yes
      - job_name: "winbuild, VS2017, Debug, Unicode"
        APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2017"
        BUILD_SYSTEM: winbuild_vs2017
        DEBUG: yes
        PATHPART: debug
        TESTING: OFF
        ENABLE_UNICODE: yes
      - job_name: "winbuild, VS2017, Release, Unicode"
        APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2017"
        BUILD_SYSTEM: winbuild_vs2017
        DEBUG: no
        PATHPART: release
        TESTING: OFF
        ENABLE_UNICODE: yes
      # generated VisualStudioSolution-based builds
      - job_name: "VisualStudioSolution, VS2017, Debug"
        APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2017"
        BUILD_SYSTEM: VisualStudioSolution
        PRJ_CFG: "DLL Debug - DLL Windows SSPI - DLL WinIDN"
        TESTING: OFF
        VC_VERSION: VC14.10
      # autotools-based builds (NOT mingw cross-compiling, but msys2 native)
      - job_name: "autotools, msys2, Debug, no Proxy, no SSL"
        APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2017"
        BUILD_SYSTEM: autotools
        TESTING: ON
        DISABLED_TESTS: "!19 ~1056 !1233"
        ADD_PATH: "C:\\msys64\\usr\\bin"
        CONFIG_ARGS: "--enable-debug --enable-werror --disable-threaded-resolver --disable-proxy --without-ssl --enable-websockets"
      - job_name: "autotools, msys2, Debug, no SSL"
        APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2017"
        BUILD_SYSTEM: autotools
        TESTING: ON
        DISABLED_TESTS: "!19 !504 !704 !705 ~1056 !1233"
        ADD_PATH: "C:\\msys64\\usr\\bin"
        CONFIG_ARGS: "--enable-debug --enable-werror --disable-threaded-resolver --without-ssl --enable-websockets"
      - job_name: "autotools, msys2, Release, no SSL"
        APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2017"
        BUILD_SYSTEM: autotools
        TESTING: ON
        DISABLED_TESTS: "!19 !504 !704 !705 ~1056 !1233"
        ADD_PATH: "C:\\msys64\\usr\\bin"
        CONFIG_ARGS: "--enable-warnings --enable-werror --without-ssl --enable-websockets"
      # autotools-based Cygwin build
      - job_name: "autotools, cygwin, Debug, no SSL"
        APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2022"
        BUILD_SYSTEM: autotools
        TESTING: ON
        DISABLED_TESTS: "~1056"
        ADD_PATH: "C:\\cygwin64\\bin"
        CONFIG_ARGS: "--enable-debug --enable-werror --disable-threaded-resolver --without-ssl --enable-websockets"
        POSIX_PATH_PREFIX: "/cygdrive"

install:
    - if not "%ADD_PATH%"=="" (
        set "PATH=%ADD_PATH%;%PATH%" )

build_script:
    - if %BUILD_SYSTEM%==CMake (
        cmake .
        -G"%PRJ_GEN%"
        %TARGET%
        -DCURL_USE_OPENSSL=%OPENSSL%
        -DCURL_USE_SCHANNEL=%SCHANNEL%
        -DHTTP_ONLY=%HTTP_ONLY%
        -DBUILD_SHARED_LIBS=%SHARED%
        -DBUILD_TESTING=%TESTING%
        -DENABLE_WEBSOCKETS=%WEBSOCKETS%
        -DCURL_WERROR=ON
        -DENABLE_DEBUG=ON
        -DENABLE_UNICODE=%ENABLE_UNICODE%
        -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE=""
        -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG=""
        -DCMAKE_INSTALL_PREFIX="C:/CURL"
        -DCMAKE_BUILD_TYPE=%PRJ_CFG% &&
        cmake --build . --config %PRJ_CFG% --parallel 2 --clean-first -- %BUILD_OPT%
      ) else (
      if %BUILD_SYSTEM%==VisualStudioSolution (
        cd projects &&
        .\\generate.bat %VC_VERSION% &&
        msbuild.exe /p:Configuration="%PRJ_CFG%" "Windows\\%VC_VERSION%\\curl-all.sln"
      ) else (
      if %BUILD_SYSTEM%==winbuild_vs2015 (
        call buildconf.bat &&
        cd winbuild &&
        call "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64 &&
        call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86_amd64 &&
        nmake /f Makefile.vc mode=dll VC=14 "SSL_PATH=C:\OpenSSL-v111-Win64" WITH_SSL=dll MACHINE=x64 DEBUG=%DEBUG% ENABLE_UNICODE=%ENABLE_UNICODE% &&
        ..\builds\libcurl-vc14-x64-%PATHPART%-dll-ssl-dll-ipv6-sspi\bin\curl.exe -V
      ) else (
      if %BUILD_SYSTEM%==winbuild_vs2017 (
        call buildconf.bat &&
        cd winbuild &&
        call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat" &&
        nmake /f Makefile.vc mode=dll VC=14.10 "SSL_PATH=C:\OpenSSL-v111-Win64" WITH_SSL=dll MACHINE=x64 DEBUG=%DEBUG% ENABLE_UNICODE=%ENABLE_UNICODE% &&
        ..\builds\libcurl-vc14.10-x64-%PATHPART%-dll-ssl-dll-ipv6-sspi\bin\curl.exe -V
      ) else (
      if %BUILD_SYSTEM%==autotools (
        bash.exe -e -l -c "cd %POSIX_PATH_PREFIX%/c/projects/curl && autoreconf -fi && ./configure %CONFIG_ARGS% && make V=1 && make V=1 examples && cd tests && make V=1"
      )))))
    - if %TESTING%==ON (
        if %BUILD_SYSTEM%==CMake (
          cmake --build . --config %PRJ_CFG% --parallel 2 --target testdeps
      ))

test_script:
    - if exist C:/msys64/usr/bin/curl.exe (
        set ACURL=-ac %POSIX_PATH_PREFIX%/c/msys64/usr/bin/curl.exe )
    - if exist C:/Windows/System32/curl.exe (
        set ACURL=-ac %POSIX_PATH_PREFIX%/c/Windows/System32/curl.exe )
    - if %TESTING%==ON (
        if %BUILD_SYSTEM%==CMake (
          set TFLAGS=%ACURL% %DISABLED_TESTS% &&
          cmake --build . --config %PRJ_CFG% --target test-ci
        ) else (
        if %BUILD_SYSTEM%==autotools (
          bash.exe -e -l -c "cd %POSIX_PATH_PREFIX%/c/projects/curl && make V=1 TFLAGS='%ACURL% %DISABLED_TESTS%' test-ci"
        ) else (
          bash.exe -e -l -c "cd %POSIX_PATH_PREFIX%/c/projects/curl/tests && ./runtests.pl -a -p !flaky -r -rm %ACURL% %DISABLED_TESTS%"
        ))
      )

# select branches to avoid testing feature branches twice (as branch and as pull request)
branches:
    only:
        - master
        - /\/ci$/

artifacts:
  - path: '**/curl.exe'
    name: curl
  - path: '**/*curl*.dll'
    name: libcurl
