#!/usr/bin/env bash

usage() {
    cat >&$1 <<EOF
Usage: $0 [OPTIONS]

Read a list of files relative to ardupilot's root directory and output the
non-libraries subsystems they belong to.

Options:
    --show-paths, -p    Print also file paths after the library name.
    --help, -h          Show this help message.
EOF
}

show_paths=false

while [[ -n $1 ]]; do
    case "$1" in
    --show-paths|-p)
        show_paths=true
        ;;
    --help|-h)
        usage 1
        exit 0
        ;;
    *)
        usage 2
        exit 1
        ;;
    esac

    shift
done

SCRIPT_DIR=$(dirname $(realpath ${BASH_SOURCE[0]}))
ROOT=$(dirname $(git -C $SCRIPT_DIR rev-parse --git-dir))

if $show_paths; then
    sedcmd="s,\([^/]\+\).*,\1\t\0,"
else
    sedcmd="s,\([^/]\+\).*,\1,"
fi

grep -v "^libraries" | \
    sed $sedcmd | \
    sort | \
    uniq | \
    if $show_paths; then
        while read d f; do
            [[ -d "$ROOT/$d" ]] && printf "%s\t%s\n" "$d" "$f"
        done
    else
        while read d; do
            [[ -d "$ROOT/$d" ]] && echo "$d"
        done
    fi
