03_package_obs.ps1 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  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. [Switch]$BuildInstaller = $(if ($BuildInstaller.isPresent) { $BuildInstaller }),
  6. [Switch]$CombinedArchs = $(if ($CombinedArchs.isPresent) { $CombinedArchs }),
  7. [String]$BuildDirectory = $(if (Test-Path variable:BuildDirectory) { "${BuildDirectory}" } else { "build" }),
  8. [ValidateSet('x86', 'x64')]
  9. [String]$BuildArch = $(if (Test-Path variable:BuildArch) { "${BuildArch}" } else { ('x86', 'x64')[[System.Environment]::Is64BitOperatingSystem] }),
  10. [ValidateSet("Release", "RelWithDebInfo", "MinSizeRel", "Debug")]
  11. [String]$BuildConfiguration = $(if (Test-Path variable:BuildConfiguration) { "${BuildConfiguration}" } else { "RelWithDebInfo" })
  12. )
  13. ##############################################################################
  14. # Windows OBS package function
  15. ##############################################################################
  16. #
  17. # This script file can be included in build scripts for Windows or run
  18. # directly
  19. #
  20. ##############################################################################
  21. $ErrorActionPreference = "Stop"
  22. function Package-OBS {
  23. Param(
  24. [String]$BuildDirectory = $(if (Test-Path variable:BuildDirectory) { "${BuildDirectory}" }),
  25. [String]$BuildArch = $(if (Test-Path variable:BuildArch) { "${BuildArch}" }),
  26. [String]$BuildConfiguration = $(if (Test-Path variable:BuildConfiguration) { "${BuildConfiguration}" })
  27. )
  28. Write-Status "Package plugin ${ProductName}"
  29. Ensure-Directory ${CheckoutDir}
  30. if ($CombinedArchs.isPresent) {
  31. if (!(Test-Path env:obsInstallerTempDir)) {
  32. $Env:obsInstallerTempDir = "${CheckoutDir}/install_temp"
  33. }
  34. if (!(Test-Path ${CheckoutDir}/install_temp/bin/64bit)) {
  35. Write-Step "Build 64-bit OBS..."
  36. Invoke-Expression "cmake -S . -B `"${BuildDirectory}64`" -DCOPIED_DEPENDENCIES=OFF -DCOPY_DEPENDENCIES=ON"
  37. Invoke-Expression "cmake --build `"${BuildDirectory}64`" --config `"${BuildConfiguration}`""
  38. }
  39. if (!(Test-Path ${CheckoutDir}/install_temp/bin/32bit)) {
  40. Write-Step "Build 32-bit OBS..."
  41. Invoke-Expression "cmake -S . -B `"${BuildDirectory}32`" -DCOPIED_DEPENDENCIES=OFF -DCOPY_DEPENDENCIES=ON"
  42. Invoke-Expression "cmake --build `"${BuildDirectory}32`" --config `"${BuildConfiguration}`""
  43. }
  44. Write-Step "Prepare Installer run..."
  45. Invoke-Expression "cmake -S . -B build -DINSTALLER_RUN=ON -DCMAKE_INSTALL_PREFIX=`"${CheckoutDir}/build/install`""
  46. Write-Step "Execute Installer run..."
  47. Invoke-Expression "cmake --build build --config `"${BuildConfiguration}`" -t install"
  48. $CompressVars = @{
  49. Path = "${CheckoutDir}/build/install/*"
  50. CompressionLevel = "Optimal"
  51. DestinationPath = "${FileName}-x86+x64.zip"
  52. }
  53. Write-Step "Creating zip archive..."
  54. $ProgressPreference = $(if ($Quiet.isPresent) { 'SilentlyContinue' } else { 'Continue' })
  55. Compress-Archive -Force @CompressVars
  56. $ProgressPreference = 'Continue'
  57. } elseif ($BuildArch -eq "x64") {
  58. Write-Step "Install 64-bit OBS..."
  59. Invoke-Expression "cmake --build `"${BuildDirectory}64`" --config ${BuildConfiguration} -t install"
  60. $CompressVars = @{
  61. Path = "${CheckoutDir}/build64/install/bin", "${CheckoutDir}/build64/install/data", "${CheckoutDir}/build64/install/obs-plugins"
  62. CompressionLevel = "Optimal"
  63. DestinationPath = "${FileName}-x64.zip"
  64. }
  65. Write-Step "Creating zip archive..."
  66. $ProgressPreference = $(if ($Quiet.isPresent) { 'SilentlyContinue' } else { 'Continue' })
  67. Compress-Archive -Force @CompressVars
  68. $ProgressPreference = 'Continue'
  69. } elseif ($BuildArch -eq "x86") {
  70. Write-Step "Install 32-bit OBS..."
  71. Invoke-Expression "cmake --build `"${BuildDirectory}32`" --config ${BuildConfiguration} -t install"
  72. $CompressVars = @{
  73. Path = "${CheckoutDir}/build32/install/bin", "${CheckoutDir}/build32/install/data", "${CheckoutDir}/build32/install/obs-plugins"
  74. CompressionLevel = "Optimal"
  75. DestinationPath = "${FileName}-x86.zip"
  76. }
  77. Write-Step "Creating zip archive..."
  78. $ProgressPreference = $(if ($Quiet.isPresent) { 'SilentlyContinue' } else { 'Continue' })
  79. Compress-Archive -Force @CompressVars
  80. $ProgressPreference = 'Continue'
  81. }
  82. }
  83. function Package-OBS-Standalone {
  84. $ProductName = "OBS-Studio"
  85. $CheckoutDir = Resolve-Path -Path "$PSScriptRoot\..\.."
  86. . ${CheckoutDir}/CI/include/build_support_windows.ps1
  87. if (!(Test-Path Env:CI)) {
  88. Write-Step "Fetch OBS tags..."
  89. $null = git fetch --tags origin
  90. }
  91. Ensure-Directory ${CheckoutDir}
  92. $GitBranch = git rev-parse --abbrev-ref HEAD
  93. $GitHash = git rev-parse --short=9 HEAD
  94. $ErrorActionPreference = "SilentlyContinue"
  95. $GitTag = git describe --tags --abbrev=0
  96. $ErrorActionPreference = "Stop"
  97. if(Test-Path variable:BUILD_FOR_DISTRIBUTION) {
  98. $VersionString = "${GitTag}"
  99. } else {
  100. $VersionString = "${GitTag}-${GitHash}"
  101. }
  102. $FileName = "obs-studio-${VersionString}-windows"
  103. Package-OBS
  104. }
  105. function Print-Usage {
  106. $Lines = @(
  107. "Usage: ${_ScriptName}",
  108. "-Help : Print this help",
  109. "-Quiet : Suppress most build process output",
  110. "-Verbose : Enable more verbose build process output",
  111. "-CombinedArchs : Create combined architecture package",
  112. "-BuildDirectory : Directory to use for builds - Default: build64 on 64-bit systems, build32 on 32-bit systems",
  113. "-BuildArch : Build architecture to use (x86 or x64) - Default: local architecture",
  114. "-BuildConfiguration : Build configuration to use - Default: RelWithDebInfo"
  115. )
  116. $Lines | Write-Host
  117. }
  118. if(!(Test-Path variable:_RunObsBuildScript)) {
  119. $_ScriptName = "$($MyInvocation.MyCommand.Name)"
  120. if($Help.isPresent) {
  121. Print-Usage
  122. exit 0
  123. }
  124. Package-OBS-Standalone
  125. }