Blame view
scripts/tags.sh
9.55 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 |
# ignore userspace tools |
162343a87 scripts/tags.sh: ... |
27 28 29 30 31 |
if [ -n "$COMPILED_SOURCE" ]; then ignore="$ignore ( -path ./tools ) -prune -o" else ignore="$ignore ( -path ${tree}tools ) -prune -o" fi |
8c38a5328 scripts/tags.sh: ... |
32 |
|
4f628248a kbuild: reintrodu... |
33 34 35 |
# Detect if ALLSOURCE_ARCHS is set. If not, we assume SRCARCH if [ "${ALLSOURCE_ARCHS}" = "" ]; then ALLSOURCE_ARCHS=${SRCARCH} |
bc75cc6b5 tags: Add the abi... |
36 |
elif [ "${ALLSOURCE_ARCHS}" = "all" ]; then |
656c10777 scripts/tags.sh: ... |
37 |
ALLSOURCE_ARCHS=$(find ${tree}arch/ -mindepth 1 -maxdepth 1 -type d -printf '%f ') |
4f628248a kbuild: reintrodu... |
38 |
fi |
b3b3eb9da scripts/tags.sh: ... |
39 |
# find sources in arch/$1 |
a680eedc6 tags and cscope s... |
40 41 |
find_arch_sources() { |
f81b1be40 tags: include hea... |
42 43 44 |
for i in $archincludedir; do prune="$prune -wholename $i -prune -o" done |
d1db881d9 scripts/tags.sh: ... |
45 |
find ${tree}arch/$1 $ignore $prune -name "$2" -not -type l -print; |
a680eedc6 tags and cscope s... |
46 47 48 49 50 |
} # find sources in arch/$1/include find_arch_include_sources() { |
d1db881d9 scripts/tags.sh: ... |
51 |
include=$(find ${tree}arch/$1/ -name include -type d -print); |
f81b1be40 tags: include hea... |
52 53 |
if [ -n "$include" ]; then archincludedir="$archincludedir $include" |
9b24a15d8 scripts/tags.sh: ... |
54 |
find $include $ignore -name "$2" -not -type l -print; |
f81b1be40 tags: include hea... |
55 |
fi |
a680eedc6 tags and cscope s... |
56 57 58 59 60 |
} # find sources in include/ find_include_sources() { |
9b24a15d8 scripts/tags.sh: ... |
61 62 |
find ${tree}include $ignore -name config -prune -o -name "$1" \ -not -type l -print; |
a680eedc6 tags and cscope s... |
63 64 65 66 67 68 69 |
} # 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: ... |
70 |
\( -path ${tree}include -o -path ${tree}arch -o -name '.tmp_*' \) -prune -o \ |
9b24a15d8 scripts/tags.sh: ... |
71 |
-name "$1" -not -type l -print; |
a680eedc6 tags and cscope s... |
72 73 74 75 |
} find_sources() { |
709cc372c kbuild: fix make ... |
76 |
find_arch_sources $1 "$2" |
a680eedc6 tags and cscope s... |
77 78 79 80 |
} all_sources() { |
a8bac511c tags: Use $SRCARCH |
81 |
find_arch_include_sources ${SRCARCH} '*.[chS]' |
a680eedc6 tags and cscope s... |
82 |
if [ ! -z "$archinclude" ]; then |
709cc372c kbuild: fix make ... |
83 |
find_arch_include_sources $archinclude '*.[chS]' |
a680eedc6 tags and cscope s... |
84 |
fi |
4f628248a kbuild: reintrodu... |
85 |
find_include_sources '*.[chS]' |
f81b1be40 tags: include hea... |
86 87 88 89 |
for arch in $ALLSOURCE_ARCHS do find_sources $arch '*.[chS]' done |
4f628248a kbuild: reintrodu... |
90 |
find_other_sources '*.[chS]' |
a680eedc6 tags and cscope s... |
91 |
} |
923e02ecf scripts/tags.sh: ... |
92 93 |
all_compiled_sources() { |
4f491bb6e scripts/tags.sh: ... |
94 |
realpath -es $([ -z "$KBUILD_ABS_SRCTREE" ] && echo --relative-to=.) \ |
162343a87 scripts/tags.sh: ... |
95 |
include/generated/autoconf.h $(find $ignore -name "*.cmd" -exec \ |
4f491bb6e scripts/tags.sh: ... |
96 97 |
grep -Poh '(?(?=^source_.* \K).*|(?=^ \K\S).*(?= \\))' {} \+ | awk '!a[$0]++') | sort -u |
923e02ecf scripts/tags.sh: ... |
98 99 100 101 102 103 104 105 106 107 |
} all_target_sources() { if [ -n "$COMPILED_SOURCE" ]; then all_compiled_sources else all_sources fi } |
a680eedc6 tags and cscope s... |
108 109 |
all_kconfigs() { |
7659c655b scripts/tags.sh: ... |
110 111 |
find ${tree}arch/ -maxdepth 1 $ignore \ -name "Kconfig*" -not -type l -print; |
953fae66d kbuild: fix tags ... |
112 113 114 115 |
for arch in $ALLSOURCE_ARCHS; do find_sources $arch 'Kconfig*' done find_other_sources 'Kconfig*' |
a680eedc6 tags and cscope s... |
116 |
} |
a680eedc6 tags and cscope s... |
117 118 |
docscope() { |
923e02ecf scripts/tags.sh: ... |
119 |
(echo \-k; echo \-q; all_target_sources) > cscope.files |
a680eedc6 tags and cscope s... |
120 121 |
cscope -b -f cscope.out } |
f4ed1009f kbuild: add GNU G... |
122 123 |
dogtags() { |
923e02ecf scripts/tags.sh: ... |
124 |
all_target_sources | gtags -i -f - |
f4ed1009f kbuild: add GNU G... |
125 |
} |
93209d65c tags: Unify emacs... |
126 127 128 129 130 131 132 133 134 135 136 137 138 |
# 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: ... |
139 |
'/^BPF_CALL_[0-9](\([[:alnum:]_]*\).*/\1/' |
93209d65c tags: Unify emacs... |
140 141 142 143 144 |
'/^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: ... |
145 146 |
'/^DEFINE_INSN_CACHE_OPS(\([[:alnum:]_]*\).*/get_\1_slot/' '/^DEFINE_INSN_CACHE_OPS(\([[:alnum:]_]*\).*/free_\1_slot/' |
93209d65c tags: Unify emacs... |
147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
'/^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... |
167 168 169 |
'/^PAGE_TYPE_OPS(\([[:alnum:]_]*\).*/Page\1/' '/^PAGE_TYPE_OPS(\([[:alnum:]_]*\).*/__SetPage\1/' '/^PAGE_TYPE_OPS(\([[:alnum:]_]*\).*/__ClearPage\1/' |
93209d65c tags: Unify emacs... |
170 171 172 173 174 175 176 177 |
'/^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: ... |
178 |
'/\<DEFINE_\(RT_MUTEX\|MUTEX\|SEMAPHORE\|SPINLOCK\)(\([[:alnum:]_]*\)/\2/v/' |
93209d65c tags: Unify emacs... |
179 180 181 182 183 184 185 186 187 |
'/\<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... |
188 189 |
'/\(^\s\)OFFSET(\([[:alnum:]_]*\)/\2/v/' '/\(^\s\)DEFINE(\([[:alnum:]_]*\)/\2/v/' |
1f6904f72 scripts/tags.sh: ... |
190 |
'/\<\(DEFINE\|DECLARE\)_HASHTABLE(\([[:alnum:]_]*\)/\2/v/' |
cd68a5253 scripts/tags.sh: ... |
191 192 193 194 195 196 197 198 199 |
'/\<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/' |
6eb6d0595 seqlock,tags: Add... |
200 201 |
'/^SEQCOUNT_LOCKTYPE(\([^,]*\),[[:space:]]*\([^,]*\),[^)]*)/seqcount_\2_t/' '/^SEQCOUNT_LOCKTYPE(\([^,]*\),[[:space:]]*\([^,]*\),[^)]*)/seqcount_\2_init/' |
93209d65c tags: Unify emacs... |
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 |
) 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 \ |
e23ba825d scripts/tags.sh: ... |
243 |
-I __initdata,__exitdata,__initconst,__ro_after_init \ |
22c1587ad init: delete the ... |
244 |
-I __initdata_memblock \ |
f5a82137a scripts/tags.sh: ... |
245 |
-I __refdata,__attribute,__maybe_unused,__always_unused \ |
cd68a5253 scripts/tags.sh: ... |
246 |
-I __acquires,__releases,__deprecated,__always_inline \ |
1b2643f0d scripts/tags.sh: ... |
247 |
-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 \ |
d0c75f33f scripts/tags.sh: ... |
255 256 |
--extra=+fq --c-kinds=+px --fields=+iaS --langmap=c:+.h \ "${regex[@]}" |
a680eedc6 tags and cscope s... |
257 |
|
93209d65c tags: Unify emacs... |
258 |
setup_regex exuberant kconfig |
a680eedc6 tags and cscope s... |
259 |
all_kconfigs | xargs $1 -a \ |
93209d65c tags: Unify emacs... |
260 |
--langdef=kconfig --language-force=kconfig "${regex[@]}" |
a680eedc6 tags and cscope s... |
261 |
|
a680eedc6 tags and cscope s... |
262 263 264 265 |
} emacs() { |
93209d65c tags: Unify emacs... |
266 267 |
setup_regex emacs asm c all_target_sources | xargs $1 -a "${regex[@]}" |
a680eedc6 tags and cscope s... |
268 |
|
93209d65c tags: Unify emacs... |
269 270 |
setup_regex emacs kconfig all_kconfigs | xargs $1 -a "${regex[@]}" |
a680eedc6 tags and cscope s... |
271 272 273 274 275 276 277 278 279 |
} 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: ... |
280 |
all_target_sources | xargs $1 -a |
bb66fc671 kbuild: trivial -... |
281 |
fi |
a680eedc6 tags and cscope s... |
282 |
} |
a680eedc6 tags and cscope s... |
283 |
# Support um (which uses SUBARCH) |
a6ba0cb35 kbuild: fix strin... |
284 285 |
if [ "${ARCH}" = "um" ]; then if [ "$SUBARCH" = "i386" ]; then |
a680eedc6 tags and cscope s... |
286 |
archinclude=x86 |
a6ba0cb35 kbuild: fix strin... |
287 |
elif [ "$SUBARCH" = "x86_64" ]; then |
a680eedc6 tags and cscope s... |
288 289 290 291 292 |
archinclude=x86 else archinclude=${SUBARCH} fi fi |
66979224c scripts: refactor... |
293 |
remove_structs= |
a680eedc6 tags and cscope s... |
294 295 296 297 |
case "$1" in "cscope") docscope ;; |
f4ed1009f kbuild: add GNU G... |
298 299 300 |
"gtags") dogtags ;; |
a680eedc6 tags and cscope s... |
301 |
"tags") |
2e6cb8b0d kbuild: remove a ... |
302 |
rm -f tags |
a680eedc6 tags and cscope s... |
303 |
xtags ctags |
66979224c scripts: refactor... |
304 |
remove_structs=y |
a680eedc6 tags and cscope s... |
305 306 307 |
;; "TAGS") |
2e6cb8b0d kbuild: remove a ... |
308 |
rm -f TAGS |
a680eedc6 tags and cscope s... |
309 |
xtags etags |
66979224c scripts: refactor... |
310 |
remove_structs=y |
a680eedc6 tags and cscope s... |
311 312 |
;; esac |
66979224c scripts: refactor... |
313 314 |
# Remove structure forward declarations. |
0eb043d0e Subject: [PATCH] ... |
315 |
if [ -n "$remove_structs" ]; then |
66979224c scripts: refactor... |
316 317 |
LANG=C sed -i -e '/^\([a-zA-Z_][a-zA-Z0-9_]*\)\t.*\t\/\^struct \1;.*\$\/;"\tx$/d' $1 fi |