version: "{build}"
branches:
  only:
    - master
    - RC_1_2
    - RC_1_1
image: Visual Studio 2017
clone_depth: 1
environment:
  matrix:
    - cmake: 1
    - variant: test_debug
      compiler: msvc-14.0
      model: 64
      sim: 1
    - variant: test_debug
      compiler: msvc-14.0
      model: 32
      bjam: 1
    - variant: test_release
      compiler: msvc-14.0
      model: 64
      python: 1
      crypto: openssl
      bjam: 1
    - variant: test_debug
      compiler: gcc
      model: 32
      crypto: openssl
      bjam: 1

install:
  - git submodule update --init --recursive
  - set ROOT_DIRECTORY=%CD%
  - cd %ROOT_DIRECTORY%
  - if not defined compiler ( set compiler="" )
  - if not defined crypto ( set crypto=built-in )
  - if not defined linkflags ( set linkflags="" )
  - if not defined include ( set include="" )
  - cd %ROOT_DIRECTORY%
  - set BOOST_ROOT=c:\Libraries\boost_1_69_0
  - set BOOST_BUILD_PATH=%BOOST_ROOT%\tools\build
  - echo %BOOST_ROOT%
  - echo %BOOST_BUILD_PATH%
  - set PATH=%PATH%;%BOOST_BUILD_PATH%
  - ps: '"using msvc : 14.0 ;`nusing gcc : : : <cxxflags>-std=c++11 ;`nusing python : 3.5 : c:\\Python35-x64 : c:\\Python35-x64\\include : c:\\Python35-x64\\libs ;`n" | Set-Content $env:HOMEDRIVE\$env:HOMEPATH\user-config.jam'
  - type %HOMEDRIVE%%HOMEPATH%\user-config.jam
  - cd %ROOT_DIRECTORY%
  - set PATH=c:\msys64\mingw32\bin;%PATH%
  - g++ --version
  - set PATH=c:\Python27-x64;%PATH%
  - set PYTHON_INTERPRETER=c:\Python27-x64\python.exe
  - python --version
  - echo %ROOT_DIRECTORY%
  - cd %BOOST_BUILD_PATH%
  - bootstrap.bat >nul
  - cd %ROOT_DIRECTORY%

build_script:
  # examples
  - cd %ROOT_DIRECTORY%\examples
  - if defined bjam (
    b2.exe --hash openssl-version=pre1.1 warnings=all warnings-as-errors=on -j %NUMBER_OF_PROCESSORS% %compiler% address-model=%model% picker-debugging=on invariant-checks=full variant=%variant% %linkflags% %include% link=shared crypto=%crypto% asserts=on export-extra=on
    )

  # tools
  - cd %ROOT_DIRECTORY%\tools
  - if defined bjam (
    b2.exe --hash openssl-version=pre1.1 warnings=all warnings-as-errors=on -j %NUMBER_OF_PROCESSORS% %compiler% address-model=%model% picker-debugging=on invariant-checks=full variant=%variant% %linkflags% %include% link=shared crypto=%crypto% asserts=on export-extra=on
    )

  # test
  - cd %ROOT_DIRECTORY%\test
  - if defined bjam (
    b2.exe --hash openssl-version=pre1.1 warnings=all warnings-as-errors=on -j %NUMBER_OF_PROCESSORS% %compiler% address-model=%model% picker-debugging=on invariant-checks=full variant=%variant% %linkflags% %include% link=shared crypto=%crypto% asserts=on export-extra=on testing.execute=off
    )

  # python binding
  - cd %ROOT_DIRECTORY%\bindings\python
  # we use 64 bit python builds
  - if defined python (
    b2.exe --hash openssl-version=pre1.1 warnings=all warnings-as-errors=on -j %NUMBER_OF_PROCESSORS% %compiler% address-model=%model% picker-debugging=on invariant-checks=full variant=%variant% %linkflags% %include% link=shared crypto=%crypto% asserts=on export-extra=on libtorrent-link=shared stage_module stage_dependencies
    )

  # simulations
  - cd %ROOT_DIRECTORY%\simulation
  - if defined sim (
    b2.exe --hash openssl-version=pre1.1 warnings=all warnings-as-errors=on -j %NUMBER_OF_PROCESSORS% %compiler% address-model=%model% debug-iterators=off picker-debugging=on invariant-checks=full test_debug %linkflags% %include% boost-link=default link=static crypto=built-in define=BOOST_ASIO_DISABLE_IOCP asserts=on testing.execute=off
    )

  # minimal support for cmake build
  - cd %ROOT_DIRECTORY%
  - mkdir build && cd build
  - if defined cmake (
    cmake -DCMAKE_CXX_STANDARD=11 -Dbuild_tests=ON -Dbuild_examples=ON -Dbuild_tools=ON -Dpython-bindings=%python% -Dboost-python-module-name="python" -Dskip-python-runtime-test=true -DPython_ADDITIONAL_VERSIONS="2.7" -G "Visual Studio 15 2017 Win64" .. &&
    cmake --build . --config Release --parallel %NUMBER_OF_PROCESSORS% -- -verbosity:minimal
    )

test_script:
  - cd %ROOT_DIRECTORY%\test
  - if defined bjam (
    appveyor-retry b2.exe -l500 --hash openssl-version=pre1.1 warnings=all warnings-as-errors=on -j %NUMBER_OF_PROCESSORS% %compiler% address-model=%model% picker-debugging=on invariant-checks=full variant=%variant% %linkflags% %include% link=shared crypto=%crypto% asserts=on export-extra=on win-tests
    )

  - cd %ROOT_DIRECTORY%\bindings\python
  # we use 64 bit python build
  - if defined python (
    copy dependencies\*.* .
    & c:\Python35-x64\python.exe test.py -b
    )

  - if defined cmake (
    appveyor-retry ctest
    )

  # simulation tests
  # debug iterators are turned off here because msvc has issues with noexcept
  # specifiers when debug iterators are enabled. Specifically, constructors that
  # allocate memory are still marked as noexcept. That results in program
  # termination
  # the IOCP backend in asio appears to have an issue where it hangs under
  # certain unexpected terminations (through exceptions)
  - cd %ROOT_DIRECTORY%\simulation
  - if defined sim (
    b2.exe --hash openssl-version=pre1.1 warnings-as-errors=on -j %NUMBER_OF_PROCESSORS% %compiler% address-model=%model% debug-iterators=off picker-debugging=on invariant-checks=full test_debug %linkflags% %include% boost-link=default link=static crypto=built-in define=BOOST_ASIO_DISABLE_IOCP asserts=on
    )
