Blame view
scripts/tags.sh
9.26 KB
93209d65c tags: Unify emacs... |
1 |
#!/bin/bash |
457c89965 treewide: Add SPD... |
2 |
# SPDX-License-Identifier: GPL-2.0-only |
a680eedc6 tags and cscope s... |
3 4 5 6 7 8 |
# Generate tags or cscope files # Usage tags.sh <mode> # # mode may be any of: tags, TAGS, cscope # # Uses the following environment variables: |
b3b3eb9da scripts/tags.sh: ... |
9 |
# SUBARCH, SRCARCH, srctree |
a680eedc6 tags and cscope s... |
10 |
|
a6ba0cb35 kbuild: fix strin... |
11 |
if [ "$KBUILD_VERBOSE" = "1" ]; then |
a680eedc6 tags and cscope s... |
12 13 |
set -x fi |
ae63b2d7b scripts/tags.sh: ... |
14 15 16 17 |
# 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... |
18 |
|
95fd3f87b kbuild: add a fla... |
19 |
# Use make KBUILD_ABS_SRCTREE=1 {tags|cscope} |
e93bc1a0c Revert "kbuild: s... |
20 |
# to force full paths for a non-O= build |
c69ef1c87 scripts/tags.sh: ... |
21 |
if [ "${srctree}" = "." -o -z "${srctree}" ]; 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 |
b3b3eb9da scripts/tags.sh: ... |
34 |
# find sources in arch/$1 |
a680eedc6 tags and cscope s... |
35 36 |
find_arch_sources() { |
f81b1be40 tags: include hea... |
37 38 39 |
for i in $archincludedir; do prune="$prune -wholename $i -prune -o" done |
d1db881d9 scripts/tags.sh: ... |
40 |
find ${tree}arch/$1 $ignore $prune -name "$2" -not -type l -print; |
a680eedc6 tags and cscope s... |
41 42 43 44 45 |
} # find sources in arch/$1/include find_arch_include_sources() { |
d1db881d9 scripts/tags.sh: ... |
46 |
include=$(find ${tree}arch/$1/ -name include -type d -print); |
f81b1be40 tags: include hea... |
47 48 |
if [ -n "$include" ]; then archincludedir="$archincludedir $include" |
9b24a15d8 scripts/tags.sh: ... |
49 |
find $include $ignore -name "$2" -not -type l -print; |
f81b1be40 tags: include hea... |
50 |
fi |
a680eedc6 tags and cscope s... |
51 52 53 54 55 |
} # find sources in include/ find_include_sources() { |
9b24a15d8 scripts/tags.sh: ... |
56 57 |
find ${tree}include $ignore -name config -prune -o -name "$1" \ -not -type l -print; |
a680eedc6 tags and cscope s... |
58 59 60 61 62 63 64 |
} # 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: ... |
65 |
\( -path ${tree}include -o -path ${tree}arch -o -name '.tmp_*' \) -prune -o \ |
9b24a15d8 scripts/tags.sh: ... |
66 |
-name "$1" -not -type l -print; |
a680eedc6 tags and cscope s... |
67 68 69 70 |
} find_sources() { |
709cc372c kbuild: fix make ... |
71 |
find_arch_sources $1 "$2" |
a680eedc6 tags and cscope s... |
72 73 74 75 |
} all_sources() { |
a8bac511c tags: Use $SRCARCH |
76 |
find_arch_include_sources ${SRCARCH} '*.[chS]' |
a680eedc6 tags and cscope s... |
77 |
if [ ! -z "$archinclude" ]; then |
709cc372c kbuild: fix make ... |
78 |
find_arch_include_sources $archinclude '*.[chS]' |
a680eedc6 tags and cscope s... |
79 |
fi |
4f628248a kbuild: reintrodu... |
80 |
find_include_sources '*.[chS]' |
f81b1be40 tags: include hea... |
81 82 83 84 |
for arch in $ALLSOURCE_ARCHS do find_sources $arch '*.[chS]' done |
4f628248a kbuild: reintrodu... |
85 |
find_other_sources '*.[chS]' |
a680eedc6 tags and cscope s... |
86 |
} |
923e02ecf scripts/tags.sh: ... |
87 88 89 90 91 92 |
all_compiled_sources() { for i in $(all_sources); do case "$i" in *.[cS]) j=${i/\.[cS]/\.o} |
cbf52a3e6 tags: honor COMPI... |
93 |
j="${j#$tree}" |
923e02ecf scripts/tags.sh: ... |
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
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... |
113 114 |
all_kconfigs() { |
7659c655b scripts/tags.sh: ... |
115 116 |
find ${tree}arch/ -maxdepth 1 $ignore \ -name "Kconfig*" -not -type l -print; |
953fae66d kbuild: fix tags ... |
117 118 119 120 |
for arch in $ALLSOURCE_ARCHS; do find_sources $arch 'Kconfig*' done find_other_sources 'Kconfig*' |
a680eedc6 tags and cscope s... |
121 |
} |
a680eedc6 tags and cscope s... |
122 123 |
docscope() { |
923e02ecf scripts/tags.sh: ... |
124 |
(echo \-k; echo \-q; all_target_sources) > cscope.files |
a680eedc6 tags and cscope s... |
125 126 |
cscope -b -f cscope.out } |
f4ed1009f kbuild: add GNU G... |
127 128 |
dogtags() { |
923e02ecf scripts/tags.sh: ... |
129 |
all_target_sources | gtags -i -f - |
f4ed1009f kbuild: add GNU G... |
130 |
} |
93209d65c tags: Unify emacs... |
131 132 133 134 135 136 137 138 139 140 141 142 143 |
# 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: ... |
144 |
'/^BPF_CALL_[0-9](\([[:alnum:]_]*\).*/\1/' |
93209d65c tags: Unify emacs... |
145 146 147 148 149 |
'/^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: ... |
150 151 |
'/^DEFINE_INSN_CACHE_OPS(\([[:alnum:]_]*\).*/get_\1_slot/' '/^DEFINE_INSN_CACHE_OPS(\([[:alnum:]_]*\).*/free_\1_slot/' |
93209d65c tags: Unify emacs... |
152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 |
'/^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... |
172 173 174 |
'/^PAGE_TYPE_OPS(\([[:alnum:]_]*\).*/Page\1/' '/^PAGE_TYPE_OPS(\([[:alnum:]_]*\).*/__SetPage\1/' '/^PAGE_TYPE_OPS(\([[:alnum:]_]*\).*/__ClearPage\1/' |
93209d65c tags: Unify emacs... |
175 176 177 178 179 180 181 182 |
'/^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/' |
cd68a5253 scripts/tags.sh: ... |
183 |
'/\<DEFINE_\(RT_MUTEX\|MUTEX\|SEMAPHORE\|SPINLOCK\)(\([[:alnum:]_]*\)/\2/v/' |
93209d65c tags: Unify emacs... |
184 185 186 187 188 189 190 191 192 |
'/\<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... |
193 194 |
'/\(^\s\)OFFSET(\([[:alnum:]_]*\)/\2/v/' '/\(^\s\)DEFINE(\([[:alnum:]_]*\)/\2/v/' |
1f6904f72 scripts/tags.sh: ... |
195 |
'/\<\(DEFINE\|DECLARE\)_HASHTABLE(\([[:alnum:]_]*\)/\2/v/' |
cd68a5253 scripts/tags.sh: ... |
196 197 198 199 200 201 202 203 204 |
'/\<DEFINE_ID\(R\|A\)(\([[:alnum:]_]\+\)/\2/' '/\<DEFINE_WD_CLASS(\([[:alnum:]_]\+\)/\1/' '/\<ATOMIC_NOTIFIER_HEAD(\([[:alnum:]_]\+\)/\1/' '/\<RAW_NOTIFIER_HEAD(\([[:alnum:]_]\+\)/\1/' '/\<DECLARE_FAULT_ATTR(\([[:alnum:]_]\+\)/\1/' '/\<BLOCKING_NOTIFIER_HEAD(\([[:alnum:]_]\+\)/\1/' '/\<DEVICE_ATTR_\(RW\|RO\|WO\)(\([[:alnum:]_]\+\)/dev_attr_\2/' '/\<DRIVER_ATTR_\(RW\|RO\|WO\)(\([[:alnum:]_]\+\)/driver_attr_\2/' '/\<\(DEFINE\|DECLARE\)_STATIC_KEY_\(TRUE\|FALSE\)\(\|_RO\)(\([[:alnum:]_]\+\)/\4/' |
93209d65c tags: Unify emacs... |
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 239 240 241 |
) 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... |
242 243 |
exuberant() { |
93209d65c tags: Unify emacs... |
244 |
setup_regex exuberant asm c |
923e02ecf scripts/tags.sh: ... |
245 |
all_target_sources | xargs $1 -a \ |
e23ba825d scripts/tags.sh: ... |
246 |
-I __initdata,__exitdata,__initconst,__ro_after_init \ |
22c1587ad init: delete the ... |
247 |
-I __initdata_memblock \ |
f5a82137a scripts/tags.sh: ... |
248 |
-I __refdata,__attribute,__maybe_unused,__always_unused \ |
cd68a5253 scripts/tags.sh: ... |
249 |
-I __acquires,__releases,__deprecated,__always_inline \ |
1b2643f0d scripts/tags.sh: ... |
250 |
-I __read_mostly,__aligned,____cacheline_aligned \ |
a680eedc6 tags and cscope s... |
251 |
-I ____cacheline_aligned_in_smp \ |
f5a82137a scripts/tags.sh: ... |
252 |
-I __cacheline_aligned,__cacheline_aligned_in_smp \ |
a680eedc6 tags and cscope s... |
253 |
-I ____cacheline_internodealigned_in_smp \ |
1b2643f0d scripts/tags.sh: ... |
254 |
-I __used,__packed,__packed2__,__must_check,__must_hold \ |
f5a82137a scripts/tags.sh: ... |
255 |
-I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL,ACPI_EXPORT_SYMBOL \ |
7db86dc97 ctags: usability fix |
256 |
-I DEFINE_TRACE,EXPORT_TRACEPOINT_SYMBOL,EXPORT_TRACEPOINT_SYMBOL_GPL \ |
1b2643f0d scripts/tags.sh: ... |
257 |
-I static,const \ |
d0c75f33f scripts/tags.sh: ... |
258 259 |
--extra=+fq --c-kinds=+px --fields=+iaS --langmap=c:+.h \ "${regex[@]}" |
a680eedc6 tags and cscope s... |
260 |
|
93209d65c tags: Unify emacs... |
261 |
setup_regex exuberant kconfig |
a680eedc6 tags and cscope s... |
262 |
all_kconfigs | xargs $1 -a \ |
93209d65c tags: Unify emacs... |
263 |
--langdef=kconfig --language-force=kconfig "${regex[@]}" |
a680eedc6 tags and cscope s... |
264 |
|
a680eedc6 tags and cscope s... |
265 266 267 268 |
} emacs() { |
93209d65c tags: Unify emacs... |
269 270 |
setup_regex emacs asm c all_target_sources | xargs $1 -a "${regex[@]}" |
a680eedc6 tags and cscope s... |
271 |
|
93209d65c tags: Unify emacs... |
272 273 |
setup_regex emacs kconfig all_kconfigs | xargs $1 -a "${regex[@]}" |
a680eedc6 tags and cscope s... |
274 275 276 277 278 279 280 281 282 |
} 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: ... |
283 |
all_target_sources | xargs $1 -a |
bb66fc671 kbuild: trivial -... |
284 |
fi |
a680eedc6 tags and cscope s... |
285 |
} |
a680eedc6 tags and cscope s... |
286 |
# Support um (which uses SUBARCH) |
a6ba0cb35 kbuild: fix strin... |
287 288 |
if [ "${ARCH}" = "um" ]; then if [ "$SUBARCH" = "i386" ]; then |
a680eedc6 tags and cscope s... |
289 |
archinclude=x86 |
a6ba0cb35 kbuild: fix strin... |
290 |
elif [ "$SUBARCH" = "x86_64" ]; then |
a680eedc6 tags and cscope s... |
291 292 293 294 295 |
archinclude=x86 else archinclude=${SUBARCH} fi fi |
66979224c scripts: refactor... |
296 |
remove_structs= |
a680eedc6 tags and cscope s... |
297 298 299 300 |
case "$1" in "cscope") docscope ;; |
f4ed1009f kbuild: add GNU G... |
301 302 303 |
"gtags") dogtags ;; |
a680eedc6 tags and cscope s... |
304 |
"tags") |
2e6cb8b0d kbuild: remove a ... |
305 |
rm -f tags |
a680eedc6 tags and cscope s... |
306 |
xtags ctags |
66979224c scripts: refactor... |
307 |
remove_structs=y |
a680eedc6 tags and cscope s... |
308 309 310 |
;; "TAGS") |
2e6cb8b0d kbuild: remove a ... |
311 |
rm -f TAGS |
a680eedc6 tags and cscope s... |
312 |
xtags etags |
66979224c scripts: refactor... |
313 |
remove_structs=y |
a680eedc6 tags and cscope s... |
314 315 |
;; esac |
66979224c scripts: refactor... |
316 317 |
# Remove structure forward declarations. |
0eb043d0e Subject: [PATCH] ... |
318 |
if [ -n "$remove_structs" ]; then |
66979224c scripts: refactor... |
319 320 |
LANG=C sed -i -e '/^\([a-zA-Z_][a-zA-Z0-9_]*\)\t.*\t\/\^struct \1;.*\$\/;"\tx$/d' $1 fi |