diff --git a/example-os/Makefile b/example-os/Makefile index 0a4b3ea..aba991b 100644 --- a/example-os/Makefile +++ b/example-os/Makefile @@ -43,4 +43,4 @@ test: $(tests) Makefile .PHONY: $(tests) $(tests): $(os_filename) ../deploy-screenshots Makefile - (cd .. && ./utils/gui-wrapper.sh 800x600x24 ./$@.sh example-os/$<) + cd .. && ./utils/gui-wrapper.sh 800x600x24 ./$@.sh example-os/$< diff --git a/utils/gui-wrapper.sh b/utils/gui-wrapper.sh index 616540c..f6f2e92 100755 --- a/utils/gui-wrapper.sh +++ b/utils/gui-wrapper.sh @@ -9,13 +9,19 @@ bg="$(mktemp --suffix='.png')" anim="$(mktemp -d)" # Create solid black background -convert -size "$(echo "$resolution" | cut -d 'x' -f1-2)" tile:pattern:checkerboard "$bg" +convert -size "$(echo "$resolution" | cut -d 'x' -f1-2)" \ + tile:pattern:checkerboard \ + -auto-level +level-colors 'gray(192),gray(128)' \ + "$bg" -xvfb-run -a --server-args="-screen 0 ${resolution}" sh -c 'fluxbox 2>/dev/null & sleep 5; fbsetbg -f "'"$bg"'"; sleep 5; (for i in `seq 100`; do scrot "'"$anim"'/$(printf %03d.png $i)"; sleep 0.2; done) & "$@"' utils/gui-wrapper.sh-subshell "$@" +xvfb-run -a --server-args="-screen 0 ${resolution}" sh -c 'fluxbox 2>/dev/null & sleep 5; fbsetbg -f "'"$bg"'"; sleep 5; utils/screenshots-loop.sh "'"$anim"'" & "$@"' utils/gui-wrapper.sh-subshell "$@" -if -n "$(find "$anim"/ -maxdepth 1 -type f -name '*.png')"; then - convert $(ls "$anim"/*.png | sort) ./deploy-screenshots/anim.gif +touch "$anim/stop-screenshots" +for i in `seq 60`; do if test -e "$anim/anim-done"; then break; fi; sleep 1; done +if test -e "$anim/anim.gif"; then + mv "$anim/anim.gif" "./deploy-screenshots/$(basename "$1" .sh)-anim.gif" fi +cp "$bg" "./deploy-screenshots/$(basename "$1" .sh)-bg-$(basename "$bg")" # Cleanup rm "$bg" diff --git a/utils/screenshots-loop.sh b/utils/screenshots-loop.sh new file mode 100755 index 0000000..6a20b27 --- /dev/null +++ b/utils/screenshots-loop.sh @@ -0,0 +1,23 @@ +#!/bin/sh + +set -e + +if test $# -ne 1 || test "$1" = "-h" -o "$1" = "--help"; then + echo "Usage: $0 path/to/screenshots/directory" + exit 1 +fi +screenshots_dir="$1" + +for i in `seq 100`; do + if test -e "$screenshots_dir/stop-screenshots"; then + break + fi + scrot "$screenshots_dir/$(printf %03d.png $i)" || break + sleep 0.2 +done + +if test -n "$(find "$screenshots_dir/" -maxdepth 1 -type f -name '*.png')"; then + convert $(ls "$screenshots_dir"/*.png | sort) "$screenshots_dir/anim.gif" +fi + +touch "$screenshots_dir/anim-done"