#!/bin/bash # Packages a built plugin in the layout OBS loads plugins from: # Linux: extract into ~/.config/obs-studio/plugins/ # Windows: extract into C:\ProgramData\obs-studio\plugins\ # macOS: extract into ~/Library/Application Support/obs-studio/plugins/ # Usage: package.sh set -euo pipefail TARGET="$1" VERSION="$2" OUT="$(realpath "$3")" NAME=obs-streamplace BUILD="$(dirname "$0")/build-$TARGET" STAGE="$(mktemp -d)" trap 'rm -rf "$STAGE"' EXIT # Streamplace Desktop reads this to tell whether an installed copy is older # than the one it bundles; build_time matches pkg/config/git's BuildTime. MANIFEST="{\"id\":\"place.stream.$NAME\",\"name\":\"$NAME\",\"version\":\"$VERSION\",\"build_time\":$(git log -1 --format=%at)}" case "$TARGET" in linux-*) mkdir -p "$STAGE/$NAME/bin/64bit" "$STAGE/$NAME/data" cp "$BUILD/$NAME.so" "$STAGE/$NAME/bin/64bit/" echo "$MANIFEST" >"$STAGE/$NAME/data/manifest.json" tar -czf "$OUT/$NAME-$VERSION-$TARGET.tar.gz" -C "$STAGE" "$NAME" ;; windows-*) mkdir -p "$STAGE/$NAME/bin/64bit" "$STAGE/$NAME/data" cp "$BUILD/$NAME.dll" "$STAGE/$NAME/bin/64bit/" echo "$MANIFEST" >"$STAGE/$NAME/data/manifest.json" rm -f "$OUT/$NAME-$VERSION-$TARGET.zip" (cd "$STAGE" && zip -qr "$OUT/$NAME-$VERSION-$TARGET.zip" "$NAME") ;; darwin-*) BUNDLE="$STAGE/$NAME.plugin/Contents" mkdir -p "$BUNDLE/MacOS" "$BUNDLE/Resources" cp "$BUILD/$NAME.dylib" "$BUNDLE/MacOS/$NAME" echo "$MANIFEST" >"$BUNDLE/Resources/manifest.json" cat >"$BUNDLE/Info.plist" < CFBundleName $NAME CFBundleIdentifier place.stream.$NAME CFBundleExecutable $NAME CFBundlePackageType BNDL CFBundleInfoDictionaryVersion 6.0 CFBundleShortVersionString $VERSION LSMinimumSystemVersion 11.0 EOF tar -czf "$OUT/$NAME-$VERSION-$TARGET.tar.gz" -C "$STAGE" "$NAME.plugin" cd "$OUT" tar -xzf "$NAME-$VERSION-$TARGET.tar.gz" ;; *) echo "unknown target $TARGET" >&2 exit 1 ;; esac