# Possible test configurations for comprehensive feature coverage:
#
# Cygwin
# ------
# 1) -Dnetwork:BOOL=ON -Dnetwork-accessor=curl -Dmessage-loader=icu -Dtranscoder=iconv
# 2) -Dnetwork:BOOL=ON -Dnetwork-accessor=socket -Dmessage-loader=inmemory -Dtranscoder=icu
# 3) -Dnetwork:BOOL=OFF"
# 4) (none)
#
# MinGW
# -----
# 1) -Dnetwork:BOOL=ON -Dtranscoder=iconv
# 2) -Dnetwork:BOOL=ON -Dtranscoder=windows
# 3) -Dnetwork:BOOL=OFF
# 4) (none)
#
# MSVC
# ----
# 1) -Dnetwork:BOOL=ON -Dmessage-loader=icu -Dtranscoder=iconv
# 2) -Dnetwork:BOOL=ON -Dnetwork-accessor=winsock -Dmessage-loader=inmemory -Dtranscoder=icu
# 3) -Dnetwork:BOOL=ON -Dtranscoder=windows
# 4) -Dnetwork:BOOL=OFF
# 5) (none)
#
# To keep the test matrix size manageable, only a subset of these are
# used, to test each settable option, but not in every possible
# combination.

environment:
  AV_PROJECTS: 'c:\projects'
  AV_XERCES_DOWNLOAD: 'c:\projects\download'
  AV_XERCES_TOOLS: 'c:\projects\tools'
  AV_XERCES_SOURCE: 'c:\projects\xerces-c'
  AV_XERCES_BUILD: 'c:\projects\build'
  AV_XERCES_INSTALL: 'c:/projects/libs'

  matrix:
    - compiler: cygwin
      configuration: Release
      generator: Unix Makefiles
      shared: ON
      network: ON
      netaccessor: curl
      msgloader: inmemory
      transcoder: iconv
      mutexmanager: posix
      xmlch: uint16_t
    - compiler: cygwin
      configuration: Debug
      generator: Unix Makefiles
      shared: OFF
      network: OFF
      netaccessor:
      msgloader:
      transcoder:
      mutexmanager: standard
      xmlch: char16_t
    - compiler: mingw
      configuration: Release
      generator: Ninja
      shared: ON
      network: ON
      netaccessor:
      msgloader:
      transcoder: windows
      mutexmanager: windows
      xmlch: wchar_t
    - compiler: mingw
      configuration: Debug
      generator: Ninja
      shared: OFF
      network:
      netaccessor:
      msgloader:
      transcoder: iconv
      mutexmanager:
      xmlch: uint16_t
    - compiler: vc14
      configuration: Release
      generator: Visual Studio 14 2015 Win64
      shared: ON
      network: ON
      netaccessor:
      msgloader: icu
      transcoder: windows
      mutexmanager: windows
      xmlch: wchar_t
      mfc: ON
    - compiler: vc14
      configuration: Debug
      generator: Visual Studio 14 2015 Win64
      shared: OFF
      network: OFF
      netaccessor: winsock
      msgloader: inmemory
      transcoder: icu
      mutexmanager: standard
      xmlch: char16_t
      mfc: OFF

cache:
  - 'c:\projects\download -> scripts/ci-appveyor-setup'
  - 'c:\projects\icu -> scripts/ci-appveyor-setup'

# Operating system (build VM template)
os: 'Visual Studio 2015'

# clone directory
clone_folder: 'c:\projects\xerces-c'
clone_depth: 5

platform: x64

init:
  - git config --global core.autocrlf input

