1version: '{build}' 2 3configuration: 4 - Static Debug 5 - Static Release 6# - Shared Debug 7# - Shared Release 8 9platform: 10 - x86 11 - x64 12 13environment: 14 matrix: 15 - compiler: msvc-12-seh 16 - compiler: msvc-14-seh 17 - compiler: gcc-4.9.2-posix 18# - compiler: gcc-4.8.4-posix 19 20artifacts: 21 - path: '_build/CMakeFiles/*.log' 22 name: logs 23 - path: '_build/Testing/**/*.xml' 24 name: test_results 25 26install: 27 # derive some extra information 28 - for /f "tokens=1-2" %%a in ("%configuration%") do (@set "linkage=%%a") 29 - for /f "tokens=1-2" %%a in ("%configuration%") do (@set "variant=%%b") 30 - if "%linkage%"=="Shared" (set shared=YES) else (set shared=NO) 31 - for /f "tokens=1-3 delims=-" %%a in ("%compiler%") do (@set "compiler_name=%%a") 32 - for /f "tokens=1-3 delims=-" %%a in ("%compiler%") do (@set "compiler_version=%%b") 33 - for /f "tokens=1-3 delims=-" %%a in ("%compiler%") do (@set "compiler_threading=%%c") 34 - if "%platform%"=="x64" (set arch=x86_64) 35 - if "%platform%"=="x86" (set arch=i686) 36 # download the specific version of MinGW 37 - if "%compiler_name%"=="gcc" (for /f %%a in ('python mingw.py --quiet --version "%compiler_version%" --arch "%arch%" --threading "%compiler_threading%" --location "C:\mingw-builds"') do @set "compiler_path=%%a") 38 39before_build: 40 # Set up mingw commands 41 - if "%compiler_name%"=="gcc" (set "generator=MinGW Makefiles") 42 - if "%compiler_name%"=="gcc" (set "build=mingw32-make -j4") 43 - if "%compiler_name%"=="gcc" (set "test=mingw32-make CTEST_OUTPUT_ON_FAILURE=1 test") 44 # msvc specific commands 45 - if "%compiler_name%"=="msvc" if "%compiler_version%"=="12" if "%platform%"=="x86" (set "generator=Visual Studio 12 2013") 46 - if "%compiler_name%"=="msvc" if "%compiler_version%"=="12" if "%platform%"=="x64" (set "generator=Visual Studio 12 2013 Win64") 47 - if "%compiler_name%"=="msvc" if "%compiler_version%"=="14" if "%platform%"=="x86" (set "generator=Visual Studio 14 2015") 48 - if "%compiler_name%"=="msvc" if "%compiler_version%"=="14" if "%platform%"=="x64" (set "generator=Visual Studio 14 2015 Win64") 49 - if "%compiler_name%"=="msvc" (set "build=cmake --build . --config %variant%") 50 - if "%compiler_name%"=="msvc" (set "test=ctest -c Release -D CTEST_OUTPUT_ON_FAILURE:STRING=1") 51 # add the compiler path if needed 52 - if not "%compiler_path%"=="" (set "PATH=%PATH%;%compiler_path%") 53 # git bash conflicts with MinGW makefiles 54 - if "%generator%"=="MinGW Makefiles" (set "PATH=%PATH:C:\Program Files\Git\usr\bin;=%") 55 56build_script: 57- ps: | 58 md _build -Force 59 cd _build 60 & cmake -G "$env:generator" "-DCMAKE_BUILD_TYPE=$env:variant" "-DBUILD_SHARED_LIBS=$env:shared" .. 61 if ($LastExitCode -ne 0) { 62 throw "Exec: $ErrorMessage" 63 } 64 iex "& $env:build" 65 if ($LastExitCode -ne 0) { 66 throw "Exec: $ErrorMessage" 67 } 68 69test_script: 70- ps: | 71 iex "& $env:test" 72 if ($LastExitCode -ne 0) { 73 throw "Exec: $ErrorMessage" 74 } 75 76 function Add-CTest-Result($testResult) 77 { 78 $tests = ([xml](get-content $testResult)).Site.Testing 79 $testsCount = 0 80 $anyFailures = $FALSE 81 82 foreach ($test in $tests.test) { 83 $testsCount++ 84 $testName = $test.Name 85 $testpath = $test.Path 86 $timeNode = $test.SelectSingleNode('Results/NamedMeasurement[@name="Execution Time"]/Value') 87 if ($test.status -eq "failure") { 88 $time = ([double]$timeNode.InnerText * 1000) 89 Add-AppveyorTest $testName -Outcome Failed -FileName $testpath -Duration $time -ErrorMessage $($test.results.measurement.value) 90 Add-AppveyorMessage `"$testName failed`" -Category Error 91 $anyFailures = $TRUE 92 } 93 elseif ($test.status -eq "skipped") { 94 Add-AppveyorTest $testName -Outcome Ignored -Filename $testpath 95 } 96 else { 97 $time = ([double]$timeNode.InnerText * 1000) 98 Add-AppveyorTest $testName -Outcome Passed -FileName $testpath -Duration $time -StdOut $($test.results.measurement.value) 99 } 100 } 101 return $testsCount, $anyFailures 102 } 103 104 $testsCount = 0 105 $anyFailures = $FALSE 106 107 # Run tests and upload results to AppVeyor one by one 108 Get-ChildItem ".\Testing\*.xml" -Recurse | foreach { 109 $testfile = $_.fullname 110 $count, $testsResult = Add-CTest-Result $testfile 111 Write-Host "Found $testfile with $count tests" 112 $testsCount = $testsCount + $count 113 $anyFailures = $anyFailures -or $testsResult 114 } 115 116 Write-Host "There are $testsCount tests found" 117 118 if ($anyFailures -eq $TRUE){ 119 Write-Host "Failing build as there are broken tests" 120 $host.SetShouldExit(1) 121 } 122 123matrix: 124 fast_finish: true 125 126cache: 127 - C:\mingw-builds 128