123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- #!/bin/bash
- ##############################################################################
- # macOS build script
- ##############################################################################
- #
- # This script contains all steps necessary to:
- #
- # * Build OBS with all default plugins and dependencies
- # * Create a macOS application bundle
- # * Codesign the macOS application bundle
- # * Package a macOS installation image
- # * Notarize macOS application bundle and/or installation image
- #
- # Parameters:
- # -h, --help : Print usage help
- # -q, --quiet : Suppress most build process output
- # -v, --verbose : Enable more verbose build process output
- # -d, --skip-dependency-checks : Skip dependency checks (default: off)
- # -b, --bundle : Create relocatable application bundle
- # (default: off)
- # -p, --package : Create distributable disk image
- # (default: off)
- # -c, --codesign : Codesign OBS and all libraries
- # (default: ad-hoc only)
- # -n, --notarize : Notarize OBS (default: off)
- # --xcode : Create Xcode build environment instead
- # of Ninja
- # --build-dir : Specify alternative build directory
- # (default: build)"
- # Environment Variables (optional):
- #
- # MACOS_DEPS_VERSION : Precompiled macOS dependencies version
- # MACOS_CEF_BUILD_VERSION : Chromium Embedded Framework version
- # VLC_VERSION : VLC version
- # SPARKLE_VERSION : Sparkle Framework version
- #
- ##############################################################################
- # Halt on errors
- set -eE
- ## SET UP ENVIRONMENT ##
- _RUN_OBS_BUILD_SCRIPT=TRUE
- PRODUCT_NAME="OBS-Studio"
- CHECKOUT_DIR="$(/usr/bin/git rev-parse --show-toplevel)"
- DEPS_BUILD_DIR="${CHECKOUT_DIR}/../obs-build-dependencies"
- source "${CHECKOUT_DIR}/CI/include/build_support.sh"
- source "${CHECKOUT_DIR}/CI/include/build_support_macos.sh"
- ## INSTALL DEPENDENCIES ##
- source "${CHECKOUT_DIR}/CI/macos/01_install_dependencies.sh"
- ## BUILD OBS ##
- source "${CHECKOUT_DIR}/CI/macos/02_build_obs.sh"
- ## PACKAGE OBS AND NOTARIZE ##
- source "${CHECKOUT_DIR}/CI/macos/03_package_obs.sh"
- ## MAIN SCRIPT FUNCTIONS ##
- print_usage() {
- echo "build-macos.sh - Build script for OBS-Studio"
- echo -e "Usage: ${0}\n" \
- "-h, --help : Print this help\n" \
- "-q, --quiet : Suppress most build process output\n" \
- "-v, --verbose : Enable more verbose build process output\n" \
- "-a, --architecture : Specify build architecture (default: x86_64, alternative: arm64)\n" \
- "-d, --skip-dependency-checks : Skip dependency checks (default: off)\n" \
- "-b, --bundle : Create relocatable application bundle (default: off)\n" \
- "-p, --package : Create distributable disk image (default: off)\n" \
- "-c, --codesign : Codesign OBS and all libraries (default: ad-hoc only)\n" \
- "-n, --notarize : Notarize OBS (default: off)\n" \
- "--xcode : Create Xcode build environment instead of Ninja\n" \
- "--build-dir : Specify alternative build directory (default: build)\n"
- }
- print_deprecation() {
- echo -e "DEPRECATION ERROR:\n" \
- "The '${1}' switch has been deprecated!\n"
- if [ "${1}" = "-s" ]; then
- echo -e "The macOS build script system has changed:\n" \
- " - To configure and build OBS, run the script 'CI/macos/02_build_obs.sh'\n" \
- " - To bundle OBS into a relocatable application bundle, run the script 'CI/macos/02_build_obs.sh --bundle\n" \
- " - To package OBS, run the script 'CI/macos/03_package_obs.sh'\n" \
- " - To notarize OBS, run the script 'CI/macos/03_package_obs.sh --notarize'\n"
- fi
- }
- obs-build-main() {
- while true; do
- case "${1}" in
- -h | --help ) print_usage; exit 0 ;;
- -q | --quiet ) export QUIET=TRUE; shift ;;
- -v | --verbose ) export VERBOSE=TRUE; shift ;;
- -a | --architecture ) ARCH="${2}"; shift 2 ;;
- -d | --skip-dependency-checks ) SKIP_DEP_CHECKS=TRUE; shift ;;
- -p | --package ) PACKAGE=TRUE; shift ;;
- -c | --codesign ) CODESIGN=TRUE; shift ;;
- -n | --notarize ) NOTARIZE=TRUE; PACKAGE=TRUE CODESIGN=TRUE; shift ;;
- -b | --bundle ) BUNDLE=TRUE; shift ;;
- --xcode ) XCODE=TRUE; shift ;;
- --build-dir ) BUILD_DIR="${2}"; shift 2 ;;
- -s ) print_deprecation ${1}; exit 1 ;;
- -- ) shift; break ;;
- * ) break ;;
- esac
- done
- ensure_dir "${CHECKOUT_DIR}"
- check_archs
- check_macos_version
- step "Fetching OBS tags..."
- /usr/bin/git fetch origin --tags
- GIT_BRANCH=$(/usr/bin/git rev-parse --abbrev-ref HEAD)
- GIT_HASH=$(/usr/bin/git rev-parse --short HEAD)
- GIT_TAG=$(/usr/bin/git describe --tags --abbrev=0)
- if [ "${BUILD_FOR_DISTRIBUTION}" ]; then
- VERSION_STRING="${GIT_TAG}"
- else
- VERSION_STRING="${GIT_TAG}-${GIT_HASH}"
- fi
- if [ "${ARCH}" = "arm64" ]; then
- FILE_NAME="obs-studio-${VERSION_STRING}-macOS-Apple.dmg"
- elif [ "${ARCH}" = "universal" ]; then
- FILE_NAME="obs-studio-${VERSION_STRING}-macOS.dmg"
- else
- FILE_NAME="obs-studio-${VERSION_STRING}-macOS-Intel.dmg"
- fi
- if [ -z "${SKIP_DEP_CHECKS}" ]; then
- install_dependencies
- fi
- build_obs
- if [ "${BUNDLE}" ]; then
- bundle_obs
- fi
- if [ "${PACKAGE}" ]; then
- package_obs
- fi
- if [ "${NOTARIZE}" ]; then
- notarize_obs
- fi
- cleanup
- }
- obs-build-main $*
|