mirror of
				https://github.com/ossrs/srs.git
				synced 2025-03-09 15:49:59 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			131 lines
		
	
	
	
		
			3.9 KiB
		
	
	
	
		
			PowerShell
		
	
	
	
	
	
			
		
		
	
	
			131 lines
		
	
	
	
		
			3.9 KiB
		
	
	
	
		
			PowerShell
		
	
	
	
	
	
# SRT library download and install for Windows.
 | 
						|
# Copyright (c) 2021, Thierry Lelegard
 | 
						|
# All rights reserved.
 | 
						|
 | 
						|
<#
 | 
						|
 .SYNOPSIS
 | 
						|
 | 
						|
  Download and install the libsrt library for Windows. This script is
 | 
						|
  provided to automate the build of Windows applications using libsrt.
 | 
						|
 | 
						|
 .PARAMETER Destination
 | 
						|
 | 
						|
  Specify a local directory where the libsrt package will be downloaded.
 | 
						|
  By default, use "tmp" subdirectory from this script.
 | 
						|
 | 
						|
 .PARAMETER ForceDownload
 | 
						|
 | 
						|
  Force a download even if the package is already downloaded.
 | 
						|
 | 
						|
 .PARAMETER GitHubActions
 | 
						|
 | 
						|
  When used in a GitHub Actions workflow, make sure that the LIBSRT
 | 
						|
  environment variable is propagated to subsequent jobs.
 | 
						|
 | 
						|
 .PARAMETER NoInstall
 | 
						|
 | 
						|
  Do not install the package. By default, libsrt is installed.
 | 
						|
 | 
						|
 .PARAMETER NoPause
 | 
						|
 | 
						|
  Do not wait for the user to press <enter> at end of execution. By default,
 | 
						|
  execute a "pause" instruction at the end of execution, which is useful
 | 
						|
  when the script was run from Windows Explorer.
 | 
						|
#>
 | 
						|
[CmdletBinding(SupportsShouldProcess=$true)]
 | 
						|
param(
 | 
						|
    [string]$Destination = "",
 | 
						|
    [switch]$ForceDownload = $false,
 | 
						|
    [switch]$GitHubActions = $false,
 | 
						|
    [switch]$NoInstall = $false,
 | 
						|
    [switch]$NoPause = $false
 | 
						|
)
 | 
						|
 | 
						|
Write-Output "libsrt download and installation procedure"
 | 
						|
 | 
						|
# Default directory for downloaded products.
 | 
						|
if (-not $Destination) {
 | 
						|
    $Destination = "$PSScriptRoot\tmp"
 | 
						|
}
 | 
						|
 | 
						|
# A function to exit this script.
 | 
						|
function Exit-Script([string]$Message = "")
 | 
						|
{
 | 
						|
    $Code = 0
 | 
						|
    if ($Message -ne "") {
 | 
						|
        Write-Output "ERROR: $Message"
 | 
						|
        $Code = 1
 | 
						|
    }
 | 
						|
    if (-not $NoPause) {
 | 
						|
        pause
 | 
						|
    }
 | 
						|
    exit $Code
 | 
						|
}
 | 
						|
 | 
						|
# Without this, Invoke-WebRequest is awfully slow.
 | 
						|
$ProgressPreference = 'SilentlyContinue'
 | 
						|
 | 
						|
# Get the URL of the latest libsrt installer.
 | 
						|
$URL = (Invoke-RestMethod "https://api.github.com/repos/Haivision/srt/releases?per_page=20" |
 | 
						|
        ForEach-Object { $_.assets } |
 | 
						|
        ForEach-Object { $_.browser_download_url } |
 | 
						|
        Select-String @("/libsrt-.*\.exe$", "/libsrt-.*-win-installer\.zip$") |
 | 
						|
        Select-Object -First 1)
 | 
						|
 | 
						|
if (-not $URL) {
 | 
						|
    Exit-Script "Could not find a libsrt installer on GitHub"
 | 
						|
}
 | 
						|
if (-not ($URL -match "\.zip$") -and -not ($URL -match "\.exe$")) {
 | 
						|
    Exit-Script "Unexpected URL, not .exe, not .zip: $URL"
 | 
						|
}
 | 
						|
 | 
						|
# Installer name and path.
 | 
						|
$InstName = (Split-Path -Leaf $URL)
 | 
						|
$InstPath = "$Destination\$InstName"
 | 
						|
 | 
						|
# Create the directory for downloaded products when necessary.
 | 
						|
[void](New-Item -Path $Destination -ItemType Directory -Force)
 | 
						|
 | 
						|
# Download installer
 | 
						|
if (-not $ForceDownload -and (Test-Path $InstPath)) {
 | 
						|
    Write-Output "$InstName already downloaded, use -ForceDownload to download again"
 | 
						|
}
 | 
						|
else {
 | 
						|
    Write-Output "Downloading $URL ..."
 | 
						|
    Invoke-WebRequest $URL.ToString() -UseBasicParsing -UserAgent Download -OutFile $InstPath
 | 
						|
    if (-not (Test-Path $InstPath)) {
 | 
						|
        Exit-Script "$URL download failed"
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
# If installer is an archive, expect an exe with same name inside.
 | 
						|
if ($InstName -match "\.zip$") {
 | 
						|
 | 
						|
    # Expected installer name in archive.
 | 
						|
    $ZipName = $InstName
 | 
						|
    $ZipPath = $InstPath
 | 
						|
    $InstName = $ZipName -replace '-win-installer.zip','.exe'
 | 
						|
    $InstPath = "$Destination\$InstName"
 | 
						|
 | 
						|
    # Extract the installer.
 | 
						|
    Remove-Item -Force $InstPath -ErrorAction SilentlyContinue
 | 
						|
    Write-Output "Expanding $ZipName ..."
 | 
						|
    Expand-Archive $ZipPath -DestinationPath $Destination
 | 
						|
    if (-not (Test-Path $InstPath)) {
 | 
						|
        Exit-Script "$InstName not found in $ZipName"
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
# Install libsrt
 | 
						|
if (-not $NoInstall) {
 | 
						|
    Write-Output "Installing $InstName"
 | 
						|
    Start-Process -FilePath $InstPath -ArgumentList @("/S") -Wait
 | 
						|
}
 | 
						|
 | 
						|
# Propagate LIBSRT in next jobs for GitHub Actions.
 | 
						|
if ($GitHubActions -and (-not -not $env:GITHUB_ENV) -and (Test-Path $env:GITHUB_ENV)) {
 | 
						|
    $libsrt = [System.Environment]::GetEnvironmentVariable("LIBSRT","Machine")
 | 
						|
    Write-Output "LIBSRT=$libsrt" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
 | 
						|
}
 | 
						|
 | 
						|
Exit-Script
 |