rusqsieve 0.2.1

High-performance SIQS integer factorization for native Rust and WebAssembly
Documentation
[CmdletBinding()]
param(
    [string]$Prefix = $(if ($env:RUSQSIEVE_PREFIX) {
        $env:RUSQSIEVE_PREFIX
    } else {
        Join-Path $env:ProgramFiles "rusqsieve"
    }),
    [switch]$Elevated
)

$ErrorActionPreference = "Stop"
$sourceRoot = Split-Path -LiteralPath $PSCommandPath -Parent
$principal = [Security.Principal.WindowsPrincipal]::new(
    [Security.Principal.WindowsIdentity]::GetCurrent()
)
$isAdministrator = $principal.IsInRole(
    [Security.Principal.WindowsBuiltInRole]::Administrator
)

if (-not $isAdministrator) {
    if ($Elevated) {
        throw "Administrator access was requested but was not granted."
    }

    Write-Host "Administrator access is required to install under $Prefix."
    $arguments = @(
        "-NoLogo"
        "-NoProfile"
        "-ExecutionPolicy"
        "Bypass"
        "-File"
        "`"$PSCommandPath`""
        "-Elevated"
        "-Prefix"
        "`"$Prefix`""
    )
    $process = Start-Process `
        -FilePath "powershell.exe" `
        -ArgumentList $arguments `
        -Verb RunAs `
        -Wait `
        -PassThru
    exit $process.ExitCode
}

$binDir = Join-Path $Prefix "bin"
$libDir = Join-Path $Prefix "lib"
$includeDir = Join-Path $Prefix "include"
$pkgConfigDir = Join-Path $libDir "pkgconfig"

New-Item -ItemType Directory -Force -Path @(
    $binDir
    $libDir
    $includeDir
    $pkgConfigDir
) | Out-Null

Copy-Item -Force -Path (Join-Path $sourceRoot "bin\*") -Destination $binDir
Copy-Item -Force -Path (Join-Path $sourceRoot "lib\*.lib") -Destination $libDir
Copy-Item -Force `
    -LiteralPath (Join-Path $sourceRoot "include\rusqsieve.h") `
    -Destination $includeDir

$pcSource = Join-Path $sourceRoot "lib\pkgconfig\rusqsieve.pc"
$pcDestination = Join-Path $pkgConfigDir "rusqsieve.pc"
$pcPrefix = $Prefix.Replace("\", "/")
$pc = [IO.File]::ReadAllText($pcSource)
$pc = [Text.RegularExpressions.Regex]::Replace(
    $pc,
    "(?m)^prefix=.*$",
    "prefix=$pcPrefix"
)
[IO.File]::WriteAllText(
    $pcDestination,
    $pc,
    [Text.Encoding]::ASCII
)

Write-Host "Installed rusqsieve under $Prefix"
Write-Host "Add $binDir to PATH to run qs-factor from any command prompt."