File: tags.cook

package info (click to toggle)
libexplain 1.4.D001-16
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 42,228 kB
  • sloc: ansic: 156,043; makefile: 47,892; sh: 16,304; yacc: 1,898; awk: 245
file content (115 lines) | stat: -rw-r--r-- 3,046 bytes parent folder | download | duplicates (5)
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
114
115
/*
 * libexplain - Explain errno values returned by libc functions
 * Copyright (C) 2008, 2009, 2011, 2012 Peter Miller
 * Written by Peter Miller <pmiller@opensource.org.au>
 *
 * 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;

    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 quiet_print Generate;

    xargs ctags [ctags-opts] [target]
            set meter;
data
[unsplit "\n" [resolve [source_files]]]
dataend
}

TAGS: [change_files]
    set shallow no-cascade
{
    function quiet_print Generate;

    xargs [etags] [etags-opts]
        set meter;
data
[unsplit "\n" [resolve [source_files]]]
dataend
}


/* vim: set ts=8 sw=4 et : */