#!/bin/sh
set -eu

# Use installed development files, without the source package's build-deps.
cd "$AUTOPKGTEST_TMP"
pkg-config --print-errors --exists zbar
pkg-config --print-errors --cflags --libs zbar
pkg-config --print-errors --static --cflags --libs zbar
libdir=$(pkg-config --variable=libdir zbar)
test -s "$libdir/libzbar.a"

cat > consumer.c <<'C'
#include <assert.h>
#include <zbar.h>

int main(void)
{
    unsigned int major, minor, patch;
    zbar_version(&major, &minor, &patch);
    zbar_image_scanner_t *scanner = zbar_image_scanner_create();
    zbar_decoder_t *decoder = zbar_decoder_create();
    zbar_processor_t *processor = zbar_processor_create(0);
    assert(scanner && decoder && processor);
    assert(zbar_image_scanner_set_config(scanner, ZBAR_NONE,
                                        ZBAR_CFG_ENABLE, 1) == 0);
    zbar_processor_destroy(processor);
    zbar_decoder_destroy(decoder);
    zbar_image_scanner_destroy(scanner);
    return 0;
}
C
cat > consumer.cpp <<'CPP'
#include <zbar.h>

int main()
{
    zbar::ImageScanner scanner;
    return scanner.set_config(zbar::ZBAR_NONE, zbar::ZBAR_CFG_ENABLE, 1);
}
CPP

# Keep the dependencies dynamic, but force all of ZBar's installed archive
# into the executable so every private link dependency is exercised.
private_libs=$(pkg-config --static --libs zbar | sed 's/-lzbar\([[:space:]]\|$\)/\1/g')
for language in c cpp; do
    compiler=cc
    test "$language" = c || compiler=c++
    # Word splitting of pkg-config output is intentional.
    "$compiler" $(pkg-config --cflags zbar) "consumer.$language" \
        -o "shared-$language" $(pkg-config --libs zbar)
    "./shared-$language"
    "$compiler" $(pkg-config --static --cflags zbar) "consumer.$language" \
        -o "archive-$language" -Wl,--whole-archive "$libdir/libzbar.a" \
        -Wl,--no-whole-archive $private_libs
    "./archive-$language"
    if readelf -d "archive-$language" | grep -q 'NEEDED.*libzbar\.so'; then
        echo 'The archive consumer unexpectedly links shared libzbar' >&2
        exit 1
    fi
    echo "$language shared and archive consumers: PASS"
done
dpkg-query -W -f='${binary:Package} ${Version}\n' libzbar-dev
