#! /bin/bash

set -ex

rustc --version
cargo --version

get_features() {
    module=${1%%/sys}
    case "$module" in
        gstreamer-validate)
            echo ""
            ;;
        *)
            echo "--features=v1_22"
            ;;
    esac
}

# First build and test all the crates with their relevant features
# Keep features in sync with below
for crate in gstreamer*/sys gstreamer-gl/*/sys; do
    if [ -e "$crate/Cargo.toml" ]; then
        echo "Building $crate with $(get_features "$crate")"
        cargo build --locked --color=always --manifest-path "$crate/Cargo.toml" $(get_features "$crate")
    fi
done

# Run tests for crates we can currently run.
# Other tests are broken currently.
for crate in gstreamer/sys \
             gstreamer-app/sys \
             gstreamer-audio/sys \
             gstreamer-base/sys \
             gstreamer-check/sys \
             gstreamer-controller/sys \
             gstreamer-gl/sys \
             gstreamer-gl/egl/sys \
             gstreamer-gl/wayland/sys \
             gstreamer-gl/x11/sys \
             gstreamer-mpegts/sys \
             gstreamer-net/sys \
             gstreamer-pbutils/sys \
             gstreamer-player/sys \
             gstreamer-rtsp-server/sys \
             gstreamer-rtsp/sys \
             gstreamer-sdp/sys \
             gstreamer-tag/sys \
             gstreamer-video/sys \
             gstreamer-webrtc/sys; do
    echo "Testing $crate with $(get_features $crate)"
    cargo test --locked --color=always --manifest-path $crate/Cargo.toml "$(get_features $crate)"
done
