Blame generate-cmdlist.sh

Packit 4511e4
#!/bin/sh
Packit 4511e4
Packit 4511e4
die () {
Packit 4511e4
	echo "$@" >&2
Packit 4511e4
	exit 1
Packit 4511e4
}
Packit 4511e4
Packit 4511e4
command_list () {
Packit 4511e4
	grep -v '^#' "$1"
Packit 4511e4
}
Packit 4511e4
Packit 4511e4
get_categories () {
Packit 4511e4
	tr ' ' '\n'|
Packit 4511e4
	grep -v '^$' |
Packit 4511e4
	sort |
Packit 4511e4
	uniq
Packit 4511e4
}
Packit 4511e4
Packit 4511e4
category_list () {
Packit 4511e4
	command_list "$1" |
Packit 4511e4
	cut -c 40- |
Packit 4511e4
	get_categories
Packit 4511e4
}
Packit 4511e4
Packit 4511e4
get_synopsis () {
Packit 4511e4
	sed -n '
Packit 4511e4
		/^NAME/,/'"$1"'/H
Packit 4511e4
		${
Packit 4511e4
			x
Packit 4511e4
			s/.*'"$1"' - \(.*\)/N_("\1")/
Packit 4511e4
			p
Packit 4511e4
		}' "Documentation/$1.txt"
Packit 4511e4
}
Packit 4511e4
Packit 4511e4
define_categories () {
Packit 4511e4
	echo
Packit 4511e4
	echo "/* Command categories */"
Packit 4511e4
	bit=0
Packit 4511e4
	category_list "$1" |
Packit 4511e4
	while read cat
Packit 4511e4
	do
Packit 4511e4
		echo "#define CAT_$cat (1UL << $bit)"
Packit 4511e4
		bit=$(($bit+1))
Packit 4511e4
	done
Packit 4511e4
	test "$bit" -gt 32 && die "Urgh.. too many categories?"
Packit 4511e4
}
Packit 4511e4
Packit 4511e4
define_category_names () {
Packit 4511e4
	echo
Packit 4511e4
	echo "/* Category names */"
Packit 4511e4
	echo "static const char *category_names[] = {"
Packit 4511e4
	bit=0
Packit 4511e4
	category_list "$1" |
Packit 4511e4
	while read cat
Packit 4511e4
	do
Packit 4511e4
		echo "	\"$cat\", /* (1UL << $bit) */"
Packit 4511e4
		bit=$(($bit+1))
Packit 4511e4
	done
Packit 4511e4
	echo "	NULL"
Packit 4511e4
	echo "};"
Packit 4511e4
}
Packit 4511e4
Packit 4511e4
print_command_list () {
Packit 4511e4
	echo "static struct cmdname_help command_list[] = {"
Packit 4511e4
Packit 4511e4
	command_list "$1" |
Packit 4511e4
	while read cmd rest
Packit 4511e4
	do
Packit 4511e4
		printf "	{ \"$cmd\", $(get_synopsis $cmd), 0"
Packit 4511e4
		for cat in $(echo "$rest" | get_categories)
Packit 4511e4
		do
Packit 4511e4
			printf " | CAT_$cat"
Packit 4511e4
		done
Packit 4511e4
		echo " },"
Packit 4511e4
	done
Packit 4511e4
	echo "};"
Packit 4511e4
}
Packit 4511e4
Packit 4511e4
echo "/* Automatically generated by generate-cmdlist.sh */
Packit 4511e4
struct cmdname_help {
Packit 4511e4
	const char *name;
Packit 4511e4
	const char *help;
Packit 4511e4
	uint32_t category;
Packit 4511e4
};
Packit 4511e4
"
Packit 4511e4
define_categories "$1"
Packit 4511e4
echo
Packit 4511e4
define_category_names "$1"
Packit 4511e4
echo
Packit 4511e4
print_command_list "$1"