01_install_dependencies.ps1 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  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. curl.exe -Lf "https://github.com/obsproject/obs-deps/releases/download/${Version}/windows-deps-${Version}-${ArchSuffix}.zip" -o "windows-deps-${Version}-${ArchSuffix}.zip" $(if ($Quiet.isPresent) { "-s" })
  28. Write-Step "Unpack..."
  29. Expand-Archive -Path "windows-deps-${Version}-${ArchSuffix}.zip" -DestinationPath "${DepsBuildDir}/windows-deps-${Version}-${ArchSuffix}" -Force
  30. } else {
  31. Write-Step "Found existing pre-built dependencies..."
  32. }
  33. }
  34. function Install-qt-deps {
  35. Param(
  36. [Parameter(Mandatory=$true)]
  37. [String]$Version
  38. )
  39. Write-Status "Setup for pre-built dependency Qt v${Version}"
  40. Ensure-Directory $DepsBuildDir
  41. $ArchSuffix = $BuildArch
  42. if (!(Test-Path "${DepsBuildDir}/windows-deps-${Version}-${ArchSuffix}/mkspecs")) {
  43. Write-Step "Download..."
  44. curl.exe -Lf "https://github.com/obsproject/obs-deps/releases/download/${Version}/windows-deps-qt6-${Version}-${ArchSuffix}.zip" -o "windows-deps-qt6-${Version}-${ArchSuffix}.zip" $(if ($Quiet.isPresent) { "-s" })
  45. Write-Step "Unpack..."
  46. Expand-Archive -Path "windows-deps-qt6-${Version}-${ArchSuffix}.zip" -DestinationPath "${DepsBuildDir}/windows-deps-${Version}-${ArchSuffix}" -Force
  47. } else {
  48. Write-Step "Found existing pre-built Qt..."
  49. }
  50. }
  51. function Install-vlc {
  52. Param(
  53. [Parameter(Mandatory=$true)]
  54. [String]$Version
  55. )
  56. Write-Status "Setup for dependency VLC v${Version}"
  57. Ensure-Directory $DepsBuildDir
  58. if (!((Test-Path "$DepsBuildDir/vlc-${Version}") -and (Test-Path "$DepsBuildDir/vlc-${Version}/include/vlc/vlc.h"))) {
  59. Write-Step "Download..."
  60. curl.exe -Lf "https://cdn-fastly.obsproject.com/downloads/vlc.zip" -o "vlc_${Version}.zip" $(if ($Quiet.isPresent) { "-s" })
  61. Write-Step "Unpack..."
  62. # Expand-Archive -Path "vlc_${Version}.zip"
  63. Invoke-Expression "7z x vlc_${Version}.zip -ovlc"
  64. Move-Item -Path vlc -Destination "vlc-${Version}"
  65. } else {
  66. Write-Step "Found existing VLC..."
  67. }
  68. }
  69. function Install-cef {
  70. Param(
  71. [Parameter(Mandatory=$true)]
  72. [String]$Version
  73. )
  74. Write-Status "Setup for dependency CEF v${Version} - ${BuildArch}"
  75. Ensure-Directory $DepsBuildDir
  76. $ArchSuffix = $BuildArch
  77. 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"))) {
  78. Write-Step "Download..."
  79. curl.exe -Lf "https://cdn-fastly.obsproject.com/downloads/cef_binary_${Version}_windows_${ArchSuffix}.zip" -o "cef_binary_${Version}_windows_${ArchSuffix}.zip" $(if ($Quiet.isPresent) { "-s" })
  80. Write-Step "Unpack..."
  81. Expand-Archive -Path "cef_binary_${Version}_windows_${ArchSuffix}.zip" -Force
  82. } else {
  83. Write-Step "Found existing CEF framework and loader library..."
  84. }
  85. }
  86. function Install-Dependencies {
  87. Param(
  88. [String]$BuildArch = $(if (Test-Path variable:BuildArch) { "${BuildArch}" })
  89. )
  90. Install-Windows-Dependencies
  91. $BuildDependencies = @(
  92. @('obs-deps', $WindowsDepsVersion),
  93. @('qt-deps', $WindowsDepsVersion),
  94. @('vlc', $WindowsVlcVersion),
  95. @('cef', $WindowsCefVersion)
  96. )
  97. Foreach($Dependency in ${BuildDependencies}) {
  98. $DependencyName = $Dependency[0]
  99. $DependencyVersion = $Dependency[1]
  100. $FunctionName = "Install-${DependencyName}"
  101. Invoke-Expression "${FunctionName} -Version ${DependencyVersion}"
  102. }
  103. Ensure-Directory ${CheckoutDir}
  104. }
  105. function Install-Dependencies-Standalone {
  106. $ProductName = "OBS-Studio"
  107. $CheckoutDir = Resolve-Path -Path "$PSScriptRoot\..\.."
  108. $DepsBuildDir = "${CheckoutDir}/../obs-build-dependencies"
  109. $ObsBuildDir = "${CheckoutDir}/../obs-studio"
  110. . ${CheckoutDir}/CI/include/build_support_windows.ps1
  111. Write-Status "Setup of OBS build dependencies"
  112. Install-Dependencies
  113. }
  114. function Print-Usage {
  115. $Lines = @(
  116. "Usage: ${_ScriptName}",
  117. "-Help : Print this help",
  118. "-Quiet : Suppress most build process output",
  119. "-Verbose : Enable more verbose build process output",
  120. "-Choco : Enable automatic dependency installation via Chocolatey - Default: off"
  121. "-BuildArch : Build architecture to use (x86 or x64) - Default: local architecture"
  122. )
  123. $Lines | Write-Host
  124. }
  125. if(!(Test-Path variable:_RunObsBuildScript)) {
  126. $_ScriptName = "$($MyInvocation.MyCommand.Name)"
  127. if($Help.isPresent) {
  128. Print-Usage
  129. exit 0
  130. }
  131. Install-Dependencies-Standalone
  132. }