02_build_obs.sh 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. #!/bin/bash
  2. ##############################################################################
  3. # Linux build function
  4. ##############################################################################
  5. #
  6. # This script file can be included in build scripts for Linux or run directly
  7. #
  8. ##############################################################################
  9. # Halt on errors
  10. set -eE
  11. build_obs() {
  12. status "Build OBS"
  13. trap "caught_error 'build app'" ERR
  14. if [ -z "${CI}" ]; then
  15. _backup_artifacts
  16. fi
  17. step "Configure OBS..."
  18. _configure_obs
  19. ensure_dir "${CHECKOUT_DIR}/"
  20. step "Build OBS targets..."
  21. cmake --build ${BUILD_DIR}
  22. }
  23. # Function to configure OBS build
  24. _configure_obs() {
  25. ensure_dir "${CHECKOUT_DIR}"
  26. status "Configuration of OBS build system..."
  27. trap "caught_error 'configure build'" ERR
  28. check_ccache
  29. if [ "${TWITCH_CLIENTID}" -a "${TWITCH_HASH}" ]; then
  30. TWITCH_OPTIONS="-DTWITCH_CLIENTID='${TWITCH_CLIENTID}' -DTWITCH_HASH='${TWITCH_HASH}'"
  31. fi
  32. if [ "${RESTREAM_CLIENTID}" -a "${RESTREAM_HASH}" ]; then
  33. RESTREAM_OPTIONS="-DRESTREAM_CLIENTID='${RESTREAM_CLIENTID}' -DRESTREAM_HASH='${RESTREAM_HASH}'"
  34. fi
  35. if [ "${YOUTUBE_CLIENTID}" -a "${YOUTUBE_CLIENTID_HASH}" -a "${YOUTUBE_SECRET}" -a "{YOUTUBE_SECRET_HASH}" ]; then
  36. YOUTUBE_OPTIONS="-DYOUTUBE_CLIENTID='${YOUTUBE_CLIENTID}' -DYOUTUBE_CLIENTID_HASH='${YOUTUBE_CLIENTID_HASH}' -DYOUTUBE_SECRET='${YOUTUBE_SECRET}' -DYOUTUBE_SECRET_HASH='${YOUTUBE_SECRET_HASH}'"
  37. fi
  38. if [ "${PORTABLE}" ]; then
  39. PORTABLE_BUILD="ON"
  40. fi
  41. if [ "${DISABLE_PIPEWIRE}" ]; then
  42. PIPEWIRE_OPTION="-DENABLE_PIPEWIRE=OFF"
  43. fi
  44. cmake -S . -B ${BUILD_DIR} -G Ninja \
  45. -DCEF_ROOT_DIR="${DEPS_BUILD_DIR}/cef_binary_${LINUX_CEF_BUILD_VERSION:-${CI_LINUX_CEF_VERSION}}_linux64" \
  46. -DCMAKE_BUILD_TYPE=${BUILD_CONFIG} \
  47. -DLINUX_PORTABLE=${PORTABLE_BUILD:-OFF} \
  48. -DENABLE_AJA=OFF \
  49. -DENABLE_NEW_MPEGTS_OUTPUT=OFF \
  50. -DENABLE_WEBRTC=OFF \
  51. ${PIPEWIRE_OPTION} \
  52. ${YOUTUBE_OPTIONS} \
  53. ${TWITCH_OPTIONS} \
  54. ${RESTREAM_OPTIONS} \
  55. ${CI:+-DENABLE_UNIT_TESTS=ON -DBUILD_FOR_DISTRIBUTION=${BUILD_FOR_DISTRIBUTION} -DOBS_BUILD_NUMBER=${GITHUB_RUN_ID}} \
  56. ${QUIET:+-Wno-deprecated -Wno-dev --log-level=ERROR}
  57. }
  58. # Function to backup previous build artifacts
  59. _backup_artifacts() {
  60. ensure_dir "${CHECKOUT_DIR}"
  61. if [ -d ${BUILD_DIR} ]; then
  62. status "Backup of old OBS build artifacts"
  63. CUR_DATE=$(date +"%Y-%m-%d@%H%M%S")
  64. NIGHTLY_DIR="${CHECKOUT_DIR}/nightly-${CUR_DATE}"
  65. PACKAGE_NAME=$(find ${BUILD_DIR} -maxdepth 1 -name "*.deb" | sort -rn | head -1)
  66. if [ "${PACKAGE_NAME}" ]; then
  67. step "Back up $(basename "${PACKAGE_NAME}")..."
  68. ensure_dir "${NIGHTLY_DIR}"
  69. mv "../${BUILD_DIR}/$(basename "${PACKAGE_NAME}")" ${NIGHTLY_DIR}/
  70. info "You can find ${PACKAGE_NAME} in ${NIGHTLY_DIR}"
  71. fi
  72. fi
  73. }
  74. build-obs-standalone() {
  75. CHECKOUT_DIR="$(git rev-parse --show-toplevel)"
  76. PRODUCT_NAME="OBS-Studio"
  77. DEPS_BUILD_DIR="${CHECKOUT_DIR}/../obs-build-dependencies"
  78. source "${CHECKOUT_DIR}/CI/include/build_support.sh"
  79. source "${CHECKOUT_DIR}/CI/include/build_support_linux.sh"
  80. build_obs
  81. }
  82. print_usage() {
  83. echo -e "Usage: ${0}\n" \
  84. "-h, --help : Print this help\n" \
  85. "-q, --quiet : Suppress most build process output\n" \
  86. "-v, --verbose : Enable more verbose build process output\n" \
  87. "-p, --portable : Create portable build (default: off)\n" \
  88. "--disable-pipewire : Disable building with PipeWire support (default: off)\n" \
  89. "--build-dir : Specify alternative build directory (default: build)\n"
  90. }
  91. build-obs-main() {
  92. if [ -z "${_RUN_OBS_BUILD_SCRIPT}" ]; then
  93. while true; do
  94. case "${1}" in
  95. -h | --help ) print_usage; exit 0 ;;
  96. -q | --quiet ) export QUIET=TRUE; shift ;;
  97. -v | --verbose ) export VERBOSE=TRUE; shift ;;
  98. -p | --portable ) export PORTABLE=TRUE; shift ;;
  99. --disable-pipewire ) DISABLE_PIPEWIRE=TRUE; shift ;;
  100. --build-dir ) BUILD_DIR="${2}"; shift 2 ;;
  101. -- ) shift; break ;;
  102. * ) break ;;
  103. esac
  104. done
  105. build-obs-standalone
  106. fi
  107. }
  108. build-obs-main $*