# 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 Win32 XML_UNICODE_WCHAR_T
    - GENERATOR: Visual Studio 10 2010
      PLATFORM: Win32
      CFLAGS: -DXML_UNICODE -DXML_UNICODE_WCHAR_T
      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 2010 x64 XML_UNICODE_WCHAR_T
    - GENERATOR: Visual Studio 10 2010 Win64
      PLATFORM: x64
      CFLAGS: -DXML_UNICODE -DXML_UNICODE_WCHAR_T
      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 Win32 XML_UNICODE_WCHAR_T
    - GENERATOR: Visual Studio 11 2012
      PLATFORM: Win32
      CFLAGS: -DXML_UNICODE -DXML_UNICODE_WCHAR_T
      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 2012 x64 XML_UNICODE_WCHAR_T
    - GENERATOR: Visual Studio 11 2012 Win64
      PLATFORM: x64
      CFLAGS: -DXML_UNICODE -DXML_UNICODE_WCHAR_T
      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 Win32 XML_UNICODE_WCHAR_T
    - GENERATOR: Visual Studio 12 2013
      PLATFORM: Win32
      CFLAGS: -DXML_UNICODE -DXML_UNICODE_WCHAR_T
      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 2013 x64 XML_UNICODE_WCHAR_T
    - GENERATOR: Visual Studio 12 2013 Win64
      PLATFORM: x64
      CFLAGS: -DXML_UNICODE -DXML_UNICODE_WCHAR_T
      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 Win32 XML_UNICODE_WCHAR_T
    - GENERATOR: Visual Studio 14 2015
      PLATFORM: Win32
      CFLAGS: -DXML_UNICODE -DXML_UNICODE_WCHAR_T
      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 2015 x64 XML_UNICODE_WCHAR_T
    - GENERATOR: Visual Studio 14 2015 Win64
      PLATFORM: x64
      CFLAGS: -DXML_UNICODE -DXML_UNICODE_WCHAR_T
      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 Win32 XML_UNICODE_WCHAR_T
    - GENERATOR: Visual Studio 15 2017
      PLATFORM: Win32
      CFLAGS: -DXML_UNICODE -DXML_UNICODE_WCHAR_T
      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

    # Visual Studio 2017 x64 XML_UNICODE_WCHAR_T
    - GENERATOR: Visual Studio 15 2017 Win64
      PLATFORM: x64
      CFLAGS: -DXML_UNICODE -DXML_UNICODE_WCHAR_T
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017

before_build:
  - echo Running cmake...
  - cd c:\projects\libexpat
  - cmake -DWARNINGS_AS_ERRORS=ON -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
