03_package_obs.ps1 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  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}-Win-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}-Win-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}-Win-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. Write-Step "Fetch OBS tags..."
  88. $null = git fetch origin --tags
  89. Ensure-Directory ${CheckoutDir}
  90. $GitBranch = git rev-parse --abbrev-ref HEAD
  91. $GitHash = git rev-parse --short HEAD
  92. $ErrorActionPreference = "SilentlyContinue"
  93. $GitTag = git describe --tags --abbrev=0
  94. $ErrorActionPreference = "Stop"
  95. if(Test-Path variable:BUILD_FOR_DISTRIBUTION) {
  96. $VersionString = "${GitTag}"
  97. } else {
  98. $VersionString = "${GitTag}-${GitHash}"
  99. }
  100. $FileName = "${ProductName}-${VersionString}"
  101. Package-OBS
  102. }
  103. function Print-Usage {
  104. $Lines = @(
  105. "Usage: ${_ScriptName}",
  106. "-Help : Print this help",
  107. "-Quiet : Suppress most build process output",
  108. "-Verbose : Enable more verbose build process output",
  109. "-CombinedArchs : Create combined architecture package",
  110. "-BuildDirectory : Directory to use for builds - Default: build64 on 64-bit systems, build32 on 32-bit systems",
  111. "-BuildArch : Build architecture to use (x86 or x64) - Default: local architecture",
  112. "-BuildConfiguration : Build configuration to use - Default: RelWithDebInfo"
  113. )
  114. $Lines | Write-Host
  115. }
  116. if(!(Test-Path variable:_RunObsBuildScript)) {
  117. $_ScriptName = "$($MyInvocation.MyCommand.Name)"
  118. if($Help.isPresent) {
  119. Print-Usage
  120. exit 0
  121. }
  122. Package-OBS-Standalone
  123. }