| #!/bin/awk |
| |
| BEGIN { |
| OFS = " | " |
| FS = " *= *" |
| } |
| |
| { |
| if (FILENAME != filename) { |
| process() |
| filename = FILENAME |
| summary = "" |
| category = "" |
| deprecated = 0 |
| contrib = 0 |
| } |
| } |
| |
| /^### / { |
| if (summary == "") { |
| summary = substr($0, 5) |
| next |
| } |
| } |
| |
| /^#### +CATEGORY *=/ { |
| if (category == "") { |
| category = toupper(substr($2,1,1)) tolower(substr($2,2)) |
| next |
| } |
| } |
| |
| /^#### +DEPRECATED/ { |
| deprecated = 1 |
| } |
| |
| function process() { |
| if (filename && (show_deprecated || !deprecated)) { |
| toolname = filename |
| sub(/.fx$/, "", toolname) |
| sub(/^.*\//, "", toolname) |
| |
| if (match(filename, "/contrib/")) { |
| summary = "(contrib) " summary |
| contrib = 1 |
| } |
| |
| if (!contrib || !hide_contrib) { |
| if (match(filename, "^.*/vendor/")) { |
| vendor_starts=RLENGTH+1 |
| if (match(filename, "[^/]+/scripts/devshell/")) { |
| toolname = "vendor " substr(filename, vendor_starts, RLENGTH - length("/scripts/devshell/")) " " toolname |
| } |
| } |
| |
| if (!category) { |
| category = "unknown category" |
| } |
| if (deprecated == 1) { |
| summary = "(DEPRECATED) " summary |
| } |
| by_cat[category] = by_cat[category] " " toolname " | " summary "\n" |
| } |
| } |
| } |
| |
| function print_category(category) { |
| if (by_cat[category]) { |
| print category ":" |
| print by_cat[category] | command |
| close(command) |
| print "" |
| delete by_cat[category] |
| } |
| } |
| |
| END { |
| process() |
| command="sort | column -t -s '|' -c 2" |
| |
| # print known categories in a specific order |
| print_category("Source tree") |
| print_category("Documentation") |
| print_category("Build") |
| print_category("Device discovery") |
| print_category("Device management") |
| print_category("Software delivery") |
| print_category("Run, inspect and debug") |
| print_category("Other") |
| |
| # print the remaining categories in no defined order (no easy way to reorder |
| # an array in posix awk) |
| for (category in by_cat) { |
| print_category(category) |
| } |
| } |
| |