trap "rm -f /tmp/$$" 0 1 2 3 15
rm -f ./tags
-cv=`ctags --version 2>&1 | grep Exuberant`
+IS_EXUBERANT=""
+ctags --version 2>&1 | grep Exuberant && IS_EXUBERANT="Y"
-if [ -z "$cv" ]
-then FLAGS="-dt"
-else FLAGS="--c-types=+dfmstuv"
+# List of kinds supported by Exuberant Ctags 5.8
+# generated by ctags --list-kinds
+# c classes
+# d macro definitions
+# e enumerators (values inside an enumeration)
+# f function definitions
+# g enumeration names
+# l local variables [off]
+# m class, struct, and union members
+# n namespaces
+# p function prototypes [off]
+# s structure names
+# t typedefs
+# u union names
+# v variable definitions
+# x external and forward variable declarations [off]
+
+if [ "$IS_EXUBERANT" ]
+then FLAGS="--c-kinds=+dfmstuv"
+else FLAGS="-dt"
fi
-find `pwd`/ \( -name _deadcode -prune \) -o \
- -type f -name '*.[chyl]' -print |
- xargs ctags "$FLAGS" -a -f tags
+# this is outputting the tags into the file 'tags', and appending
+find `pwd`/ -type f -name '*.[chyl]' -print |
+ xargs ctags -a -f tags "$FLAGS"
-if [ -z "$cv" ]
-then
- LC_ALL=C
+# Exuberant tags has a header that we cannot sort in with the other entries
+# so we skip the sort step
+# Why are we sorting this? I guess some tag implementation need this,
+# particularly for append mode. bjm 2012-02-24
+if [ ! "$IS_EXUBERANT" ]
+then LC_ALL=C
export LC_ALL
sort tags >/tmp/$$ && mv /tmp/$$ tags
fi