118 lines
1.8 KiB
Bash
118 lines
1.8 KiB
Bash
|
#!/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
|