Opennet Firmware
 Alle Dateien Funktionen Variablen Gruppen Seiten
check_for_obsolete_functions.sh
gehe zur Dokumentation dieser Datei
1 #!/bin/sh
2 #
3 # Skript fuer die Suche nach unbenutzten Shell- oder Lua-Funktionen.
4 # Die Ausgabe sollte jedcoh mit Vorsicht verwendet werden: "grep -r FUNC_NAME"
5 # ist ueblicherweise ein guter Einstieg in die Detail-Analyse.
6 #
7 
8 set -eu
9 
10 BASE_DIR=$(cd "$(dirname "$0")/../packages"; pwd)
11 cd "$BASE_DIR"
12 
13 
14 get_lua_files() {
15  find on-*/files/usr/lib/lua -type f
16 }
17 
18 
19 get_shell_files() {
20  (
21  grep -rl '^#!/bin/sh'
22  grep -rl "GUARD_TRAPS"
23  ) | sort | uniq
24 }
25 
26 
27 get_lua_funcs() {
28  local fname
29  get_lua_files | while read fname; do grep "^[ \t]*function[ \t]*" "$fname" || true; done \
30  | sed 's/^[ \t]*function[ \t]*//' \
31  | sed 's/^\([a-zA-Z0-9_]\+\).*$/\1/' \
32  | grep -v "[^a-zA-Z0-9_]" \
33  | sort | uniq
34 }
35 
36 
37 get_shell_funcs() {
38  local fname
39  get_shell_files | while read fname; do grep "^[a-zA-Z0-9_]\+[ \t]*(" "$fname" || true; done \
40  | sed 's/^\([a-zA-Z0-9_]\+\).*$/\1/' \
41  | grep -v "[^a-zA-Z0-9_]" \
42  | sort | uniq
43 }
44 
45 
46 get_lua_func_calls() {
47  local fname="$1"
48  local funcname="$2"
49  # normaler lua-Funktionsaufruf
50  grep "[^a-zA-Z0-9_]$funcname[ \t]*(" "$fname" || true
51  # Funktion als luci-Funktion fuer eine Web-Seite: 'call("foo")'
52  grep "call(\"$funcname\")" "$fname" || true
53 }
54 
55 
56 get_shell_func_calls() {
57  local fname="$1"
58  local funcname="$2"
59  # shell-Funktionsaufruf
60  (
61  grep -E "^(.*[^a-zA-Z0-9_]|)$funcname([^a-zA-Z0-9_].*|)$" "$fname" || true
62  ) | grep -vE "(trap|$funcname\()" | grep -v "^[ \t]*#" || true
63 }
64 
65 
66 check_lua_function_in_use() {
67  local funcname="$1"
68  local fname
69  local count=$(get_lua_files | while read fname; do get_lua_func_calls "$fname" "$funcname"; done | wc -l)
70  # mehr als ein Vorkommen (inkl. der Definition der Funktion)? -> ok
71  [ "$count" -gt 1 ] && return 0
72  return 1
73 }
74 
75 
76 check_shell_function_in_use() {
77  local funcname="$1"
78  local fname
79  # shell-Funktionsaufrufe duerfen in shell- und in lua-Datei auftauchen
80  local count=$( (get_shell_files; get_lua_files) | while read fname; do get_shell_func_calls "$fname" "$funcname"; done | wc -l)
81  # mindestens ein Vorkommen? -> ok
82  [ "$count" -gt 0 ] && return 0
83  return 1
84 }
85 
86 
87 ACTION=${1:-check}
88 
89 case "$ACTION" in
90  check)
91  "$0" lua-check
92  "$0" shell-check
93  ;;
94  lua-check)
95  echo "**************** eventuell unbenutzte lua-Funktionen *********************"
96  get_lua_funcs | while read funcname; do
97  check_lua_function_in_use "$funcname" || echo "$funcname"
98  done
99  ;;
100  shell-check)
101  echo "*************** eventuell unbenutzte shell-Funktionen ********************"
102  get_shell_funcs | while read funcname; do
103  check_shell_function_in_use "$funcname" || echo "$funcname"
104  done
105  ;;
106  lua-funcs)
107  get_lua_funcs | sort
108  ;;
109  shell-funcs)
110  get_shell_funcs | sort
111  ;;
112  lua-files)
113  get_lua_files | sort
114  ;;
115  shell-files)
116  get_shell_files | sort
117  ;;
118  help|--help)
119  echo "Syntax: $(basename "$0") { check | lua-check | shell-check | lua-funcs | shell-funcs | lua-files | shell-files | help }"
120  echo
121  ;;
122  *)
123  "$0" help >&2
124  exit 1
125  ;;
126 esac
127