From dbb2196819186a70af715ce9f373eae90643d322 Mon Sep 17 00:00:00 2001 From: wheaney <42350981+wheaney@users.noreply.github.com> Date: Tue, 2 Sep 2025 12:05:04 -0700 Subject: [PATCH] Update setup script to perform local build if a binary isn't available for download --- bin/breezy_kwin_setup | 49 +++++++++++++++++-- bin/package_kwin | 65 ++++++++++++++++--------- kwin/bin/breezy_kwin_uninstall | 6 +++ kwin/bin/package_kwin_plugin | 9 ++++ kwin/src/kcm/breezydesktopeffectkcm.cpp | 1 - 5 files changed, 102 insertions(+), 28 deletions(-) diff --git a/bin/breezy_kwin_setup b/bin/breezy_kwin_setup index ac35d7e..41b2cfb 100755 --- a/bin/breezy_kwin_setup +++ b/bin/breezy_kwin_setup @@ -52,9 +52,52 @@ fi if [ -z "$binary_path_arg" ] then - # download and unzip the binary - echo "Downloading to: ${tmp_dir}/$FILE_NAME" - curl -L "$binary_download_url" > "$FILE_NAME" + http_code=$(curl -s -o /dev/null -w "%{http_code}" -L "$binary_download_url" || echo "000") + + if [[ "$http_code" =~ ^(2|3) ]]; then + echo "Downloading to: ${tmp_dir}/$FILE_NAME" + curl -L "$binary_download_url" -o "$FILE_NAME" + else + check_command "git" + + # handle -v / --tag like the rest of the script + if [ "$1" = "--tag" ] && [ -n "$2" ]; then + requested_tag="$2" + fi + + # resolve tag: prefer requested_tag, then LATEST_RELEASE if already fetched, else query GitHub API + if [ -n "$requested_tag" ]; then + tag="$requested_tag" + else + tag=$(curl -s "https://api.github.com/repos/wheaney/breezy-desktop/releases/latest" \ + | grep -m1 '"tag_name":' \ + | sed -E 's/.*"tag_name":[[:space:]]*"([^"]+)".*/\1/') + fi + + if [ -z "$tag" ]; then + echo "Failed to determine latest tag for wheaney/breezy-desktop" 1>&2 + exit 1 + fi + + echo "Cloning wheaney/breezy-desktop (tag: ${tag})" + if git clone --depth 1 --branch "$tag" "https://github.com/wheaney/breezy-desktop.git" breezy-desktop 2>/dev/null; then + pushd breezy-desktop > /dev/null + else + git clone "https://github.com/wheaney/breezy-desktop.git" breezy-desktop + pushd breezy-desktop > /dev/null + git checkout "$tag" + fi + + echo "Downloading git submodules" + git submodule sync --recursive || true + git submodule update --init --recursive modules/XRLinuxDriver + git submodule update --init --recursive ui/modules/PyXRLinuxDriverIPC + + LOCAL_BUILD_SYSTEM=1 bin/package_kwin --download-driver + FILE_NAME="breezyKWin-$ARCH.tar.gz" + cp "out/$FILE_NAME" "$tmp_dir" + popd > /dev/null + fi else FILE_NAME=$(basename $binary_path_arg) if [[ "$binary_path_arg" = /* ]]; then diff --git a/bin/package_kwin b/bin/package_kwin index 9d71536..4153a99 100755 --- a/bin/package_kwin +++ b/bin/package_kwin @@ -30,43 +30,60 @@ mkdir -p $PACKAGE_DIR/bin copy_and_inject_ua "$XR_DRIVER_DIR/bin/ua.sh" "$PACKAGE_DIR/bin" "$KWIN_DIR/bin/setup" "$KWIN_DIR/bin/breezy_kwin_uninstall" XR_DRIVER_BINARY=$XR_DRIVER_DIR/out/xrDriver-$ARCH.tar.gz +if [ "$1" == "--download-driver" ]; then + driver_download_url="https://github.com/wheaney/XRLinuxDriver/releases/latest/download/xrDriver-$ARCH.tar.gz" + setup_download_url="https://github.com/wheaney/XRLinuxDriver/releases/latest/download/xr_driver_setup" -if [ ! -e "$XR_DRIVER_BINARY" ] || [ "$1" == "--rebuild-driver" ] || [ "$1" == "--rebuild-all" ]; then - # if a file exists at custom_banner_config.yml, copy it to the xrealAirLinuxDriver directory - if [ -e "$VULKAN_DIR/custom_banner_config.yml" ]; then - cp $VULKAN_DIR/custom_banner_config.yml $XR_DRIVER_DIR + curl -L "$driver_download_url" > "$PACKAGE_DIR/xrDriver.tar.gz" + curl -L "$setup_download_url" > "$PACKAGE_DIR/bin/xr_driver_setup" + chmod +x "$PACKAGE_DIR/bin/xr_driver_setup" + + echo "Downloaded XRLinuxDriver binary and setup script, with hashes:" + echo "xrDriver-$ARCH.tar.gz: $(sha256sum "$PACKAGE_DIR/xrDriver.tar.gz")" + echo "xr_driver_setup: $(sha256sum "$PACKAGE_DIR/bin/xr_driver_setup")" +else + if [ ! -e "$XR_DRIVER_BINARY" ] || [ "$1" == "--rebuild-driver" ] || [ "$1" == "--rebuild-all" ]; then + # if a file exists at custom_banner_config.yml, copy it to the xrealAirLinuxDriver directory + if [ -e "$VULKAN_DIR/custom_banner_config.yml" ]; then + cp $VULKAN_DIR/custom_banner_config.yml $XR_DRIVER_DIR + fi + + pushd $XR_DRIVER_DIR + + # strange issue where the base library produces a .so file if the build is not cleaned + rm -rf build/ + + docker-build/init.sh + docker-build/run-build.sh $ARCH + popd fi - pushd $XR_DRIVER_DIR + XR_DRIVER_TMP_DIR=$(mktemp -d -t xr-driver-XXXXXXXXXX) + pushd $XR_DRIVER_TMP_DIR + cp $XR_DRIVER_BINARY $XR_DRIVER_TMP_DIR/xrDriver.tar.gz + tar -xf $XR_DRIVER_TMP_DIR/xrDriver.tar.gz - # strange issue where the base library produces a .so file if the build is not cleaned - rm -rf build/ - - docker-build/init.sh - docker-build/run-build.sh $ARCH + XR_DRIVER_MANIFEST_LINE=$(sha256sum xr_driver/manifest) popd + rm -rf $XR_DRIVER_TMP_DIR + + cp $XR_DRIVER_BINARY $PACKAGE_DIR/xrDriver.tar.gz + cp $XR_DRIVER_DIR/bin/xr_driver_setup $PACKAGE_DIR/bin/xr_driver_setup fi -XR_DRIVER_TMP_DIR=$(mktemp -d -t xr-driver-XXXXXXXXXX) -pushd $XR_DRIVER_TMP_DIR -cp $XR_DRIVER_BINARY $XR_DRIVER_TMP_DIR/xrDriver.tar.gz -tar -xf $XR_DRIVER_TMP_DIR/xrDriver.tar.gz - -XR_DRIVER_MANIFEST_LINE=$(sha256sum xr_driver/manifest) -popd -rm -rf $XR_DRIVER_TMP_DIR - -cp $XR_DRIVER_BINARY $PACKAGE_DIR/xrDriver.tar.gz -cp $XR_DRIVER_DIR/bin/xr_driver_setup $PACKAGE_DIR/bin - # alternative to symlinking, since the Docker build can't resolve to the parent directory # this file is in .gitignore so it doesn't get duplicated cp ui/modules/PyXRLinuxDriverIPC/xrdriveripc.py $KWIN_DIR/src/xrdriveripc/xrdriveripc.py cp VERSION $KWIN_DIR pushd $KWIN_DIR -docker-build/init.sh -docker-build/run-build.sh $BUILD_ARCH +if [ -z "${LOCAL_BUILD_SYSTEM+x}" ]; then + docker-build/init.sh + docker-build/run-build.sh "$BUILD_ARCH" +else + echo "LOCAL_BUILD_SYSTEM set; skipping Docker build" + bin/package_kwin_plugin +fi popd cp $KWIN_DIR/out/breezyKWinPlugin-$BUILD_ARCH.tar.gz $PACKAGE_DIR/breezyKWinPlugin.tar.gz diff --git a/kwin/bin/breezy_kwin_uninstall b/kwin/bin/breezy_kwin_uninstall index b14d6de..82f9c49 100755 --- a/kwin/bin/breezy_kwin_uninstall +++ b/kwin/bin/breezy_kwin_uninstall @@ -31,6 +31,7 @@ EFFECT_ID="breezy_desktop" EFFECT_DIR="$XDG_DATA_HOME/kwin/effects/$EFFECT_ID" PLUGIN_SO="$LIB_HOME/qt6/plugins/kwin/effects/plugins/${EFFECT_ID}.so" CONFIG_SO="$LIB_HOME/qt6/plugins/kwin/effects/configs/${EFFECT_ID}_config.so" +BREEZY_LIBRARY_DIR="$LIB_HOME/breezy_kwin" if [[ -d "$EFFECT_DIR" ]]; then [ "$for_install" -eq 0 ] && echo "Removing $EFFECT_DIR and its contents" @@ -47,6 +48,11 @@ if [[ -f "$CONFIG_SO" ]]; then $SUDO rm -f "$CONFIG_SO" fi +if [[ -d "$BREEZY_LIBRARY_DIR" ]]; then + [ "$for_install" -eq 0 ] && echo "Removing $BREEZY_LIBRARY_DIR and its contents" + $SUDO rm -rf "$BREEZY_LIBRARY_DIR" +fi + if [[ -e "$XDG_BIN_HOME/xr_driver_uninstall" && "$for_install" -eq 0 ]]; then echo "Uninstalling XRLinuxDriver" sudo "$XDG_BIN_HOME/xr_driver_uninstall" diff --git a/kwin/bin/package_kwin_plugin b/kwin/bin/package_kwin_plugin index a5f4346..4c88db5 100755 --- a/kwin/bin/package_kwin_plugin +++ b/kwin/bin/package_kwin_plugin @@ -3,6 +3,15 @@ # exit when any command fails set -e +check_command() { + if ! command -v "$1" &>/dev/null; then + echo "Please install \"$1\" and make sure it's available in your \$PATH, then rerun the setup." + exit 1 + fi +} +check_command "cmake" +check_command "make" + ARCH=${ARCH:-$(uname -m)} if [ -n "${STEAMOS+x}" ]; then ARCH="steamos" diff --git a/kwin/src/kcm/breezydesktopeffectkcm.cpp b/kwin/src/kcm/breezydesktopeffectkcm.cpp index 105163f..03cc41f 100644 --- a/kwin/src/kcm/breezydesktopeffectkcm.cpp +++ b/kwin/src/kcm/breezydesktopeffectkcm.cpp @@ -18,7 +18,6 @@ #include #include #include -#include #include #include #include