#!/bin/bash
# Copyright © 2019-2025 Collabora Ltd.
# SPDX-License-Identifier: BSD-3-Clause
# (See debian/copyright)

set -e
set -u
set -x

arch="$(dpkg --print-architecture)"

# Test that we can compile a simple project using CMake.

tmpdir="$(mktemp -d)"
cleanup () {
    rm -fr "$tmpdir"
}
trap cleanup 0 INT QUIT ABRT PIPE TERM

n=0
failed=

gcc_major=$(gcc -dumpversion)
clang_major=$(clang -dumpversion | cut -d. -f1)

# Default compiler, no special tricks
srcdir="$(pwd)"
cd "$tmpdir"
cmake "$srcdir/examples/glib"
cd "$srcdir"
make -C "$tmpdir" VERBOSE=1
"$tmpdir/hello"
make -C "$tmpdir" VERBOSE=1 clean
n=$((n + 1))
echo "ok $n - default compiler"

# Non-default toolchains
for cc in \
    clang \
    "clang-${clang_major}" \
    gcc \
    "gcc-${gcc_major}" \
    gcc-14 \
; do
    n=$((n + 1))

    case "$cc" in
        (clang | "clang-${clang_major}" | gcc | "gcc-${gcc_major}")
            # default version, guaranteed to be present in SDK
            ;;

        (gcc-14)
            # backport, supported on all architectures except i386
            if [ "$arch" = i386 ]; then
                echo "ok $n - $cc # SKIP not supported on i386"
                continue
            fi
            ;;

        (*)
            if ! command -v "$cc" >/dev/null; then
                echo "ok $n # SKIP $cc not in PATH"
                continue
            fi
            ;;
    esac

    toolchain="/usr/share/steamrt/cmake/${cc}.cmake"

    if \
        mkdir "$tmpdir/b" \
        && \
            CFLAGS=-O1 \
            CXXFLAGS=-O1 \
            cmake \
                -S "$(pwd)/examples/glib" \
                -B "$tmpdir/b" \
                -DCMAKE_TOOLCHAIN_FILE="$toolchain" \
                -GNinja \
        && ninja -v -C "$tmpdir/b" \
        && file "$tmpdir/b/hello" \
        && "$tmpdir/b/hello" \
    ; then
        echo "ok $n - ${cc} with toolchain file"
    else
        echo "not ok $n - ${cc} with toolchain file"
        failed=1
    fi

    ninja -v -C "$tmpdir/b" clean
    rm -fr "$tmpdir/b"
done

echo "1..$n"

if [ -n "$failed" ]; then
    exit 1
fi

# vim:set sw=4 sts=4 et ft=sh:
