[go: up one dir, main page]

File: tags.cook

package info (click to toggle)
srecord 1.39-1
  • links: PTS, VCS
  • area: main
  • in suites: lenny
  • size: 3,624 kB
  • ctags: 1,822
  • sloc: cpp: 18,283; sh: 5,839; makefile: 1,701; awk: 201; vhdl: 15
file content (113 lines) | stat: -rw-r--r-- 3,212 bytes parent folder | download
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
}