Blame view

scripts/tags.sh 9.04 KB
93209d65c   Michal Marek   tags: Unify emacs...
1
  #!/bin/bash
a680eedc6   Sam Ravnborg   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   Michal Marek   tags: Use $SRCARCH
8
  # ARCH, SUBARCH, SRCARCH, srctree, src, obj
a680eedc6   Sam Ravnborg   tags and cscope s...
9

a6ba0cb35   Jiri Slaby   kbuild: fix strin...
10
  if [ "$KBUILD_VERBOSE" = "1" ]; then
a680eedc6   Sam Ravnborg   tags and cscope s...
11
12
  	set -x
  fi
ae63b2d7b   Prarit Bhargava   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   Sam Ravnborg   tags and cscope s...
17

4431d4ce9   John Kacur   tags: Fix spellin...
18
  # Do not use full path if we do not use O=.. builds
e93bc1a0c   Michal Marek   Revert "kbuild: s...
19
20
  # Use make O=. {tags|cscope}
  # to force full paths for a non-O= build
a6ba0cb35   Jiri Slaby   kbuild: fix strin...
21
  if [ "${KBUILD_SRC}" = "" ]; then
a680eedc6   Sam Ravnborg   tags and cscope s...
22
23
  	tree=
  else
709cc372c   Jiri Slaby   kbuild: fix make ...
24
  	tree=${srctree}/
a680eedc6   Sam Ravnborg   tags and cscope s...
25
  fi
8c38a5328   Konstantin Khlebnikov   scripts/tags.sh: ...
26
27
  # ignore userspace tools
  ignore="$ignore ( -path ${tree}tools ) -prune -o"
bc75cc6b5   John Kacur   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   Jike Song   kbuild: reintrodu...
36
37
38
  # Detect if ALLSOURCE_ARCHS is set. If not, we assume SRCARCH
  if [ "${ALLSOURCE_ARCHS}" = "" ]; then
  	ALLSOURCE_ARCHS=${SRCARCH}
bc75cc6b5   John Kacur   tags: Add the abi...
39
40
  elif [ "${ALLSOURCE_ARCHS}" = "all" ]; then
  	find_all_archs
4f628248a   Jike Song   kbuild: reintrodu...
41
  fi
a680eedc6   Sam Ravnborg   tags and cscope s...
42
43
44
  # find sources in arch/$ARCH
  find_arch_sources()
  {
f81b1be40   Guennadi Liakhovetski   tags: include hea...
45
46
47
  	for i in $archincludedir; do
  		prune="$prune -wholename $i -prune -o"
  	done
9b24a15d8   Yann Droneaud   scripts/tags.sh: ...
48
49
  	find ${tree}arch/$1 $ignore $subarchprune $prune -name "$2" \
  		-not -type l -print;
a680eedc6   Sam Ravnborg   tags and cscope s...
50
51
52
53
54
  }
  
  # find sources in arch/$1/include
  find_arch_include_sources()
  {
596585090   Joonsoo Kim   scripts/tags.sh: ...
55
56
  	include=$(find ${tree}arch/$1/ $subarchprune \
  					-name include -type d -print);
f81b1be40   Guennadi Liakhovetski   tags: include hea...
57
58
  	if [ -n "$include" ]; then
  		archincludedir="$archincludedir $include"
9b24a15d8   Yann Droneaud   scripts/tags.sh: ...
59
  		find $include $ignore -name "$2" -not -type l -print;
f81b1be40   Guennadi Liakhovetski   tags: include hea...
60
  	fi
a680eedc6   Sam Ravnborg   tags and cscope s...
61
62
63
64
65
  }
  
  # find sources in include/
  find_include_sources()
  {
9b24a15d8   Yann Droneaud   scripts/tags.sh: ...
66
67
  	find ${tree}include $ignore -name config -prune -o -name "$1" \
  		-not -type l -print;
a680eedc6   Sam Ravnborg   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   Yann Droneaud   scripts/tags.sh: ...
76
  	       -name "$1" -not -type l -print;
a680eedc6   Sam Ravnborg   tags and cscope s...
77
78
79
80
  }
  
  find_sources()
  {
709cc372c   Jiri Slaby   kbuild: fix make ...
81
  	find_arch_sources $1 "$2"
a680eedc6   Sam Ravnborg   tags and cscope s...
82
83
84
85
  }
  
  all_sources()
  {
a8bac511c   Michal Marek   tags: Use $SRCARCH
86
  	find_arch_include_sources ${SRCARCH} '*.[chS]'
a680eedc6   Sam Ravnborg   tags and cscope s...
87
  	if [ ! -z "$archinclude" ]; then
709cc372c   Jiri Slaby   kbuild: fix make ...
88
  		find_arch_include_sources $archinclude '*.[chS]'
a680eedc6   Sam Ravnborg   tags and cscope s...
89
  	fi
4f628248a   Jike Song   kbuild: reintrodu...
90
  	find_include_sources '*.[chS]'
f81b1be40   Guennadi Liakhovetski   tags: include hea...
91
92
93
94
  	for arch in $ALLSOURCE_ARCHS
  	do
  		find_sources $arch '*.[chS]'
  	done
4f628248a   Jike Song   kbuild: reintrodu...
95
  	find_other_sources '*.[chS]'
a680eedc6   Sam Ravnborg   tags and cscope s...
96
  }
