# 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
      xmlch: uint16_t
    - compiler: cygwin
      configuration: Debug
      generator: Unix Makefiles
      shared: OFF
      network: OFF
      netaccessor:
      msgloader:
      transcoder:
      xmlch: char16_t
    - compiler: mingw
      configuration: Release
      generator: Ninja
      shared: ON
      network: ON
      netaccessor:
      msgloader:
      transcoder: windows
      xmlch: wchar_t
    - compiler: mingw
      configuration: Debug
      generator: Ninja
      shared: OFF
      network:
      netaccessor:
      msgloader:
      transcoder: iconv
      xmlch: uint16_t
    - compiler: vc14
      configuration: Release
      generator: Visual Studio 14 2015 Win64
      shared: ON
      network: ON
      netaccessor:
      msgloader: icu
      transcoder: 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
      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 [%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%
