Commit | Line | Data |
---|---|---|
185b5456 MW |
1 | m4_divert(-1)m4_dnl ### -*-m4-*- |
2 | ### | |
3 | ### Basic definitions for distorted.org.uk Exim configuration | |
4 | ### | |
5 | ### (c) 2012 Mark Wooding | |
6 | ### | |
7 | ||
8 | ###----- Licensing notice --------------------------------------------------- | |
9 | ### | |
10 | ### This program is free software; you can redistribute it and/or modify | |
11 | ### it under the terms of the GNU General Public License as published by | |
12 | ### the Free Software Foundation; either version 2 of the License, or | |
13 | ### (at your option) any later version. | |
14 | ### | |
15 | ### This program is distributed in the hope that it will be useful, | |
16 | ### but WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 | ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
18 | ### GNU General Public License for more details. | |
19 | ### | |
20 | ### You should have received a copy of the GNU General Public License | |
21 | ### along with this program; if not, write to the Free Software Foundation, | |
22 | ### Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |
23 | ||
24 | m4_changequote(<:, :>) | |
25 | m4_changecom(<:#:#:>) | |
26 | ||
27 | ###-------------------------------------------------------------------------- | |
28 | ### Output file preamble and postamble. | |
29 | ||
30 | m4_divert(0)m4_dnl | |
31 | ### -*-conf-*- GENERATED FROM /etc/mail/m4/*.m4: DO NOT EDIT! | |
32 | ### | |
33 | ### Exim configuration for distorted.org.uk. | |
34 | ||
35 | m4_divert(1000)m4_dnl | |
36 | ### GENERATED FROM exim4.conf.m4: DO NOT EDIT! | |
37 | m4_divert(-1) | |
38 | ||
39 | ###-------------------------------------------------------------------------- | |
40 | ### Useful macros. | |
41 | ||
42 | ## ONEOF(arg, ...) | |
43 | ## | |
44 | ## Output the first of its arguments that is non-empty. | |
45 | m4_define(<:ONEOF:>, <:m4_ifelse(<:$#:>, <:1:>, <:$1:>, | |
46 | <:$1:>, <::>, <:ONEOF(m4_shift($@)):>, <:$1:>):>) | |
47 | ||
28cfda76 | 48 | ## DEFCONF(conf, default) |
185b5456 MW |
49 | ## |
50 | ## Define config variable CONF, assigning it the DEFAULT value if not | |
51 | ## overridden by `SETCONF'. | |
52 | m4_define(<:DEFCONF:>, | |
53 | <:m4_ifdef(<:CONF_$1:>, <::>, | |
54 | <:m4_define(<:CONF_$1:>, <:$2:>):>):>) | |
55 | ||
28cfda76 | 56 | ## SETCONF(conf, value) |
185b5456 MW |
57 | ## |
58 | ## Set config variable VALUE. | |
59 | m4_define(<:SETCONF:>, <:m4_define(<:CONF_$1:>, <:$2:>):>) | |
60 | ||
61 | ## FOREACH(what, list) | |
62 | ## | |
63 | ## The LIST is a comma-separated list of things, like an m4 argument list. | |
64 | ## For each item in the list, expand WHAT as if it's the body of a macro with | |
65 | ## the list item as its arguments. In other words, the list item itself can | |
66 | ## be a list of comma-separated items, which are available as $1, $2, ..., | |
67 | ## within WHAT. | |
68 | m4_define(<:_FOREACH:>, <:m4_dnl | |
69 | m4_ifelse(<:$#:>, <:1:>, <:_foreach_func($1):>, | |
70 | <:_foreach_func($1)<::>_FOREACH(m4_shift($@)):>):>) | |
71 | m4_define(<:FOREACH:>, <:m4_dnl | |
72 | m4_pushdef(<:_foreach_func:>, <:$1:>)m4_dnl | |
73 | _FOREACH($2)<::>m4_dnl | |
74 | m4_popdef(<:_foreach_func:>):>) | |
75 | ||
31c92220 MW |
76 | ## CLRSEP |
77 | ## | |
78 | ## Clear the separator. Use in conjunction with `SEP' below. | |
79 | m4_define(<:CLRSEP:>, <:m4_define(<:__sep:>, <::>):>)m4_dnl | |
80 | ||
81 | ## SEP(newsep) | |
82 | ## | |
83 | ## Insert the current separator, and then set the separator to NEWSEP. This | |
84 | ## is handy in `FOREACH' loops, in order to separate the items with the | |
85 | ## correct number of fenceposts: call `CLRSEP' before the list, and begin | |
86 | ## each item with SEP(...). | |
87 | m4_define(<:SEP:>, <:__sep<::>m4_define(<:__sep:>, <:$1:>):>)m4_dnl | |
88 | ||
28cfda76 MW |
89 | ## DIVERT(name) |
90 | ## | |
91 | ## Make _div:NAME be the current diversion. | |
185b5456 MW |
92 | m4_define(<:DIVERT:>, <:m4_dnl |
93 | m4_divert(m4_indir(<:_div:$1:>))m4_dnl | |
94 | :>) | |
95 | ||
28cfda76 MW |
96 | ## SECTION(name, [sub]) |
97 | ## | |
98 | ## Contribute the following text to section NAME, inserting appropriate | |
99 | ## header text to the top of the section if necessary. If a SUB-section name | |
100 | ## is given, then the contribution is made to the subsection, and the | |
101 | ## subsection's header (if any) is also inserted. | |
185b5456 MW |
102 | m4_define(<:SECTION:>, <:m4_dnl |
103 | DIVERT(<:$1:>)m4_dnl | |
104 | m4_ifdef(<:_done:$1:>, <::>, <:m4_dnl | |
105 | ###-------------------------------------------------------------------------- | |
106 | m4_ifdef(<:_head:$1:>, <:m4_indir(<:_head:$1:>):>, <:begin $1:>) | |
107 | ||
108 | m4_define(<:_done:$1:>, <:1:>):>)m4_dnl | |
109 | m4_ifelse(<:$2:>, <::>, <::>, <:m4_dnl | |
110 | DIVERT(<:$1/$2:>)m4_dnl | |
111 | m4_ifdef(<:_done:$1/$2:>, <::>, <:m4_dnl | |
112 | m4_ifdef(<:_head:$1/$2:>, <:<:##:> m4_indir(<:_head:$1/$2:>) | |
113 | :>)m4_define(<:_done:$1/$2:>):>):>):>) | |
114 | ||
28cfda76 MW |
115 | ## LOOKUP_DOMAIN(dom, [if-found], [if-not-found]) |
116 | ## | |
117 | ## Look up DOM in the master domains file. If it's found, put the | |
118 | ## information found in `$value' and expand to IF-FOUND, which may use `KV' | |
119 | ## to extract keyword values, and defaults to `$value'; otherwise, obey | |
120 | ## IF-NOT-FOUND, which may be the token `fail', or replacement text in | |
121 | ## braces. | |
185b5456 MW |
122 | m4_define(<:LOOKUP_DOMAIN:>, |
123 | <:if exists{CONF_sysconf_dir/domains.conf} \ | |
124 | {${lookup {$1}partial0-lsearch{CONF_sysconf_dir/domains.conf} \ | |
125 | m4_ifelse(<:$2$3:>, <::>, <::>, | |
126 | <:$2:>, <::>, <:{$value}$3:>, | |
127 | <:$2$3:>)}} \ | |
128 | $3:>) | |
129 | ||
28cfda76 MW |
130 | ## KV(key, result) |
131 | ## | |
132 | ## Extract the value of the named KEY in the ${extract ...}-style string in | |
133 | ## the current $value (where it may have been left by `LOOKUP-DOMAIN'). The | |
134 | ## RESULT is a pair {IF-FOUND}{IF-NOT-FOUND}; the former may use $value to | |
135 | ## refer to the value; the latter may be `fail' (not in braces) to force | |
136 | ## expansion failure. | |
185b5456 | 137 | m4_define(<:KV:>, <:${extract {$1}{$value}$2}:>) |
28cfda76 MW |
138 | |
139 | ## DOMKV(key, result) | |
140 | ## | |
141 | ## Extract the value of the named KEY in the ${extract ...}-style string in | |
142 | ## $domain_data; see `KV'. | |
185b5456 MW |
143 | m4_define(<:DOMKV:>, <:${extract {$1}{$domain_data}$2}:>) |
144 | ||
145 | m4_divert(999)m4_dnl | |
146 | ###----- That's all, folks -------------------------------------------------- | |
147 | m4_divert(-1) |