923e02ecf   Joonsoo Kim   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   Sam Ravnborg   tags and cscope s...
122
123
  all_kconfigs()
  {
953fae66d   Alexey Dobriyan   kbuild: fix tags ...
124
125
126
127
  	for arch in $ALLSOURCE_ARCHS; do
  		find_sources $arch 'Kconfig*'
  	done
  	find_other_sources 'Kconfig*'
a680eedc6   Sam Ravnborg   tags and cscope s...
128
  }
a680eedc6   Sam Ravnborg   tags and cscope s...
129
130
  docscope()
  {
923e02ecf   Joonsoo Kim   scripts/tags.sh: ...
131
  	(echo \-k; echo \-q; all_target_sources) > cscope.files
a680eedc6   Sam Ravnborg   tags and cscope s...
132
133
  	cscope -b -f cscope.out
  }
f4ed1009f   Jianbin Kang   kbuild: add GNU G...
134
135
  dogtags()
  {
923e02ecf   Joonsoo Kim   scripts/tags.sh: ...
136
  	all_target_sources | gtags -i -f -
f4ed1009f   Jianbin Kang   kbuild: add GNU G...
137
  }
93209d65c   Michal Marek   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   Naveen N. Rao   scripts/tags.sh: ...
156
157
  	'/^DEFINE_INSN_CACHE_OPS(\([[:alnum:]_]*\).*/get_\1_slot/'
  	'/^DEFINE_INSN_CACHE_OPS(\([[:alnum:]_]*\).*/free_\1_slot/'
93209d65c   Michal Marek   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   Vladimir Davydov   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   Michal Marek   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   Michal Marek   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   Sam Ravnborg   tags and cscope s...
239
240
  exuberant()
  {
93209d65c   Michal Marek   tags: Unify emacs...
241
  	setup_regex exuberant asm c
923e02ecf   Joonsoo Kim   scripts/tags.sh: ...
242
  	all_target_sources | xargs $1 -a                        \
6cf3a6eff   Michael Opdenacker   scripts/tags.sh: ...
243
  	-I __initdata,__exitdata,__initconst,			\
22c1587ad   Paul Gortmaker   init: delete the ...
244
  	-I __initdata_memblock					\
f5a82137a   Kirill Tkhai   scripts/tags.sh: ...
245
  	-I __refdata,__attribute,__maybe_unused,__always_unused \
1b2643f0d   Kirill Tkhai   scripts/tags.sh: ...
246
247
  	-I __acquires,__releases,__deprecated			\
  	-I __read_mostly,__aligned,____cacheline_aligned        \
a680eedc6   Sam Ravnborg   tags and cscope s...
248
  	-I ____cacheline_aligned_in_smp                         \
f5a82137a   Kirill Tkhai   scripts/tags.sh: ...
249
  	-I __cacheline_aligned,__cacheline_aligned_in_smp	\
a680eedc6   Sam Ravnborg   tags and cscope s...
250
  	-I ____cacheline_internodealigned_in_smp                \
1b2643f0d   Kirill Tkhai   scripts/tags.sh: ...
251
  	-I __used,__packed,__packed2__,__must_check,__must_hold	\
f5a82137a   Kirill Tkhai   scripts/tags.sh: ...
252
  	-I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL,ACPI_EXPORT_SYMBOL   \
7db86dc97   Stefani Seibold   ctags: usability fix
253
  	-I DEFINE_TRACE,EXPORT_TRACEPOINT_SYMBOL,EXPORT_TRACEPOINT_SYMBOL_GPL \
1b2643f0d   Kirill Tkhai   scripts/tags.sh: ...
254
  	-I static,const						\
d0c75f33f   Mathieu Maret   scripts/tags.sh: ...
255
256
  	--extra=+fq --c-kinds=+px --fields=+iaS --langmap=c:+.h \
  	"${regex[@]}"
a680eedc6   Sam Ravnborg   tags and cscope s...
257

93209d65c   Michal Marek   tags: Unify emacs...
258
  	setup_regex exuberant kconfig
a680eedc6   Sam Ravnborg   tags and cscope s...
259
  	all_kconfigs | xargs $1 -a                              \
93209d65c   Michal Marek   tags: Unify emacs...
260
  	--langdef=kconfig --language-force=kconfig "${regex[@]}"
a680eedc6   Sam Ravnborg   tags and cscope s...
261

a680eedc6   Sam Ravnborg   tags and cscope s...
262
263
264
265
  }
  
  emacs()
  {
93209d65c   Michal Marek   tags: Unify emacs...
266
267
  	setup_regex emacs asm c
  	all_target_sources | xargs $1 -a "${regex[@]}"
a680eedc6   Sam Ravnborg   tags and cscope s...
268

93209d65c   Michal Marek   tags: Unify emacs...
269
270
  	setup_regex emacs kconfig
  	all_kconfigs | xargs $1 -a "${regex[@]}"
a680eedc6   Sam Ravnborg   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   Joonsoo Kim   scripts/tags.sh: ...
280
  		all_target_sources | xargs $1 -a
bb66fc671   Masahiro Yamada   kbuild: trivial -...
281
  	fi
a680eedc6   Sam Ravnborg   tags and cscope s...
282
  }
