#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 1998 - 2020, 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.haxx.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.
#
###########################################################################

version: 7.50.0.{build}

environment:
    matrix:
      - APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2015"
        BUILD_SYSTEM: CMake
        PRJ_GEN: "Visual Studio 9 2008"
        PRJ_CFG: Release
        OPENSSL: OFF
        WINSSL: ON
        HTTP_ONLY: OFF
        TESTING: OFF
        SHARED: ON
        DISABLED_TESTS: ""
        COMPILER_PATH: ""
      - APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2019"
        BUILD_SYSTEM: CMake
        PRJ_GEN: "Visual Studio 16 2019"
        TARGET: "-A x64"
        PRJ_CFG: Debug
        OPENSSL: OFF
        WINSSL: ON
        HTTP_ONLY: OFF
        TESTING: ON
        SHARED: OFF
        DISABLED_TESTS: "!1139"
        COMPILER_PATH: ""
      - APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2019"
        BUILD_SYSTEM: CMake
        PRJ_GEN: "Visual Studio 16 2019"
        TARGET: "-A x64"
        PRJ_CFG: Release
        OPENSSL: ON
        WINSSL: OFF
        HTTP_ONLY: OFF
        TESTING: OFF
        SHARED: ON
        DISABLED_TESTS: ""
        COMPILER_PATH: ""
      - APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2015"
        BUILD_SYSTEM: CMake
        PRJ_GEN: "Visual Studio 10 2010 Win64"
        PRJ_CFG: Debug
        OPENSSL: OFF
        WINSSL: OFF
        HTTP_ONLY: OFF
        TESTING: ON
        SHARED: OFF
        DISABLED_TESTS: "!1139"
        COMPILER_PATH: ""
      - APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2019"
        BUILD_SYSTEM: CMake
        PRJ_GEN: "Visual Studio 16 2019"
        TARGET: "-A x64"
        PRJ_CFG: Debug
        OPENSSL: OFF
        WINSSL: OFF
        HTTP_ONLY: OFF
        TESTING: ON
        SHARED: OFF
        DISABLED_TESTS: "!1139"
        COMPILER_PATH: ""
      - APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2019"
        BUILD_SYSTEM: CMake
        PRJ_GEN: "Visual Studio 16 2019"
        TARGET: "-A x64"
        PRJ_CFG: Debug
        OPENSSL: OFF
        WINSSL: OFF
        HTTP_ONLY: ON
        TESTING: ON
        SHARED: OFF
        DISABLED_TESTS: "!1139"
        COMPILER_PATH: ""
      - APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2015"
        BUILD_SYSTEM: CMake
        PRJ_GEN: "MSYS Makefiles"
        PRJ_CFG: Debug
        OPENSSL: OFF
        WINSSL: OFF
        HTTP_ONLY: OFF
        TESTING: ON
        SHARED: OFF
        DISABLED_TESTS: "!1139"
        COMPILER_PATH: "C:\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin"
        MSYS2_ARG_CONV_EXCL: "/*"
        BUILD_OPT: -k
      - APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2015"
        BUILD_SYSTEM: CMake
        PRJ_GEN: "MSYS Makefiles"
        PRJ_CFG: Debug
        OPENSSL: OFF
        WINSSL: ON
        HTTP_ONLY: OFF
        TESTING: ON
        SHARED: OFF
        DISABLED_TESTS: "!1139"
        COMPILER_PATH: "C:\\mingw-w64\\i686-6.3.0-posix-dwarf-rt_v5-rev1\\mingw32\\bin"
        MSYS2_ARG_CONV_EXCL: "/*"
        BUILD_OPT: -k
      - APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2015"
        BUILD_SYSTEM: CMake
        PRJ_GEN: "MSYS Makefiles"
        PRJ_CFG: Debug
        OPENSSL: OFF
        WINSSL: OFF
        HTTP_ONLY: OFF
        TESTING: ON
        SHARED: OFF
        DISABLED_TESTS: "!1139"
        COMPILER_PATH: "C:\\MinGW\\bin"
        MSYS2_ARG_CONV_EXCL: "/*"
        BUILD_OPT: -k
      - APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2015"
        BUILD_SYSTEM: winbuild_vs2015
        DEBUG: yes
        PATHPART: debug
        TESTING: OFF
      - APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2015"
        BUILD_SYSTEM: winbuild_vs2015
        DEBUG: no
        PATHPART: release
        TESTING: OFF
      - APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2017"
        BUILD_SYSTEM: winbuild_vs2017
        DEBUG: yes
        PATHPART: debug
        TESTING: OFF
      - APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2017"
        BUILD_SYSTEM: winbuild_vs2017
        DEBUG: no
        PATHPART: release
        TESTING: OFF
      - APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2017"
        BUILD_SYSTEM: VisualStudioSolution
        PRJ_CFG: "DLL Debug - DLL Windows SSPI - DLL WinIDN"
        TESTING: OFF
        VC_VERSION: VC15
      - APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2019"
        BUILD_SYSTEM: CMake
        PRJ_GEN: "Visual Studio 16 2019"
        TARGET: "-A ARM64"
        PRJ_CFG: Release
        OPENSSL: OFF
        WINSSL: ON
        HTTP_ONLY: OFF
        TESTING: OFF
        SHARED: OFF
        DISABLED_TESTS: ""
        COMPILER_PATH: ""
      - APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2015"
        BUILD_SYSTEM: autotools
        TESTING: ON
        DISABLED_TESTS: "!19 !1056 !1233 !1242 !1243 !2002 !2003"
        CONFIG_ARGS: "--enable-debug --enable-werror --enable-alt-svc --disable-threaded-resolver --disable-proxy"

install:
    - set "PATH=C:\msys64\usr\bin;%PATH%"
    - if not "%COMPILER_PATH%"=="" (
        set "PATH=%COMPILER_PATH%;%PATH%" )

build_script:
    - if %BUILD_SYSTEM%==CMake (
        cmake .
        -G"%PRJ_GEN%"
        %TARGET%
        -DCMAKE_USE_OPENSSL=%OPENSSL%
        -DCMAKE_USE_WINSSL=%WINSSL%
        -DHTTP_ONLY=%HTTP_ONLY%
        -DBUILD_SHARED_LIBS=%SHARED%
        -DBUILD_TESTING=%TESTING%
        -DCURL_WERROR=ON
        -DENABLE_DEBUG=ON
        -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% &&
        ..\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=15 "SSL_PATH=C:\OpenSSL-v111-Win64" WITH_SSL=dll MACHINE=x64 DEBUG=%DEBUG% &&
        ..\builds\libcurl-vc15-x64-%PATHPART%-dll-ssl-dll-ipv6-sspi\bin\curl.exe -V
      ) else (
      if %BUILD_SYSTEM%==autotools (
        bash.exe -e -l -c "cd /c/projects/curl && ./buildconf && ./configure %CONFIG_ARGS% && make && make examples && cd tests && make"
      )))))

test_script:
    - if %TESTING%==ON (
        bash.exe -e -l -c "cd /c/projects/curl/tests && ./runtests.pl -a -p !flaky %DISABLED_TESTS%" )

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

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