Blame view
scripts/tags.sh
9.02 KB
93209d65c tags: Unify emacs... |
1 |
#!/bin/bash |
a680eedc6 tags and cscope s... |
2 3 4 5 6 7 |
# Generate tags or cscope files # Usage tags.sh <mode> # # mode may be any of: tags, TAGS, cscope # # Uses the following environment variables: |
a8bac511c tags: Use $SRCARCH |
8 |
# ARCH, SUBARCH, SRCARCH, srctree, src, obj |
a680eedc6 tags and cscope s... |
9 |
|
a6ba0cb35 kbuild: fix strin... |
10 |
if [ "$KBUILD_VERBOSE" = "1" ]; then |
a680eedc6 tags and cscope s... |
11 12 |
set -x fi |
ae63b2d7b scripts/tags.sh: ... |
13 14 15 16 |
# RCS_FIND_IGNORE has escaped ()s -- remove them. ignore="$(echo "$RCS_FIND_IGNORE" | sed 's|\\||g' )" # tags and cscope files should also ignore MODVERSION *.mod.c files ignore="$ignore ( -name *.mod.c ) -prune -o" |
a680eedc6 tags and cscope s... |
17 |
|
4431d4ce9 tags: Fix spellin... |
18 |
# Do not use full path if we do not use O=.. builds |
e93bc1a0c Revert "kbuild: s... |
19 20 |
# Use make O=. {tags|cscope} # to force full paths for a non-O= build |
a6ba0cb35 kbuild: fix strin... |
21 |
if [ "${KBUILD_SRC}" = "" ]; then |
a680eedc6 tags and cscope s... |
22 23 |
tree= else |
709cc372c kbuild: fix make ... |
24 |
tree=${srctree}/ |
a680eedc6 tags and cscope s... |
25 |
fi |
8c38a5328 scripts/tags.sh: ... |
26 27 |
# ignore userspace tools ignore="$ignore ( -path ${tree}tools ) -prune -o" |
bc75cc6b5 tags: Add the abi... |
28 29 30 31 32 33 34 35 |
# Find all available archs find_all_archs() { ALLSOURCE_ARCHS="" for arch in `ls ${tree}arch`; do ALLSOURCE_ARCHS="${ALLSOURCE_ARCHS} "${arch##\/} done } |
4f628248a kbuild: reintrodu... |
36 37 38 |
# Detect if ALLSOURCE_ARCHS is set. If not, we assume SRCARCH if [ "${ALLSOURCE_ARCHS}" = "" ]; then ALLSOURCE_ARCHS=${SRCARCH} |
bc75cc6b5 tags: Add the abi... |
39 40 |
elif [ "${ALLSOURCE_ARCHS}" = "all" ]; then find_all_archs |
4f628248a kbuild: reintrodu... |
41 |
fi |
a680eedc6 tags and cscope s... |
42 43 44 |
# find sources in arch/$ARCH find_arch_sources() { |
f81b1be40 tags: include hea... |
45 46 47 |
for i in $archincludedir; do prune="$prune -wholename $i -prune -o" done |
9b24a15d8 scripts/tags.sh: ... |
48 49 |
find ${tree}arch/$1 $ignore $subarchprune $prune -name "$2" \ -not -type l -print; |
a680eedc6 tags and cscope s... |
50 51 52 53 54 |
} # find sources in arch/$1/include find_arch_include_sources() { |
596585090 scripts/tags.sh: ... |
55 56 |
include=$(find ${tree}arch/$1/ $subarchprune \ -name include -type d -print); |
f81b1be40 tags: include hea... |
57 58 |
if [ -n "$include" ]; then archincludedir="$archincludedir $include" |
9b24a15d8 scripts/tags.sh: ... |
59 |
find $include $ignore -name "$2" -not -type l -print; |
f81b1be40 tags: include hea... |
60 |
fi |
a680eedc6 tags and cscope s... |
61 62 63 64 65 |
} # find sources in include/ find_include_sources() { |
9b24a15d8 scripts/tags.sh: ... |
66 67 |
find ${tree}include $ignore -name config -prune -o -name "$1" \ -not -type l -print; |
a680eedc6 tags and cscope s... |
68 69 70 71 72 73 74 75 |
} # find sources in rest of tree # we could benefit from a list of dirs to search in here find_other_sources() { find ${tree}* $ignore \ \( -name include -o -name arch -o -name '.tmp_*' \) -prune -o \ |
9b24a15d8 scripts/tags.sh: ... |
76 |
-name "$1" -not -type l -print; |
a680eedc6 tags and cscope s... |
77 78 79 80 |
} find_sources() { |
709cc372c kbuild: fix make ... |
81 |
find_arch_sources $1 "$2" |
a680eedc6 tags and cscope s... |
82 83 84 85 |
} all_sources() { |
a8bac511c tags: Use $SRCARCH |
86 |
find_arch_include_sources ${SRCARCH} '*.[chS]' |
a680eedc6 tags and cscope s... |
87 |
if [ ! -z "$archinclude" ]; then |
709cc372c kbuild: fix make ... |
88 |
find_arch_include_sources $archinclude '*.[chS]' |
a680eedc6 tags and cscope s... |
89 |
fi |
4f628248a kbuild: reintrodu... |
90 |
find_include_sources '*.[chS]' |
f81b1be40 tags: include hea... |
91 92 93 94 |
for arch in $ALLSOURCE_ARCHS do find_sources $arch '*.[chS]' done |
4f628248a kbuild: reintrodu... |
95 |
find_other_sources '*.[chS]' |
a680eedc6 tags and cscope s... |
96 |
} |
923e02ecf scripts/tags.sh: ... |
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
all_compiled_sources() { for i in $(all_sources); do case "$i" in *.[cS]) j=${i/\.[cS]/\.o} if [ -e $j ]; then echo $i fi ;; *) echo $i ;; esac done } all_target_sources() { if [ -n "$COMPILED_SOURCE" ]; then all_compiled_sources else all_sources fi } |
a680eedc6 tags and cscope s... |
122 123 |
all_kconfigs() { |
953fae66d kbuild: fix tags ... |
124 125 126 127 |
for arch in $ALLSOURCE_ARCHS; do find_sources $arch 'Kconfig*' done find_other_sources 'Kconfig*' |
a680eedc6 tags and cscope s... |
128 |
} |
a680eedc6 tags and cscope s... |
129 130 |
docscope() { |
923e02ecf scripts/tags.sh: ... |
131 |
(echo \-k; echo \-q; all_target_sources) > cscope.files |
a680eedc6 tags and cscope s... |
132 133 |
cscope -b -f cscope.out } |
f4ed1009f kbuild: add GNU G... |
134 135 |
dogtags() { |
923e02ecf scripts/tags.sh: ... |
136 |
all_target_sources | gtags -i -f - |
f4ed1009f kbuild: add GNU G... |
137 |
} |
93209d65c tags: Unify emacs... |
138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 |
# Basic regular expressions with an optional /kind-spec/ for ctags and # the following limitations: # - No regex modifiers # - Use \{0,1\} instead of \?, because etags expects an unescaped ? # - \s is not working with etags, use a space or [ \t] # - \w works, but does not match underscores in etags # - etags regular expressions have to match at the start of a line; # a ^[^#] is prepended by setup_regex unless an anchor is already present regex_asm=( '/^\(ENTRY\|_GLOBAL\)(\([[:alnum:]_\\]*\)).*/\2/' ) regex_c=( '/^SYSCALL_DEFINE[0-9](\([[:alnum:]_]*\).*/sys_\1/' '/^COMPAT_SYSCALL_DEFINE[0-9](\([[:alnum:]_]*\).*/compat_sys_\1/' '/^TRACE_EVENT(\([[:alnum:]_]*\).*/trace_\1/' '/^TRACE_EVENT(\([[:alnum:]_]*\).*/trace_\1_rcuidle/' '/^DEFINE_EVENT([^,)]*, *\([[:alnum:]_]*\).*/trace_\1/' '/^DEFINE_EVENT([^,)]*, *\([[:alnum:]_]*\).*/trace_\1_rcuidle/' |
0a9e7da66 scripts/tags.sh: ... |
156 157 |
'/^DEFINE_INSN_CACHE_OPS(\([[:alnum:]_]*\).*/get_\1_slot/' '/^DEFINE_INSN_CACHE_OPS(\([[:alnum:]_]*\).*/free_\1_slot/' |
93209d65c tags: Unify emacs... |
158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 |
'/^PAGEFLAG(\([[:alnum:]_]*\).*/Page\1/' '/^PAGEFLAG(\([[:alnum:]_]*\).*/SetPage\1/' '/^PAGEFLAG(\([[:alnum:]_]*\).*/ClearPage\1/' '/^TESTSETFLAG(\([[:alnum:]_]*\).*/TestSetPage\1/' '/^TESTPAGEFLAG(\([[:alnum:]_]*\).*/Page\1/' '/^SETPAGEFLAG(\([[:alnum:]_]*\).*/SetPage\1/' '/\<__SETPAGEFLAG(\([[:alnum:]_]*\).*/__SetPage\1/' '/\<TESTCLEARFLAG(\([[:alnum:]_]*\).*/TestClearPage\1/' '/\<__TESTCLEARFLAG(\([[:alnum:]_]*\).*/TestClearPage\1/' '/\<CLEARPAGEFLAG(\([[:alnum:]_]*\).*/ClearPage\1/' '/\<__CLEARPAGEFLAG(\([[:alnum:]_]*\).*/__ClearPage\1/' '/^__PAGEFLAG(\([[:alnum:]_]*\).*/__SetPage\1/' '/^__PAGEFLAG(\([[:alnum:]_]*\).*/__ClearPage\1/' '/^PAGEFLAG_FALSE(\([[:alnum:]_]*\).*/Page\1/' '/\<TESTSCFLAG(\([[:alnum:]_]*\).*/TestSetPage\1/' '/\<TESTSCFLAG(\([[:alnum:]_]*\).*/TestClearPage\1/' '/\<SETPAGEFLAG_NOOP(\([[:alnum:]_]*\).*/SetPage\1/' '/\<CLEARPAGEFLAG_NOOP(\([[:alnum:]_]*\).*/ClearPage\1/' '/\<__CLEARPAGEFLAG_NOOP(\([[:alnum:]_]*\).*/__ClearPage\1/' '/\<TESTCLEARFLAG_FALSE(\([[:alnum:]_]*\).*/TestClearPage\1/' |
632c0a1af mm: clean up non-... |
178 179 180 |
'/^PAGE_MAPCOUNT_OPS(\([[:alnum:]_]*\).*/Page\1/' '/^PAGE_MAPCOUNT_OPS(\([[:alnum:]_]*\).*/__SetPage\1/' '/^PAGE_MAPCOUNT_OPS(\([[:alnum:]_]*\).*/__ClearPage\1/' |
93209d65c tags: Unify emacs... |
181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 |
'/^TASK_PFA_TEST([^,]*, *\([[:alnum:]_]*\))/task_\1/' '/^TASK_PFA_SET([^,]*, *\([[:alnum:]_]*\))/task_set_\1/' '/^TASK_PFA_CLEAR([^,]*, *\([[:alnum:]_]*\))/task_clear_\1/' '/^DEF_MMIO_\(IN\|OUT\)_[XD](\([[:alnum:]_]*\),[^)]*)/\2/' '/^DEBUGGER_BOILERPLATE(\([[:alnum:]_]*\))/\1/' '/^DEF_PCI_AC_\(\|NO\)RET(\([[:alnum:]_]*\).*/\2/' '/^PCI_OP_READ(\(\w*\).*[1-4])/pci_bus_read_config_\1/' '/^PCI_OP_WRITE(\(\w*\).*[1-4])/pci_bus_write_config_\1/' '/\<DEFINE_\(MUTEX\|SEMAPHORE\|SPINLOCK\)(\([[:alnum:]_]*\)/\2/v/' '/\<DEFINE_\(RAW_SPINLOCK\|RWLOCK\|SEQLOCK\)(\([[:alnum:]_]*\)/\2/v/' '/\<DECLARE_\(RWSEM\|COMPLETION\)(\([[:alnum:]_]\+\)/\2/v/' '/\<DECLARE_BITMAP(\([[:alnum:]_]*\)/\1/v/' '/\(^\|\s\)\(\|L\|H\)LIST_HEAD(\([[:alnum:]_]*\)/\3/v/' '/\(^\|\s\)RADIX_TREE(\([[:alnum:]_]*\)/\2/v/' '/\<DEFINE_PER_CPU([^,]*, *\([[:alnum:]_]*\)/\1/v/' '/\<DEFINE_PER_CPU_SHARED_ALIGNED([^,]*, *\([[:alnum:]_]*\)/\1/v/' '/\<DECLARE_WAIT_QUEUE_HEAD(\([[:alnum:]_]*\)/\1/v/' '/\<DECLARE_\(TASKLET\|WORK\|DELAYED_WORK\)(\([[:alnum:]_]*\)/\2/v/' |
93209d65c tags: Unify emacs... |
199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 |
'/\(^\s\)OFFSET(\([[:alnum:]_]*\)/\2/v/' '/\(^\s\)DEFINE(\([[:alnum:]_]*\)/\2/v/' '/\<DEFINE_HASHTABLE(\([[:alnum:]_]*\)/\1/v/' ) regex_kconfig=( '/^[[:blank:]]*\(menu\|\)config[[:blank:]]\+\([[:alnum:]_]\+\)/\2/' '/^[[:blank:]]*\(menu\|\)config[[:blank:]]\+\([[:alnum:]_]\+\)/CONFIG_\2/' ) setup_regex() { local mode=$1 lang tmp=() r shift regex=() for lang; do case "$lang" in asm) tmp=("${regex_asm[@]}") ;; c) tmp=("${regex_c[@]}") ;; kconfig) tmp=("${regex_kconfig[@]}") ;; esac for r in "${tmp[@]}"; do if test "$mode" = "exuberant"; then regex[${#regex[@]}]="--regex-$lang=${r}b" else # Remove ctags /kind-spec/ case "$r" in /*/*/?/) r=${r%?/} esac # Prepend ^[^#] unless already anchored case "$r" in /^*) ;; *) r="/^[^#]*${r#/}" esac regex[${#regex[@]}]="--regex=$r" fi done done } |
a680eedc6 tags and cscope s... |
239 240 |
exuberant() { |
93209d65c tags: Unify emacs... |
241 |
setup_regex exuberant asm c |
923e02ecf scripts/tags.sh: ... |
242 |
all_target_sources | xargs $1 -a \ |
6cf3a6eff scripts/tags.sh: ... |
243 |
-I __initdata,__exitdata,__initconst, \ |
22c1587ad init: delete the ... |
244 |
-I __initdata_memblock \ |
f5a82137a scripts/tags.sh: ... |
245 |
-I __refdata,__attribute,__maybe_unused,__always_unused \ |
1b2643f0d scripts/tags.sh: ... |
246 247 |
-I __acquires,__releases,__deprecated \ -I __read_mostly,__aligned,____cacheline_aligned \ |
a680eedc6 tags and cscope s... |
248 |
-I ____cacheline_aligned_in_smp \ |
f5a82137a scripts/tags.sh: ... |
249 |
-I __cacheline_aligned,__cacheline_aligned_in_smp \ |
a680eedc6 tags and cscope s... |
250 |
-I ____cacheline_internodealigned_in_smp \ |
1b2643f0d scripts/tags.sh: ... |
251 |
-I __used,__packed,__packed2__,__must_check,__must_hold \ |
f5a82137a scripts/tags.sh: ... |
252 |
-I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL,ACPI_EXPORT_SYMBOL \ |
7db86dc97 ctags: usability fix |
253 |
-I DEFINE_TRACE,EXPORT_TRACEPOINT_SYMBOL,EXPORT_TRACEPOINT_SYMBOL_GPL \ |
1b2643f0d scripts/tags.sh: ... |
254 |
-I static,const \ |
93209d65c tags: Unify emacs... |
255 |
--extra=+f --c-kinds=+px --langmap=c:+.h "${regex[@]}" |
a680eedc6 tags and cscope s... |
256 |
|
93209d65c tags: Unify emacs... |
257 |
setup_regex exuberant kconfig |
a680eedc6 tags and cscope s... |
258 |
all_kconfigs | xargs $1 -a \ |
93209d65c tags: Unify emacs... |
259 |
--langdef=kconfig --language-force=kconfig "${regex[@]}" |
a680eedc6 tags and cscope s... |
260 |
|
a680eedc6 tags and cscope s... |
261 262 263 264 |
} emacs() { |
93209d65c tags: Unify emacs... |
265 266 |
setup_regex emacs asm c all_target_sources | xargs $1 -a "${regex[@]}" |
a680eedc6 tags and cscope s... |
267 |
|
93209d65c tags: Unify emacs... |
268 269 |
setup_regex emacs kconfig all_kconfigs | xargs $1 -a "${regex[@]}" |
a680eedc6 tags and cscope s... |
270 271 272 273 274 275 276 277 278 |
} xtags() { if $1 --version 2>&1 | grep -iq exuberant; then exuberant $1 elif $1 --version 2>&1 | grep -iq emacs; then emacs $1 else |
923e02ecf scripts/tags.sh: ... |
279 |
all_target_sources | xargs $1 -a |
bb66fc671 kbuild: trivial -... |
280 |
fi |
a680eedc6 tags and cscope s... |
281 |
} |
a680eedc6 tags and cscope s... |
282 |
# Support um (which uses SUBARCH) |
a6ba0cb35 kbuild: fix strin... |
283 284 |
if [ "${ARCH}" = "um" ]; then if [ "$SUBARCH" = "i386" ]; then |
a680eedc6 tags and cscope s... |
285 |
archinclude=x86 |
a6ba0cb35 kbuild: fix strin... |
286 |
elif [ "$SUBARCH" = "x86_64" ]; then |
a680eedc6 tags and cscope s... |
287 288 289 290 |
archinclude=x86 else archinclude=${SUBARCH} fi |
596585090 scripts/tags.sh: ... |
291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 |
elif [ "${SRCARCH}" = "arm" -a "${SUBARCH}" != "" ]; then subarchdir=$(find ${tree}arch/$SRCARCH/ -name "mach-*" -type d -o \ -name "plat-*" -type d); for i in $subarchdir; do case "$i" in *"mach-"${SUBARCH}) ;; *"plat-"${SUBARCH}) ;; *) subarchprune="$subarchprune \ -wholename $i -prune -o" ;; esac done |
a680eedc6 tags and cscope s... |
306 |
fi |
66979224c scripts: refactor... |
307 |
remove_structs= |
a680eedc6 tags and cscope s... |
308 309 310 311 |
case "$1" in "cscope") docscope ;; |
f4ed1009f kbuild: add GNU G... |
312 313 314 |
"gtags") dogtags ;; |
a680eedc6 tags and cscope s... |
315 |
"tags") |
2e6cb8b0d kbuild: remove a ... |
316 |
rm -f tags |
a680eedc6 tags and cscope s... |
317 |
xtags ctags |
66979224c scripts: refactor... |
318 |
remove_structs=y |
a680eedc6 tags and cscope s... |
319 320 321 |
;; "TAGS") |
2e6cb8b0d kbuild: remove a ... |
322 |
rm -f TAGS |
a680eedc6 tags and cscope s... |
323 |
xtags etags |
66979224c scripts: refactor... |
324 |
remove_structs=y |
a680eedc6 tags and cscope s... |
325 326 |
;; esac |
66979224c scripts: refactor... |
327 328 |
# Remove structure forward declarations. |
0eb043d0e Subject: [PATCH] ... |
329 |
if [ -n "$remove_structs" ]; then |
66979224c scripts: refactor... |
330 331 |
LANG=C sed -i -e '/^\([a-zA-Z_][a-zA-Z0-9_]*\)\t.*\t\/\^struct \1;.*\$\/;"\tx$/d' $1 fi |