#!/bin/sh
set -eu

work=$(mktemp -d)
trap 'rm -rf "$work"' EXIT HUP INT TERM

# Check the installed shared-library ABI and pkg-config metadata.
cc -std=c11 -Wall -Wextra -Werror debian/tests/consumer.c \
    $(pkg-config --cflags --libs libcanard) -o "$work/shared"
"$work/shared"

# CMake consumers must get the same headers, ABI guard and shared library.
cat > "$work/CMakeLists.txt" <<EOF
cmake_minimum_required(VERSION 3.22)
project(DroneCANConsumer C)
find_package(libcanard 0.2 CONFIG REQUIRED)
add_executable(consumer "$PWD/debian/tests/consumer.c")
target_link_libraries(consumer PRIVATE DroneCAN::canard)
EOF
cmake -S "$work" -B "$work/build"
cmake --build "$work/build"
"$work/build/consumer"

# Reject mixing the shared library with an incompatible feature configuration.
if cc -std=c11 -DCANARD_ENABLE_CANFD=1 $(pkg-config --cflags libcanard) \
    -fsyntax-only debian/tests/consumer.c > "$work/mismatch.log" 2>&1; then
    echo 'Shared-library headers accepted an incompatible CAN FD ABI' >&2
    exit 1
fi
grep -q 'Incompatible shared libcanard configuration' "$work/mismatch.log"

# Custom applications compile the packaged source using their own configuration.
cc -std=c11 -Wall -Wextra -Werror \
    -DCANARD_ENABLE_CANFD=1 -DCANARD_MULTI_IFACE=1 -DCANARD_ENABLE_DEADLINE=1 \
    -DCANARD_ALLOCATE_SEM=1 -DCANARD_ENABLE_ASSERTS=1 \
    -I/usr/share/libcanard debian/tests/consumer.c /usr/share/libcanard/canard.c \
    -o "$work/custom"
"$work/custom"
