Blame view
scripts/tags.sh
9.3 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 |
all_compiled_sources() { |
4f491bb6e scripts/tags.sh: ... |
89 90 91 92 |
realpath -es $([ -z "$KBUILD_ABS_SRCTREE" ] && echo --relative-to=.) \ include/generated/autoconf.h $(find -name "*.cmd" -exec \ grep -Poh '(?(?=^source_.* \K).*|(?=^ \K\S).*(?= \\))' {} \+ | awk '!a[$0]++') | sort -u |
923e02ecf scripts/tags.sh: ... |
93 94 95 96 97 98 99 100 101 102 |
} all_target_sources() { if [ -n "$COMPILED_SOURCE" ]; then all_compiled_sources else all_sources fi } |
a680eedc6 tags and cscope s... |
103 104 |
all_kconfigs() { |
7659c655b scripts/tags.sh: ... |
105 106 |
find ${tree}arch/ -maxdepth 1 $ignore \ -name "Kconfig*" -not -type l -print; |
953fae66d kbuild: fix tags ... |
107 108 109 110 |
for arch in $ALLSOURCE_ARCHS; do find_sources $arch 'Kconfig*' done find_other_sources 'Kconfig*' |
a680eedc6 tags and cscope s... |
111 |
} |
a680eedc6 tags and cscope s... |
112 113 |
docscope() { |
923e02ecf scripts/tags.sh: ... |
114 |
(echo \-k; echo \-q; all_target_sources) > cscope.files |
a680eedc6 tags and cscope s... |
115 116 |
cscope -b -f cscope.out } |
f4ed1009f kbuild: add GNU G... |
117 118 |
dogtags() { |
923e02ecf scripts/tags.sh: ... |
119 |
all_target_sources | gtags -i -f - |
f4ed1009f kbuild: add GNU G... |
120 |
} |
93209d65c tags: Unify emacs... |
121 122 123 124 125 126 127 128 129 130 131 132 133 |
# 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: ... |
134 |
'/^BPF_CALL_[0-9](\([[:alnum:]_]*\).*/\1/' |
93209d65c tags: Unify emacs... |
135 136 137 138 139 |
'/^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: ... |
140 141 |
'/^DEFINE_INSN_CACHE_OPS(\([[:alnum:]_]*\).*/get_\1_slot/' '/^DEFINE_INSN_CACHE_OPS(\([[:alnum:]_]*\).*/free_\1_slot/' |
93209d65c tags: Unify emacs... |
142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
'/^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... |
162 163 164 |
'/^PAGE_TYPE_OPS(\([[:alnum:]_]*\).*/Page\1/' '/^PAGE_TYPE_OPS(\([[:alnum:]_]*\).*/__SetPage\1/' '/^PAGE_TYPE_OPS(\([[:alnum:]_]*\).*/__ClearPage\1/' |
93209d65c tags: Unify emacs... |
165 166 167 168 169 170 171 172 |
'/^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: ... |
173 |
'/\<DEFINE_\(RT_MUTEX\|MUTEX\|SEMAPHORE\|SPINLOCK\)(\([[:alnum:]_]*\)/\2/v/' |
93209d65c tags: Unify emacs... |
174 175 176 177 178 179 180 181 182 |
'/\<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... |
183 184 |
'/\(^\s\)OFFSET(\([[:alnum:]_]*\)/\2/v/' '/\(^\s\)DEFINE(\([[:alnum:]_]*\)/\2/v/' |
1f6904f72 scripts/tags.sh: ... |
185 |
'/\<\(DEFINE\|DECLARE\)_HASHTABLE(\([[:alnum:]_]*\)/\2/v/' |
cd68a5253 scripts/tags.sh: ... |
186 187 188 189 190 191 192 193 194 |
'/\<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... |
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 |
) 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... |
232 233 |
exuberant() { |
93209d65c tags: Unify emacs... |
234 |
setup_regex exuberant asm c |
923e02ecf scripts/tags.sh: ... |
235 |
all_target_sources | xargs $1 -a \ |
e23ba825d scripts/tags.sh: ... |
236 |
-I __initdata,__exitdata,__initconst,__ro_after_init \ |
22c1587ad init: delete the ... |
237 |
-I __initdata_memblock \ |
f5a82137a scripts/tags.sh: ... |
238 |
-I __refdata,__attribute,__maybe_unused,__always_unused \ |
cd68a5253 scripts/tags.sh: ... |
239 |
-I __acquires,__releases,__deprecated,__always_inline \ |
1b2643f0d scripts/tags.sh: ... |
240 |
-I __read_mostly,__aligned,____cacheline_aligned \ |
a680eedc6 tags and cscope s... |
241 |
-I ____cacheline_aligned_in_smp \ |
f5a82137a scripts/tags.sh: ... |
242 |
-I __cacheline_aligned,__cacheline_aligned_in_smp \ |
a680eedc6 tags and cscope s... |
243 |
-I ____cacheline_internodealigned_in_smp \ |
1b2643f0d scripts/tags.sh: ... |
244 |
-I __used,__packed,__packed2__,__must_check,__must_hold \ |
f5a82137a scripts/tags.sh: ... |
245 |
-I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL,ACPI_EXPORT_SYMBOL \ |
7db86dc97 ctags: usability fix |
246 |
-I DEFINE_TRACE,EXPORT_TRACEPOINT_SYMBOL,EXPORT_TRACEPOINT_SYMBOL_GPL \ |
1b2643f0d scripts/tags.sh: ... |
247 |
-I static,const \ |
d0c75f33f scripts/tags.sh: ... |
248 249 |
--extra=+fq --c-kinds=+px --fields=+iaS --langmap=c:+.h \ "${regex[@]}" |
a680eedc6 tags and cscope s... |
250 |
|
93209d65c tags: Unify emacs... |
251 |
setup_regex exuberant kconfig |
a680eedc6 tags and cscope s... |
252 |
all_kconfigs | xargs $1 -a \ |
93209d65c tags: Unify emacs... |
253 |
--langdef=kconfig --language-force=kconfig "${regex[@]}" |
a680eedc6 tags and cscope s... |
254 |
|
a680eedc6 tags and cscope s... |
255 256 257 258 |
} emacs() { |
93209d65c tags: Unify emacs... |
259 260 |
setup_regex emacs asm c all_target_sources | xargs $1 -a "${regex[@]}" |
a680eedc6 tags and cscope s... |
261 |
|
93209d65c tags: Unify emacs... |
262 263 |
setup_regex emacs kconfig all_kconfigs | xargs $1 -a "${regex[@]}" |
a680eedc6 tags and cscope s... |
264 265 266 267 268 269 270 271 272 |
} 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: ... |
273 |
all_target_sources | xargs $1 -a |
bb66fc671 kbuild: trivial -... |
274 |
fi |
a680eedc6 tags and cscope s... |
275 |
} |
a680eedc6 tags and cscope s... |
276 |
# Support um (which uses SUBARCH) |
a6ba0cb35 kbuild: fix strin... |
277 278 |
if [ "${ARCH}" = "um" ]; then if [ "$SUBARCH" = "i386" ]; then |
a680eedc6 tags and cscope s... |
279 |
archinclude=x86 |
a6ba0cb35 kbuild: fix strin... |
280 |
elif [ "$SUBARCH" = "x86_64" ]; then |
a680eedc6 tags and cscope s... |
281 282 283 284 285 |
archinclude=x86 else archinclude=${SUBARCH} fi fi |
66979224c scripts: refactor... |
286 |
remove_structs= |
a680eedc6 tags and cscope s... |
287 288 289 290 |
case "$1" in "cscope") docscope ;; |
f4ed1009f kbuild: add GNU G... |
291 292 293 |
"gtags") dogtags ;; |
a680eedc6 tags and cscope s... |
294 |
"tags") |
2e6cb8b0d kbuild: remove a ... |
295 |
rm -f tags |
a680eedc6 tags and cscope s... |
296 |
xtags ctags |
66979224c scripts: refactor... |
297 |
remove_structs=y |
a680eedc6 tags and cscope s... |
298 299 300 |
;; "TAGS") |
2e6cb8b0d kbuild: remove a ... |
301 |
rm -f TAGS |
a680eedc6 tags and cscope s... |
302 |
xtags etags |
66979224c scripts: refactor... |
303 |
remove_structs=y |
a680eedc6 tags and cscope s... |
304 305 |
;; esac |
66979224c scripts: refactor... |
306 307 |
# Remove structure forward declarations. |
0eb043d0e Subject: [PATCH] ... |
308 |
if [ -n "$remove_structs" ]; then |
66979224c scripts: refactor... |
309 310 |
LANG=C sed -i -e '/^\([a-zA-Z_][a-zA-Z0-9_]*\)\t.*\t\/\^struct \1;.*\$\/;"\tx$/d' $1 fi |