# Copyright (c) 2014, Ruslan Baratov
# Copyright (c) 2014, Alexander Lamaison
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice, this
#   list of conditions and the following disclaimer.
#
# * Redistributions in binary form must reproduce the above copyright notice,
#   this list of conditions and the following disclaimer in the documentation
#   and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

environment:
  matrix:
    - GENERATOR: "Visual Studio 12"
      BUILD_SHARED_LIBS: ON

    - GENERATOR: "Visual Studio 12"
      BUILD_SHARED_LIBS: OFF

    - GENERATOR: "Visual Studio 11"
      BUILD_SHARED_LIBS: ON

    - GENERATOR: "Visual Studio 11"
      BUILD_SHARED_LIBS: OFF

platform:
  - x86
  - x64

# configuration:
#   - Debug
#   - Release

build_script:
  - ps: if($env:PLATFORM -eq "x64") { $env:CMAKE_GEN_SUFFIX=" Win64" }
  - cmake "-G%GENERATOR%%CMAKE_GEN_SUFFIX%" -DBUILD_SHARED_LIBS=%BUILD_SHARED_LIBS% -H. -B_builds
  - cmake --build _builds --config "%CONFIGURATION%"

test_script:
  - ps: cd _builds
  - ctest -VV -C "%CONFIGURATION%" --output-on-failure

on_failure:
  - ps: cat _builds/CMakeFiles/CMakeOutput.log
  - ps: cat _builds/CMakeFiles/CMakeError.log