Testsuite: output changes resulting
[exim.git] / src / src / macro_predef.c
CommitLineData
d185889f
JH
1/*************************************************
2* Exim - an Internet mail transport agent *
3*************************************************/
4
f9ba5e22 5/* Copyright (c) Jeremy Harris 1995 - 2018 */
d185889f
JH
6/* See the file NOTICE for conditions of use and distribution. */
7
8/* Create a static data structure with the predefined macros, to be
9included in the main Exim build */
10
11#include "exim.h"
5f69a529 12#include "macro_predef.h"
d185889f 13
1a7c9a48 14unsigned mp_index = 0;
d185889f
JH
15
16/* Global dummy variables */
17
18void fn_smtp_receive_timeout(const uschar * name, const uschar * str) {}
19uschar * syslog_facility_str;
20
21/******************************************************************************/
22
23void
970424a5 24builtin_macro_create_var(const uschar * name, const uschar * val)
d185889f 25{
1a7c9a48
JH
26printf ("static macro_item p%d = { ", mp_index);
27if (mp_index == 0)
28 printf(".next=NULL,");
29else
30 printf(".next=&p%d,", mp_index-1);
31
32printf(" .command_line=FALSE, .namelen=%d, .replen=%d,"
33 " .name=US\"%s\", .replacement=US\"%s\" };\n",
34 Ustrlen(name), Ustrlen(val), CS name, CS val);
35mp_index++;
d185889f
JH
36}
37
970424a5
JH
38
39void
40builtin_macro_create(const uschar * name)
41{
42builtin_macro_create_var(name, US"y");
43}
44
45
c11d665d 46/* restricted snprintf */
f1f7d0cd 47void
d185889f
JH
48spf(uschar * buf, int len, const uschar * fmt, ...)
49{
50va_list ap;
51va_start(ap, fmt);
52
53while (*fmt && len > 1)
54 if (*fmt == '%' && fmt[1] == 'T')
55 {
56 uschar * s = va_arg(ap, uschar *);
57 while (*s && len-- > 1)
58 *buf++ = toupper(*s++);
59 fmt += 2;
60 }
61 else
62 {
63 *buf++ = *fmt++; len--;
64 }
65*buf = '\0';
66va_end(ap);
67}
68
69void
70options_from_list(optionlist * opts, unsigned nopt,
71 const uschar * section, uschar * group)
72{
d185889f
JH
73const uschar * s;
74uschar buf[64];
75
76/* The 'previously-defined-substring' rule for macros in config file
77lines is done thus for these builtin macros: we know that the table
78we source from is in strict alpha order, hence the builtins portion
79of the macros list is in reverse-alpha (we prepend them) - so longer
80macros that have substrings are always discovered first during
81expansion. */
82
d7978c0f 83for (int i = 0; i < nopt; i++) if (*(s = US opts[i].name) && *s != '*')
d185889f
JH
84 {
85 if (group)
f1f7d0cd 86 spf(buf, sizeof(buf), CUS"_OPT_%T_%T_%T", section, group, s);
d185889f 87 else
f1f7d0cd 88 spf(buf, sizeof(buf), CUS"_OPT_%T_%T", section, s);
d185889f
JH
89 builtin_macro_create(buf);
90 }
91}
92
93
94/******************************************************************************/
95
96
97/* Create compile-time feature macros */
98static void
99features(void)
100{
101/* Probably we could work out a static initialiser for wherever
102macros are stored, but this will do for now. Some names are awkward
103due to conflicts with other common macros. */
104
105#ifdef SUPPORT_CRYPTEQ
106 builtin_macro_create(US"_HAVE_CRYPTEQ");
107#endif
108#if HAVE_ICONV
109 builtin_macro_create(US"_HAVE_ICONV");
110#endif
111#if HAVE_IPV6
112 builtin_macro_create(US"_HAVE_IPV6");
113#endif
114#ifdef HAVE_SETCLASSRESOURCES
115 builtin_macro_create(US"_HAVE_SETCLASSRESOURCES");
116#endif
117#ifdef SUPPORT_PAM
118 builtin_macro_create(US"_HAVE_PAM");
119#endif
120#ifdef EXIM_PERL
121 builtin_macro_create(US"_HAVE_PERL");
122#endif
123#ifdef EXPAND_DLFUNC
124 builtin_macro_create(US"_HAVE_DLFUNC");
125#endif
126#ifdef USE_TCP_WRAPPERS
127 builtin_macro_create(US"_HAVE_TCPWRAPPERS");
128#endif
01603eec 129#ifndef DISABLE_TLS
d185889f
JH
130 builtin_macro_create(US"_HAVE_TLS");
131# ifdef USE_GNUTLS
132 builtin_macro_create(US"_HAVE_GNUTLS");
133# else
134 builtin_macro_create(US"_HAVE_OPENSSL");
135# endif
136#endif
137#ifdef SUPPORT_TRANSLATE_IP_ADDRESS
138 builtin_macro_create(US"_HAVE_TRANSLATE_IP_ADDRESS");
139#endif
140#ifdef SUPPORT_MOVE_FROZEN_MESSAGES
141 builtin_macro_create(US"_HAVE_MOVE_FROZEN_MESSAGES");
142#endif
143#ifdef WITH_CONTENT_SCAN
144 builtin_macro_create(US"_HAVE_CONTENT_SCANNING");
145#endif
146#ifndef DISABLE_DKIM
147 builtin_macro_create(US"_HAVE_DKIM");
148#endif
1a2e76e1
JH
149#ifdef SUPPORT_DMARC
150 builtin_macro_create(US"_HAVE_DMARC");
151#endif
d185889f
JH
152#ifndef DISABLE_DNSSEC
153 builtin_macro_create(US"_HAVE_DNSSEC");
154#endif
155#ifndef DISABLE_EVENT
156 builtin_macro_create(US"_HAVE_EVENT");
157#endif
158#ifdef SUPPORT_I18N
159 builtin_macro_create(US"_HAVE_I18N");
160#endif
161#ifndef DISABLE_OCSP
162 builtin_macro_create(US"_HAVE_OCSP");
163#endif
81344b40 164#ifndef DISABLE_PIPE_CONNECT
4e48d56c
JH
165 builtin_macro_create(US"_HAVE_PIPE_CONNECT");
166#endif
d185889f
JH
167#ifndef DISABLE_PRDR
168 builtin_macro_create(US"_HAVE_PRDR");
169#endif
170#ifdef SUPPORT_PROXY
171 builtin_macro_create(US"_HAVE_PROXY");
172#endif
173#ifdef SUPPORT_SOCKS
174 builtin_macro_create(US"_HAVE_SOCKS");
175#endif
176#ifdef TCP_FASTOPEN
177 builtin_macro_create(US"_HAVE_TCP_FASTOPEN");
178#endif
179#ifdef EXPERIMENTAL_LMDB
180 builtin_macro_create(US"_HAVE_LMDB");
181#endif
7952eef9 182#ifdef SUPPORT_SPF
d185889f
JH
183 builtin_macro_create(US"_HAVE_SPF");
184#endif
7ef88aa0 185#if defined(EXPERIMENTAL_SRS) || defined(EXPERIMENTAL_SRS_NATIVE)
d185889f
JH
186 builtin_macro_create(US"_HAVE_SRS");
187#endif
7ef88aa0
JH
188#if defined(EXPERIMENTAL_SRS_NATIVE)
189 builtin_macro_create(US"_HAVE_NATIVE_SRS"); /* beware clash with _HAVE_SRS */
190#endif
617d3932
JH
191#ifdef EXPERIMENTAL_ARC
192 builtin_macro_create(US"_HAVE_ARC");
193#endif
d185889f
JH
194#ifdef EXPERIMENTAL_BRIGHTMAIL
195 builtin_macro_create(US"_HAVE_BRIGHTMAIL");
196#endif
c0635b6d 197#ifdef SUPPORT_DANE
d185889f
JH
198 builtin_macro_create(US"_HAVE_DANE");
199#endif
200#ifdef EXPERIMENTAL_DCC
201 builtin_macro_create(US"_HAVE_DCC");
202#endif
d185889f
JH
203#ifdef EXPERIMENTAL_DSN_INFO
204 builtin_macro_create(US"_HAVE_DSN_INFO");
205#endif
b10c87b3
JH
206#ifdef EXPERIMENTAL_TLS_RESUME
207 builtin_macro_create(US"_HAVE_TLS_RESUME");
208#endif
d185889f
JH
209
210#ifdef LOOKUP_LSEARCH
211 builtin_macro_create(US"_HAVE_LOOKUP_LSEARCH");
212#endif
213#ifdef LOOKUP_CDB
214 builtin_macro_create(US"_HAVE_LOOKUP_CDB");
215#endif
216#ifdef LOOKUP_DBM
217 builtin_macro_create(US"_HAVE_LOOKUP_DBM");
218#endif
219#ifdef LOOKUP_DNSDB
220 builtin_macro_create(US"_HAVE_LOOKUP_DNSDB");
221#endif
222#ifdef LOOKUP_DSEARCH
223 builtin_macro_create(US"_HAVE_LOOKUP_DSEARCH");
224#endif
225#ifdef LOOKUP_IBASE
226 builtin_macro_create(US"_HAVE_LOOKUP_IBASE");
227#endif
ffc92d69
JH
228#ifdef LOOKUP_LDAP
229 builtin_macro_create(US"_HAVE_LOOKUP_JSON");
230#endif
d185889f
JH
231#ifdef LOOKUP_LDAP
232 builtin_macro_create(US"_HAVE_LOOKUP_LDAP");
233#endif
234#ifdef EXPERIMENTAL_LMDB
235 builtin_macro_create(US"_HAVE_LOOKUP_LMDB");
236#endif
237#ifdef LOOKUP_MYSQL
238 builtin_macro_create(US"_HAVE_LOOKUP_MYSQL");
239#endif
240#ifdef LOOKUP_NIS
241 builtin_macro_create(US"_HAVE_LOOKUP_NIS");
242#endif
243#ifdef LOOKUP_NISPLUS
244 builtin_macro_create(US"_HAVE_LOOKUP_NISPLUS");
245#endif
246#ifdef LOOKUP_ORACLE
247 builtin_macro_create(US"_HAVE_LOOKUP_ORACLE");
248#endif
249#ifdef LOOKUP_PASSWD
250 builtin_macro_create(US"_HAVE_LOOKUP_PASSWD");
251#endif
252#ifdef LOOKUP_PGSQL
253 builtin_macro_create(US"_HAVE_LOOKUP_PGSQL");
254#endif
255#ifdef LOOKUP_REDIS
256 builtin_macro_create(US"_HAVE_LOOKUP_REDIS");
257#endif
258#ifdef LOOKUP_SQLITE
259 builtin_macro_create(US"_HAVE_LOOKUP_SQLITE");
260#endif
261#ifdef LOOKUP_TESTDB
262 builtin_macro_create(US"_HAVE_LOOKUP_TESTDB");
263#endif
264#ifdef LOOKUP_WHOSON
265 builtin_macro_create(US"_HAVE_LOOKUP_WHOSON");
266#endif
267
268#ifdef TRANSPORT_APPENDFILE
269# ifdef SUPPORT_MAILDIR
270 builtin_macro_create(US"_HAVE_TRANSPORT_APPEND_MAILDIR");
271# endif
272# ifdef SUPPORT_MAILSTORE
273 builtin_macro_create(US"_HAVE_TRANSPORT_APPEND_MAILSTORE");
274# endif
275# ifdef SUPPORT_MBX
276 builtin_macro_create(US"_HAVE_TRANSPORT_APPEND_MBX");
277# endif
278#endif
c11d665d
JH
279
280#ifdef WITH_CONTENT_SCAN
281features_malware();
282#endif
260958d6
JH
283
284features_crypto();
d185889f
JH
285}
286
287
288static void
289options(void)
290{
291options_main();
292options_routers();
293options_transports();
294options_auths();
12263aa8 295options_logging();
01603eec 296#ifndef DISABLE_TLS
8442641e
JH
297options_tls();
298#endif
d185889f
JH
299}
300
970424a5
JH
301static void
302params(void)
303{
215e8e5f 304#ifndef DISABLE_DKIM
a2701501 305params_dkim();
215e8e5f 306#endif
970424a5
JH
307}
308
d185889f
JH
309
310int
311main(void)
312{
313printf("#include \"exim.h\"\n");
314features();
315options();
970424a5 316params();
d185889f 317
1a7c9a48
JH
318printf("macro_item * macros = &p%d;\n", mp_index-1);
319printf("macro_item * mlast = &p0;\n");
f1f7d0cd 320exit(0);
d185889f 321}