1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
|
/*
* srecord - manipulate eprom load files
* Copyright (C) 2006, 2007 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
* <http://www.gnu.org/licenses/>.
*/
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;
/*
* The '|| true' is needed because if ctags fails the build stops.
*/
ctags-version = [collect ctags --version || 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
ctags-opts += --declarations --defines --globals --members --typedefs
/* --no-warn (the man page says the --no-warn option exists,
but is doesn't, really) */
-o
;
}
tags: [change_source_files]
set shallow no-cascade
{
xargs ctags [ctags-opts] [target]
set meter;
data
[unsplit "\n"
[resolve
[stringset [source_files] - [match_mask %0%.h [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
}
TAGS: [change_source_files]
set shallow no-cascade
{
xargs [etags] [ctags-opts] [target]
set meter;
data
[unsplit "\n"
[resolve
[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
}
|