Blame view
scripts/tags.sh
9.46 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" |
4f628248a kbuild: reintrodu... |
28 29 30 |
# Detect if ALLSOURCE_ARCHS is set. If not, we assume SRCARCH if [ "${ALLSOURCE_ARCHS}" = "" ]; then ALLSOURCE_ARCHS=${SRCARCH} |
bc75cc6b5 tags: Add the abi... |
31 |
elif [ "${ALLSOURCE_ARCHS}" = "all" ]; then |
656c10777 scripts/tags.sh: ... |
32 |
ALLSOURCE_ARCHS=$(find ${tree}arch/ -mindepth 1 -maxdepth 1 -type d -printf '%f ') |
4f628248a kbuild: reintrodu... |
33 |
fi |
a680eedc6 tags and cscope s... |
34 35 36 |
# find sources in arch/$ARCH find_arch_sources() { |
f81b1be40 tags: include hea... |
37 38 39 |
for i in $archincludedir; do prune="$prune -wholename $i -prune -o" done |
9b24a15d8 scripts/tags.sh: ... |
40 41 |
find ${tree}arch/$1 $ignore $subarchprune $prune -name "$2" \ -not -type l -print; |
a680eedc6 tags and cscope s... |
42 43 44 45 46 |
} # find sources in arch/$1/include find_arch_include_sources() { |
596585090 scripts/tags.sh: ... |
47 48 |
include=$(find ${tree}arch/$1/ $subarchprune \ -name include -type d -print); |
f81b1be40 tags: include hea... |
49 50 |
if [ -n "$include" ]; then archincludedir="$archincludedir $include" |
9b24a15d8 scripts/tags.sh: ... |
51 |
find $include $ignore -name "$2" -not -type l -print; |
f81b1be40 tags: include hea... |
52 |
fi |
a680eedc6 tags and cscope s... |
53 54 55 56 57 |
} # find sources in include/ find_include_sources() { |
9b24a15d8 scripts/tags.sh: ... |
58 59 |
find ${tree}include $ignore -name config -prune -o -name "$1" \ -not -type l -print; |
a680eedc6 tags and cscope s... |
60 61 62 63 64 65 66 |
} # find sources in rest of tree # we could benefit from a list of dirs to search in here find_other_sources() { find ${tree}* $ignore \ |
99443f811 scripts/tags.sh: ... |
67 |
\( -path ${tree}include -o -path ${tree}arch -o -name '.tmp_*' \) -prune -o \ |
9b24a15d8 scripts/tags.sh: ... |
68 |
-name "$1" -not -type l -print; |
a680eedc6 tags and cscope s... |
69 70 71 72 |
} find_sources() { |
709cc372c kbuild: fix make ... |
73 |
find_arch_sources $1 "$2" |
a680eedc6 tags and cscope s... |
74 75 76 77 |
} all_sources() { |
a8bac511c tags: Use $SRCARCH |
78 |
find_arch_include_sources ${SRCARCH} '*.[chS]' |
a680eedc6 tags and cscope s... |
79 |
if [ ! -z "$archinclude" ]; then |
709cc372c kbuild: fix make ... |
80 |
find_arch_include_sources $archinclude '*.[chS]' |
a680eedc6 tags and cscope s... |
81 |
fi |
4f628248a kbuild: reintrodu... |
82 |
find_include_sources '*.[chS]' |
f81b1be40 tags: include hea... |
83 84 85 86 |
for arch in $ALLSOURCE_ARCHS do find_sources $arch '*.[chS]' done |
4f628248a kbuild: reintrodu... |
87 |
find_other_sources '*.[chS]' |
a680eedc6 tags and cscope s... |
88 |
} |
923e02ecf scripts/tags.sh: ... |
89 90 91 92 93 94 |
all_compiled_sources() { for i in $(all_sources); do case "$i" in *.[cS]) j=${i/\.[cS]/\.o} |
cbf52a3e6 tags: honor COMPI... |
95 |
j="${j#$tree}" |
923e02ecf scripts/tags.sh: ... |
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
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... |
115 116 |
all_kconfigs() { |
7659c655b scripts/tags.sh: ... |
117 118 |
find ${tree}arch/ -maxdepth 1 $ignore \ -name "Kconfig*" -not -type l -print; |
953fae66d kbuild: fix tags ... |
119 120 121 122 |
for arch in $ALLSOURCE_ARCHS; do find_sources $arch 'Kconfig*' done find_other_sources 'Kconfig*' |
a680eedc6 tags and cscope s... |
123 |
} |
a680eedc6 tags and cscope s... |
124 125 |
docscope() { |
923e02ecf scripts/tags.sh: ... |
126 |
(echo \-k; echo \-q; all_target_sources) > cscope.files |
a680eedc6 tags and cscope s... |
127 128 |
cscope -b -f cscope.out } |
f4ed1009f kbuild: add GNU G... |
129 130 |
dogtags() { |
923e02ecf scripts/tags.sh: ... |
131 |
all_target_sources | gtags -i -f - |
f4ed1009f kbuild: add GNU G... |
132 |
} |
93209d65c tags: Unify emacs... |
133 134 135 136 137 138 139 140 141 142 143 144 145 |
# 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/' |
24d4e34f7 scripts/tags.sh: ... |
146 |
'/^BPF_CALL_[0-9](\([[:alnum:]_]*\).*/\1/' |
93209d65c tags: Unify emacs... |
147 148 149 150 151 |
'/^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: ... |
152 153 |
'/^DEFINE_INSN_CACHE_OPS(\([[:alnum:]_]*\).*/get_\1_slot/' '/^DEFINE_INSN_CACHE_OPS(\([[:alnum:]_]*\).*/free_\1_slot/' |
93209d65c tags: Unify emacs... |
154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 |
'/^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/' |
6e292b9be mm: split page_ty... |
174 175 176 |
'/^PAGE_TYPE_OPS(\([[:alnum:]_]*\).*/Page\1/' '/^PAGE_TYPE_OPS(\([[:alnum:]_]*\).*/__SetPage\1/' '/^PAGE_TYPE_OPS(\([[:alnum:]_]*\).*/__ClearPage\1/' |
93209d65c tags: Unify emacs... |
177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 |
'/^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... |
195 196 197 198 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 |
'/\(^\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... |
235 236 |
exuberant() { |
93209d65c tags: Unify emacs... |
237 |
setup_regex exuberant asm c |
923e02ecf scripts/tags.sh: ... |
238 |
all_target_sources | xargs $1 -a \ |
e23ba825d scripts/tags.sh: ... |
239 |
-I __initdata,__exitdata,__initconst,__ro_after_init \ |
22c1587ad init: delete the ... |
240 |
-I __initdata_memblock \ |
f5a82137a scripts/tags.sh: ... |
241 |
-I __refdata,__attribute,__maybe_unused,__always_unused \ |
1b2643f0d scripts/tags.sh: ... |
242 243 |
-I __acquires,__releases,__deprecated \ -I __read_mostly,__aligned,____cacheline_aligned \ |
a680eedc6 tags and cscope s... |
244 |
-I ____cacheline_aligned_in_smp \ |
f5a82137a scripts/tags.sh: ... |
245 |
-I __cacheline_aligned,__cacheline_aligned_in_smp \ |
a680eedc6 tags and cscope s... |
246 |
-I ____cacheline_internodealigned_in_smp \ |
1b2643f0d scripts/tags.sh: ... |
247 |
-I __used,__packed,__packed2__,__must_check,__must_hold \ |
f5a82137a scripts/tags.sh: ... |
248 |
-I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL,ACPI_EXPORT_SYMBOL \ |
7db86dc97 ctags: usability fix |
249 |
-I DEFINE_TRACE,EXPORT_TRACEPOINT_SYMBOL,EXPORT_TRACEPOINT_SYMBOL_GPL \ |
1b2643f0d scripts/tags.sh: ... |
250 |
-I static,const \ |
d0c75f33f scripts/tags.sh: ... |
251 252 |
--extra=+fq --c-kinds=+px --fields=+iaS --langmap=c:+.h \ "${regex[@]}" |
a680eedc6 tags and cscope s... |
253 |
|
93209d65c tags: Unify emacs... |
254 |
setup_regex exuberant kconfig |
a680eedc6 tags and cscope s... |
255 |
all_kconfigs | xargs $1 -a \ |
93209d65c tags: Unify emacs... |
256 |
--langdef=kconfig --language-force=kconfig "${regex[@]}" |
a680eedc6 tags and cscope s... |
257 |
|
a680eedc6 tags and cscope s... |
258 259 260 261 |
} emacs() { |
93209d65c tags: Unify emacs... |
262 263 |
setup_regex emacs asm c all_target_sources | xargs $1 -a "${regex[@]}" |
a680eedc6 tags and cscope s... |
264 |
|
93209d65c tags: Unify emacs... |
265 266 |
setup_regex emacs kconfig all_kconfigs | xargs $1 -a "${regex[@]}" |
a680eedc6 tags and cscope s... |
267 268 269 270 271 272 273 274 275 |
} 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: ... |
276 |
all_target_sources | xargs $1 -a |
bb66fc671 kbuild: trivial -... |
277 |
fi |
a680eedc6 tags and cscope s... |
278 |
} |
a680eedc6 tags and cscope s... |
279 |
# Support um (which uses SUBARCH) |
a6ba0cb35 kbuild: fix strin... |
280 281 |
if [ "${ARCH}" = "um" ]; then if [ "$SUBARCH" = "i386" ]; then |
a680eedc6 tags and cscope s... |
282 |
archinclude=x86 |
a6ba0cb35 kbuild: fix strin... |
283 |
elif [ "$SUBARCH" = "x86_64" ]; then |
a680eedc6 tags and cscope s... |
284 285 286 287 |
archinclude=x86 else archinclude=${SUBARCH} fi |
596585090 scripts/tags.sh: ... |
288 289 290 |
elif [ "${SRCARCH}" = "arm" -a "${SUBARCH}" != "" ]; then subarchdir=$(find ${tree}arch/$SRCARCH/ -name "mach-*" -type d -o \ -name "plat-*" -type d); |
779d5eb37 scripts/tags.sh: ... |
291 292 293 294 295 296 297 298 299 300 301 302 303 304 |
mach_suffix=$SUBARCH plat_suffix=$SUBARCH # Special cases when $plat_suffix != $mach_suffix case $mach_suffix in "omap1" | "omap2") plat_suffix="omap" ;; esac if [ ! -d ${tree}arch/$SRCARCH/mach-$mach_suffix ]; then echo "Warning: arch/arm/mach-$mach_suffix/ not found." >&2 echo " Fix your \$SUBARCH appropriately" >&2 fi |
596585090 scripts/tags.sh: ... |
305 306 |
for i in $subarchdir; do case "$i" in |
779d5eb37 scripts/tags.sh: ... |
307 |
*"mach-"${mach_suffix}) |
596585090 scripts/tags.sh: ... |
308 |
;; |
779d5eb37 scripts/tags.sh: ... |
309 |
*"plat-"${plat_suffix}) |
596585090 scripts/tags.sh: ... |
310 311 312 313 314 315 316 |
;; *) subarchprune="$subarchprune \ -wholename $i -prune -o" ;; esac done |
a680eedc6 tags and cscope s... |
317 |
fi |
66979224c scripts: refactor... |
318 |
remove_structs= |
a680eedc6 tags and cscope s... |
319 320 321 322 |
case "$1" in "cscope") docscope ;; |
f4ed1009f kbuild: add GNU G... |
323 324 325 |
"gtags") dogtags ;; |
a680eedc6 tags and cscope s... |
326 |
"tags") |
2e6cb8b0d kbuild: remove a ... |
327 |
rm -f tags |
a680eedc6 tags and cscope s... |
328 |
xtags ctags |
66979224c scripts: refactor... |
329 |
remove_structs=y |
a680eedc6 tags and cscope s... |
330 331 332 |
;; "TAGS") |
2e6cb8b0d kbuild: remove a ... |
333 |
rm -f TAGS |
a680eedc6 tags and cscope s... |
334 |
xtags etags |
66979224c scripts: refactor... |
335 |
remove_structs=y |
a680eedc6 tags and cscope s... |
336 337 |
;; esac |
66979224c scripts: refactor... |
338 339 |
# Remove structure forward declarations. |
0eb043d0e Subject: [PATCH] ... |
340 |
if [ -n "$remove_structs" ]; then |
66979224c scripts: refactor... |
341 342 |
LANG=C sed -i -e '/^\([a-zA-Z_][a-zA-Z0-9_]*\)\t.*\t\/\^struct \1;.*\$\/;"\tx$/d' $1 fi |