version: '{build}'

os: Visual Studio 2015

environment:
  matrix:
    - arch: x86
      compiler: msvc2015
      backend: ninja
      BOOST_ROOT: C:\Libraries\Boost_1_60_0

    - arch: x86
      compiler: msvc2015
      backend: vs2015
      BOOST_ROOT: C:\Libraries\Boost_1_60_0

    - arch: x86
      compiler: msys2-mingw
      backend: ninja

    - arch: x64
      compiler: msys2-mingw
      backend: ninja

    - arch: x64
      compiler: cygwin
      backend: ninja

platform:
  - x64

branches:
  only:
    - master
    # Release branches
    - /^[0-9]+\.[0-9]+$/

init:
  - ps: |
        If($Env:compiler -like 'msvc2015') {
          Set-WinSystemLocale de-DE
          Start-Sleep -s 5
          Restart-Computer
        }

install:
  - ps: |
        function DownloadFile([String] $Source, [String] $Destination) {
            $retries = 10
            for ($i = 1; $i -le $retries; $i++) {
                try {
                    (New-Object net.webclient).DownloadFile($Source, $Destination)
                    break # succeeded
                } catch [net.WebException] {
                    if ($i -eq $retries) {
                        throw # fail on last retry
                    }
                    $backoff = (10 * $i) # backoff 10s, 20s, 30s...
                    echo ('{0}: {1}' -f $Source, $_.Exception.Message)
                    echo ('Retrying in {0}s...' -f $backoff)
                    Start-Sleep -m ($backoff * 1000)
                }
            }
        }
  - cmd: set "ORIG_PATH=%PATH%"
  # Use a Ninja with QuLogic's patch: https://github.com/ninja-build/ninja/issues/1219
  - cmd: set "MESON_FIXED_NINJA=1"
  - ps: DownloadFile -Source 'https://github.com/mesonbuild/cidata/raw/master/ninja.exe' -Destination 'C:\projects\meson\ninja.exe'
  # Use the x86 python only when building for x86 for the cpython tests.
  # For all other archs (including, say, arm), use the x64 python.
  - cmd: if %arch%==x86 (set MESON_PYTHON_PATH=C:\python35) else (set MESON_PYTHON_PATH=C:\python35-x64)

  # Skip CI requires python
  - cmd: python ./skip_ci.py --base-branch-env=APPVEYOR_REPO_BRANCH --is-pull-env=APPVEYOR_PULL_REQUEST_NUMBER

  # Set paths for BOOST dll files
  - cmd: if %compiler%==msvc2015 ( if %arch%==x86 ( set "PATH=%PATH%;%BOOST_ROOT%\lib32-msvc-14.0" ) else ( set "PATH=%PATH%;%BOOST_ROOT%\lib64-msvc-14.0" ) )
  - cmd: if %compiler%==msvc2017 ( if %arch%==x86 ( set "PATH=%PATH%;%BOOST_ROOT%\lib32-msvc-14.1" ) else ( set "PATH=%PATH%;%BOOST_ROOT%\lib64-msvc-14.1" ) )

  # Set paths and config for each build type.
  - cmd: if %compiler%==msvc2015 ( call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" %arch% )
  - cmd: if %compiler%==msvc2017 ( call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat" -arch=%arch% )
  - cmd: if %compiler%==cygwin ( set PYTHON=python3 ) else ( set PYTHON=python )
  # MinGW setup, lines are split to prevent "The input line is too long." error.
  - cmd: if %arch%==x86 ( set "PACMAN_ARCH=i686" ) else ( set "PACMAN_ARCH=x86_64" )
  - cmd: if %arch%==x86 ( set "PACMAN_BITS=32" ) else ( set "PACMAN_BITS=64" )
  - cmd: if %compiler%==msys2-mingw ( set "PATH=C:\msys64\mingw%PACMAN_BITS%\bin;%PATH%" )
  - cmd: if %compiler%==msys2-mingw ( set "MESON_PYTHON_PATH=C:\msys64\mingw%PACMAN_BITS%\bin" )
  - cmd: if %compiler%==msys2-mingw ( set "PYTHON=python3" )
  - cmd: if %compiler%==msys2-mingw ( C:\msys64\usr\bin\pacman -S --needed --noconfirm "mingw%PACMAN_BITS%/mingw-w64-%PACMAN_ARCH%-python3" "mingw%PACMAN_BITS%/mingw-w64-%PACMAN_ARCH%-python3-setuptools" )
  # Cygwin
  - cmd: if not %compiler%==cygwin ( set "PATH=%cd%;%MESON_PYTHON_PATH%;%PATH%;" )
  - cmd: if %compiler%==cygwin ( set WRAPPER=ci\run-in-cygwin.bat )
  - cmd: if %compiler%==cygwin ( %WRAPPER% which %PYTHON% ) else ( where %PYTHON% )

  # Setup D compiler and dub packages
  - ps: |
        If($Env:compiler.StartsWith('msvc') -and $Env:backend -eq 'ninja') {
          & .\ci\install-dmd.ps1
          $arch = 'x86_mscoff'
          If($Env:arch -eq 'x64') {
            $arch = 'x86_64'
          }
          & dub fetch urld
          & dub build urld --compiler=dmd --arch=$arch
          & dub fetch dubtestproject
          & dub build dubtestproject:test1 --compiler=dmd --arch=$arch
          & dub build dubtestproject:test2 --compiler=dmd --arch=$arch
        }

  # pkg-config is needed for the pkg-config tests on msvc
  - ps: |
        If($Env:compiler.StartsWith('msvc')) {
          DownloadFile -Source 'http://nirbheek.in/files/binaries/pkg-config/win32/pkg-config.exe' `
                       -Destination 'C:\projects\meson\pkg-config.exe'
        }
  - cmd: if %compiler%==cygwin ( call ci\appveyor-install.bat )
  - ps: |
        If($Env:compiler -like 'msvc*') {
          DownloadFile -Source "https://download.microsoft.com/download/D/B/B/DBB64BA1-7B51-43DB-8BF1-D1FB45EACF7A/msmpisdk.msi" `
                       -Destination "C:\projects\msmpisdk.msi"
          c:\windows\system32\msiexec.exe /i C:\projects\msmpisdk.msi /quiet
          DownloadFile -Source "https://download.microsoft.com/download/D/B/B/DBB64BA1-7B51-43DB-8BF1-D1FB45EACF7A/MSMpiSetup.exe" `
                       -Destination "C:\projects\MSMpiSetup.exe"
          c:\projects\MSMpiSetup.exe -unattend -full
        }

build_script:
  - cmd: echo No build step.
  - cmd: if %backend%==ninja ( %WRAPPER% ninja.exe --version ) else ( MSBuild /version & echo. )

test_script:
  - cmd: echo Running tests for %arch% and %compiler% with the %backend% backend
  - cmd: "%WRAPPER% %PYTHON% run_tests.py --backend=%backend%"

on_finish:
  - set "PATH=%ORIG_PATH%"
  - appveyor PushArtifact meson-test-run.txt -DeploymentName "Text test logs"
  - appveyor PushArtifact meson-test-run.xml -DeploymentName "XML test logs"

cache:
  - C:\cache