a680eedc6   Sam Ravnborg   tags and cscope s...
283
  # Support um (which uses SUBARCH)
a6ba0cb35   Jiri Slaby   kbuild: fix strin...
284
285
  if [ "${ARCH}" = "um" ]; then
  	if [ "$SUBARCH" = "i386" ]; then
a680eedc6   Sam Ravnborg   tags and cscope s...
286
  		archinclude=x86
a6ba0cb35   Jiri Slaby   kbuild: fix strin...
287
  	elif [ "$SUBARCH" = "x86_64" ]; then
a680eedc6   Sam Ravnborg   tags and cscope s...
288
289
290
291
  		archinclude=x86
  	else
  		archinclude=${SUBARCH}
  	fi
596585090   Joonsoo Kim   scripts/tags.sh: ...
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
  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   Sam Ravnborg   tags and cscope s...
307
  fi
66979224c   Yang Bai   scripts: refactor...
308
  remove_structs=
a680eedc6   Sam Ravnborg   tags and cscope s...
309
310
311
312
  case "$1" in
  	"cscope")
  		docscope
  		;;
f4ed1009f   Jianbin Kang   kbuild: add GNU G...
313
314
315
  	"gtags")
  		dogtags
  		;;
a680eedc6   Sam Ravnborg   tags and cscope s...
316
  	"tags")
2e6cb8b0d   Matt Kraai   kbuild: remove a ...
317
  		rm -f tags
a680eedc6   Sam Ravnborg   tags and cscope s...
318
  		xtags ctags
66979224c   Yang Bai   scripts: refactor...
319
  		remove_structs=y
a680eedc6   Sam Ravnborg   tags and cscope s...
320
321
322
  		;;
  
  	"TAGS")
2e6cb8b0d   Matt Kraai   kbuild: remove a ...
323
  		rm -f TAGS
a680eedc6   Sam Ravnborg   tags and cscope s...
324
  		xtags etags
66979224c   Yang Bai   scripts: refactor...
325
  		remove_structs=y
a680eedc6   Sam Ravnborg   tags and cscope s...
326
327
  		;;
  esac
66979224c   Yang Bai   scripts: refactor...
328
329
  
  # Remove structure forward declarations.
0eb043d0e   Stephen Boyd   Subject: [PATCH] ...
330
  if [ -n "$remove_structs" ]; then
66979224c   Yang Bai   scripts: refactor...
331
332
      LANG=C sed -i -e '/^\([a-zA-Z_][a-zA-Z0-9_]*\)\t.*\t\/\^struct \1;.*\$\/;"\tx$/d' $1
  fi