linux/scripts/tags.sh
<<
>>
Prefs
   1#!/bin/sh
   2# Generate tags or cscope files
   3# Usage tags.sh <mode>
   4#
   5# mode may be any of: tags, TAGS, cscope
   6#
   7# Uses the following environment variables:
   8# ARCH, SUBARCH, srctree, src, obj
   9
  10if [ "$KBUILD_VERBOSE" = "1" ]; then
  11        set -x
  12fi
  13
  14# This is a duplicate of RCS_FIND_IGNORE without escaped '()'
  15ignore="( -name SCCS -o -name BitKeeper -o -name .svn -o \
  16          -name CVS  -o -name .pc       -o -name .hg  -o \
  17          -name .git )                                   \
  18          -prune -o"
  19
  20# Do not use full path is we do not use O=.. builds
  21if [ "${KBUILD_SRC}" = "" ]; then
  22        tree=
  23else
  24        tree=${srctree}/
  25fi
  26
  27# Detect if ALLSOURCE_ARCHS is set. If not, we assume SRCARCH
  28if [ "${ALLSOURCE_ARCHS}" = "" ]; then
  29        ALLSOURCE_ARCHS=${SRCARCH}
  30fi
  31
  32# find sources in arch/$ARCH
  33find_arch_sources()
  34{
  35        find ${tree}arch/$1 $ignore -name "$2" -print;
  36}
  37
  38# find sources in arch/$1/include
  39find_arch_include_sources()
  40{
  41        find ${tree}arch/$1/include $ignore -name "$2" -print;
  42}
  43
  44# find sources in include/
  45find_include_sources()
  46{
  47        find ${tree}include $ignore -name config -prune -o -name "$1" -print;
  48}
  49
  50# find sources in rest of tree
  51# we could benefit from a list of dirs to search in here
  52find_other_sources()
  53{
  54        find ${tree}* $ignore \
  55             \( -name include -o -name arch -o -name '.tmp_*' \) -prune -o \
  56               -name "$1" -print;
  57}
  58
  59find_sources()
  60{
  61        find_arch_sources $1 "$2"
  62}
  63
  64all_sources()
  65{
  66        for arch in $ALLSOURCE_ARCHS
  67        do
  68                find_sources $arch '*.[chS]'
  69        done
  70        if [ ! -z "$archinclude" ]; then
  71                find_arch_include_sources $archinclude '*.[chS]'
  72        fi
  73        find_include_sources '*.[chS]'
  74        find_other_sources '*.[chS]'
  75}
  76
  77all_kconfigs()
  78{
  79        for arch in $ALLSOURCE_ARCHS; do
  80                find_sources $arch 'Kconfig*'
  81        done
  82        find_other_sources 'Kconfig*'
  83}
  84
  85all_defconfigs()
  86{
  87        find_sources $ALLSOURCE_ARCHS "defconfig"
  88}
  89
  90docscope()
  91{
  92        (echo \-k; echo \-q; all_sources) > cscope.files
  93        cscope -b -f cscope.out
  94}
  95
  96exuberant()
  97{
  98        all_sources | xargs $1 -a                               \
  99        -I __initdata,__exitdata,__acquires,__releases          \
 100        -I __read_mostly,____cacheline_aligned                  \
 101        -I ____cacheline_aligned_in_smp                         \
 102        -I ____cacheline_internodealigned_in_smp                \
 103        -I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL                      \
 104        --extra=+f --c-kinds=+px                                \
 105        --regex-asm='/^ENTRY\(([^)]*)\).*/\1/'                  \
 106        --regex-c='/^SYSCALL_DEFINE[[:digit:]]?\(([^,)]*).*/sys_\1/'
 107
 108        all_kconfigs | xargs $1 -a                              \
 109        --langdef=kconfig --language-force=kconfig              \
 110        --regex-kconfig='/^[[:blank:]]*(menu|)config[[:blank:]]+([[:alnum:]_]+)/\2/'
 111
 112        all_kconfigs | xargs $1 -a                              \
 113        --langdef=kconfig --language-force=kconfig              \
 114        --regex-kconfig='/^[[:blank:]]*(menu|)config[[:blank:]]+([[:alnum:]_]+)/CONFIG_\2/'
 115
 116        all_defconfigs | xargs -r $1 -a                         \
 117        --langdef=dotconfig --language-force=dotconfig          \
 118        --regex-dotconfig='/^#?[[:blank:]]*(CONFIG_[[:alnum:]_]+)/\1/'
 119
 120}
 121
 122emacs()
 123{
 124        all_sources | xargs $1 -a                               \
 125        --regex='/^ENTRY(\([^)]*\)).*/\1/'                      \
 126        --regex='/^SYSCALL_DEFINE[0-9]?(\([^,)]*\).*/sys_\1/'
 127
 128        all_kconfigs | xargs $1 -a                              \
 129        --regex='/^[ \t]*\(\(menu\)*config\)[ \t]+\([a-zA-Z0-9_]+\)/\3/'
 130
 131        all_kconfigs | xargs $1 -a                              \
 132        --regex='/^[ \t]*\(\(menu\)*config\)[ \t]+\([a-zA-Z0-9_]+\)/CONFIG_\3/'
 133
 134        all_defconfigs | xargs -r $1 -a                         \
 135        --regex='/^#?[ \t]?\(CONFIG_[a-zA-Z0-9_]+\)/\1/'
 136}
 137
 138xtags()
 139{
 140        if $1 --version 2>&1 | grep -iq exuberant; then
 141                exuberant $1
 142        elif $1 --version 2>&1 | grep -iq emacs; then
 143                emacs $1
 144        else
 145                all_sources | xargs $1 -a
 146        fi
 147}
 148
 149
 150# Support um (which uses SUBARCH)
 151if [ "${ARCH}" = "um" ]; then
 152        if [ "$SUBARCH" = "i386" ]; then
 153                archinclude=x86
 154        elif [ "$SUBARCH" = "x86_64" ]; then
 155                archinclude=x86
 156        else
 157                archinclude=${SUBARCH}
 158        fi
 159fi
 160
 161case "$1" in
 162        "cscope")
 163                docscope
 164                ;;
 165
 166        "tags")
 167                xtags ctags
 168                ;;
 169
 170        "TAGS")
 171                xtags etags
 172                ;;
 173esac
 174
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.