In 4.86-RC4 setting the DISABLE_PRDR compile-time option results in inability to compile. There are also a number of complaints from my compiler which might be of interest. At this point in the RC process, given that I'm not driving things, I'm keeping myself to _just_ fixing the two compilation errors.
First the patch which I'm going to commit: ----------------------------8< cut here >8------------------------------ --- acl.c.old 2015-07-12 19:06:24.683723864 -0400 +++ acl.c 2015-07-12 19:15:16.613686692 -0400 @@ -3372,7 +3372,11 @@ for (; cb != NULL; cb = cb->next) break; case CONTROL_CUTTHROUGH_DELIVERY: +#ifndef DISABLE_PRDR if (prdr_requested) +#else + if (0) +#endif /* Too hard to think about for now. We might in future cutthrough the case where both sides handle prdr and this-node prdr acl is "accept" */ --- smtp_in.c.old 2015-07-12 19:17:46.360676653 -0400 +++ smtp_in.c 2015-07-12 19:19:38.245668910 -0400 @@ -1515,7 +1515,9 @@ sender_verified_list = NULL; /* N memset(sender_address_cache, 0, sizeof(sender_address_cache)); memset(sender_domain_cache, 0, sizeof(sender_domain_cache)); +#ifndef DISABLE_PRDR prdr_requested = FALSE; +#endif /* Reset the DSN flags */ dsn_ret = 0; ----------------------------8< cut here >8------------------------------ Installing on FreeBSD 10.1/amd64 with CLang as the compiler; % cc --version FreeBSD clang version 3.4.1 (tags/RELEASE_34/dot1-final 208032) 20140512 Target: x86_64-unknown-freebsd10.1 Thread model: posix ----------------------------8< cut here >8------------------------------ clang acl.c acl.c:3375:6: error: use of undeclared identifier 'prdr_requested' if (prdr_requested) ^ acl.c:3531:19: warning: passing 'const uschar **' (aka 'const unsigned char **') to parameter of type 'uschar **' (aka 'unsigned char **') discards qualifiers in nested pointer types [-Wincompatible-pointer-types-discards-qualifiers] rc = demime(&arg); ^~~~ ./functions.h:140:32: note: passing argument to parameter here extern int demime(uschar **); ^ 1 warning and 1 error generated. *** Error code 1 ----------------------------8< cut here >8------------------------------ My persisted (from 4.84) Local/Makefile for this box contains: DISABLE_PRDR=yes DISABLE_OCSP=yes Fixing that error, then: ----------------------------8< cut here >8------------------------------ clang deliver.c deliver.c:3964:28: warning: expression result unused [-Wunused-value] !tp->expand_multi_domain || (deliver_set_expansions(next), 1), ~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 warning generated. clang dns.c dns.c:998:7: warning: add explicit braces to avoid dangling else [-Wdangling-else] else if (namesuff - 4 > name && strcmpic(namesuff - 4, US".ip6.arpa") == 0) ^ 1 warning generated. clang exim.c exim.c:2248:43: warning: passing 'uschar **' (aka 'unsigned char **') to parameter of type 'const uschar **' (aka 'const unsigned char **') discards qualifiers in nested pointer types [-Wincompatible-pointer-types-discards-qualifiers] while((filename = string_nextinlist(&list, &sep, big_buffer, ^~~~~ ./functions.h:424:49: note: passing argument to parameter here extern uschar *string_nextinlist(const uschar **, int *, uschar *, int); ^ exim.c:3413:46: warning: add explicit braces to avoid dangling else [-Wdangling-else] if (++i < argc) log_oneline = argv[i]; else ^ exim.c:5379:11: warning: add explicit braces to avoid dangling else [-Wdangling-else] else ^ 3 warnings generated. clang expand.c expand.c:6658:3: warning: add explicit braces to avoid dangling else [-Wdangling-else] else ^ 1 warning generated. clang parse.c parse.c:556:5: warning: add explicit braces to avoid dangling else [-Wdangling-else] else ^ 1 warning generated. clang readconf.c readconf.c:3757:7: warning: add explicit braces to avoid dangling else [-Wdangling-else] else ^ 1 warning generated. clang smtp_in.c smtp_in.c:1518:1: error: use of undeclared identifier 'prdr_requested' prdr_requested = FALSE; ^ smtp_in.c:3016:5: warning: add explicit braces to avoid dangling else [-Wdangling-else] else ^ 1 warning and 1 error generated. ----------------------------8< cut here >8------------------------------ ----------------------------8< cut here >8------------------------------ clang tls.c In file included from tls.c:120: ./tls-openssl.c:423:17: warning: implicit declaration of function 'X509_check_host' is invalid in C99 [-Wimplicit-function-declaration] if ((rc = X509_check_host(cert, name, 0, ^ ./tls-openssl.c:711:13: warning: passing 'char [26]' to parameter of type 'uschar *' (aka 'unsigned char *') converts between pointers to integer types with different sign [-Wpointer-sign] tls_error("Unable to create ec curve", host, NULL); ^~~~~~~~~~~~~~~~~~~~~~~~~~~ ./tls-openssl.c:200:20: note: passing argument to parameter 'prefix' here tls_error(uschar * prefix, const host_item * host, uschar * msg) ^ In file included from tls.c:121: In file included from ./tlscert-openssl.c:18: /usr/local/include/openssl/x509v3.h:729:10: warning: 'X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS' macro redefined # define X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS 0x4 ^ ./tls-openssl.c:413:11: note: previous definition is here # define X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS 0 ^ In file included from tls.c:121: In file included from ./tlscert-openssl.c:18: /usr/local/include/openssl/x509v3.h:733:10: warning: 'X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS' macro redefined # define X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS 0x10 ^ ./tls-openssl.c:416:11: note: previous definition is here # define X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS 0 ^ In file included from tls.c:121: ./tlscert-openssl.c:167:14: warning: if statement has empty body [-Wempty-body] if (mod_tz); ^ ./tlscert-openssl.c:167:14: note: put the semicolon on a separate line to silence this warning tls.c:277:40: warning: '&&' within '||' [-Wlogical-op-parentheses] || Ustrncmp(ele, match, len) == 0 && ele[len] == '=' ~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~ tls.c:277:40: note: place parentheses around the '&&' expression to silence this warning || Ustrncmp(ele, match, len) == 0 && ele[len] == '=' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~ 6 warnings generated. clang malware.c malware.c:889:28: warning: using the result of an assignment as a condition without parentheses [-Wparentheses] for (p[bread] = '\0'; q = Ustrchr(p, '\n'); p = q+1) ~~^~~~~~~~~~~~~~~~~~ malware.c:889:28: note: place parentheses around the assignment to silence this warning for (p[bread] = '\0'; q = Ustrchr(p, '\n'); p = q+1) ^ ( ) malware.c:889:28: note: use '==' to turn this assignment into an equality comparison for (p[bread] = '\0'; q = Ustrchr(p, '\n'); p = q+1) ^ == malware.c:1005:67: warning: comparison of unsigned expression < 0 is always false [-Wtautological-compare] if ((bread = recv_line(sock, tmpbuf, sizeof(tmpbuf), tmo)) < 0) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~ malware.c:1808:12: warning: enumeration value 'AVA_DONE' not handled in switch [-Wswitch] switch (avast_stage) ^ 3 warnings generated. clang spam.c spam.c:300:5: warning: using the result of an assignment as a condition without parentheses [-Wparentheses] s = string_nextinlist(&sublist, &sublist_sep, NULL, 0); ~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ spam.c:300:5: note: place parentheses around the assignment to silence this warning s = string_nextinlist(&sublist, &sublist_sep, NULL, 0); ^ ( ) spam.c:300:5: note: use '==' to turn this assignment into an equality comparison s = string_nextinlist(&sublist, &sublist_sep, NULL, 0); ^ == 1 warning generated. clang demime.c demime.c:32:35: warning: passing 'uschar **' (aka 'unsigned char **') to parameter of type 'const uschar **' (aka 'const unsigned char **') discards qualifiers in nested pointer types [-Wincompatible-pointer-types-discards-qualifiers] if ((option = string_nextinlist(&list, &sep, ^~~~~ ./functions.h:424:49: note: passing argument to parameter here extern uschar *string_nextinlist(const uschar **, int *, uschar *, int); ^ demime.c:95:32: warning: passing 'uschar **' (aka 'unsigned char **') to parameter of type 'const uschar **' (aka 'const unsigned char **') discards qualifiers in nested pointer types [-Wincompatible-pointer-types-discards-qualifiers] option = string_nextinlist(&list, &sep, ^~~~~ ./functions.h:424:49: note: passing argument to parameter here extern uschar *string_nextinlist(const uschar **, int *, uschar *, int); ^ 2 warnings generated. ----------------------------8< cut here >8------------------------------ -- ## List details at https://lists.exim.org/mailman/listinfo/exim-dev Exim details at http://www.exim.org/ ##