flat7th

sh:make-module-graph.sh

created 2025-10-20 modified 2025-10-20 
make-module-graph.sh
#!/bin/bash

PNG_FILENAME=module-graph.png

put_header()
{
cat <<EOF
digraph G1 {
  edge [len=2];
  "(module A is using)" -> "(module B)";
EOF
}

put_trailer()
{
cat <<EOF
}
EOF
}

put_main()
{
	while read MOD1 SIZE COUNT MOD2LIST
	do
		if [ -n "$MOD2LIST" ]
		then
			for MOD2 in $(echo $MOD2LIST| tr "," " ") 
			do
				echo "  $MOD2 -> $MOD1;"
			done
		else
			echo "  $MOD1;"
		fi
	done
}

put_dot()
{
	put_header

	lsmod \
		| sed -e '1 d'\
		| sort \
		| put_main

	put_trailer
}

main()
{
	DOTCMD=/usr/bin/dot
	#DOTCMD=/usr/bin/neato

	put_dot \
		| $DOTCMD -T png -o $PNG_FILENAME
}

main