#!/usr/bin/env bash

set -e

function show_usage {
    echo "Usage: $0 [options] <dirs>+"
    echo
    echo "Generate the sdbus++ sources from a directory path."
    echo
    echo "Options:"
    echo "    --tool <path>    - path to processing tool (default 'sdbus++')."
    echo "    --output <path>  - directory to place output files (default '.')."
    echo "    --list-all       - include all generated files in stdout list."
    echo "    --jobs <N>       - number to run in parallel (default: $(nproc))."
    echo "    <dirs>+          - any number of subdirectories to generate."
    echo
    echo "The output on stdout is a list of generated files, which is intended"
    echo "to be consumed by build systems, such as Meson."
    echo
    echo "This tool, by default, generates all files that are able to be"
    echo "created by sdbus++.  The output is a list of compilable sources that"
    echo "were generated by the tool.  The tool may generate outputs which are"
    echo "not able to be compiled, such as documentation, but it does not put"
    echo "them into stdout unless --list-all is given."
}

# Ensure that no more than ${parallel} jobs are running at a time and if so
# wait for at least one to finish.
function wait_n {
    while true;
    do
        if [[ $(jobs -r -p | wc -l) -ge $parallel ]];
        then
            wait -n
        else
            break
        fi
    done
}

sdbuspp="sdbus++"
outputdir="."
listall="no"
parallel=$(nproc)

options="$(getopt -o ho:t:j: --long help,list-all,output:,tool:,jobs: -- "$@")"
eval set -- "$options"

while true;
do
    case "$1" in
        -h | --help)
            show_usage
            exit
            ;;

        -j | --jobs)
            shift
            parallel="$1"
            shift
            ;;

        --list-all)
            listall="yes"
            shift
            ;;

        -o | --output)
            shift
            outputdir="$1"
            shift
            ;;

        -t | --tool)
            shift
            sdbuspp="$1"
            shift
            ;;

        --)
            shift
            break
            ;;
    esac
done

if [ "x" == "x$@" ];
then
    show_usage
    exit 1
fi

for d in $@;
do
    interfaces="$(find $d -name '*.interface.yaml')"

    for i in $interfaces;
    do
        path="${i%.interface.yaml}"
        iface="${path//\//.}"

        mkdir -p $outputdir/$path

        $sdbuspp interface server-header $iface > $outputdir/$path/server.hpp &
        echo $outputdir/$path/server.hpp
        wait_n

        $sdbuspp interface server-cpp $iface > $outputdir/$path/server.cpp &
        echo $outputdir/$path/server.cpp
        wait_n

        $sdbuspp interface client-header $iface > $outputdir/$path/client.hpp &
        echo $outputdir/$path/client.hpp
        wait_n

        $sdbuspp interface markdown $iface > $outputdir/$path.md &
        # markdown files aren't recognized as source files by meson, so don't
        # emit them by default.
        if [ "xyes" == "x$listall" ];
        then
            echo $outputdir/$path.md
        fi
        wait_n
    done
    wait # finish all before continuing

    errors="$(find $d -name '*.errors.yaml')"

    for e in $errors;
    do
        path="${e%.errors.yaml}"
        iface="${path//\//.}"

        mkdir -p $outputdir/$path

        $sdbuspp error exception-header $iface > $outputdir/$path/error.hpp &
        echo $outputdir/$path/error.hpp
        wait_n

        $sdbuspp error exception-cpp $iface > $outputdir/$path/error.cpp &
        echo $outputdir/$path/error.cpp
        wait_n

        $sdbuspp error markdown $iface >> $outputdir/$path.md &
        # markdown files aren't recognized as source files by meson, so don't
        # emit them by default.
        if [ "xyes" == "x$listall" ];
        then
            echo $outputdir/$path.md
        fi
        wait_n
    done
    wait # finish all before continuing
done
