|
| 1 | +# Extract POV-Ray version information from `source/base/version.h` |
| 2 | +# |
| 3 | +# From PowerShell scripts, run as follows: |
| 4 | +# |
| 5 | +# Set-ExecutionPolicy remotesigned -scope process -force |
| 6 | +# ./tools/windows/get-source-version.ps1 ./source/base/version.h |
| 7 | +# |
| 8 | +# From batch files, run as follows: |
| 9 | +# |
| 10 | +# powershell -executionpolicy remotesigned -File ./tools/windows/get-source-version.ps1 ./source/base/version.h -bat version~.bat |
| 11 | +# call version~.bat |
| 12 | +# del version~.bat |
| 13 | +# |
| 14 | +# Both procedures will cause the following envionment variables to be set: |
| 15 | +# |
| 16 | +# POV_SOURCE_GENERATION First two fields of the version string (`X.Y`) |
| 17 | +# POV_SOURCE_VERSION Full version string (`X.Y.Z`[`.P`][`-PRE`]) |
| 18 | +# POV_SOURCE_PRERELEASE Pre-release tag portion of the version string (`PRE`), or empty[*] if not applicable |
| 19 | +# |
| 20 | +# [*In the batch version of the procedure, empty environment variables will be left undefined.] |
| 21 | + |
| 22 | +param ([string]$version_h, [string]$bat) |
| 23 | + |
| 24 | +function GetNumericMacro ([string]$file, [string]$macro) { |
| 25 | + $regexp = '^\s*#define\s+' + $macro + '\s+[0-9]+\s*$' |
| 26 | + $line = ( select-string -Path $file -Pattern $regexp | % { $_.Matches } | % { $_.Value } ) |
| 27 | + $string = ( select-string -InputObject $line -Pattern '\s+[0-9]+' | % { $_.Matches } | % { $_.Value } ) |
| 28 | + $value = ( select-string -InputObject $string -Pattern '[0-9]+' | % { $_.Matches } | % { $_.Value } ) |
| 29 | + return [string]$value |
| 30 | +} |
| 31 | + |
| 32 | +function GetStringMacro ([string]$file, [string]$macro) { |
| 33 | + $regexp = '^\s*#define\s+' + $macro + '\s*"[^"]+"\s*$' |
| 34 | + $line = ( select-string -Path $file -Pattern $regexp | % { $_.Matches } | % { $_.Value } ) |
| 35 | + $string = ( select-string -InputObject $line -Pattern '"[^"]+"' | % { $_.Matches } | % { $_.Value } ) |
| 36 | + $value = ( select-string -InputObject $string -Pattern '[^"]+' | % { $_.Matches } | % { $_.Value } ) |
| 37 | + return [string]$value |
| 38 | +} |
| 39 | + |
| 40 | +$major = GetNumericMacro $version_h 'POV_RAY_MAJOR_VERSION_INT' |
| 41 | +$minor = GetNumericMacro $version_h 'POV_RAY_MINOR_VERSION_INT' |
| 42 | +$revision = GetNumericMacro $version_h 'POV_RAY_REVISION_INT' |
| 43 | +$patchlevel = GetNumericMacro $version_h 'POV_RAY_PATCHLEVEL_INT' |
| 44 | + |
| 45 | +$prerelease = GetStringMacro $version_h 'POV_RAY_PRERELEASE' |
| 46 | + |
| 47 | +$generation = $major + "." + $minor |
| 48 | +if ([int]$patchlevel -eq 0) { |
| 49 | + $release = $generation + "." + $revision |
| 50 | +} else { |
| 51 | + $release = $generation + "." + $revision + "." + $patchlevel |
| 52 | +} |
| 53 | +if ($prerelease) { |
| 54 | + $version = $release + '-' + $prerelease |
| 55 | +} else { |
| 56 | + $version = $release |
| 57 | +} |
| 58 | + |
| 59 | +$env:POV_SOURCE_GENERATION = $generation |
| 60 | +$env:POV_SOURCE_VERSION = $version |
| 61 | +$env:POV_SOURCE_PRERELEASE = $prerelease |
| 62 | + |
| 63 | +if ($bat) { |
| 64 | + $text = "set POV_SOURCE_GENERATION=" + $env:POV_SOURCE_GENERATION + "`n" |
| 65 | + $text += "set POV_SOURCE_VERSION=" + $env:POV_SOURCE_VERSION + "`n" |
| 66 | + $text += "set POV_SOURCE_PRERELEASE=" + $env:POV_SOURCE_PRERELEASE + "`n" |
| 67 | + Out-File -LiteralPath $bat -Encoding ASCII -InputObject $text -NoNewline |
| 68 | +} |
0 commit comments