m4_divert(-1)m4_dnl ### -*-m4-*- ### ### Basic definitions for distorted.org.uk Exim configuration ### ### (c) 2012 Mark Wooding ### ###----- Licensing notice --------------------------------------------------- ### ### 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 2 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, write to the Free Software Foundation, ### Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. m4_changequote(<:, :>) m4_changecom(<:#:#:>) ###-------------------------------------------------------------------------- ### Output file preamble and postamble. m4_divert(0)m4_dnl ### -*-conf-*- GENERATED FROM /etc/mail/m4/*.m4: DO NOT EDIT! ### ### Exim configuration for distorted.org.uk. m4_divert(1000)m4_dnl ### GENERATED FROM exim4.conf.m4: DO NOT EDIT! m4_divert(-1) ###-------------------------------------------------------------------------- ### Useful macros. ## ONEOF(arg, ...) ## ## Output the first of its arguments that is non-empty. m4_define(<:ONEOF:>, <:m4_ifelse(<:$#:>, <:1:>, <:$1:>, <:$1:>, <::>, <:ONEOF(m4_shift($@)):>, <:$1:>):>) ## DEFCONF(conf, default) ## ## Define config variable CONF, assigning it the DEFAULT value if not ## overridden by `SETCONF'. m4_define(<:DEFCONF:>, <:m4_ifdef(<:CONF_$1:>, <::>, <:m4_define(<:CONF_$1:>, <:$2:>):>):>) ## SETCONF(conf, value) ## ## Set config variable VALUE. m4_define(<:SETCONF:>, <:m4_define(<:CONF_$1:>, <:$2:>):>) ## FOREACH(what, list) ## ## The LIST is a comma-separated list of things, like an m4 argument list. ## For each item in the list, expand WHAT as if it's the body of a macro with ## the list item as its arguments. In other words, the list item itself can ## be a list of comma-separated items, which are available as $1, $2, ..., ## within WHAT. m4_define(<:_FOREACH:>, <:m4_dnl m4_ifelse(<:$#:>, <:1:>, <:_foreach_func($1):>, <:_foreach_func($1)<::>_FOREACH(m4_shift($@)):>):>) m4_define(<:FOREACH:>, <:m4_dnl m4_pushdef(<:_foreach_func:>, <:$1:>)m4_dnl _FOREACH($2)<::>m4_dnl m4_popdef(<:_foreach_func:>):>) ## CLRSEP ## ## Clear the separator. Use in conjunction with `SEP' below. m4_define(<:CLRSEP:>, <:m4_define(<:__sep:>, <::>):>)m4_dnl ## SEP(newsep) ## ## Insert the current separator, and then set the separator to NEWSEP. This ## is handy in `FOREACH' loops, in order to separate the items with the ## correct number of fenceposts: call `CLRSEP' before the list, and begin ## each item with SEP(...). m4_define(<:SEP:>, <:__sep<::>m4_define(<:__sep:>, <:$1:>):>)m4_dnl ## DIVERT(name) ## ## Make _div:NAME be the current diversion. m4_define(<:DIVERT:>, <:m4_dnl m4_divert(m4_indir(<:_div:$1:>))m4_dnl :>) ## SECTION(name, [sub]) ## ## Contribute the following text to section NAME, inserting appropriate ## header text to the top of the section if necessary. If a SUB-section name ## is given, then the contribution is made to the subsection, and the ## subsection's header (if any) is also inserted. m4_define(<:SECTION:>, <:m4_dnl DIVERT(<:$1:>)m4_dnl m4_ifdef(<:_done:$1:>, <::>, <:m4_dnl ###-------------------------------------------------------------------------- m4_ifdef(<:_head:$1:>, <:m4_indir(<:_head:$1:>):>, <:begin $1:>) m4_define(<:_done:$1:>, <:1:>):>)m4_dnl m4_ifelse(<:$2:>, <::>, <::>, <:m4_dnl DIVERT(<:$1/$2:>)m4_dnl m4_ifdef(<:_done:$1/$2:>, <::>, <:m4_dnl m4_ifdef(<:_head:$1/$2:>, <:<:##:> m4_indir(<:_head:$1/$2:>) :>)m4_define(<:_done:$1/$2:>):>):>):>) ## LOOKUP_DOMAIN(dom, [if-found], [if-not-found]) ## ## Look up DOM in the master domains file. If it's found, put the ## information found in `$value' and expand to IF-FOUND, which may use `KV' ## to extract keyword values, and defaults to `$value'; otherwise, obey ## IF-NOT-FOUND, which may be the token `fail', or replacement text in ## braces. m4_define(<:LOOKUP_DOMAIN:>, <:if exists{CONF_sysconf_dir/domains.conf} \ {${lookup {$1}partial0-lsearch{CONF_sysconf_dir/domains.conf} \ m4_ifelse(<:$2$3:>, <::>, <::>, <:$2:>, <::>, <:{$value}$3:>, <:$2$3:>)}} \ $3:>) ## KV(key, result) ## ## Extract the value of the named KEY in the ${extract ...}-style string in ## the current $value (where it may have been left by `LOOKUP-DOMAIN'). The ## RESULT is a pair {IF-FOUND}{IF-NOT-FOUND}; the former may use $value to ## refer to the value; the latter may be `fail' (not in braces) to force ## expansion failure. m4_define(<:KV:>, <:${extract {$1}{$value}$2}:>) ## DOMKV(key, result) ## ## Extract the value of the named KEY in the ${extract ...}-style string in ## $domain_data; see `KV'. m4_define(<:DOMKV:>, <:${extract {$1}{$domain_data}$2}:>) m4_divert(999)m4_dnl ###----- That's all, folks -------------------------------------------------- m4_divert(-1)