Revert "Build: tidying"
[exim.git] / src / src / macro_predef.c
CommitLineData
d185889f
JH
1/*************************************************
2* Exim - an Internet mail transport agent *
3*************************************************/
4
5/* Copyright (c) Jeremy Harris 2017 */
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
JH
13
14unsigned mp_index = 0;
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
JH
25{
26printf ("static macro_item p%d = { ", mp_index);
27if (mp_index == 0)
f2ed27cf 28 printf(".next=NULL,");
d185889f 29else
f2ed27cf 30 printf(".next=&p%d,", mp_index-1);
d185889f 31
970424a5
JH
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);
d185889f
JH
35mp_index++;
36}
37
970424a5
JH
38
39void
40builtin_macro_create(const uschar * name)
41{
42builtin_macro_create_var(name, US"y");
43}
44
45
f1f7d0cd 46void
d185889f
JH
47spf(uschar * buf, int len, const uschar * fmt, ...)
48{
49va_list ap;
50va_start(ap, fmt);
51
52while (*fmt && len > 1)
53 if (*fmt == '%' && fmt[1] == 'T')
54 {
55 uschar * s = va_arg(ap, uschar *);
56 while (*s && len-- > 1)
57 *buf++ = toupper(*s++);
58 fmt += 2;
59 }
60 else
61 {
62 *buf++ = *fmt++; len--;
63 }
64*buf = '\0';
65va_end(ap);
66}
67
68void
69options_from_list(optionlist * opts, unsigned nopt,
70 const uschar * section, uschar * group)
71{
72int i;
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
83for (i = 0; i < nopt; i++) if (*(s = US opts[i].name) && *s != '*')
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
129#ifdef SUPPORT_TLS
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
149#ifndef DISABLE_DNSSEC
150 builtin_macro_create(US"_HAVE_DNSSEC");
151#endif
152#ifndef DISABLE_EVENT
153 builtin_macro_create(US"_HAVE_EVENT");
154#endif
155#ifdef SUPPORT_I18N
156 builtin_macro_create(US"_HAVE_I18N");
157#endif
158#ifndef DISABLE_OCSP
159 builtin_macro_create(US"_HAVE_OCSP");
160#endif
161#ifndef DISABLE_PRDR
162 builtin_macro_create(US"_HAVE_PRDR");
163#endif
164#ifdef SUPPORT_PROXY
165 builtin_macro_create(US"_HAVE_PROXY");
166#endif
167#ifdef SUPPORT_SOCKS
168 builtin_macro_create(US"_HAVE_SOCKS");
169#endif
170#ifdef TCP_FASTOPEN
171 builtin_macro_create(US"_HAVE_TCP_FASTOPEN");
172#endif
173#ifdef EXPERIMENTAL_LMDB
174 builtin_macro_create(US"_HAVE_LMDB");
175#endif
176#ifdef EXPERIMENTAL_SPF
177 builtin_macro_create(US"_HAVE_SPF");
178#endif
179#ifdef EXPERIMENTAL_SRS
180 builtin_macro_create(US"_HAVE_SRS");
181#endif
182#ifdef EXPERIMENTAL_BRIGHTMAIL
183 builtin_macro_create(US"_HAVE_BRIGHTMAIL");
184#endif
185#ifdef EXPERIMENTAL_DANE
186 builtin_macro_create(US"_HAVE_DANE");
187#endif
188#ifdef EXPERIMENTAL_DCC
189 builtin_macro_create(US"_HAVE_DCC");
190#endif
191#ifdef EXPERIMENTAL_DMARC
192 builtin_macro_create(US"_HAVE_DMARC");
193#endif
194#ifdef EXPERIMENTAL_DSN_INFO
195 builtin_macro_create(US"_HAVE_DSN_INFO");
196#endif
197
198#ifdef LOOKUP_LSEARCH
199 builtin_macro_create(US"_HAVE_LOOKUP_LSEARCH");
200#endif
201#ifdef LOOKUP_CDB
202 builtin_macro_create(US"_HAVE_LOOKUP_CDB");
203#endif
204#ifdef LOOKUP_DBM
205 builtin_macro_create(US"_HAVE_LOOKUP_DBM");
206#endif
207#ifdef LOOKUP_DNSDB
208 builtin_macro_create(US"_HAVE_LOOKUP_DNSDB");
209#endif
210#ifdef LOOKUP_DSEARCH
211 builtin_macro_create(US"_HAVE_LOOKUP_DSEARCH");
212#endif
213#ifdef LOOKUP_IBASE
214 builtin_macro_create(US"_HAVE_LOOKUP_IBASE");
215#endif
216#ifdef LOOKUP_LDAP
217 builtin_macro_create(US"_HAVE_LOOKUP_LDAP");
218#endif
219#ifdef EXPERIMENTAL_LMDB
220 builtin_macro_create(US"_HAVE_LOOKUP_LMDB");
221#endif
222#ifdef LOOKUP_MYSQL
223 builtin_macro_create(US"_HAVE_LOOKUP_MYSQL");
224#endif
225#ifdef LOOKUP_NIS
226 builtin_macro_create(US"_HAVE_LOOKUP_NIS");
227#endif
228#ifdef LOOKUP_NISPLUS
229 builtin_macro_create(US"_HAVE_LOOKUP_NISPLUS");
230#endif
231#ifdef LOOKUP_ORACLE
232 builtin_macro_create(US"_HAVE_LOOKUP_ORACLE");
233#endif
234#ifdef LOOKUP_PASSWD
235 builtin_macro_create(US"_HAVE_LOOKUP_PASSWD");
236#endif
237#ifdef LOOKUP_PGSQL
238 builtin_macro_create(US"_HAVE_LOOKUP_PGSQL");
239#endif
240#ifdef LOOKUP_REDIS
241 builtin_macro_create(US"_HAVE_LOOKUP_REDIS");
242#endif
243#ifdef LOOKUP_SQLITE
244 builtin_macro_create(US"_HAVE_LOOKUP_SQLITE");
245#endif
246#ifdef LOOKUP_TESTDB
247 builtin_macro_create(US"_HAVE_LOOKUP_TESTDB");
248#endif
249#ifdef LOOKUP_WHOSON
250 builtin_macro_create(US"_HAVE_LOOKUP_WHOSON");
251#endif
252
253#ifdef TRANSPORT_APPENDFILE
254# ifdef SUPPORT_MAILDIR
255 builtin_macro_create(US"_HAVE_TRANSPORT_APPEND_MAILDIR");
256# endif
257# ifdef SUPPORT_MAILSTORE
258 builtin_macro_create(US"_HAVE_TRANSPORT_APPEND_MAILSTORE");
259# endif
260# ifdef SUPPORT_MBX
261 builtin_macro_create(US"_HAVE_TRANSPORT_APPEND_MBX");
262# endif
263#endif
264}
265
266
267static void
268options(void)
269{
270options_main();
271options_routers();
272options_transports();
273options_auths();
274}
275
970424a5
JH
276static void
277params(void)
278{
215e8e5f 279#ifndef DISABLE_DKIM
970424a5 280dkim_params();
215e8e5f 281#endif
970424a5
JH
282}
283
d185889f
JH
284
285int
286main(void)
287{
288printf("#include \"exim.h\"\n");
289features();
290options();
970424a5 291params();
d185889f
JH
292
293printf("macro_item * macros = &p%d;\n", mp_index-1);
294printf("macro_item * mlast = &p0;\n");
f1f7d0cd 295exit(0);
d185889f 296}