blob: a1fac41ad1b9f43d114a835b8d1b5522ea93fe66 (
plain) (
tree)
|
|
name: Build Boost
description: Download & build Boost
inputs:
version:
description: Version to build
required: true
libraries:
description: Space-separated list of libraries
required: true
toolset:
description: Toolset to use
required: false
default: auto
platform:
description: Target platform
required: false
default: x64
configuration:
description: Configuration to build
required: false
default: Release
static:
description: Build static libraries
required: false
default: 0
static-runtime:
description: Link to the static runtime
required: false
default: 0
directory:
description: Destination directory
required: false
outputs:
root:
description: Root Boost directory
value: '${{ steps.build.outputs.root }}'
librarydir:
description: Directory with built Boost libraries
value: '${{ steps.build.outputs.librarydir }}'
runs:
using: composite
steps:
- id: install
run: |
New-Variable os -Value '${{ runner.os }}' -Option Constant
New-Variable windows_host -Value ($os -eq 'Windows') -Option Constant
if (Get-Command python3 -ErrorAction SilentlyContinue) {
$python = @('python3')
} elseif (Get-Command py -ErrorAction SilentlyContinue) {
$python = @('py', '-3')
} elseif (Get-Command python -ErrorAction SilentlyContinue) {
$python = @('python')
} else {
echo @'
::error ::
egor-tensin/build-boost depends on a PyPI package, which requires Python 3.6 or later.
We couldn't find a Python installation in this environment.
'@
exit 1
}
$exe, $args = $python
& $exe $args -m pip install --user --upgrade cmake-common~=3.0
if ($windows_host) {
$bin_dir = & $exe $args -c "import sysconfig; print(sysconfig.get_path('scripts', 'nt_user'))"
} else {
$bin_dir = & $exe $args -c "import sysconfig; print(sysconfig.get_path('scripts', 'posix_user'))"
}
echo "bin_dir=$bin_dir" >> $env:GITHUB_OUTPUT
env:
PIP_NO_PYTHON_VERSION_WARNING: 1
PIP_DISABLE_PIP_VERSION_CHECK: 1
# This is hilarious: --no-warn-script-location is defined with
# action='store_false', which is why it's kind of inverted compared to
# the options above.
# https://github.com/pypa/pip/issues/5200
PIP_NO_WARN_SCRIPT_LOCATION: 0
shell: pwsh
- id: build
run: |
New-Variable os -Value '${{ runner.os }}' -Option Constant
New-Variable windows_host -Value ($os -eq 'Windows') -Option Constant
New-Variable macos_host -Value ($os -eq 'macOS') -Option Constant
New-Variable base_dir -Value '${{ runner.workspace }}' -Option Constant
New-Variable version -Value '${{ inputs.version }}' -Option Constant
New-Variable toolset -Value '${{ inputs.toolset }}' -Option Constant
New-Variable platform -Value '${{ inputs.platform }}' -Option Constant
New-Variable configuration -Value '${{ inputs.configuration }}' -Option Constant
New-Variable static -Value ('${{ inputs.static }}' -eq '1') -Option Constant
New-Variable static_runtime -Value ('${{ inputs.static-runtime }}' -eq '1') -Option Constant
$boost_dir = '${{ inputs.directory }}'
if (-not $boost_dir) {
$boost_dir = Join-Path $base_dir boost
}
$libraries = '${{ inputs.libraries }}'
$libraries = $libraries.Split(' ', [System.StringSplitOptions]::RemoveEmptyEntries)
if (-not $libraries) {
echo @'
::warning ::
No Boost libraries were explicitly selected for building, going to try to build them all.
This is likely to fail.
'@
}
$libraries = $libraries | %{"--with-$_"}
$bin_dir = '${{ steps.install.outputs.bin_dir }}'
$path_sep = [IO.Path]::PathSeparator
$env:Path = "$bin_dir$path_sep$env:PATH"
$link = if ($static) {'static'} else {'shared'}
$runtime_link = if ($static_runtime) {'static'} else {'shared'}
if ($macos_host) {
# This is pure insanity. For some reason, the Python's bin/
# directory is in Path, but not in PATH (found out using echo)!
# Every person responsible for this mess is insane.
$env:PATH = $env:Path
}
boost-download --cache $base_dir -- $version $boost_dir
boost-build `
--toolset $toolset `
--platform $platform `
--configuration $configuration `
--link $link `
--runtime-link $runtime_link `
-- `
$boost_dir `
$libraries
$platformdir = $platform
if ($platformdir -eq 'auto' -and $windows_host) {
$platformdir = 'x64'
}
$librarydir = Join-Path $boost_dir 'stage' $platformdir $configuration 'lib'
echo "root=$boost_dir" >> $env:GITHUB_OUTPUT
echo "librarydir=$librarydir" >> $env:GITHUB_OUTPUT
shell: pwsh
branding:
icon: star
color: green
|