version: '{build}' configuration: - Static Debug - Static Release # - Shared Debug # - Shared Release platform: - x86 - x64 environment: matrix: # - compiler: msvc-12-seh - compiler: msvc-14-seh - compiler: gcc-4.9.2-posix # - compiler: gcc-4.8.4-posix artifacts: - path: '_build/CMakeFiles/*.log' name: logs - path: '_build/Testing/**/*.xml' name: test_results install: # derive some extra information - for /f "tokens=1-2" %%a in ("%configuration%") do (@set "linkage=%%a") - for /f "tokens=1-2" %%a in ("%configuration%") do (@set "variant=%%b") - if "%linkage%"=="Shared" (set shared=YES) else (set shared=NO) - for /f "tokens=1-3 delims=-" %%a in ("%compiler%") do (@set "compiler_name=%%a") - for /f "tokens=1-3 delims=-" %%a in ("%compiler%") do (@set "compiler_version=%%b") - for /f "tokens=1-3 delims=-" %%a in ("%compiler%") do (@set "compiler_threading=%%c") - if "%platform%"=="x64" (set arch=x86_64) - if "%platform%"=="x86" (set arch=i686) # download the specific version of MinGW - 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") before_build: # Set up mingw commands - if "%compiler_name%"=="gcc" (set "generator=MinGW Makefiles") - if "%compiler_name%"=="gcc" (set "build=mingw32-make -j4") - if "%compiler_name%"=="gcc" (set "test=mingw32-make CTEST_OUTPUT_ON_FAILURE=1 test") # msvc specific commands - if "%compiler_name%"=="msvc" if "%compiler_version%"=="12" if "%platform%"=="x86" (set "generator=Visual Studio 12 2013") - if "%compiler_name%"=="msvc" if "%compiler_version%"=="12" if "%platform%"=="x64" (set "generator=Visual Studio 12 2013 Win64") - if "%compiler_name%"=="msvc" if "%compiler_version%"=="14" if "%platform%"=="x86" (set "generator=Visual Studio 14 2015") - if "%compiler_name%"=="msvc" if "%compiler_version%"=="14" if "%platform%"=="x64" (set "generator=Visual Studio 14 2015 Win64") - if "%compiler_name%"=="msvc" (set "build=cmake --build . --config %variant%") - if "%compiler_name%"=="msvc" (set "test=ctest -c Release -D CTEST_OUTPUT_ON_FAILURE:STRING=1") # add the compiler path if needed - if not "%compiler_path%"=="" (set "PATH=%PATH%;%compiler_path%") # git bash conflicts with MinGW makefiles - if "%generator%"=="MinGW Makefiles" (set "PATH=%PATH:C:\Program Files\Git\usr\bin;=%") build_script: - ps: | md _build -Force cd _build & cmake -G "$env:generator" "-DCMAKE_BUILD_TYPE=$env:variant" "-DBUILD_SHARED_LIBS=$env:shared" .. if ($LastExitCode -ne 0) { throw "Exec: $ErrorMessage" } iex "& $env:build" if ($LastExitCode -ne 0) { throw "Exec: $ErrorMessage" } test_script: - ps: | iex "& $env:test" if ($LastExitCode -ne 0) { throw "Exec: $ErrorMessage" } function Add-CTest-Result($testResult) { $tests = ([xml](get-content $testResult)).Site.Testing $testsCount = 0 $anyFailures = $FALSE foreach ($test in $tests.test) { $testsCount++ $testName = $test.Name $testpath = $test.Path $timeNode = $test.SelectSingleNode('Results/NamedMeasurement[@name="Execution Time"]/Value') if ($test.status -eq "failure") { $time = ([double]$timeNode.InnerText * 1000) Add-AppveyorTest $testName -Outcome Failed -FileName $testpath -Duration $time -ErrorMessage $($test.results.measurement.value) Add-AppveyorMessage `"$testName failed`" -Category Error $anyFailures = $TRUE } elseif ($test.status -eq "skipped") { Add-AppveyorTest $testName -Outcome Ignored -Filename $testpath } else { $time = ([double]$timeNode.InnerText * 1000) Add-AppveyorTest $testName -Outcome Passed -FileName $testpath -Duration $time -StdOut $($test.results.measurement.value) } } return $testsCount, $anyFailures } $testsCount = 0 $anyFailures = $FALSE # Run tests and upload results to AppVeyor one by one Get-ChildItem ".\Testing\*.xml" -Recurse | foreach { $testfile = $_.fullname $count, $testsResult = Add-CTest-Result $testfile Write-Host "Found $testfile with $count tests" $testsCount = $testsCount + $count $anyFailures = $anyFailures -or $testsResult } Write-Host "There are $testsCount tests found" if ($anyFailures -eq $TRUE){ Write-Host "Failing build as there are broken tests" $host.SetShouldExit(1) } matrix: fast_finish: true cache: - C:\mingw-builds