Skip to content
Snippets Groups Projects
Unverified Commit 57a95b08 authored by Matthias Schiffer's avatar Matthias Schiffer
Browse files

contrib: depdot: use processed package info

Instead of poorly parsing Makefiles using grep, use OpenWrt's processed
package info files. This fixes handling of DEPENDS fields spanning
multiple lines and adds support for source packages building multiple
binary packages.

Closes #2814
parent 8c48f20c
No related branches found
No related tags found
No related merge requests found
...@@ -2,7 +2,6 @@ ...@@ -2,7 +2,6 @@
# Script to output the dependency graph of Gluon's packages # Script to output the dependency graph of Gluon's packages
# Limitations: # Limitations:
# * Works only if directory names and package names are the same (true for all Gluon packages)
# * Doesn't show dependencies through virtual packages correctly # * Doesn't show dependencies through virtual packages correctly
set -e set -e
...@@ -16,7 +15,7 @@ escape_name() { ...@@ -16,7 +15,7 @@ escape_name() {
echo -n "_$1" | tr -c '[:alnum:]' _ echo -n "_$1" | tr -c '[:alnum:]' _
} }
print_node () { print_node() {
echo "$(escape_name "$1") [label=\"$1\", shape=box];" echo "$(escape_name "$1") [label=\"$1\", shape=box];"
} }
...@@ -24,19 +23,34 @@ print_dep() { ...@@ -24,19 +23,34 @@ print_dep() {
echo "$(escape_name "$1") -> $(escape_name "$2");" echo "$(escape_name "$1") -> $(escape_name "$2");"
} }
echo 'digraph G {' print_package() {
local package="$1" depends="$2"
for makefile in ./package/*/Makefile; do # shellcheck disable=SC2086
dir="$(dirname "$makefile")" set -- $depends
package="$(basename "$dir")"
deps=$(grep -w DEPENDS "$makefile" | cut -d= -f2 | tr -d +)
print_node "$package" print_node "$package"
for dep in $deps; do for dep in "$@"; do
print_node "$dep" print_node "$dep"
print_dep "$package" "$dep" print_dep "$package" "$dep"
done done
}
make -C openwrt -s prepare-tmpinfo
echo 'digraph G {'
cat ./openwrt/tmp/info/.packageinfo-feeds_gluon_base_* | while read -r key value; do
case "$key" in
'Package:')
package="$value"
;;
'Depends:')
depends="${value//+/}"
;;
'@@')
print_package "$package" "$depends"
;;
esac
done | sort -u done | sort -u
popd >/dev/null popd >/dev/null
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment