blob: bc60ca016711eebf8b01a6175f236a0212372277 [file] [log] [blame]
#!/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
;;
*)
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