# AppVeyor configuration
#                          __  __            _
#                       ___\ \/ /_ __   __ _| |_
#                      / _ \\  /| '_ \ / _` | __|
#                     |  __//  \| |_) | (_| | |_
#                      \___/_/\_\ .__/ \__,_|\__|
#                               |_| XML parser
#
# Copyright (C) 2017 José Gutiérrez de la Concha <jose@zeroc.com>
# Copyright (C) 2017 Expat development team
# Licensed under the MIT license:
#
# Permission is  hereby granted,  free of charge,  to any  person obtaining
# a  copy  of  this  software   and  associated  documentation  files  (the
# "Software"),  to  deal in  the  Software  without restriction,  including
# without  limitation the  rights  to use,  copy,  modify, merge,  publish,
# distribute, sublicense, and/or sell copies of the Software, and to permit
# persons  to whom  the Software  is  furnished to  do so,  subject to  the
# following conditions:
#
# The above copyright  notice and this permission notice  shall be included
# in all copies or substantial portions of the Software.
#
# THE  SOFTWARE  IS  PROVIDED  "AS  IS",  WITHOUT  WARRANTY  OF  ANY  KIND,
# EXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
# NO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
# DAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR
# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
# USE OR OTHER DEALINGS IN THE SOFTWARE.

# scripts that are called at very beginning, before repo cloning
init:
- git config --global core.autocrlf input

# version format
version: libexpat-{build}

# set clone depth, clone entire repository history if not defined
clone_depth: 1

# clone directory
clone_folder: c:\projects\libexpat

configuration: Debug

# AppVeyor pre-installed software:
# https://www.appveyor.com/docs/build-environment/#pre-installed-software
#
# CMake Visual Studio generators:
# https://cmake.org/cmake/help/latest/manual/cmake-generators.7.html#visual-studio-generators
environment:
  matrix:
    # Visual Studio 2010 Win32
    - GENERATOR: Visual Studio 10 2010
      PLATFORM: Win32
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013

    # Visual Studio 2010 x64
    - GENERATOR: Visual Studio 10 2010 Win64
      PLATFORM: x64
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013

    # Visual Studio 2012 Win32
    - GENERATOR: Visual Studio 11 2012
      PLATFORM: Win32
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013

    # Visual Studio 2012 x64
    - GENERATOR: Visual Studio 11 2012 Win64
      PLATFORM: x64
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013

    # Visual Studio 2013 Win32
    - GENERATOR: Visual Studio 12 2013
      PLATFORM: Win32
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013

    # Visual Studio 2013 x64
    - GENERATOR: Visual Studio 12 2013 Win64
      PLATFORM: x64
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013

    # Visual Studio 2015 Win32
    - GENERATOR: Visual Studio 14 2015
      PLATFORM: Win32
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015

    # Visual Studio 2015 x64
    - GENERATOR: Visual Studio 14 2015 Win64
      PLATFORM: x64
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015

    # Visual Studio 2017 Win32
    - GENERATOR: Visual Studio 15 2017
      PLATFORM: Win32
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017

    # Visual Studio 2017 x64
    - GENERATOR: Visual Studio 15 2017 Win64
      PLATFORM: x64
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017

before_build:
  - echo Running cmake...
  - cd c:\projects\libexpat
  - cmake -G"%GENERATOR%" expat

build:
  parallel: true                  # enable MSBuild parallel builds
  project: expat.sln              # path to Visual Studio solution or project

test_script:
  - cp Debug\expatd.dll tests\Debug
  - tests\Debug\runtests.exe
