#!/bin/bash
set -euo pipefail

# Point to an installed source tree, or an explicitly prepared patched tree.
source_dir=${1:-/usr/share/gocode/src/github.com/linuxdeepin/go-lib}
if [[ $# -gt 1 ]]; then
    echo "Usage: $0 [go-lib-source-directory]" >&2
    exit 2
fi
script_dir=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)
for tool in "${CC:-cc}" pkg-config xvfb-run xauth; do
    command -v "$tool" >/dev/null || { echo "Missing tool: $tool" >&2; exit 2; }
done
for file in gdk_pixbuf_utils.c gdk_pixbuf_utils.h; do
    [[ -f "$source_dir/gdkpixbuf/$file" ]] || { echo "Missing source: $source_dir/gdkpixbuf/$file" >&2; exit 2; }
done
pkg-config --exists gtk+-3.0 cairo-xlib x11
work_dir=$(mktemp -d -t go-lib-pixmap-regression.XXXXXXXX)
trap 'rm -rf -- "$work_dir"' EXIT
read -r -a pkg_cflags <<< "$(pkg-config --cflags gtk+-3.0 cairo-xlib x11)"
read -r -a pkg_libs <<< "$(pkg-config --libs gtk+-3.0 cairo-xlib x11)"
"${CC:-cc}" -std=c11 -O2 -g -Wall -Wextra -Wno-deprecated-declarations \
    "${pkg_cflags[@]}" -I "$source_dir/gdkpixbuf" \
    "$script_dir/pixmap-regression.c" "$source_dir/gdkpixbuf/gdk_pixbuf_utils.c" \
    -o "$work_dir/pixmap-regression" "${pkg_libs[@]}" -lm

xvfb-run -a -s '-screen 0 800x600x24 -nolisten tcp' \
    "$work_dir/pixmap-regression" --expected-depth 24 --label screen0-24bit
xvfb-run -a -s '-screen 0 800x600x16 -nolisten tcp' \
    "$work_dir/pixmap-regression" --expected-depth 16 --label screen0-16bit
xvfb-run -a -s '-screen 0 800x600x24 -screen 1 640x480x16 -nolisten tcp' \
    bash -c 'export DISPLAY="${DISPLAY%.*}.1"; exec "$@"' bash \
    "$work_dir/pixmap-regression" --expected-depth 16 --label screen1-16bit
