01_install_dependencies.ps1 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. Param(
  2. [Switch]$Help = $(if (Test-Path variable:Help) { $Help }),
  3. [Switch]$Quiet = $(if (Test-Path variable:Quiet) { $Quiet }),
  4. [Switch]$Verbose = $(if (Test-Path variable:Verbose) { $Verbose }),
  5. [ValidateSet('x86', 'x64')]
  6. [String]$BuildArch = $(if (Test-Path variable:BuildArch) { "${BuildArch}" } else { ('x86', 'x64')[[System.Environment]::Is64BitOperatingSystem] })
  7. )
  8. ##############################################################################
  9. # Windows dependency management function
  10. ##############################################################################
  11. #
  12. # This script file can be included in build scripts for Windows or run
  13. # directly
  14. #
  15. ##############################################################################
  16. $ErrorActionPreference = "Stop"
  17. Function Install-obs-deps {
  18. Param(
  19. [Parameter(Mandatory=$true)]
  20. [String]$Version
  21. )
  22. Write-Status "Setup for pre-built Windows OBS dependencies v${Version}"
  23. Ensure-Directory $DepsBuildDir
  24. $ArchSuffix = $BuildArch
  25. if (!(Test-Path "${DepsBuildDir}/windows-deps-${Version}-${ArchSuffix}")) {
  26. Write-Step "Download..."
  27. $ProgressPreference = $(if ($Quiet.isPresent) { "SilentlyContinue" } else { "Continue" })
  28. Invoke-WebRequest -Uri "https://github.com/obsproject/obs-deps/releases/download/win-${Version}/windows-deps-${Version}-${ArchSuffix}.zip" -UseBasicParsing -OutFile "windows-deps-${Version}-${ArchSuffix}.zip"
  29. $ProgressPreference = "Continue"
  30. Write-Step "Unpack..."
  31. Expand-Archive -Path "windows-deps-${Version}-${ArchSuffix}.zip" -DestinationPath "${DepsBuildDir}/windows-deps-${Version}-${ArchSuffix}" -Force
  32. } else {
  33. Write-Step "Found existing pre-built dependencies..."
  34. }
  35. }
  36. function Install-qt-deps {
  37. Param(
  38. [Parameter(Mandatory=$true)]
  39. [String]$Version
  40. )
  41. Write-Status "Setup for pre-built dependency Qt v${Version}"
  42. Ensure-Directory $DepsBuildDir
  43. $ArchSuffix = $BuildArch
  44. if (!(Test-Path "${DepsBuildDir}/windows-deps-${Version}-${ArchSuffix}/mkspecs")) {
  45. Write-Step "Download..."
  46. $ProgressPreference = $(if ($Quiet.isPresent) { 'SilentlyContinue' } else { 'Continue' })
  47. Invoke-WebRequest -Uri "https://cdn-fastly.obsproject.com/downloads/windows-deps-qt-${Version}-${ArchSuffix}.zip" -UseBasicParsing -OutFile "windows-deps-qt-${Version}-${ArchSuffix}.zip"
  48. $ProgressPreference = "Continue"
  49. Write-Step "Unpack..."
  50. Expand-Archive -Path "windows-deps-qt-${Version}-${ArchSuffix}.zip" -DestinationPath "${DepsBuildDir}/windows-deps-${Version}-${ArchSuffix}" -Force
  51. } else {
  52. Write-Step "Found existing pre-built Qt..."
  53. }
  54. }
  55. function Install-vlc {
  56. Param(
  57. [Parameter(Mandatory=$true)]
  58. [String]$Version
  59. )
  60. Write-Status "Setup for dependency VLC v${Version}"
  61. Ensure-Directory $DepsBuildDir
  62. if (!((Test-Path "$DepsBuildDir/vlc-${Version}") -and (Test-Path "$DepsBuildDir/vlc-${Version}/include/vlc/vlc.h"))) {
  63. Write-Step "Download..."
  64. $ProgressPreference = $(if ($Quiet.isPresent) { 'SilentlyContinue' } else { 'Continue' })
  65. Invoke-WebRequest -Uri "https://cdn-fastly.obsproject.com/downloads/vlc.zip" -UseBasicParsing -OutFile "vlc_${Version}.zip"
  66. $ProgressPreference = "Continue"
  67. Write-Step "Unpack..."
  68. # Expand-Archive -Path "vlc_${Version}.zip"
  69. Invoke-Expression "7z x vlc_${Version}.zip -ovlc"
  70. Move-Item -Path vlc -Destination "vlc-${Version}"
  71. } else {
  72. Write-Step "Found existing VLC..."
  73. }
  74. }
  75. function Install-cef {
  76. Param(
  77. [Parameter(Mandatory=$true)]
  78. [String]$Version
  79. )
  80. Write-Status "Setup for dependency CEF v${Version} - ${BuildArch}"
  81. Ensure-Directory $DepsBuildDir
  82. $ArchSuffix = $BuildArch
  83. if (!((Test-Path "${DepsBuildDir}/cef_binary_${Version}_windows_${ArchSuffix}") -and (Test-Path "${DepsBuildDir}/cef_binary_${Version}_windows_${ArchSuffix}/build/libcef_dll_wrapper/Release/libcef_dll_wrapper.lib"))) {
  84. Write-Step "Download..."
  85. $ProgressPreference = $(if ($Quiet.isPresent) { 'SilentlyContinue' } else { 'Continue' })
  86. Invoke-WebRequest -Uri "https://cdn-fastly.obsproject.com/downloads/cef_binary_${Version}_windows_${ArchSuffix}.zip" -UseBasicParsing -OutFile "cef_binary_${Version}_windows_${ArchSuffix}.zip"
  87. $ProgressPreference = "Continue"
  88. Write-Step "Unpack..."
  89. Expand-Archive -Path "cef_binary_${Version}_windows_${ArchSuffix}.zip" -Force
  90. } else {
  91. Write-Step "Found existing CEF framework and loader library..."
  92. }
  93. }
  94. function Install-Dependencies {
  95. Param(
  96. [String]$BuildArch = $(if (Test-Path variable:BuildArch) { "${BuildArch}" })
  97. )
  98. Install-Windows-Dependencies
  99. $BuildDependencies = @(
  100. @('obs-deps', $WindowsDepsVersion),
  101. @('qt-deps', $WindowsDepsVersion),
  102. @('vlc', $WindowsVlcVersion),
  103. @('cef', $WindowsCefVersion)
  104. )
  105. Foreach($Dependency in ${BuildDependencies}) {
  106. $DependencyName = $Dependency[0]
  107. $DependencyVersion = $Dependency[1]
  108. $FunctionName = "Install-${DependencyName}"
  109. Invoke-Expression "${FunctionName} -Version ${DependencyVersion}"
  110. }
  111. Ensure-Directory ${CheckoutDir}
  112. }
  113. function Install-Dependencies-Standalone {
  114. $ProductName = "OBS-Studio"
  115. $CheckoutDir = Resolve-Path -Path "$PSScriptRoot\..\.."
  116. $DepsBuildDir = "${CheckoutDir}/../obs-build-dependencies"
  117. $ObsBuildDir = "${CheckoutDir}/../obs-studio"
  118. . ${CheckoutDir}/CI/include/build_support_windows.ps1
  119. Write-Status "Setup of OBS build dependencies"
  120. Install-Dependencies
  121. }
  122. function Print-Usage {
  123. $Lines = @(
  124. "Usage: ${_ScriptName}",
  125. "-Help : Print this help",
  126. "-Quiet : Suppress most build process output",
  127. "-Verbose : Enable more verbose build process output",
  128. "-Choco : Enable automatic dependency installation via Chocolatey - Default: off"
  129. "-BuildArch : Build architecture to use (x86 or x64) - Default: local architecture"
  130. )
  131. $Lines | Write-Host
  132. }
  133. if(!(Test-Path variable:_RunObsBuildScript)) {
  134. $_ScriptName = "$($MyInvocation.MyCommand.Name)"
  135. if($Help.isPresent) {
  136. Print-Usage
  137. exit 0
  138. }
  139. Install-Dependencies-Standalone
  140. }