#!/bin/sh
# Build the shipped examples and a small smoke test against libtinyalsa-dev,
# then run the smoke test (which does not need any sound hardware).
set -eu

if [ -n "${DEB_HOST_GNU_TYPE:-}" ]; then
    CROSS_COMPILE="$DEB_HOST_GNU_TYPE-"
else
    CROSS_COMPILE=
fi
CC="${CROSS_COMPILE}gcc"
PKG_CONFIG="${CROSS_COMPILE}pkg-config"

cd "$AUTOPKGTEST_TMP"

for ex in pcm-readi pcm-writei; do
    echo "Building example $ex"
    # shellcheck disable=SC2046
    "$CC" -Wall -Werror -o "$ex" "/usr/share/doc/libtinyalsa-dev/examples/$ex.c" \
        $("$PKG_CONFIG" --cflags --libs tinyalsa)
done

cat > smoke.c <<'EOF'
#include <stdio.h>
#include <tinyalsa/asoundlib.h>
#include <tinyalsa/version.h>

#define CHECK(x) do { if (!(x)) { fprintf(stderr, "FAIL: %s\n", #x); return 1; } } while (0)

int main(void)
{
    struct pcm *pcm;

    printf("tinyalsa version %s\n", TINYALSA_VERSION_STRING);
    CHECK(TINYALSA_VERSION_MAJOR == 2);

    CHECK(pcm_format_to_bits(PCM_FORMAT_S16_LE) == 16);
    CHECK(pcm_format_to_bits(PCM_FORMAT_S24_3LE) == 24);
    CHECK(pcm_format_to_bits(PCM_FORMAT_S32_LE) == 32);

    /* Opening a nonexistent card must fail gracefully. */
    pcm = pcm_open(1000, 1000, PCM_OUT, NULL);
    CHECK(pcm != NULL);
    CHECK(!pcm_is_ready(pcm));
    CHECK(pcm_close(pcm) == 0);
    CHECK(mixer_open(1000) == NULL);
    CHECK(pcm_params_get(1000, 1000, PCM_OUT) == NULL);

    printf("OK\n");
    return 0;
}
EOF

echo "Building smoke test"
# shellcheck disable=SC2046
"$CC" -Wall -Werror -o smoke smoke.c $("$PKG_CONFIG" --cflags --libs tinyalsa)
echo "Running smoke test"
./smoke
