| #!/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 " <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." |
| } |
| |
| sdbuspp="sdbus++" |
| outputdir="." |
| listall="no" |
| |
| options="$(getopt -o ho:t: --long help,list-all,output:,tool: -- "$@")" |
| eval set -- "$options" |
| |
| while true; do |
| case "$1" in |
| -h | --help) |
| show_usage |
| exit |
| ;; |
| |
| --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 |
| |
| $sdbuspp interface server-cpp $iface > $outputdir/$path/server.cpp |
| echo $outputdir/$path/server.cpp |
| |
| $sdbuspp interface client-header $iface > $outputdir/$path/client.hpp |
| echo $outputdir/$path/client.hpp |
| |
| $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 |
| done |
| |
| 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 |
| |
| $sdbuspp error exception-cpp $iface > $outputdir/$path/error.cpp |
| echo $outputdir/$path/error.cpp |
| |
| $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 |
| done |
| done |