before_build:
  - 'FOR /F "tokens=* USEBACKQ" %%F IN (`C:\cygwin64\bin\cygpath -u %AV_XERCES_DOWNLOAD%`) DO SET AV_XERCES_CYG_DOWNLOAD=%%F'
  - 'FOR /F "tokens=* USEBACKQ" %%F IN (`C:\cygwin64\bin\cygpath -u %AV_XERCES_TOOLS%`) DO SET AV_XERCES_CYG_TOOLS=%%F'
  - 'FOR /F "tokens=* USEBACKQ" %%F IN (`C:\cygwin64\bin\cygpath -u %AV_XERCES_SOURCE%`) DO SET AV_XERCES_CYG_SOURCE=%%F'
  - 'FOR /F "tokens=* USEBACKQ" %%F IN (`C:\cygwin64\bin\cygpath -u %AV_XERCES_INSTALL%`) DO SET AV_XERCES_CYG_INSTALL=%%F'
  - 'if NOT EXIST "%AV_XERCES_DOWNLOAD%\" mkdir %AV_XERCES_DOWNLOAD%'
  - 'if NOT EXIST "%AV_XERCES_TOOLS%\" mkdir %AV_XERCES_TOOLS%'
  - 'if %compiler%==cygwin C:\Cygwin64\setup-x86_64 -q -R C:\Cygwin64 -s http://cygwin.mirror.constant.com -l %AV_XERCES_DOWNLOAD%\cygwin -P libcurl-devel,cmake'
  - if [%msgloader%] == [icu] set AV_ICU_BUILD=true
  - if [%transcoder%] == [icu] set AV_ICU_BUILD=true
  - 'if EXIST "%AV_PROJECTS%\icu" set AV_ICU_BUILD=false'
  - 'set "PATH=C:\Program Files (x86)\cmake\bin;%AV_XERCES_TOOLS%;%PATH%"'
  - 'if %compiler%==cygwin set "PATH=C:\Cygwin64\bin;%PATH%"'
  - 'if %compiler%==mingw set "PATH=C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin;%PATH%"'
  - set "AV_CMAKE_ARGS=-DBUILD_SHARED_LIBS:BOOL=%shared%"
  - set "AV_CMAKE_ARGS=%AV_CMAKE_ARGS% -Dnetwork:BOOL=%network%"
  - if NOT [%netaccessor%] == [] set "AV_CMAKE_ARGS=%AV_CMAKE_ARGS% -Dnetwork-accessor=%netaccessor%"
  - if NOT [%msgloader%] == [] set "AV_CMAKE_ARGS=%AV_CMAKE_ARGS% -Dmessage-loader=%msgloader%"
  - if NOT [%transcoder%] == [] set "AV_CMAKE_ARGS=%AV_CMAKE_ARGS% -Dtranscoder=%transcoder%"
  - if NOT [%mutexmanager%] == [] set "AV_CMAKE_ARGS=%AV_CMAKE_ARGS% -Dmutex-manager=%mutexmanager%"
  - if NOT [%xmlch%] == [] set "AV_CMAKE_ARGS=%AV_CMAKE_ARGS% -Dxmlch-type=%xmlch%"
  - if NOT [%mfc%] == [] set "AV_CMAKE_ARGS=%AV_CMAKE_ARGS% -Dmfc-debug=%mfc%"
  - set "AV_XERCES_CMAKE_SOURCE=%AV_XERCES_SOURCE%"
  - set "AV_XERCES_CMAKE_INSTALL=%AV_XERCES_INSTALL%"
  - 'if %compiler%==cygwin set "AV_XERCES_CMAKE_SOURCE=%AV_XERCES_CYG_SOURCE%'
  - 'if %compiler%==cygwin set "AV_XERCES_CMAKE_INSTALL=%AV_XERCES_CYG_INSTALL%'
  - 'C:\cygwin64\bin\bash %AV_XERCES_CYG_SOURCE%/scripts/ci-appveyor-setup'
  - set ICU_PLATFORM=x64
  - if [%platform%] == [x86] set ICU_PLATFORM=Win32
  - 'if [%AV_ICU_BUILD%] == [true] cd "%AV_PROJECTS%\icu"'
  - 'if [%AV_ICU_BUILD%] == [true] echo "Running msbuild to build ICU"'
  - 'if [%AV_ICU_BUILD%] == [true] call "%VS140COMNTOOLS%..\..\VC\vcvarsall.bat" %platform%'
  - 'if [%AV_ICU_BUILD%] == [true] msbuild source\allinone\allinone.sln /p:Configuration=%configuration% /p:Platform=%ICU_PLATFORM% /m'
  - 'if [%AV_ICU_BUILD%] == [true] set "PATH=%AV_PROJECTS%\icu\bin;%AV_PROJECTS%\icu\bin64;%PATH%"'
  - 'if [%AV_ICU_BUILD%] == [true] set "CMAKE_PREFIX_PATH=%AV_PROJECTS%\icu"'
  - mkdir %AV_XERCES_BUILD%
  - cd %AV_XERCES_BUILD%
  - echo Running cmake -G "%generator%" -DCMAKE_INSTALL_PREFIX=%AV_XERCES_CMAKE_INSTALL% -DCMAKE_BUILD_TYPE=%configuration% %AV_XERCES_CMAKE_SOURCE%

  - cmake -G "%generator%" -DCMAKE_INSTALL_PREFIX=%AV_XERCES_CMAKE_INSTALL% -DCMAKE_BUILD_TYPE=%configuration% %AV_CMAKE_ARGS% %AV_XERCES_CMAKE_SOURCE%

build_script:
  - cd %AV_XERCES_BUILD%
  - cmake --build . --config %configuration%
  - cmake --build . --config %configuration% --target install

after_build:
  - cd %AV_XERCES_INSTALL%
  - '7z a %AV_XERCES_SOURCE%\xerces-c.zip * -tzip'

before_test:
  - cd %AV_XERCES_BUILD%
  - ctest -V -C %configuration%
