/* * aegis - project change supervisor * Copyright (C) 2002-2004, 2006-2008, 2012, 2014 Peter Miller * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ if [find_command ctags] then { /* * There are three different versions of these commands, * and they take completely different command line options. We * assume minimal posix syntax if nothing better is available. * (What were they thinking? Were they even thinking?) */ ctags-variant = posix; ctags = ctags; ctags-opts = ; etags = ctags; etags-opts = ; /* * The '|| true' is needed because if ctags fails the build stops. */ ctags-version = [collect ctags --version 2>/dev/null || true]; if [in Exuberant [ctags-version]] then { ctags-variant = exuberant; } else if [in Emacs [ctags-version]] then { ctags-variant = emacs; } all += tags; if [find_command etags] then { etags = etags; all += TAGS; } /* * xargs can invoke ctags/etags more than once if the underling * shell does not handle so much arguments. In order to not * truncate the target the '-a' options must be used. It is posix * compliant and should be supported by different ctags variant. */ ctags-opts = -a; if [in posix [ctags-variant]] then ctags-opts += -f; if [in exuberant [ctags-variant]] then { ctags-opts += --c-types\=+px -f; etags = ctags -e; all += TAGS; } /* * The (GNU) Emacs variant of ctags (based an Exuberant) use -o * to set the output file name. */ if [in emacs [ctags-variant]] then { etags-opts = [ctags-opts] --declarations -o ; ctags-opts += --declarations --defines --globals --members --typedefs --no-warn /* (--no-warn option only works for ctags) */ -o ; } } tags: [change_files] set shallow no-cascade { function if_quiet Generate; xargs ctags [ctags-opts] [target] set meter; data [unsplit "\n" [resolve [match_mask %0%.cc [source_files]] [match_mask %0%.h [source_files]] [fromto %0%.def %0%.fmtgen.cc [match_mask %0%.def [source_files]]] [fromto %0%.def %0%.fmtgen.h [match_mask %0%.def [source_files]]] ] ] dataend } TAGS: [change_files] set shallow no-cascade { function if_quiet Generate; xargs [etags] [etags-opts] set meter; data [unsplit "\n" [resolve [match_mask %0%.cc [source_files]] [match_mask %0%.h [source_files]] [fromto %0%.def %0%.cc [match_mask %0%.def [source_files]]] [fromto %0%.def %0%.h [match_mask %0%.def [source_files]]] ] ] dataend } /* vim: set ts=8 sw=4 et : */