| #!/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 |