build-windows.ps1 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. Param(
  2. [Switch]$Help,
  3. [Switch]$Quiet,
  4. [Switch]$Verbose,
  5. [Switch]$NoChoco,
  6. [Switch]$SkipDependencyChecks,
  7. [Switch]$BuildInstaller,
  8. [Switch]$CombinedArchs,
  9. [String]$BuildDirectory = "build",
  10. [String]$BuildArch = (Get-CimInstance CIM_OperatingSystem).OSArchitecture,
  11. [String]$BuildConfiguration = "RelWithDebInfo"
  12. )
  13. ##############################################################################
  14. # Windows plugin build script
  15. ##############################################################################
  16. #
  17. # This script contains all steps necessary to:
  18. #
  19. # * Build libobs and obs-frontend-api with all required dependencies
  20. # * Build your plugin
  21. # * Create 64-bit or 32-bit packages
  22. # * Create 64-bit or 32-bit installation packages
  23. # * Create combined installation packages
  24. #
  25. # Parameters:
  26. # -Help : Print usage help
  27. # -NoChco : Skip automatic dependency installation
  28. # via Chocolatey
  29. # -SkipDependencyChecks : Skips dependency checks
  30. # -BuildDirectory : Directory to use for builds
  31. # Default: Win64 on 64-bit systems
  32. # Win32 on 32-bit systems
  33. # -BuildArch : Build architecture to use (32bit or 64bit)
  34. # -BuildConfiguration : Build configuration to use
  35. # Default: RelWithDebInfo
  36. # -BuildInstaller : Build InnoSetup installer - Default: off"
  37. # -CombinedArchs : Create combined packages and installer
  38. # (64-bit and 32-bit) - Default: off"
  39. #
  40. # Environment Variables (optional):
  41. # WindowsDepsVersion : Pre-compiled Windows dependencies version
  42. # WindowsQtVersion : Pre-compiled Qt version
  43. # ObsVersion : OBS Version
  44. #
  45. ##############################################################################
  46. $ErrorActionPreference = "Stop"
  47. $_RunObsBuildScript = $true
  48. $CheckoutDir = git rev-parse --show-toplevel
  49. $DepsBuildDir = "${CheckoutDir}/../obs-build-dependencies"
  50. $ObsBuildDir = "${CheckoutDir}/../obs-studio"
  51. if (Test-Path ${CheckoutDir}/CI/include/build_environment.ps1) {
  52. . ${CheckoutDir}/CI/include/build_environment.ps1
  53. }
  54. . ${CheckoutDir}/CI/include/build_support_windows.ps1
  55. ## DEPENDENCY INSTALLATION ##
  56. . ${CheckoutDir}/CI/windows/01_install_dependencies.ps1
  57. ## OBS LIBRARY BUILD ##
  58. . ${CheckoutDir}/CI/windows/02_build_obs_libs.ps1
  59. ## PLUGIN BUILD ##
  60. . ${CheckoutDir}/CI/windows/03_build_plugin.ps1
  61. ## PLUGIN PACKAGE AND NOTARIZE ##
  62. . ${CheckoutDir}/CI/windows/04_package_plugin.ps1
  63. ## MAIN SCRIPT FUNCTIONS ##
  64. function Build-Obs-Plugin-Main {
  65. Ensure-Directory ${CheckoutDir}
  66. Write-Step "Fetching version tags..."
  67. & git fetch origin --tags
  68. $GitBranch = git rev-parse --abbrev-ref HEAD
  69. $GitHash = git rev-parse --short HEAD
  70. $ErrorActionPreference = "SilentlyContiue"
  71. $GitTag = git describe --tags --abbrev=0
  72. $ErrorActionPreference = "Stop"
  73. if ($GitTag -eq $null) {
  74. $GitTag=$ProductVersion
  75. }
  76. $FileName = "${ProductName}-${GitTag}-${GitHash}"
  77. if(!($SkipDependencyChecks.isPresent)) {
  78. Install-Dependencies -NoChoco:$NoChoco
  79. }
  80. if($CombinedArchs.isPresent) {
  81. Build-OBS-Libs -BuildArch 64-bit
  82. Build-OBS-Libs -BuildArch 32-bit
  83. Build-OBS-Plugin -BuildArch 64-bit
  84. Build-OBS-Plugin -BuildArch 32-bit
  85. } else {
  86. Build-OBS-Libs
  87. Build-OBS-Plugin
  88. }
  89. Package-OBS-Plugin
  90. }
  91. function Print-Usage {
  92. Write-Host "build-windows.ps1 - Build script for ${ProductName}"
  93. $Lines = @(
  94. "Usage: ${MyInvocation.MyCommand.Name}",
  95. "-Help : Print this help",
  96. "-Quiet : Suppress most build process output"
  97. "-Verbose : Enable more verbose build process output"
  98. "-NoChoco : Skip automatic dependency installation via Chocolatey - Default: on",
  99. "-SkipDependencyChecks : Skips dependency checks - Default: off",
  100. "-BuildDirectory : Directory to use for builds - Default: build64 on 64-bit systems, build32 on 32-bit systems",
  101. "-BuildArch : Build architecture to use (32bit or 64bit) - Default: local architecture",
  102. "-BuildConfiguration : Build configuration to use - Default: RelWithDebInfo",
  103. "-BuildInstaller : Build InnoSetup installer - Default: off",
  104. "-CombinedArchs : Create combined packages and installer (64-bit and 32-bit) - Default: off"
  105. )
  106. $Lines | Write-Host
  107. }
  108. if($Help.isPresent) {
  109. Print-Usage
  110. exit 0
  111. }
  112. Build-Obs-Plugin-Main