#!/usr/bin/env bash set -euo pipefail PROVENANCE_ROOT="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd -- "${PROVENANCE_ROOT}/../.." && pwd)" SOURCE_ARCHIVE_DIRECTORY="${1:-${PROJECT_ROOT}/.artifacts/native/gamescope/sources}" OUTPUT_DIRECTORY="${2:-${PROJECT_ROOT}/.artifacts/native/gamescope}" ARTIFACT_NAME="gamescope-3.16.20-ubuntu26.04-amd64" SHIPPED_ARTIFACT="${PROJECT_ROOT}/src/ptlinux/native/${ARTIFACT_NAME}" if [[ ! -d "$SOURCE_ARCHIVE_DIRECTORY" ]] then printf 'Gamescope source-archive directory does not exist: %s\n' \ "$SOURCE_ARCHIVE_DIRECTORY" >&2 exit 2 fi mkdir -p -- "$OUTPUT_DIRECTORY" SOURCE_ARCHIVE_DIRECTORY="$(cd -- "$SOURCE_ARCHIVE_DIRECTORY" && pwd)" OUTPUT_DIRECTORY="$(cd -- "$OUTPUT_DIRECTORY" && pwd)" if [[ "${OUTPUT_DIRECTORY}/${ARTIFACT_NAME}" == "$SHIPPED_ARTIFACT" ]] then printf '%s\n' "Refusing to overwrite the shipped Gamescope executable." >&2 exit 2 fi ( cd "$SOURCE_ARCHIVE_DIRECTORY" sha256sum --check "${PROVENANCE_ROOT}/source.sha256" ) if [[ -n "${CONTAINER_ENGINE:-}" ]] then ENGINE="$CONTAINER_ENGINE" elif command -v podman >/dev/null 2>&1 then ENGINE="podman" elif command -v docker >/dev/null 2>&1 then ENGINE="docker" else printf '%s\n' "Docker or Podman is required to rebuild Gamescope." >&2 exit 1 fi if ! command -v "$ENGINE" >/dev/null 2>&1 then printf 'Container engine was not found: %s\n' "$ENGINE" >&2 exit 1 fi rm -f -- "${OUTPUT_DIRECTORY}/${ARTIFACT_NAME}" "$ENGINE" run --rm --platform linux/amd64 \ --env "HOST_UID=$(id -u)" \ --env "HOST_GID=$(id -g)" \ --volume "${PROJECT_ROOT}:/workspace:ro" \ --volume "${SOURCE_ARCHIVE_DIRECTORY}:/sources:ro" \ --volume "${OUTPUT_DIRECTORY}:/output" \ ubuntu:26.04 \ bash /workspace/native/gamescope/build-in-container.sh ( cd "$OUTPUT_DIRECTORY" sha256sum --check "${PROVENANCE_ROOT}/binary.sha256" )