53 lines
1.9 KiB
Bash
53 lines
1.9 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
targets=(@PSC_TARGETS_SH@)
|
|
edges=(@PSC_TARGET_EDGES_SH@)
|
|
output_dir='@PSC_OUTPUT_DIR@'
|
|
format='@PSC_FORMAT@'
|
|
dot_exe='@PSC_DOT_EXECUTABLE@'
|
|
mkdir -p "$output_dir"
|
|
dot_file="$output_dir/radio_cmake_targets.dot"
|
|
image_file="$output_dir/radio_cmake_targets.$format"
|
|
{
|
|
echo 'digraph "radio cmake_targets" {'
|
|
echo 'rankdir=LR;'
|
|
echo 'splines=ortho;'
|
|
echo 'concentrate=true;'
|
|
echo 'forcelabels=true;'
|
|
echo 'graph [fontname="Consolas", label="radio cmake_targets", labelloc=t, fontsize=18];'
|
|
echo 'node [shape=box, style="rounded,filled", fontname="Consolas", fontsize=10];'
|
|
echo 'edge [fontname="Consolas", fontsize=9];'
|
|
for target in "${targets[@]}"; do
|
|
safe=${target//\"/\\\"}
|
|
echo "\"$safe\" [label=\"$safe\", tooltip=\"$safe\", fillcolor=\"#dcfce7\"];"
|
|
done
|
|
for edge in "${edges[@]}"; do
|
|
left=${edge%%|*}
|
|
right=${edge#*|}
|
|
left=${left//\"/\\\"}
|
|
right=${right//\"/\\\"}
|
|
echo "\"$left\" -> \"$right\" [xlabel=\"links\"];"
|
|
done
|
|
echo 'subgraph cluster_legend {'
|
|
echo 'label="legend";'
|
|
echo 'style="rounded,dashed";'
|
|
echo '"legend_target" [label="cmake target", fillcolor="#dcfce7"];'
|
|
echo '"legend_edge" [label="edge = target_link_libraries / target dependency", fillcolor="#f8fafc"];'
|
|
echo '}'
|
|
echo '}'
|
|
} > "$dot_file"
|
|
"$dot_exe" "-T$format" "$dot_file" -o "$image_file"
|
|
items=(radio_directory_tree radio_module_dependency radio_cmake_targets radio_include_dependency radio_render_architecture)
|
|
{
|
|
echo '<!doctype html><meta charset="utf-8"><title>Radio Graphviz</title><h1>Radio Graphviz</h1><ul>'
|
|
for item in "${items[@]}"; do
|
|
file="$item.$format"
|
|
if [ -f "$output_dir/$file" ]; then
|
|
echo "<li><a href=\"$file\">$item</a></li>"
|
|
else
|
|
echo "<li>$item (not generated)</li>"
|
|
fi
|
|
done
|
|
echo '</ul>'
|
|
} > "$output_dir/index.html"
|