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