mu-setup.awk
2.09 KB
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
# This file is part of GNU Mailutils.
# Copyright (C) 2010-2012, 2014-2017 Free Software Foundation, Inc.
#
# GNU Mailutils 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 2, or (at
# your option) any later version.
#
# GNU Mailutils 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 GNU Mailutils. If not, see <http://www.gnu.org/licenses/>.
state == 0 && /MU Setup:/ {
if (NF != 3) {
print FILENAME ":" NR ":", "missing module name" > "/dev/stderr"
exit(1)
} else {
state = 1;
module_name=$3;
if (modules[module_name]) {
print FILENAME ":" NR ":", "this module already declared" > "/dev/stderr"
print modules[module_name] ":", "location of the prior declaration" > "/dev/stderr"
} else
modules[module_name] = (FILENAME":"NR);
}
}
state == 1 && /mu-.*:/ {
setup[module_name,substr($1,4,length($1)-4)] = $2;
next
}
state == 1 && /End MU Setup/ { state = 0 }
END {
print "/* -*- buffer-read-only: t -*- vi: set ro:"
print " THIS FILE IS GENERATED AUTOMATICALLY. PLEASE DO NOT EDIT."
print "*/"
vartab[1] = "handler"
vartab[2] = "docstring"
n = asorti(modules,modname)
for (i = 1; i <= n; i++) {
name = modname[i]
for (j in vartab) {
if (!setup[name,vartab[j]]) {
print modules[name] ":", "mu-" vartab[j], "not defined"
err = 1
}
}
if (err)
continue
if (mode == "h") {
print "extern int", setup[name,"handler"], "(int argc, char **argv);"
print "extern char " setup[name,"docstring"] "[];"
} else {
if (setup[name,"cond"])
print "#ifdef", setup[name,"cond"]
print "{", "\"" name "\",", setup[name,"handler"] ",", setup[name,"docstring"], "},"
if (setup[name,"cond"])
print "#endif"
}
}
}