#!/bin/sh # This file illustrates how to generate a useful TAGS file via etags # for emacs. This should be invoked from the top source directory i.e.: # > build/MakeEtags # and will create a TAGS file in the top source directory. # This script falls under the Apache License. # See http://www.apache.org/docs/LICENSE # Once you have created ./TAGS in emacs you'll need to setup # tag-table-alist with an entry to assure it finds the single ./TAGS # file from the many source directories. Something along these lines: # (setq tag-table-alist # '(("/home/me/work/apr-x.y/" . "/home/me/work/apr-x.y/") # ("/home/me/work/apr-util-x.y/" . "/home/me/work/apr-util-x.y/") # ("/home/me/work/httpd-x.y/" . "/home/me/work/httpd-x.y/") # )) # This requires a special version of etags, i.e. the # one called "Exuberant ctags" available at: # http://ctags.sourceforge.net/ # Once that is setup you'll need to point to the # executable here: etags=${ETAGS-etags} # Exuberant etags is necessary since it can ignore some defined symbols # that obscure the function signatures. ignore=AP_DECLARE,AP_DECLARE_NONSTD,__declspec,APR_DECLARE,APR_DECLARE_NONSTD # Create an etags file at the root of the source # tree, then create symbol links to it from each # directory in the source tree. By passing etags # absolute pathnames we get a tag file that is # NOT portable when we move the directory tree. find . -name '*.[ch]' -print | $etags -I "$ignore" -L -