-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
tags and cscope support really belongs in a shell script
as they do not benefit from the make functionality. Moving the support to a shell script has several benefits: - The readability of the code has increased a lot - More people is able to extend the tags support - We see less changes to the top-level Makefile The shell script version includes improvements from: Alexey Dobriyan <adobriyan@gmail.com> (jump to kconfig symbols) Alexey Dobriyan <adobriyan@gmail.com> (drop ./ in paths) Ian Campbell <ijc@hellion.org.uk> (simplified find algorithms) This version has a few caveats: => It does not support ALLSOURCE_ARCHS - it is easy to add if it is really used => It assumes all archs have moved to arch/$ARCH/include - until that happens we have a few additional hits in the archs Signed-off-by: Sam Ravnborg <sam@ravnborg.org> Cc: Alexey Dobriyan <adobriyan@gmail.com> Tested-by: Ian Campbell <ijc@hellion.org.uk>
- Loading branch information
Sam Ravnborg
committed
Dec 3, 2008
1 parent
f6682f9
commit a680eed
Showing
2 changed files
with
163 additions
and
114 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,160 @@ | ||
#!/bin/sh | ||
# Generate tags or cscope files | ||
# Usage tags.sh <mode> | ||
# | ||
# mode may be any of: tags, TAGS, cscope | ||
# | ||
# Uses the following environment variables: | ||
# ARCH, SUBARCH, srctree, src, obj | ||
|
||
if [ $KBUILD_VERBOSE == 1 ]; then | ||
set -x | ||
fi | ||
|
||
# This is a duplicate of RCS_FIND_IGNORE without escaped '()' | ||
ignore="( -name SCCS -o -name BitKeeper -o -name .svn -o \ | ||
-name CVS -o -name .pc -o -name .hg -o \ | ||
-name .git ) \ | ||
-prune -o" | ||
|
||
# Do not use full path is we do not use O=.. builds | ||
if [ ${src} == ${obj} ]; then | ||
tree= | ||
else | ||
tree=${srctree} | ||
fi | ||
|
||
# find sources in arch/$ARCH | ||
find_arch_sources() | ||
{ | ||
find ${tree}arch/$1 $ignore -name $2 -print; | ||
} | ||
|
||
# find sources in arch/$1/include | ||
find_arch_include_sources() | ||
{ | ||
find ${tree}arch/$1/include $ignore -name $2 -print; | ||
} | ||
|
||
# find sources in include/ | ||
find_include_sources() | ||
{ | ||
find ${tree}include $ignore -name config -prune -o -name $1 -print; | ||
} | ||
|
||
# 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 \ | ||
-name $1 -print; | ||
} | ||
|
||
find_sources() | ||
{ | ||
find_arch_sources $1 $2 | ||
find_include_sources $2 | ||
find_other_sources $2 | ||
} | ||
|
||
all_sources() | ||
{ | ||
find_sources $SRCARCH *.[chS] | ||
if [ ! -z "$archinclude" ]; then | ||
find_arch_include_sources $archinclude *.[chS] | ||
fi | ||
} | ||
|
||
all_kconfigs() | ||
{ | ||
find_sources $SRCARCH "Kconfig*" | ||
} | ||
|
||
all_defconfigs() | ||
{ | ||
find_sources $SRCARCH "defconfig" | ||
} | ||
|
||
docscope() | ||
{ | ||
(echo \-k; echo \-q; all_sources) > cscope.files | ||
cscope -b -f cscope.out | ||
} | ||
|
||
exuberant() | ||
{ | ||
all_sources > all | ||
all_sources | xargs $1 -a \ | ||
-I __initdata,__exitdata,__acquires,__releases \ | ||
-I __read_mostly,____cacheline_aligned \ | ||
-I ____cacheline_aligned_in_smp \ | ||
-I ____cacheline_internodealigned_in_smp \ | ||
-I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL \ | ||
--extra=+f --c-kinds=+px \ | ||
--regex-asm='/^ENTRY\(([^)]*)\).*/\1/' | ||
|
||
all_kconfigs | xargs $1 -a \ | ||
--langdef=kconfig --language-force=kconfig \ | ||
--regex-kconfig='/^[[:blank:]]*(menu|)config[[:blank:]]+([[:alnum:]_]+)/\2/' | ||
|
||
all_kconfigs | xargs $1 -a \ | ||
--langdef=kconfig --language-force=kconfig \ | ||
--regex-kconfig='/^[[:blank:]]*(menu|)config[[:blank:]]+([[:alnum:]_]+)/CONFIG_\2/' | ||
|
||
all_defconfigs | xargs -r $1 -a \ | ||
--langdef=dotconfig --language-force=dotconfig \ | ||
--regex-dotconfig='/^#?[[:blank:]]*(CONFIG_[[:alnum:]_]+)/\1/' | ||
|
||
} | ||
|
||
emacs() | ||
{ | ||
all_sources | xargs $1 -a | ||
|
||
all_kconfigs | xargs $1 -a \ | ||
--regex='/^[ \t]*\(\(menu\)*config\)[ \t]+\([a-zA-Z0-9_]+\)/\3/' | ||
|
||
all_kconfigs | xargs $1 -a \ | ||
--regex='/^[ \t]*\(\(menu\)*config\)[ \t]+\([a-zA-Z0-9_]+\)/CONFIG_\3/' | ||
|
||
all_defconfigs | xargs -r $1 -a \ | ||
--regex='/^#?[ \t]?\(CONFIG_[a-zA-Z0-9_]+\)/\1/' | ||
} | ||
|
||
xtags() | ||
{ | ||
if $1 --version 2>&1 | grep -iq exuberant; then | ||
exuberant $1 | ||
elif $1 --version 2>&1 | grep -iq emacs; then | ||
emacs $1 | ||
else | ||
all_sources | xargs $1 -a | ||
fi | ||
} | ||
|
||
|
||
# Support um (which uses SUBARCH) | ||
if [ ${ARCH} == um ]; then | ||
if [ $SUBARCH == i386 ]; then | ||
archinclude=x86 | ||
elif [ $SUBARCH == x86_64 ]; then | ||
archinclude=x86 | ||
else | ||
archinclude=${SUBARCH} | ||
fi | ||
fi | ||
|
||
case "$1" in | ||
"cscope") | ||
docscope | ||
;; | ||
|
||
"tags") | ||
xtags ctags | ||
;; | ||
|
||
"TAGS") | ||
xtags etags | ||
;; | ||
esac |