diff options
-rw-r--r-- | .appveyor/.gitattributes | 1 | ||||
-rw-r--r-- | .appveyor/build.ps1 | 131 | ||||
-rw-r--r-- | .appveyor/test.ps1 | 73 | ||||
-rw-r--r-- | appveyor.yml | 23 |
4 files changed, 228 insertions, 0 deletions
diff --git a/.appveyor/.gitattributes b/.appveyor/.gitattributes new file mode 100644 index 0000000..b086bda --- /dev/null +++ b/.appveyor/.gitattributes @@ -0,0 +1 @@ +*.ps1 text eol=crlf diff --git a/.appveyor/build.ps1 b/.appveyor/build.ps1 new file mode 100644 index 0000000..d6f80d0 --- /dev/null +++ b/.appveyor/build.ps1 @@ -0,0 +1,131 @@ +param( + [string] $BuildDir = $null, + [string] $ProjectDir = $null, + [string] $Platform = $null, + [string] $Generator = $null, + [string] $Configuration = $null, + [string] $BoostDir = $null, + [string] $BoostLibraryDir = $null +) + +$ErrorActionPreference = "Stop"; +Set-PSDebug -Strict + +function Invoke-Exe { + param( + [ScriptBlock] $Cmd, + [int[]] $AllowedExitCodes = @(0) + ) + + $backupErrorActionPreference = $script:ErrorActionPreference + $script:ErrorActionPreference = 'Continue' + + try { + & $Cmd + if ($AllowedExitCodes -notcontains $LastExitCode) { + throw "External command failed with exit code ${LastExitCode}: $Cmd" + } + } finally { + $script:ErrorActionPreference = $backupErrorActionPreference + } +} + +function Test-AppVeyor { + return Test-Path env:APPVEYOR +} + +function Format-AppVeyorBoostDir { + return "boost_" + $env:appveyor_boost_version.replace('.', '_') +} + +function Get-AppVeyorBoostDir { + return "C:\Libraries\$(Format-AppVeyorBoostDir)" +} + +function Get-AppVeyorBoostLibraryDir { + param( + [string] $Platform = $env:PLATFORM + ) + + $BoostDir = Get-AppVeyorBoostDir + + if ($Platform -eq 'x64') { + return "$BoostDir\lib64-msvc-14.2" + } else { + return "$BoostDir\lib32-msvc-14.2" + } +} + +function Set-AppVeyorDefaults { + $script:ProjectDir = $env:APPVEYOR_BUILD_FOLDER + $script:BuildDir = 'C:\Projects\build' + $script:Generator = switch ($env:APPVEYOR_BUILD_WORKER_IMAGE) { + 'Visual Studio 2019' { 'Visual Studio 16 2019' } + default { throw "Unsupported AppVeyor image: $env:APPVEYOR_BUILD_WORKER_IMAGE" } + } + $script:Platform = $env:PLATFORM + $script:Configuration = $env:CONFIGURATION + $script:BoostDir = Get-AppVeyorBoostDir + $script:BoostLibraryDir = Get-AppVeyorBoostLibraryDir -Platform $script:Platform +} + +function Build-Project { + param( + [Parameter(Mandatory=$true)] + [string] $ProjectDir, + [Parameter(Mandatory=$true)] + [string] $BuildDir, + [Parameter(Mandatory=$true)] + [string] $Generator, + [Parameter(Mandatory=$true)] + [string] $Platform, + [Parameter(Mandatory=$true)] + [string] $Configuration, + [Parameter(Mandatory=$true)] + [string] $BoostDir, + [string] $BoostLibraryDir = $null + ) + + if (-not $BoostLibraryDir) { + $BoostLibraryDir = "$BoostDir\stage\lib" + } + + mkdir $BuildDir + cd $BuildDir + + Invoke-Exe { cmake.exe -Wno-dev ` + -G $Generator -A $Platform ` + -D "BOOST_ROOT=$BoostDir" ` + -D "BOOST_LIBRARYDIR=$BoostLibraryDir" ` + -D Boost_USE_STATIC_LIBS=ON ` + -D Boost_USE_STATIC_RUNTIME=ON ` + $ProjectDir + } + + Invoke-Exe { cmake.exe --build . --config $Configuration -- /m } +} + +function Build-ProjectAppVeyor { + if (Test-AppVeyor) { + Set-AppVeyorDefaults + $appveyor_cwd = pwd + } + + try { + Build-Project ` + -ProjectDir $script:ProjectDir ` + -BuildDir $script:BuildDir ` + -Generator $script:Generator ` + -Platform $script:Platform ` + -Configuration $script:Configuration ` + -BoostDir $script:BoostDir ` + -BoostLibraryDir $script:BoostLibraryDir + } finally { + if (Test-AppVeyor) { + cd $appveyor_cwd + Set-PSDebug -Off + } + } +} + +Build-ProjectAppVeyor diff --git a/.appveyor/test.ps1 b/.appveyor/test.ps1 new file mode 100644 index 0000000..7701645 --- /dev/null +++ b/.appveyor/test.ps1 @@ -0,0 +1,73 @@ +param( + [string] $BuildDir = $null, + [string] $Platform = $null +) + +$ErrorActionPreference = "Stop"; +Set-PSDebug -Strict + +function Invoke-Exe { + param( + [ScriptBlock] $Cmd, + [int[]] $AllowedExitCodes = @(0) + ) + + $backupErrorActionPreference = $script:ErrorActionPreference + $script:ErrorActionPreference = 'Continue' + + try { + & $Cmd + if ($AllowedExitCodes -notcontains $LastExitCode) { + throw "External command failed with exit code ${LastExitCode}: $Cmd" + } + } finally { + $script:ErrorActionPreference = $backupErrorActionPreference + } +} + +function Test-AppVeyor { + return Test-Path env:APPVEYOR +} + +function Get-AppVeyorBuildDir { + return 'C:\Projects\build' +} + +function Set-AppVeyorDefaults { + $script:BuildDir = Get-AppVeyorBuildDir + $script:Configuration = $env:CONFIGURATION +} + +function Run-ProjectTests { + param( + [Parameter(Mandatory=$true)] + [string] $BuildDir, + [Parameter(Mandatory=$true)] + [string] $Configuration + ) + + $unit_tests_dir = "$BuildDir\test\unit_tests\$Configuration" + cd $unit_tests_dir + + Invoke-Exe { .\unit_tests.exe --log_level=all } +} + +function Run-ProjectTestsAppVeyor { + if (Test-AppVeyor) { + Set-AppVeyorDefaults + $appveyor_cwd = pwd + } + + try { + Run-ProjectTests ` + -BuildDir $script:BuildDir ` + -Configuration $script:Configuration + } finally { + if (Test-AppVeyor) { + cd $appveyor_cwd + Set-PSDebug -Off + } + } +} + +Run-ProjectTestsAppVeyor diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 0000000..efc1c28 --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,23 @@ +version: '{build}' + +image: Visual Studio 2019 + +platform: + - x64 + +configuration: + - Debug + - Release + +build_script: + - ps: .\.appveyor\build.ps1 + +test_script: + - ps: .\.appveyor\test.ps1 + +for: +- matrix: + only: + - image: Visual Studio 2019 + environment: + appveyor_boost_version: 1.71.0 |