X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/260958d632506e2789fc632381f560f5a0c77ed7..54a2a2a9983913a91ccef3aac107a159434a4714:/src/src/macro_predef.c diff --git a/src/src/macro_predef.c b/src/src/macro_predef.c index 2485072f4..383b0b38c 100644 --- a/src/src/macro_predef.c +++ b/src/src/macro_predef.c @@ -2,7 +2,7 @@ * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) Jeremy Harris 2017 */ +/* Copyright (c) Jeremy Harris 1995 - 2018 */ /* See the file NOTICE for conditions of use and distribution. */ /* Create a static data structure with the predefined macros, to be @@ -11,8 +11,7 @@ included in the main Exim build */ #include "exim.h" #include "macro_predef.h" -tree_node * tree_macros = NULL; -unsigned m_number = 1; +unsigned mp_index = 0; /* Global dummy variables */ @@ -24,7 +23,16 @@ uschar * syslog_facility_str; void builtin_macro_create_var(const uschar * name, const uschar * val) { -macro_create(name, val, FALSE); +printf ("static macro_item p%d = { ", mp_index); +if (mp_index == 0) + printf(".next=NULL,"); +else + printf(".next=&p%d,", mp_index-1); + +printf(" .command_line=FALSE, .namelen=%d, .replen=%d," + " .name=US\"%s\", .replacement=US\"%s\" };\n", + Ustrlen(name), Ustrlen(val), CS name, CS val); +mp_index++; } @@ -62,7 +70,6 @@ void options_from_list(optionlist * opts, unsigned nopt, const uschar * section, uschar * group) { -int i; const uschar * s; uschar buf[64]; @@ -73,7 +80,7 @@ of the macros list is in reverse-alpha (we prepend them) - so longer macros that have substrings are always discovered first during expansion. */ -for (i = 0; i < nopt; i++) if (*(s = US opts[i].name) && *s != '*') +for (int i = 0; i < nopt; i++) if (*(s = US opts[i].name) && *s != '*') { if (group) spf(buf, sizeof(buf), CUS"_OPT_%T_%T_%T", section, group, s); @@ -119,7 +126,7 @@ due to conflicts with other common macros. */ #ifdef USE_TCP_WRAPPERS builtin_macro_create(US"_HAVE_TCPWRAPPERS"); #endif -#ifdef SUPPORT_TLS +#ifndef DISABLE_TLS builtin_macro_create(US"_HAVE_TLS"); # ifdef USE_GNUTLS builtin_macro_create(US"_HAVE_GNUTLS"); @@ -139,6 +146,9 @@ due to conflicts with other common macros. */ #ifndef DISABLE_DKIM builtin_macro_create(US"_HAVE_DKIM"); #endif +#ifdef SUPPORT_DMARC + builtin_macro_create(US"_HAVE_DMARC"); +#endif #ifndef DISABLE_DNSSEC builtin_macro_create(US"_HAVE_DNSSEC"); #endif @@ -151,6 +161,9 @@ due to conflicts with other common macros. */ #ifndef DISABLE_OCSP builtin_macro_create(US"_HAVE_OCSP"); #endif +#ifndef DISABLE_PIPE_CONNECT + builtin_macro_create(US"_HAVE_PIPE_CONNECT"); +#endif #ifndef DISABLE_PRDR builtin_macro_create(US"_HAVE_PRDR"); #endif @@ -169,24 +182,30 @@ due to conflicts with other common macros. */ #ifdef SUPPORT_SPF builtin_macro_create(US"_HAVE_SPF"); #endif -#ifdef EXPERIMENTAL_SRS +#if defined(EXPERIMENTAL_SRS) || defined(EXPERIMENTAL_SRS_NATIVE) builtin_macro_create(US"_HAVE_SRS"); #endif +#if defined(EXPERIMENTAL_SRS_NATIVE) + builtin_macro_create(US"_HAVE_NATIVE_SRS"); /* beware clash with _HAVE_SRS */ +#endif +#ifdef EXPERIMENTAL_ARC + builtin_macro_create(US"_HAVE_ARC"); +#endif #ifdef EXPERIMENTAL_BRIGHTMAIL builtin_macro_create(US"_HAVE_BRIGHTMAIL"); #endif -#ifdef EXPERIMENTAL_DANE +#ifdef SUPPORT_DANE builtin_macro_create(US"_HAVE_DANE"); #endif #ifdef EXPERIMENTAL_DCC builtin_macro_create(US"_HAVE_DCC"); #endif -#ifdef EXPERIMENTAL_DMARC - builtin_macro_create(US"_HAVE_DMARC"); -#endif #ifdef EXPERIMENTAL_DSN_INFO builtin_macro_create(US"_HAVE_DSN_INFO"); #endif +#ifdef EXPERIMENTAL_TLS_RESUME + builtin_macro_create(US"_HAVE_TLS_RESUME"); +#endif #ifdef LOOKUP_LSEARCH builtin_macro_create(US"_HAVE_LOOKUP_LSEARCH"); @@ -206,6 +225,9 @@ due to conflicts with other common macros. */ #ifdef LOOKUP_IBASE builtin_macro_create(US"_HAVE_LOOKUP_IBASE"); #endif +#ifdef LOOKUP_LDAP + builtin_macro_create(US"_HAVE_LOOKUP_JSON"); +#endif #ifdef LOOKUP_LDAP builtin_macro_create(US"_HAVE_LOOKUP_LDAP"); #endif @@ -270,6 +292,10 @@ options_main(); options_routers(); options_transports(); options_auths(); +options_logging(); +#ifndef DISABLE_TLS +options_tls(); +#endif } static void @@ -281,59 +307,15 @@ params_dkim(); } -static unsigned -macro_dump(macro_item * m) -{ -int left = 0, right = 0; -tree_node * t; -macro_item_64 * m64; - -/* fprintf(stderr, "%s %p\n", __FUNCTION__, m); */ - -if (!m) return 0; -/* fprintf(stderr, "%s '%s' l %p r %p\n", __FUNCTION__, m->tnode.name, m->tnode.left, m->tnode.left); */ -if ((t = m->tnode.left)) left = macro_dump(tnode_to_mitem(m->tnode.left)); -if ((t = m->tnode.right)) right = macro_dump(tnode_to_mitem(m->tnode.right)); - -printf ("static macro_item_64 p%u = { ", m->m_number); -printf(" .command_line=FALSE," - " .namelen=%d," - " .replen=%d," - " .m_number=%u," - " .tnode={", - Ustrlen(m->tnode.name), Ustrlen(m->tnode.data.ptr), m->m_number); -printf(left ? " .left=&p%d.tnode," : " .left=NULL,", left); -printf(right ? " .right=&p%d.tnode," : " .right=NULL,", right); -printf( - " .data.ptr=\"%s\"," - " .balance=%d," - " .name=\"%s\"}};\n", - CS m->tnode.data.ptr, - m->tnode.balance, - CS m->tnode.name); - -if (Ustrlen(m->tnode.name) +1 > sizeof(m64->tnode.name)) - { - printf("#error macro name too long for macro_item_64\n"); - exit(1); - } -return m->m_number; -} - - - int main(void) { -unsigned idx; - printf("#include \"exim.h\"\n"); features(); options(); params(); -idx = macro_dump(tnode_to_mitem(tree_macros)); -printf("tree_node * tree_macros = (tree_node *) &p%u.tnode;\n", idx); -printf("unsigned m_number = %u;\n", m_number); +printf("macro_item * macros = &p%d;\n", mp_index-1); +printf("macro_item * mlast = &p0;\n"); exit(0); }