1 m4_divert(-1)m4_dnl ### -*-m4-*-
3 ### Basic definitions for distorted.org.uk Exim configuration
5 ### (c) 2012 Mark Wooding
8 ###----- Licensing notice ---------------------------------------------------
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.
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.
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.
24 m4_changequote(<:, :>)
27 ###--------------------------------------------------------------------------
28 ### Output file preamble and postamble.
31 ### -*-conf-*- GENERATED FROM /etc/mail/m4/*.m4: DO NOT EDIT!
33 ### Exim configuration for distorted.org.uk.
36 ### GENERATED FROM exim4.conf.m4: DO NOT EDIT!
39 ###--------------------------------------------------------------------------
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:>):>)
48 ## DEFCONF(CONF, DEFAULT)
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:>):>):>)
56 ## SETCONF(CONF, VALUE)
58 ## Set config variable VALUE.
59 m4_define(<:SETCONF:>, <:m4_define(<:CONF_$1:>, <:$2:>):>)
61 ## FOREACH(what, list)
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, ...,
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:>):>)
76 m4_define(<:DIVERT:>, <:m4_dnl
77 m4_divert(m4_indir(<:_div:$1:>))m4_dnl
80 m4_define(<:SECTION:>, <:m4_dnl
82 m4_ifdef(<:_done:$1:>, <::>, <:m4_dnl
83 ###--------------------------------------------------------------------------
84 m4_ifdef(<:_head:$1:>, <:m4_indir(<:_head:$1:>):>, <:begin $1:>)
86 m4_define(<:_done:$1:>, <:1:>):>)m4_dnl
87 m4_ifelse(<:$2:>, <::>, <::>, <:m4_dnl
88 DIVERT(<:$1/$2:>)m4_dnl
89 m4_ifdef(<:_done:$1/$2:>, <::>, <:m4_dnl
90 m4_ifdef(<:_head:$1/$2:>, <:<:##:> m4_indir(<:_head:$1/$2:>)
91 :>)m4_define(<:_done:$1/$2:>):>):>):>)
93 m4_define(<:LOOKUP_DOMAIN:>,
94 <:if exists{CONF_sysconf_dir/domains.conf} \
95 {${lookup {$1}partial0-lsearch{CONF_sysconf_dir/domains.conf} \
96 m4_ifelse(<:$2$3:>, <::>, <::>,
97 <:$2:>, <::>, <:{$value}$3:>,
101 m4_define(<:KV:>, <:${extract {$1}{$value}$2}:>)
102 m4_define(<:DOMKV:>, <:${extract {$1}{$domain_data}$2}:>)
105 ###----- That's all, folks --------------------------------------------------