| 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 |