111 lines
1.7 KiB
Bash
Executable File
111 lines
1.7 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
die () {
|
|
echo "$@" >&2
|
|
exit 1
|
|
}
|
|
|
|
command_list () {
|
|
while read cmd rest
|
|
do
|
|
case "$cmd" in
|
|
"#"* | '')
|
|
# Ignore comments and allow empty lines
|
|
continue
|
|
;;
|
|
*)
|
|
case "$exclude_programs" in
|
|
*":$cmd:"*)
|
|
;;
|
|
*)
|
|
echo "$cmd $rest"
|
|
;;
|
|
esac
|
|
esac
|
|
done <"$1"
|
|
}
|
|
|
|
category_list () {
|
|
echo "$1" |
|
|
cut -d' ' -f2- |
|
|
tr ' ' '\012' |
|
|
grep -v '^$' |
|
|
LC_ALL=C sort -u
|
|
}
|
|
|
|
define_categories () {
|
|
echo
|
|
echo "/* Command categories */"
|
|
bit=0
|
|
echo "$1" |
|
|
while read cat
|
|
do
|
|
echo "#define CAT_$cat (1UL << $bit)"
|
|
bit=$(($bit+1))
|
|
done
|
|
test "$bit" -gt 32 && die "Urgh.. too many categories?"
|
|
}
|
|
|
|
define_category_names () {
|
|
echo
|
|
echo "/* Category names */"
|
|
echo "static const char *category_names[] = {"
|
|
bit=0
|
|
echo "$1" |
|
|
while read cat
|
|
do
|
|
echo " \"$cat\", /* (1UL << $bit) */"
|
|
bit=$(($bit+1))
|
|
done
|
|
echo " NULL"
|
|
echo "};"
|
|
}
|
|
|
|
print_command_list () {
|
|
echo "static struct cmdname_help command_list[] = {"
|
|
|
|
echo "$1" |
|
|
while read cmd rest
|
|
do
|
|
synopsis=
|
|
while read line
|
|
do
|
|
case "$line" in
|
|
"$cmd - "*)
|
|
synopsis=${line#$cmd - }
|
|
break
|
|
;;
|
|
esac
|
|
done <"Documentation/$cmd.txt"
|
|
|
|
printf '\t{ "%s", N_("%s"), 0' "$cmd" "$synopsis"
|
|
printf " | CAT_%s" $rest
|
|
echo " },"
|
|
done
|
|
echo "};"
|
|
}
|
|
|
|
exclude_programs=:
|
|
while test "--exclude-program" = "$1"
|
|
do
|
|
shift
|
|
exclude_programs="$exclude_programs$1:"
|
|
shift
|
|
done
|
|
|
|
commands="$(command_list "$1")"
|
|
categories="$(category_list "$commands")"
|
|
|
|
echo "/* Automatically generated by generate-cmdlist.sh */
|
|
struct cmdname_help {
|
|
const char *name;
|
|
const char *help;
|
|
uint32_t category;
|
|
};
|
|
"
|
|
define_categories "$categories"
|
|
echo
|
|
define_category_names "$categories"
|
|
echo
|
|
print_command_list "$commands"
|