xref: /linux/scripts/tags.sh (revision aeb8f932080d62cdc305a7ccca9d60de34908b30)
1a680eedcSSam Ravnborg#!/bin/sh
2a680eedcSSam Ravnborg# Generate tags or cscope files
3a680eedcSSam Ravnborg# Usage tags.sh <mode>
4a680eedcSSam Ravnborg#
5a680eedcSSam Ravnborg# mode may be any of: tags, TAGS, cscope
6a680eedcSSam Ravnborg#
7a680eedcSSam Ravnborg# Uses the following environment variables:
8a8bac511SMichal Marek# ARCH, SUBARCH, SRCARCH, srctree, src, obj
9a680eedcSSam Ravnborg
10a6ba0cb3SJiri Slabyif [ "$KBUILD_VERBOSE" = "1" ]; then
11a680eedcSSam Ravnborg	set -x
12a680eedcSSam Ravnborgfi
13a680eedcSSam Ravnborg
14ae63b2d7SPrarit Bhargava# RCS_FIND_IGNORE has escaped ()s -- remove them.
15ae63b2d7SPrarit Bhargavaignore="$(echo "$RCS_FIND_IGNORE" | sed 's|\\||g' )"
16ae63b2d7SPrarit Bhargava# tags and cscope files should also ignore MODVERSION *.mod.c files
17ae63b2d7SPrarit Bhargavaignore="$ignore ( -name *.mod.c ) -prune -o"
18a680eedcSSam Ravnborg
194431d4ceSJohn Kacur# Do not use full path if we do not use O=.. builds
20e93bc1a0SMichal Marek# Use make O=. {tags|cscope}
21e93bc1a0SMichal Marek# to force full paths for a non-O= build
22a6ba0cb3SJiri Slabyif [ "${KBUILD_SRC}" = "" ]; then
23a680eedcSSam Ravnborg	tree=
24a680eedcSSam Ravnborgelse
25709cc372SJiri Slaby	tree=${srctree}/
26a680eedcSSam Ravnborgfi
27a680eedcSSam Ravnborg
288c38a532SKonstantin Khlebnikov# ignore userspace tools
298c38a532SKonstantin Khlebnikovignore="$ignore ( -path ${tree}tools ) -prune -o"
308c38a532SKonstantin Khlebnikov
31bc75cc6bSJohn Kacur# Find all available archs
32bc75cc6bSJohn Kacurfind_all_archs()
33bc75cc6bSJohn Kacur{
34bc75cc6bSJohn Kacur	ALLSOURCE_ARCHS=""
35bc75cc6bSJohn Kacur	for arch in `ls ${tree}arch`; do
36bc75cc6bSJohn Kacur		ALLSOURCE_ARCHS="${ALLSOURCE_ARCHS} "${arch##\/}
37bc75cc6bSJohn Kacur	done
38bc75cc6bSJohn Kacur}
39bc75cc6bSJohn Kacur
404f628248SJike Song# Detect if ALLSOURCE_ARCHS is set. If not, we assume SRCARCH
414f628248SJike Songif [ "${ALLSOURCE_ARCHS}" = "" ]; then
424f628248SJike Song	ALLSOURCE_ARCHS=${SRCARCH}
43bc75cc6bSJohn Kacurelif [ "${ALLSOURCE_ARCHS}" = "all" ]; then
44bc75cc6bSJohn Kacur	find_all_archs
454f628248SJike Songfi
464f628248SJike Song
47a680eedcSSam Ravnborg# find sources in arch/$ARCH
48a680eedcSSam Ravnborgfind_arch_sources()
49a680eedcSSam Ravnborg{
50f81b1be4SGuennadi Liakhovetski	for i in $archincludedir; do
51f81b1be4SGuennadi Liakhovetski		prune="$prune -wholename $i -prune -o"
52f81b1be4SGuennadi Liakhovetski	done
539b24a15dSYann Droneaud	find ${tree}arch/$1 $ignore $subarchprune $prune -name "$2" \
549b24a15dSYann Droneaud		-not -type l -print;
55a680eedcSSam Ravnborg}
56a680eedcSSam Ravnborg
57a680eedcSSam Ravnborg# find sources in arch/$1/include
58a680eedcSSam Ravnborgfind_arch_include_sources()
59a680eedcSSam Ravnborg{
6059658509SJoonsoo Kim	include=$(find ${tree}arch/$1/ $subarchprune \
6159658509SJoonsoo Kim					-name include -type d -print);
62f81b1be4SGuennadi Liakhovetski	if [ -n "$include" ]; then
63f81b1be4SGuennadi Liakhovetski		archincludedir="$archincludedir $include"
649b24a15dSYann Droneaud		find $include $ignore -name "$2" -not -type l -print;
65f81b1be4SGuennadi Liakhovetski	fi
66a680eedcSSam Ravnborg}
67a680eedcSSam Ravnborg
68a680eedcSSam Ravnborg# find sources in include/
69a680eedcSSam Ravnborgfind_include_sources()
70a680eedcSSam Ravnborg{
719b24a15dSYann Droneaud	find ${tree}include $ignore -name config -prune -o -name "$1" \
729b24a15dSYann Droneaud		-not -type l -print;
73a680eedcSSam Ravnborg}
74a680eedcSSam Ravnborg
75a680eedcSSam Ravnborg# find sources in rest of tree
76a680eedcSSam Ravnborg# we could benefit from a list of dirs to search in here
77a680eedcSSam Ravnborgfind_other_sources()
78a680eedcSSam Ravnborg{
79a680eedcSSam Ravnborg	find ${tree}* $ignore \
80a680eedcSSam Ravnborg	     \( -name include -o -name arch -o -name '.tmp_*' \) -prune -o \
819b24a15dSYann Droneaud	       -name "$1" -not -type l -print;
82a680eedcSSam Ravnborg}
83a680eedcSSam Ravnborg
84a680eedcSSam Ravnborgfind_sources()
85a680eedcSSam Ravnborg{
86709cc372SJiri Slaby	find_arch_sources $1 "$2"
87a680eedcSSam Ravnborg}
88a680eedcSSam Ravnborg
89a680eedcSSam Ravnborgall_sources()
90a680eedcSSam Ravnborg{
91a8bac511SMichal Marek	find_arch_include_sources ${SRCARCH} '*.[chS]'
92a680eedcSSam Ravnborg	if [ ! -z "$archinclude" ]; then
93709cc372SJiri Slaby		find_arch_include_sources $archinclude '*.[chS]'
94a680eedcSSam Ravnborg	fi
954f628248SJike Song	find_include_sources '*.[chS]'
96f81b1be4SGuennadi Liakhovetski	for arch in $ALLSOURCE_ARCHS
97f81b1be4SGuennadi Liakhovetski	do
98f81b1be4SGuennadi Liakhovetski		find_sources $arch '*.[chS]'
99f81b1be4SGuennadi Liakhovetski	done
1004f628248SJike Song	find_other_sources '*.[chS]'
101a680eedcSSam Ravnborg}
102a680eedcSSam Ravnborg
103923e02ecSJoonsoo Kimall_compiled_sources()
104923e02ecSJoonsoo Kim{
105923e02ecSJoonsoo Kim	for i in $(all_sources); do
106923e02ecSJoonsoo Kim		case "$i" in
107923e02ecSJoonsoo Kim			*.[cS])
108923e02ecSJoonsoo Kim				j=${i/\.[cS]/\.o}
109923e02ecSJoonsoo Kim				if [ -e $j ]; then
110923e02ecSJoonsoo Kim					echo $i
111923e02ecSJoonsoo Kim				fi
112923e02ecSJoonsoo Kim				;;
113923e02ecSJoonsoo Kim			*)
114923e02ecSJoonsoo Kim				echo $i
115923e02ecSJoonsoo Kim				;;
116923e02ecSJoonsoo Kim		esac
117923e02ecSJoonsoo Kim	done
118923e02ecSJoonsoo Kim}
119923e02ecSJoonsoo Kim
120923e02ecSJoonsoo Kimall_target_sources()
121923e02ecSJoonsoo Kim{
122923e02ecSJoonsoo Kim	if [ -n "$COMPILED_SOURCE" ]; then
123923e02ecSJoonsoo Kim		all_compiled_sources
124923e02ecSJoonsoo Kim	else
125923e02ecSJoonsoo Kim		all_sources
126923e02ecSJoonsoo Kim	fi
127923e02ecSJoonsoo Kim}
128923e02ecSJoonsoo Kim
129a680eedcSSam Ravnborgall_kconfigs()
130a680eedcSSam Ravnborg{
131953fae66SAlexey Dobriyan	for arch in $ALLSOURCE_ARCHS; do
132953fae66SAlexey Dobriyan		find_sources $arch 'Kconfig*'
133953fae66SAlexey Dobriyan	done
134953fae66SAlexey Dobriyan	find_other_sources 'Kconfig*'
135a680eedcSSam Ravnborg}
136a680eedcSSam Ravnborg
137a680eedcSSam Ravnborgall_defconfigs()
138a680eedcSSam Ravnborg{
1394f628248SJike Song	find_sources $ALLSOURCE_ARCHS "defconfig"
140a680eedcSSam Ravnborg}
141a680eedcSSam Ravnborg
142a680eedcSSam Ravnborgdocscope()
143a680eedcSSam Ravnborg{
144923e02ecSJoonsoo Kim	(echo \-k; echo \-q; all_target_sources) > cscope.files
145a680eedcSSam Ravnborg	cscope -b -f cscope.out
146a680eedcSSam Ravnborg}
147a680eedcSSam Ravnborg
148f4ed1009SJianbin Kangdogtags()
149f4ed1009SJianbin Kang{
150923e02ecSJoonsoo Kim	all_target_sources | gtags -i -f -
151f4ed1009SJianbin Kang}
152f4ed1009SJianbin Kang
153a680eedcSSam Ravnborgexuberant()
154a680eedcSSam Ravnborg{
155923e02ecSJoonsoo Kim	all_target_sources | xargs $1 -a                        \
1566cf3a6efSMichael Opdenacker	-I __initdata,__exitdata,__initconst,			\
1576cf3a6efSMichael Opdenacker	-I __cpuinitdata,__initdata_memblock			\
158f5a82137SKirill Tkhai	-I __refdata,__attribute,__maybe_unused,__always_unused \
1591b2643f0SKirill Tkhai	-I __acquires,__releases,__deprecated			\
1601b2643f0SKirill Tkhai	-I __read_mostly,__aligned,____cacheline_aligned        \
161a680eedcSSam Ravnborg	-I ____cacheline_aligned_in_smp                         \
162f5a82137SKirill Tkhai	-I __cacheline_aligned,__cacheline_aligned_in_smp	\
163a680eedcSSam Ravnborg	-I ____cacheline_internodealigned_in_smp                \
1641b2643f0SKirill Tkhai	-I __used,__packed,__packed2__,__must_check,__must_hold	\
165f5a82137SKirill Tkhai	-I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL,ACPI_EXPORT_SYMBOL   \
1667db86dc9SStefani Seibold	-I DEFINE_TRACE,EXPORT_TRACEPOINT_SYMBOL,EXPORT_TRACEPOINT_SYMBOL_GPL \
1671b2643f0SKirill Tkhai	-I static,const						\
1680a18a938SUwe Kleine-König	--extra=+f --c-kinds=+px                                \
1699c65426aSIan Munsie	--regex-asm='/^(ENTRY|_GLOBAL)\(([^)]*)\).*/\2/'        \
17015664125SPeter Zijlstra	--regex-c='/^SYSCALL_DEFINE[[:digit:]]?\(([^,)]*).*/sys_\1/' \
171c965526aSCatalin Marinas	--regex-c='/^COMPAT_SYSCALL_DEFINE[[:digit:]]?\(([^,)]*).*/compat_sys_\1/' \
17215664125SPeter Zijlstra	--regex-c++='/^TRACE_EVENT\(([^,)]*).*/trace_\1/'		\
173358142ddSStephen Boyd	--regex-c++='/^DEFINE_EVENT\([^,)]*, *([^,)]*).*/trace_\1/'	\
174358142ddSStephen Boyd	--regex-c++='/PAGEFLAG\(([^,)]*).*/Page\1/'			\
175358142ddSStephen Boyd	--regex-c++='/PAGEFLAG\(([^,)]*).*/SetPage\1/'			\
176358142ddSStephen Boyd	--regex-c++='/PAGEFLAG\(([^,)]*).*/ClearPage\1/'		\
177358142ddSStephen Boyd	--regex-c++='/TESTSETFLAG\(([^,)]*).*/TestSetPage\1/'		\
178358142ddSStephen Boyd	--regex-c++='/TESTPAGEFLAG\(([^,)]*).*/Page\1/'			\
179358142ddSStephen Boyd	--regex-c++='/SETPAGEFLAG\(([^,)]*).*/SetPage\1/'		\
180358142ddSStephen Boyd	--regex-c++='/__SETPAGEFLAG\(([^,)]*).*/__SetPage\1/'		\
181358142ddSStephen Boyd	--regex-c++='/TESTCLEARFLAG\(([^,)]*).*/TestClearPage\1/'	\
182358142ddSStephen Boyd	--regex-c++='/__TESTCLEARFLAG\(([^,)]*).*/TestClearPage\1/'	\
183358142ddSStephen Boyd	--regex-c++='/CLEARPAGEFLAG\(([^,)]*).*/ClearPage\1/'		\
184358142ddSStephen Boyd	--regex-c++='/__CLEARPAGEFLAG\(([^,)]*).*/__ClearPage\1/'	\
185358142ddSStephen Boyd	--regex-c++='/__PAGEFLAG\(([^,)]*).*/__SetPage\1/'		\
186358142ddSStephen Boyd	--regex-c++='/__PAGEFLAG\(([^,)]*).*/__ClearPage\1/'		\
187358142ddSStephen Boyd	--regex-c++='/PAGEFLAG_FALSE\(([^,)]*).*/Page\1/'		\
188358142ddSStephen Boyd	--regex-c++='/TESTSCFLAG\(([^,)]*).*/TestSetPage\1/'		\
189358142ddSStephen Boyd	--regex-c++='/TESTSCFLAG\(([^,)]*).*/TestClearPage\1/'		\
190358142ddSStephen Boyd	--regex-c++='/SETPAGEFLAG_NOOP\(([^,)]*).*/SetPage\1/'		\
191358142ddSStephen Boyd	--regex-c++='/CLEARPAGEFLAG_NOOP\(([^,)]*).*/ClearPage\1/'	\
192358142ddSStephen Boyd	--regex-c++='/__CLEARPAGEFLAG_NOOP\(([^,)]*).*/__ClearPage\1/'	\
193358142ddSStephen Boyd	--regex-c++='/TESTCLEARFLAG_FALSE\(([^,)]*).*/TestClearPage\1/' \
1941fa85059SNamhyung Kim	--regex-c++='/__TESTCLEARFLAG_FALSE\(([^,)]*).*/__TestClearPage\1/' \
19522beb565SKirill Tkhai	--regex-c++='/_PE\(([^,)]*).*/PEVENT_ERRNO__\1/'		\
196*e0e5070bSZefan Li	--regex-c++='/TASK_PFA_TEST\([^,]*,\s*([^)]*)\)/task_\1/'	\
197*e0e5070bSZefan Li	--regex-c++='/TASK_PFA_SET\([^,]*,\s*([^)]*)\)/task_set_\1/'	\
198*e0e5070bSZefan Li	--regex-c++='/TASK_PFA_CLEAR\([^,]*,\s*([^)]*)\)/task_clear_\1/'\
1991b2643f0SKirill Tkhai	--regex-c='/PCI_OP_READ\((\w*).*[1-4]\)/pci_bus_read_config_\1/' \
2001b2643f0SKirill Tkhai	--regex-c='/PCI_OP_WRITE\((\w*).*[1-4]\)/pci_bus_write_config_\1/' \
2011b2643f0SKirill Tkhai	--regex-c='/DEFINE_(MUTEX|SEMAPHORE|SPINLOCK)\((\w*)/\2/v/'	\
2021b2643f0SKirill Tkhai	--regex-c='/DEFINE_(RAW_SPINLOCK|RWLOCK|SEQLOCK)\((\w*)/\2/v/'	\
2031b2643f0SKirill Tkhai	--regex-c='/DECLARE_(RWSEM|COMPLETION)\((\w*)/\2/v/'		\
2041b2643f0SKirill Tkhai	--regex-c='/DECLARE_BITMAP\((\w*)/\1/v/'			\
2051b2643f0SKirill Tkhai	--regex-c='/(^|\s)(|L|H)LIST_HEAD\((\w*)/\3/v/'			\
2061b2643f0SKirill Tkhai	--regex-c='/(^|\s)RADIX_TREE\((\w*)/\2/v/'			\
2071b2643f0SKirill Tkhai	--regex-c='/DEFINE_PER_CPU\(([^,]*,\s*)(\w*).*\)/\2/v/'		\
2081b2643f0SKirill Tkhai	--regex-c='/DEFINE_PER_CPU_SHARED_ALIGNED\(([^,]*,\s*)(\w*).*\)/\2/v/' \
2091b2643f0SKirill Tkhai	--regex-c='/DECLARE_WAIT_QUEUE_HEAD\((\w*)/\1/v/'		\
2101b2643f0SKirill Tkhai	--regex-c='/DECLARE_(TASKLET|WORK|DELAYED_WORK)\((\w*)/\2/v/'	\
211987d0c8eSKirill Tkhai	--regex-c='/DEFINE_PCI_DEVICE_TABLE\((\w*)/\1/v/'		\
212987d0c8eSKirill Tkhai	--regex-c='/(^\s)OFFSET\((\w*)/\2/v/'				\
2133005286eSJianyu Zhan	--regex-c='/(^\s)DEFINE\((\w*)/\2/v/'				\
2143005286eSJianyu Zhan	--regex-c='/DEFINE_HASHTABLE\((\w*)/\1/v/'
215a680eedcSSam Ravnborg
216a680eedcSSam Ravnborg	all_kconfigs | xargs $1 -a                              \
217a680eedcSSam Ravnborg	--langdef=kconfig --language-force=kconfig              \
218a680eedcSSam Ravnborg	--regex-kconfig='/^[[:blank:]]*(menu|)config[[:blank:]]+([[:alnum:]_]+)/\2/'
219a680eedcSSam Ravnborg
220a680eedcSSam Ravnborg	all_kconfigs | xargs $1 -a                              \
221a680eedcSSam Ravnborg	--langdef=kconfig --language-force=kconfig              \
222a680eedcSSam Ravnborg	--regex-kconfig='/^[[:blank:]]*(menu|)config[[:blank:]]+([[:alnum:]_]+)/CONFIG_\2/'
223a680eedcSSam Ravnborg
224a680eedcSSam Ravnborg	all_defconfigs | xargs -r $1 -a                         \
225a680eedcSSam Ravnborg	--langdef=dotconfig --language-force=dotconfig          \
226a680eedcSSam Ravnborg	--regex-dotconfig='/^#?[[:blank:]]*(CONFIG_[[:alnum:]_]+)/\1/'
227a680eedcSSam Ravnborg}
228a680eedcSSam Ravnborg
229a680eedcSSam Ravnborgemacs()
230a680eedcSSam Ravnborg{
231923e02ecSJoonsoo Kim	all_target_sources | xargs $1 -a                        \
2329f14b420SAndreas Schwab	--regex='/^\(ENTRY\|_GLOBAL\)(\([^)]*\)).*/\2/'         \
2334d7a2fa8SSteven Rostedt	--regex='/^SYSCALL_DEFINE[0-9]?(\([^,)]*\).*/sys_\1/'   \
234c965526aSCatalin Marinas	--regex='/^COMPAT_SYSCALL_DEFINE[0-9]?(\([^,)]*\).*/compat_sys_\1/' \
2354d7a2fa8SSteven Rostedt	--regex='/^TRACE_EVENT(\([^,)]*\).*/trace_\1/'		\
236358142ddSStephen Boyd	--regex='/^DEFINE_EVENT([^,)]*, *\([^,)]*\).*/trace_\1/' \
2379f14b420SAndreas Schwab	--regex='/PAGEFLAG(\([^,)]*\).*/Page\1/'			\
2389f14b420SAndreas Schwab	--regex='/PAGEFLAG(\([^,)]*\).*/SetPage\1/'		\
2399f14b420SAndreas Schwab	--regex='/PAGEFLAG(\([^,)]*\).*/ClearPage\1/'		\
2409f14b420SAndreas Schwab	--regex='/TESTSETFLAG(\([^,)]*\).*/TestSetPage\1/'	\
2419f14b420SAndreas Schwab	--regex='/TESTPAGEFLAG(\([^,)]*\).*/Page\1/'		\
2429f14b420SAndreas Schwab	--regex='/SETPAGEFLAG(\([^,)]*\).*/SetPage\1/'		\
2439f14b420SAndreas Schwab	--regex='/__SETPAGEFLAG(\([^,)]*\).*/__SetPage\1/'	\
2449f14b420SAndreas Schwab	--regex='/TESTCLEARFLAG(\([^,)]*\).*/TestClearPage\1/'	\
2459f14b420SAndreas Schwab	--regex='/__TESTCLEARFLAG(\([^,)]*\).*/TestClearPage\1/'	\
2469f14b420SAndreas Schwab	--regex='/CLEARPAGEFLAG(\([^,)]*\).*/ClearPage\1/'	\
2479f14b420SAndreas Schwab	--regex='/__CLEARPAGEFLAG(\([^,)]*\).*/__ClearPage\1/'	\
2489f14b420SAndreas Schwab	--regex='/__PAGEFLAG(\([^,)]*\).*/__SetPage\1/'		\
2499f14b420SAndreas Schwab	--regex='/__PAGEFLAG(\([^,)]*\).*/__ClearPage\1/'	\
2509f14b420SAndreas Schwab	--regex='/PAGEFLAG_FALSE(\([^,)]*\).*/Page\1/'		\
2519f14b420SAndreas Schwab	--regex='/TESTSCFLAG(\([^,)]*\).*/TestSetPage\1/'	\
2529f14b420SAndreas Schwab	--regex='/TESTSCFLAG(\([^,)]*\).*/TestClearPage\1/'	\
2539f14b420SAndreas Schwab	--regex='/SETPAGEFLAG_NOOP(\([^,)]*\).*/SetPage\1/'	\
2549f14b420SAndreas Schwab	--regex='/CLEARPAGEFLAG_NOOP(\([^,)]*\).*/ClearPage\1/'	\
2559f14b420SAndreas Schwab	--regex='/__CLEARPAGEFLAG_NOOP(\([^,)]*\).*/__ClearPage\1/' \
2569f14b420SAndreas Schwab	--regex='/TESTCLEARFLAG_FALSE(\([^,)]*\).*/TestClearPage\1/' \
2579f14b420SAndreas Schwab	--regex='/__TESTCLEARFLAG_FALSE(\([^,)]*\).*/__TestClearPage\1/' \
258*e0e5070bSZefan Li	--regex='/TASK_PFA_TEST\([^,]*,\s*([^)]*)\)/task_\1/'		\
259*e0e5070bSZefan Li	--regex='/TASK_PFA_SET\([^,]*,\s*([^)]*)\)/task_set_\1/'	\
260*e0e5070bSZefan Li	--regex='/TASK_PFA_CLEAR\([^,]*,\s*([^)]*)\)/task_clear_\1/'	\
2619f14b420SAndreas Schwab	--regex='/_PE(\([^,)]*\).*/PEVENT_ERRNO__\1/'		\
2629f14b420SAndreas Schwab	--regex='/PCI_OP_READ(\([a-z]*[a-z]\).*[1-4])/pci_bus_read_config_\1/' \
2633005286eSJianyu Zhan	--regex='/PCI_OP_WRITE(\([a-z]*[a-z]\).*[1-4])/pci_bus_write_config_\1/'\
2648e170655SDirk Gouders	--regex='/[^#]*DEFINE_HASHTABLE(\([^,)]*\)/\1/'
265a680eedcSSam Ravnborg
266a680eedcSSam Ravnborg	all_kconfigs | xargs $1 -a                              \
267a680eedcSSam Ravnborg	--regex='/^[ \t]*\(\(menu\)*config\)[ \t]+\([a-zA-Z0-9_]+\)/\3/'
268a680eedcSSam Ravnborg
269a680eedcSSam Ravnborg	all_kconfigs | xargs $1 -a                              \
270a680eedcSSam Ravnborg	--regex='/^[ \t]*\(\(menu\)*config\)[ \t]+\([a-zA-Z0-9_]+\)/CONFIG_\3/'
271a680eedcSSam Ravnborg
272a680eedcSSam Ravnborg	all_defconfigs | xargs -r $1 -a                         \
273a680eedcSSam Ravnborg	--regex='/^#?[ \t]?\(CONFIG_[a-zA-Z0-9_]+\)/\1/'
274a680eedcSSam Ravnborg}
275a680eedcSSam Ravnborg
276a680eedcSSam Ravnborgxtags()
277a680eedcSSam Ravnborg{
278a680eedcSSam Ravnborg	if $1 --version 2>&1 | grep -iq exuberant; then
279a680eedcSSam Ravnborg		exuberant $1
280a680eedcSSam Ravnborg	elif $1 --version 2>&1 | grep -iq emacs; then
281a680eedcSSam Ravnborg		emacs $1
282a680eedcSSam Ravnborg	else
283923e02ecSJoonsoo Kim		all_target_sources | xargs $1 -a
284a680eedcSSam Ravnborg	fi
285a680eedcSSam Ravnborg}
286a680eedcSSam Ravnborg
287a680eedcSSam Ravnborg# Support um (which uses SUBARCH)
288a6ba0cb3SJiri Slabyif [ "${ARCH}" = "um" ]; then
289a6ba0cb3SJiri Slaby	if [ "$SUBARCH" = "i386" ]; then
290a680eedcSSam Ravnborg		archinclude=x86
291a6ba0cb3SJiri Slaby	elif [ "$SUBARCH" = "x86_64" ]; then
292a680eedcSSam Ravnborg		archinclude=x86
293a680eedcSSam Ravnborg	else
294a680eedcSSam Ravnborg		archinclude=${SUBARCH}
295a680eedcSSam Ravnborg	fi
29659658509SJoonsoo Kimelif [ "${SRCARCH}" = "arm" -a "${SUBARCH}" != "" ]; then
29759658509SJoonsoo Kim	subarchdir=$(find ${tree}arch/$SRCARCH/ -name "mach-*" -type d -o \
29859658509SJoonsoo Kim							-name "plat-*" -type d);
29959658509SJoonsoo Kim	for i in $subarchdir; do
30059658509SJoonsoo Kim		case "$i" in
30159658509SJoonsoo Kim			*"mach-"${SUBARCH})
30259658509SJoonsoo Kim				;;
30359658509SJoonsoo Kim			*"plat-"${SUBARCH})
30459658509SJoonsoo Kim				;;
30559658509SJoonsoo Kim			*)
30659658509SJoonsoo Kim				subarchprune="$subarchprune \
30759658509SJoonsoo Kim						-wholename $i -prune -o"
30859658509SJoonsoo Kim				;;
30959658509SJoonsoo Kim		esac
31059658509SJoonsoo Kim	done
311a680eedcSSam Ravnborgfi
312a680eedcSSam Ravnborg
31366979224SYang Bairemove_structs=
314a680eedcSSam Ravnborgcase "$1" in
315a680eedcSSam Ravnborg	"cscope")
316a680eedcSSam Ravnborg		docscope
317a680eedcSSam Ravnborg		;;
318a680eedcSSam Ravnborg
319f4ed1009SJianbin Kang	"gtags")
320f4ed1009SJianbin Kang		dogtags
321f4ed1009SJianbin Kang		;;
322f4ed1009SJianbin Kang
323a680eedcSSam Ravnborg	"tags")
3242e6cb8b0SMatt Kraai		rm -f tags
325a680eedcSSam Ravnborg		xtags ctags
32666979224SYang Bai		remove_structs=y
327a680eedcSSam Ravnborg		;;
328a680eedcSSam Ravnborg
329a680eedcSSam Ravnborg	"TAGS")
3302e6cb8b0SMatt Kraai		rm -f TAGS
331a680eedcSSam Ravnborg		xtags etags
33266979224SYang Bai		remove_structs=y
333a680eedcSSam Ravnborg		;;
334a680eedcSSam Ravnborgesac
33566979224SYang Bai
33666979224SYang Bai# Remove structure forward declarations.
3370eb043d0SStephen Boydif [ -n "$remove_structs" ]; then
33866979224SYang Bai    LANG=C sed -i -e '/^\([a-zA-Z_][a-zA-Z0-9_]*\)\t.*\t\/\^struct \1;.*\$\/;"\tx$/d' $1
33966979224SYang Baifi
340