# Cap'n Proto AppVeyor configuration
#
# See https://www.appveyor.com/docs/appveyor-yml/ for configuration options.
#
# This script configures AppVeyor to:
#   - Use CMake to ...
#       build Cap'n Proto with VS2017.
#       build Cap'n Proto samples with VS2017.
#       build Cap'n Proto with MinGW.
#       build Cap'n Proto with Cygwin.

version: "{build}"

branches:
  only:
    - master
    - /release-.*/
# Don't build non-master branches (unless they open a pull request).

image: Visual Studio 2017
# AppVeyor build worker image (VM template).

shallow_clone: true
# Fetch repository as zip archive.

environment:
  MINGW_DIR: C:\mingw-w64\x86_64-7.2.0-posix-seh-rt_v5-rev1\mingw64
  BUILD_TYPE: debug

  matrix:
    # TODO(someday): Add MSVC x64 builds, MinGW x86 build?

    - CMAKE_GENERATOR: Visual Studio 15 2017
      BUILD_NAME: vs2017
      EXTRA_BUILD_FLAGS: # /maxcpucount
      # TODO(someday): Right now /maxcpucount occasionally expresses a filesystem-related race:
      #   capnp-capnpc++ complains that it can't create test.capnp.h.

    - CMAKE_GENERATOR: MinGW Makefiles
      BUILD_NAME: mingw
      EXTRA_BUILD_FLAGS: -j2

    - BUILD_NAME: cygwin

install:
  - ps: Get-Command sh.exe -All | Remove-Item
  # CMake refuses to generate MinGW Makefiles if sh.exe is in the PATH

before_build:
  - set PATH=%MINGW_DIR%\bin;%PATH%
  - set BUILD_DIR=build-%BUILD_NAME%
  - set INSTALL_PREFIX=%CD%\capnproto-c++-%BUILD_NAME%
  - cmake --version

build_script:
  - echo "Building Cap'n Proto with %CMAKE_GENERATOR%"
  - if NOT "%BUILD_NAME%"=="cygwin" cmake -Hc++ -B%BUILD_DIR% -G "%CMAKE_GENERATOR%" -DCMAKE_BUILD_TYPE=%BUILD_TYPE% -DCMAKE_INSTALL_PREFIX=%INSTALL_PREFIX%
  - if NOT "%BUILD_NAME%"=="cygwin" cmake --build %BUILD_DIR% --config %BUILD_TYPE% --target install -- %EXTRA_BUILD_FLAGS%
  # MinGW wants the build type at configure-time while MSVC wants the build type at build-time. We
  # can satisfy both by passing the build type to both cmake invocations. We have to suffer a
  # warning, but both generators will work.

  - echo "Building Cap'n Proto samples with %CMAKE_GENERATOR%"
  - if NOT "%BUILD_NAME%"=="cygwin" cmake -Hc++/samples -B%BUILD_DIR%-samples -G "%CMAKE_GENERATOR%" -DCMAKE_BUILD_TYPE=%BUILD_TYPE% -DCMAKE_PREFIX_PATH=%INSTALL_PREFIX%
  - if NOT "%BUILD_NAME%"=="cygwin" cmake --build %BUILD_DIR%-samples --config %BUILD_TYPE%

  # Cygwin build -- use super-test.sh like other Unix builds.
  # But, we need to install Cygwin's cmake package in order to pass the cmake part of super-test.
  # Somewhat ridiculously, this requires downloading Cygwin's setup program and running it.
  - if "%BUILD_NAME%"=="cygwin" appveyor DownloadFile "https://cygwin.com/setup-x86_64.exe" -FileName "C:\cygwin64\setup-x86_64.exe"
  - if "%BUILD_NAME%"=="cygwin" C:\cygwin64\setup-x86_64.exe --quiet-mode --no-shortcuts --upgrade-also --root "C:\cygwin64" --packages cmake
  - if "%BUILD_NAME%"=="cygwin" C:\cygwin64\bin\bash -lc 'cd /cygdrive/c/projects/capnproto; ./super-test.sh -j2 quick'

test_script:
  # Sleep a little to prevent interleaving test output with build output.
  - if NOT "%BUILD_NAME%"=="cygwin" timeout /t 2
  - if NOT "%BUILD_NAME%"=="cygwin" cd %BUILD_DIR%\src
  - if NOT "%BUILD_NAME%"=="cygwin" ctest -V -C %BUILD_TYPE%
