diff options
Diffstat (limited to 'generate-cmdlist.sh')
-rwxr-xr-x | generate-cmdlist.sh | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/generate-cmdlist.sh b/generate-cmdlist.sh new file mode 100755 index 000000000000..71158f7d8ba9 --- /dev/null +++ b/generate-cmdlist.sh @@ -0,0 +1,117 @@ +#!/bin/sh + +die () { + echo "$@" >&2 + exit 1 +} + +command_list () { + eval "grep -ve '^#' $exclude_programs" <"$1" +} + +get_categories () { + tr ' ' '\n'| + grep -v '^$' | + sort | + uniq +} + +category_list () { + command_list "$1" | + cut -c 40- | + get_categories +} + +get_synopsis () { + sed -n ' + /^NAME/,/'"$1"'/H + ${ + x + s/.*'"$1"' - \(.*\)/N_("\1")/ + p + }' "Documentation/$1.txt" +} + +define_categories () { + echo + echo "/* Command categories */" + bit=0 + category_list "$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 + category_list "$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[] = {" + + command_list "$1" | + while read cmd rest + do + printf " { \"$cmd\", $(get_synopsis $cmd), 0" + for cat in $(echo "$rest" | get_categories) + do + printf " | CAT_$cat" + done + echo " }," + done + echo "};" +} + +print_config_list () { + cat <<EOF +static const char *config_name_list[] = { +EOF + grep -h '^[a-zA-Z].*\..*::$' Documentation/*config.txt Documentation/config/*.txt | + sed '/deprecated/d; s/::$//; s/, */\n/g' | + sort | + while read line + do + echo " \"$line\"," + done + cat <<EOF + NULL, +}; +EOF +} + +exclude_programs= +while test "--exclude-program" = "$1" +do + shift + exclude_programs="$exclude_programs -e \"^$1 \"" + shift +done + +echo "/* Automatically generated by generate-cmdlist.sh */ +struct cmdname_help { + const char *name; + const char *help; + uint32_t category; +}; +" +define_categories "$1" +echo +define_category_names "$1" +echo +print_command_list "$1" +echo +print_config_list |