184f6f38fb
On master branch, client information for Twitch, YouTube and Restream integration are set as CMake cache variables. The hashes can contain otherwise "illegal" characters such as backticks which need to be enclosed in a string, but also cannot be subject to variable substition. Using single quotes should fix this.
169 lines
6.0 KiB
Bash
Executable File
169 lines
6.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
##############################################################################
|
|
# macOS build function
|
|
##############################################################################
|
|
#
|
|
# This script file can be included in build scripts for macOS or run directly
|
|
#
|
|
##############################################################################
|
|
|
|
# Halt on errors
|
|
set -eE
|
|
|
|
build_obs() {
|
|
status "Build OBS"
|
|
trap "caught_error 'build app'" ERR
|
|
|
|
if [ -z "${CI}" ]; then
|
|
_backup_artifacts
|
|
fi
|
|
step "Configure OBS..."
|
|
_configure_obs
|
|
|
|
ensure_dir "${CHECKOUT_DIR}/"
|
|
step "Build OBS targets..."
|
|
cmake --build ${BUILD_DIR}
|
|
}
|
|
|
|
bundle_obs() {
|
|
status "Create relocatable macOS application bundle"
|
|
trap "caught_error 'package app'" ERR
|
|
|
|
ensure_dir "${CHECKOUT_DIR}"
|
|
|
|
step "Install OBS application bundle..."
|
|
cmake --install ${BUILD_DIR}
|
|
}
|
|
|
|
# Function to configure OBS build
|
|
_configure_obs() {
|
|
if [ "${CODESIGN}" ]; then
|
|
read_codesign_ident
|
|
fi
|
|
|
|
ensure_dir "${CHECKOUT_DIR}"
|
|
status "Configure OBS build system..."
|
|
trap "caught_error 'configure build'" ERR
|
|
check_ccache
|
|
|
|
if [ "${TWITCH_CLIENTID}" -a "${TWITCH_HASH}" ]; then
|
|
TWITCH_OPTIONS="-DTWITCH_CLIENTID='${TWITCH_CLIENTID}' -DTWITCH_HASH='${TWITCH_HASH}'"
|
|
fi
|
|
|
|
if [ "${RESTREAM_CLIENTID}" -a "${RESTREAM_HASH}" ]; then
|
|
RESTREAM_OPTIONS="-DRESTREAM_CLIENTID='${RESTREAM_CLIENTID}' -DRESTREAM_HASH='${RESTREAM_HASH}'"
|
|
fi
|
|
|
|
if [ "${YOUTUBE_CLIENTID}" -a "${YOUTUBE_CLIENTID_HASH}" -a "${YOUTUBE_SECRET}" -a "{YOUTUBE_SECRET_HASH}" ]; then
|
|
YOUTUBE_OPTIONS="-DYOUTUBE_CLIENTID='${YOUTUBE_CLIENTID}' -DYOUTUBE_CLIENTID_HASH='${YOUTUBE_CLIENTID_HASH}' -DYOUTUBE_SECRET='${YOUTUBE_SECRET}' -DYOUTUBE_SECRET_HASH='${YOUTUBE_SECRET_HASH}'"
|
|
fi
|
|
|
|
if [ "${XCODE}" ]; then
|
|
GENERATOR="Xcode"
|
|
else
|
|
GENERATOR="Ninja"
|
|
fi
|
|
|
|
if [ "${CI}" -a "${ARCH}" = "x86_64" ]; then
|
|
UNITTEST_OPTIONS="-DENABLE_UNIT_TESTS=ON"
|
|
fi
|
|
|
|
cmake -S . -B ${BUILD_DIR} -G ${GENERATOR} \
|
|
-DCEF_ROOT_DIR="${DEPS_BUILD_DIR}/cef_binary_${MACOS_CEF_BUILD_VERSION:-${CI_MACOS_CEF_VERSION}}_macos_${ARCH:-x86_64}" \
|
|
-DENABLE_BROWSER=ON \
|
|
-DVLC_PATH="${DEPS_BUILD_DIR}/vlc-${VLC_VERSION:-${CI_VLC_VERSION}}" \
|
|
-DENABLE_VLC=ON \
|
|
-DCMAKE_PREFIX_PATH="${DEPS_BUILD_DIR}/obs-deps" \
|
|
-DBROWSER_LEGACY=$(test "${MACOS_CEF_BUILD_VERSION:-${CI_MACOS_CEF_VERSION}}" -le 3770 && echo "ON" || echo "OFF") \
|
|
-DCMAKE_OSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET:-${CI_MACOSX_DEPLOYMENT_TARGET}} \
|
|
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_ARCHS} \
|
|
-DOBS_CODESIGN_LINKER=${CODESIGN_LINKER:-OFF} \
|
|
-DCMAKE_INSTALL_PREFIX=${BUILD_DIR}/install \
|
|
-DCMAKE_BUILD_TYPE=${BUILD_CONFIG} \
|
|
-DOBS_BUNDLE_CODESIGN_IDENTITY="${CODESIGN_IDENT:--}" \
|
|
${YOUTUBE_OPTIONS} \
|
|
${TWITCH_OPTIONS} \
|
|
${RESTREAM_OPTIONS} \
|
|
${UNITTEST_OPTIONS} \
|
|
${CI:+-DBUILD_FOR_DISTRIBUTION=${BUILD_FOR_DISTRIBUTION} -DOBS_BUILD_NUMBER=${GITHUB_RUN_ID}} \
|
|
${QUIET:+-Wno-deprecated -Wno-dev --log-level=ERROR}
|
|
}
|
|
|
|
# Function to backup previous build artifacts
|
|
_backup_artifacts() {
|
|
ensure_dir "${CHECKOUT_DIR}"
|
|
if [ -d "${BUILD_DIR}" ]; then
|
|
status "Backup old OBS build artifacts"
|
|
|
|
CUR_DATE=$(/bin/date +"%Y-%m-%d@%H%M%S")
|
|
NIGHTLY_DIR="${CHECKOUT_DIR}/nightly-${CUR_DATE}"
|
|
PACKAGE_NAME=$(/usr/bin/find "${BUILD_DIR}" -name "*.dmg" -depth 1 | sort -rn | head -1)
|
|
|
|
if [ -d "${BUILD_DIR}/install/OBS.app" ]; then
|
|
step "Back up OBS.app..."
|
|
ensure_dir "${NIGHTLY_DIR}"
|
|
/bin/mv "${CHECKOUT_DIR}/${BUILD_DIR}/install/OBS.app" "${NIGHTLY_DIR}/"
|
|
info "You can find OBS.app in ${NIGHTLY_DIR}"
|
|
fi
|
|
|
|
if [ "${PACKAGE_NAME}" ]; then
|
|
step "Back up $(basename "${PACKAGE_NAME}")..."
|
|
ensure_dir "${NIGHTLY_DIR}"
|
|
/bin/mv "../${BUILD_DIR}/$(basename "${PACKAGE_NAME}")" "${NIGHTLY_DIR}/"
|
|
info "You can find ${PACKAGE_NAME} in ${NIGHTLY_DIR}"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
build-obs-standalone() {
|
|
CHECKOUT_DIR="$(/usr/bin/git rev-parse --show-toplevel)"
|
|
PRODUCT_NAME="OBS-Studio"
|
|
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"
|
|
|
|
check_archs
|
|
check_macos_version
|
|
build_obs
|
|
|
|
if [ "${BUNDLE}" ]; then
|
|
bundle_obs
|
|
fi
|
|
}
|
|
|
|
print_usage() {
|
|
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" \
|
|
"-c, --codesign : Codesign OBS and all libraries (default: ad-hoc only)\n" \
|
|
"-b, --bundle : Create relocatable OBS application bundle in build directory (default: build/install/OBS.app)\n" \
|
|
"--xcode : Create Xcode build environment instead of Ninja\n" \
|
|
"--build-dir : Specify alternative build directory (default: build)\n"
|
|
}
|
|
|
|
build-obs-main() {
|
|
if [ -z "${_RUN_OBS_BUILD_SCRIPT}" ]; then
|
|
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 ;;
|
|
-c | --codesign ) CODESIGN=TRUE; shift ;;
|
|
-b | --bundle ) BUNDLE=TRUE; shift ;;
|
|
--xcode ) XCODE=TRUE; shift ;;
|
|
--build-dir ) BUILD_DIR="${2}"; shift 2 ;;
|
|
-- ) shift; break ;;
|
|
* ) break ;;
|
|
esac
|
|
done
|
|
|
|
build-obs-standalone
|
|
fi
|
|
}
|
|
|
|
build-obs-main $*
|