Files
PatTheMav dba5e517c1 CI: Update build setup scripts for VST3
Adds code to update an existing git checkout of the VST3 SDK to a
changed commit hash in the preset file, including support to separately
manage submodules.

Signed-off-by: pkv <pkv@obsproject.com>
2026-11-03 11:56:13 -05:00

138 lines
4.2 KiB
Plaintext

autoload -Uz log_group log_error log_status log_info log_debug
if (( ! ${+commands[curl]} )) {
log_error 'curl not available.'
return 2
}
if (( ! ${+commands[jq]} )) {
log_error 'jq not available.'
return 2
}
local -a curl_opts=(--show-error --silent --location -O ${@})
pushd ${project_root}
log_group 'Installing obs-studio build dependencies...'
mkdir -p ${project_root}/.deps
local deps_version
local deps_baseurl
local deps_label
local deps_hash
IFS=';' read -r deps_version deps_baseurl deps_label deps_hash deps_revision <<< \
"$(jq -r --arg target "${target}" '
.configurePresets[]
| select(.name=="dependencies")
| .vendor["obsproject.com/obs-studio"].dependencies["cef"]
| {version, baseUrl, "label", "hash": .hashes[$target], "revision": .revision[$target]}
| join(";")
' ${project_root}/CMakePresets.json)"
if (( ! deps_version )) {
log_error 'No valid cef spec found in buildspec.json.'
return 2
}
log_group 'Setting up pre-built Chromium Embedded Framework...'
pushd ${project_root}/.deps
local _filename="cef_binary_${deps_version}_${target//ubuntu-/linux_}${deps_revision:+"_v${deps_revision}"}.tar.xz"
local _url=${deps_baseurl}/${_filename}
local _target="cef_binary_${deps_version}_${target//ubuntu-/linux_}"
typeset -g CEF_VERSION=${deps_version}
log_debug "Running curl ${curl_opts} ${_url}"
curl ${curl_opts} ${_url} && \
log_status "Downloaded ${deps_label} for ${target}."
read -r artifact_checksum _ <<< "$(sha256sum ${_filename})"
if [[ ${deps_hash} != ${artifact_checksum} ]] {
log_error "Checksum of downloaded ${deps_label} does not match specification.
Expected : ${deps_hash}
Actual : ${artifact_checksum}"
return 2
}
log_status "Checksum of downloaded ${deps_label} matches."
mkdir -p ${_target} && pushd ${_target}
XZ_OPT=-T0 tar --strip-components 1 -xJf ../${_filename} && log_status "${deps_label} extracted."
popd
log_group 'Installing obs-studio build dependencies from apt...'
sudo apt-get install -y --no-install-recommends \
build-essential libglib2.0-dev \
extra-cmake-modules lsb-release dh-cmake \
libcurl4-openssl-dev \
libavcodec-dev libavdevice-dev libavfilter-dev libavformat-dev libavutil-dev \
libswresample-dev libswscale-dev \
libjansson-dev \
libx11-xcb-dev \
libgles2-mesa-dev \
libwayland-dev \
libpipewire-0.3-dev \
libpulse-dev \
libx264-dev \
libmbedtls-dev \
libgl1-mesa-dev \
libjansson-dev \
uthash-dev \
libsimde-dev \
libluajit-5.1-dev python3-dev \
libx11-dev libxcb-randr0-dev libxcb-shm0-dev libxcb-xinerama0-dev \
libxcb-composite0-dev libxinerama-dev libxcb1-dev libx11-xcb-dev libxcb-xfixes0-dev \
swig libcmocka-dev libxss-dev libglvnd-dev \
libxkbcommon-dev libatk1.0-dev libatk-bridge2.0-dev libxcomposite-dev libxdamage-dev \
libasound2-dev libfdk-aac-dev libfontconfig-dev libfreetype6-dev libjack-jackd2-dev \
libpulse-dev libsndio-dev libspeexdsp-dev libudev-dev libv4l-dev libva-dev libvlc-dev \
libpci-dev libdrm-dev \
nlohmann-json3-dev libwebsocketpp-dev libasio-dev libqrcodegencpp-dev \
libffmpeg-nvenc-dev librist-dev libsrt-openssl-dev \
qt6-base-dev libqt6svg6-dev qt6-base-private-dev \
libvpl-dev libvpl2
log_group 'Setting up Steinberg VST3 SDK...'
pushd "${project_root}/.deps"
local _target="vst3sdk"
local _url="https://github.com/steinbergmedia/vst3sdk.git"
local _hash="9fad9770f2ae8542ab1a548a68c1ad1ac690abe0"
if [[ -d ${_target}/.git ]] {
log_debug 'Updating existing Stienberg VST3 SDK checkout'
pushd "${_target}"
git config advice.detachedHead false
git config remote.origin.tapOpt --no-tags
git config remote.origin.url "${_url}"
if ! git rev-parse -q --verify "${_hash}^{commit}" > /dev/null; then
git fetch origin
fi
git reset --hard "${_hash}" --
popd
} else {
log_debug "Cloning Steinberg VST3 SDK from '${_url}'"
git clone --filter=blob:none --no-checkout --recurse-submodules=no "${_url}" "${_target}"
pushd "${_target}"
git sparse-checkout set base,pluginterfaces,public.sdk,LICENSE.txt
git config advice.detachedHead false
git checkout -f "${_hash}" --
popd
}
pushd "${_target}"
if [[ -f .gitmodules ]] {
git submodule foreach --recursive git submodule sync
git submodule update --init base pluginterfaces public.sdk
}
popd
log_group