]>
Commit | Line | Data |
---|---|---|
a680eedc SR |
1 | #!/bin/sh |
2 | # Generate tags or cscope files | |
3 | # Usage tags.sh <mode> | |
4 | # | |
5 | # mode may be any of: tags, TAGS, cscope | |
6 | # | |
7 | # Uses the following environment variables: | |
8 | # ARCH, SUBARCH, srctree, src, obj | |
9 | ||
10 | if [ $KBUILD_VERBOSE == 1 ]; then | |
11 | set -x | |
12 | fi | |
13 | ||
14 | # This is a duplicate of RCS_FIND_IGNORE without escaped '()' | |
15 | ignore="( -name SCCS -o -name BitKeeper -o -name .svn -o \ | |
16 | -name CVS -o -name .pc -o -name .hg -o \ | |
17 | -name .git ) \ | |
18 | -prune -o" | |
19 | ||
20 | # Do not use full path is we do not use O=.. builds | |
21 | if [ ${src} == ${obj} ]; then | |
22 | tree= | |
23 | else | |
24 | tree=${srctree} | |
25 | fi | |
26 | ||
27 | # find sources in arch/$ARCH | |
28 | find_arch_sources() | |
29 | { | |
30 | find ${tree}arch/$1 $ignore -name $2 -print; | |
31 | } | |
32 | ||
33 | # find sources in arch/$1/include | |
34 | find_arch_include_sources() | |
35 | { | |
36 | find ${tree}arch/$1/include $ignore -name $2 -print; | |
37 | } | |
38 | ||
39 | # find sources in include/ | |
40 | find_include_sources() | |
41 | { | |
42 | find ${tree}include $ignore -name config -prune -o -name $1 -print; | |
43 | } | |
44 | ||
45 | # find sources in rest of tree | |
46 | # we could benefit from a list of dirs to search in here | |
47 | find_other_sources() | |
48 | { | |
49 | find ${tree}* $ignore \ | |
50 | \( -name include -o -name arch -o -name '.tmp_*' \) -prune -o \ | |
51 | -name $1 -print; | |
52 | } | |
53 | ||
54 | find_sources() | |
55 | { | |
56 | find_arch_sources $1 $2 | |
57 | find_include_sources $2 | |
58 | find_other_sources $2 | |
59 | } | |
60 | ||
61 | all_sources() | |
62 | { | |
63 | find_sources $SRCARCH *.[chS] | |
64 | if [ ! -z "$archinclude" ]; then | |
65 | find_arch_include_sources $archinclude *.[chS] | |
66 | fi | |
67 | } | |
68 | ||
69 | all_kconfigs() | |
70 | { | |
71 | find_sources $SRCARCH "Kconfig*" | |
72 | } | |
73 | ||
74 | all_defconfigs() | |
75 | { | |
76 | find_sources $SRCARCH "defconfig" | |
77 | } | |
78 | ||
79 | docscope() | |
80 | { | |
81 | (echo \-k; echo \-q; all_sources) > cscope.files | |
82 | cscope -b -f cscope.out | |
83 | } | |
84 | ||
85 | exuberant() | |
86 | { | |
87 | all_sources > all | |
88 | all_sources | xargs $1 -a \ | |
89 | -I __initdata,__exitdata,__acquires,__releases \ | |
90 | -I __read_mostly,____cacheline_aligned \ | |
91 | -I ____cacheline_aligned_in_smp \ | |
92 | -I ____cacheline_internodealigned_in_smp \ | |
93 | -I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL \ | |
94 | --extra=+f --c-kinds=+px \ | |
95 | --regex-asm='/^ENTRY\(([^)]*)\).*/\1/' | |
96 | ||
97 | all_kconfigs | xargs $1 -a \ | |
98 | --langdef=kconfig --language-force=kconfig \ | |
99 | --regex-kconfig='/^[[:blank:]]*(menu|)config[[:blank:]]+([[:alnum:]_]+)/\2/' | |
100 | ||
101 | all_kconfigs | xargs $1 -a \ | |
102 | --langdef=kconfig --language-force=kconfig \ | |
103 | --regex-kconfig='/^[[:blank:]]*(menu|)config[[:blank:]]+([[:alnum:]_]+)/CONFIG_\2/' | |
104 | ||
105 | all_defconfigs | xargs -r $1 -a \ | |
106 | --langdef=dotconfig --language-force=dotconfig \ | |
107 | --regex-dotconfig='/^#?[[:blank:]]*(CONFIG_[[:alnum:]_]+)/\1/' | |
108 | ||
109 | } | |
110 | ||
111 | emacs() | |
112 | { | |
113 | all_sources | xargs $1 -a | |
114 | ||
115 | all_kconfigs | xargs $1 -a \ | |
116 | --regex='/^[ \t]*\(\(menu\)*config\)[ \t]+\([a-zA-Z0-9_]+\)/\3/' | |
117 | ||
118 | all_kconfigs | xargs $1 -a \ | |
119 | --regex='/^[ \t]*\(\(menu\)*config\)[ \t]+\([a-zA-Z0-9_]+\)/CONFIG_\3/' | |
120 | ||
121 | all_defconfigs | xargs -r $1 -a \ | |
122 | --regex='/^#?[ \t]?\(CONFIG_[a-zA-Z0-9_]+\)/\1/' | |
123 | } | |
124 | ||
125 | xtags() | |
126 | { | |
127 | if $1 --version 2>&1 | grep -iq exuberant; then | |
128 | exuberant $1 | |
129 | elif $1 --version 2>&1 | grep -iq emacs; then | |
130 | emacs $1 | |
131 | else | |
132 | all_sources | xargs $1 -a | |
133 | fi | |
134 | } | |
135 | ||
136 | ||
137 | # Support um (which uses SUBARCH) | |
138 | if [ ${ARCH} == um ]; then | |
139 | if [ $SUBARCH == i386 ]; then | |
140 | archinclude=x86 | |
141 | elif [ $SUBARCH == x86_64 ]; then | |
142 | archinclude=x86 | |
143 | else | |
144 | archinclude=${SUBARCH} | |
145 | fi | |
146 | fi | |
147 | ||
148 | case "$1" in | |
149 | "cscope") | |
150 | docscope | |
151 | ;; | |
152 | ||
153 | "tags") | |
154 | xtags ctags | |
155 | ;; | |
156 | ||
157 | "TAGS") | |
158 | xtags etags | |
159 | ;; | |
160 | esac |