3 [ -z "${WANT_ASSERTS}" ] && WANT_ASSERTS
=0
4 if [ -z "${CONFIG}" ]; then
5 [ -f user.conf
] && . user.conf
9 WANT_JUNK
=0 WANT_SOCKET
=0
15 WANT_JUNK
=0 WANT_IMAP
=0 WANT_POP3
=0
18 echo >&2 "Unknown CONFIG= setting: ${CONFIG}"
19 echo >&2 'Possible values: MINIMAL, NETLESS, NETSEND'
33 if nwantfeat SOCKET
; then
34 WANT_IPV6
=0 WANT_SSL
=0
35 WANT_IMAP
=0 WANT_GSSAPI
=0 WANT_POP3
=0 WANT_SMTP
=0
37 if nwantfeat IMAP
&& nwantfeat POP3
&& nwantfeat SMTP
; then
38 WANT_SOCKET
=0 WANT_IPV6
=0 WANT_SSL
=0
42 if nwantfeat IMAP
; then
45 # If we don't need MD5 except for producing boundary and message-id strings,
46 # leave it off, plain old srand(3) should be enough for that purpose.
47 if nwantfeat SOCKET
&& nwantfeat JUNK
; then
49 elif wantfeat JUNK
; then
69 * Auto-generated by $0.
70 * Changes are lost when $0 is run again.
76 .SUFFIXES
: .o .c .x .y
78 $
(CC
) $
(CFLAGS
) $
(INCLUDES
) -c $
<
81 $
(CC
) $
(CFLAGS
) $
(INCLUDES
) -E $
< >$@
84 $
(CC
) $
(CFLAGS
) $
(INCLUDES
) $
(LDFLAGS
) $
< $
(LIBS
) -o $@
90 trap "rm -f $out $lib $inc $makefile; exit" 1 2 15
91 trap "rm -rf $tmp.*; rm -f $tmp $tmp2.? $tmp2 $tmp3.? $tmp3 $makefile" 0
96 printf "*** $fmt\\n" "$@"
97 printf "$fmt" "$@" >&5
105 echo '************************************************************'
106 msg
"checking $topic ... "
107 echo "/* checked $topic */" >>$out
109 echo '*** test program is'
111 #echo '*** the preprocessor generates'
112 #$make -f $makefile $tmp.x
114 echo '*** results are'
115 if $make -f $makefile $tmp.o
&& test -f $tmp.o
118 echo "$define" >>$out
119 eval have_
$variable=yes
122 echo "/* $define */" >>$out
124 eval unset have_
$variable
136 echo '************************************************************'
137 msg
"checking $topic ... "
138 echo "/* checked $topic */" >>$out
140 echo '*** test program is'
142 #echo '*** the preprocessor generates'
143 #$make -f $makefile $tmp.x
145 echo '*** results are'
146 if $make -f $makefile \
147 $tmp INCLUDES
="$INCLUDES $incs" LIBS
="$LIBS $libs" &&
151 echo "$define" >> $out
154 eval have_
$variable=yes
158 echo "/* $define */" >>$out
159 eval unset have_
$variable
164 link_check hello
'if a hello world program can be built' <<\
! ||
{ \
165 echo 'This problem is most certainly not specific to this software.' >&5; \
166 echo "Read the file '$log' and check your compiler installation." >&5; \
171 int main
(int argc
, char
*argv
[])
180 compile_check alloca_h
'for <alloca.h>' '#define HAVE_ALLOCA_H' <<\
!
184 link_check alloca
'for alloca()' '#define HAVE_ALLOCA' <<\
!
193 compile_check ssize_t
'for ssize_t' '#define HAVE_SSIZE_T' <<\
!
194 #include <sys/types.h>
204 link_check snprintf
'for snprintf()' '#define HAVE_SNPRINTF' <<\
!
209 snprintf
(b
, sizeof b
, "%s", "string");
214 link_check putc_unlocked
'for putc_unlocked()' '#define HAVE_PUTC_UNLOCKED' <<\
!
218 putc_unlocked
('@', stdout
);
223 link_check fchdir
'for fchdir()' '#define HAVE_FCHDIR' <<\
!
232 link_check mmap
'for mmap()' '#define HAVE_MMAP' <<\
!
233 #include <sys/types.h>
234 #include <sys/mman.h>
237 mmap
(0, 0, 0, 0, 0, 0);
242 link_check mremap
'for mremap()' '#define HAVE_MREMAP' <<\
!
243 #include <sys/types.h>
244 #include <sys/mman.h>
247 mremap
(0, 0, 0, MREMAP_MAYMOVE
);
258 id
= iconv_open
("foo", "bar");
262 <$tmp2.c link_check
iconv 'for iconv functionality' '#define HAVE_ICONV' ||
263 <$tmp2.c link_check
iconv 'for iconv functionality in libiconv' \
264 '#define HAVE_ICONV' '-liconv'
266 link_check wctype
'for wctype functionality' '#define HAVE_WCTYPE_H' <<\
!
276 link_check wcwidth
'for wcwidth() ' '#define HAVE_WCWIDTH' <<\
!
285 link_check mbtowc
'for mbtowc()' '#define HAVE_MBTOWC' <<\
!
295 link_check setlocale
'for setlocale()' '#define HAVE_SETLOCALE' <<\
!
299 setlocale
(LC_ALL
, "");
304 link_check nl_langinfo
'for nl_langinfo()' '#define HAVE_NL_LANGINFO' <<\
!
305 #include <langinfo.h>
313 link_check mkstemp
'for mkstemp()' '#define HAVE_MKSTEMP' <<\
!
322 link_check fpathconf
'for fpathconf()' '#define HAVE_FPATHCONF' <<\
!
326 fpathconf
(0, _PC_PATH_MAX
);
331 link_check wordexp
'for wordexp()' '#define HAVE_WORDEXP' <<\
!
335 wordexp
((char
*)0, (wordexp_t
*)0, 0);
340 link_check getopt
'for getopt()' '#define HAVE_GETOPT' << \
!
342 int main
(int argc
, char
**argv
)
344 #if defined __GLIBC__ || defined __linux__
345 Argument and option reordering is not a desired feature.
347 getopt
(argc
, argv
, "oPt");
349 return (((long
)optarg
+ optind
) & 0x7F);
355 if wantfeat SOCKET
; then
356 compile_check arpa_inet_h
'for <arpa/inet.h>' \
357 '#define HAVE_ARPA_INET_H' << \
!
359 #include <sys/types.h>
360 #include <sys/socket.h>
362 #include <netinet/in.h>
363 #include <arpa/inet.h>
368 #include <sys/types.h>
369 #include <sys/socket.h>
371 #include <netinet/in.h>
372 #ifdef HAVE_ARPA_INET_H
373 #include <arpa/inet.h>
379 socket
(AF_INET
, SOCK_STREAM
, 0);
381 gethostbyname
("foo");
387 <$tmp2.c link_check sockets
'for sockets in libc' \
388 '#define HAVE_SOCKETS' ||
389 <$tmp2.c link_check sockets
'for sockets in libnsl' \
390 '#define HAVE_SOCKETS' '-lnsl' ||
391 <$tmp2.c link_check sockets \
392 'for sockets in libsocket and libnsl' \
393 '#define HAVE_SOCKETS' '-lsocket -lnsl' ||
396 # XXX Shouldn't it be a hard error if there is no socket support, then?
397 [ ${WANT_SOCKET} -eq 1 ] ||
398 WANT_IPV6
=0 WANT_SSL
=0 \
399 WANT_IMAP
=0 WANT_GSSAPI
=0 WANT_POP3
=0 WANT_SMTP
=0
402 if wantfeat IPV6
; then
403 link_check ipv6
'for IPv6 functionality' '#define USE_IPV6' << \
!
405 #include <sys/types.h>
406 #include <sys/socket.h>
408 #include <netinet/in.h>
409 #ifdef HAVE_ARPA_INET_H
410 #include <arpa/inet.h>
415 struct addrinfo a
, *ap
;
416 getaddrinfo
("foo", "0", &a
, &ap
);
423 if wantfeat IMAP
; then
424 echo "#define USE_IMAP" >> $out
426 echo "/* #define USE_IMAP */" >> $out
429 if wantfeat POP3
; then
430 echo "#define USE_POP3" >>$out
432 echo "/* #define USE_POP3 */" >> $out
435 if wantfeat SMTP
; then
436 echo "#define USE_SMTP" >>$out
438 echo "/* #define USE_SMTP */" >> $out
441 if wantfeat SSL
; then
442 link_check nss
'for Network Security Services (NSS)' '#define USE_SSL
444 '-lsmime3 -lnss3 -lssl3 -lnspr4 -lplc4' <<\
! || \
445 link_check openssl
'for sufficiently recent OpenSSL' \
447 #define USE_OPENSSL' '-lssl -lcrypto' << \
%
452 #include <pk11func.h>
457 #include <ciferfam.h>
458 #include <private/pprio.h>
462 PR_ImportTCPSocket
(0);
463 NSS_CMSSignerInfo_AddSMIMECaps
(0);
467 #include <openssl/ssl.h>
468 #include <openssl/err.h>
469 #include <openssl/x509v3.h>
470 #include <openssl/x509.h>
471 #include <openssl/rand.h>
475 SSLv23_client_method
();
476 PEM_read_PrivateKey
(0, 0, 0, 0);
481 if [ "${have_nss}" = 'yes' ]; then
482 compile_check genname_h
'for genname.h' \
483 '#define HAVE_GENNAME_H' << \
!
487 compile_check xconst_h
'for xconst.h' \
488 '#define HAVE_XCONST_H' << \
!
492 compile_check CERTAltNameEncodedContext \
493 'for CERTAltNameEncodedContext type' \
494 '#define HAVE_CERTAltNameEncodedContext' << \
!
500 #include <pk11func.h>
505 #include <ciferfam.h>
509 #ifdef HAVE_GENNAME_H
512 #include <private/pprio.h>
514 CERTAltNameEncodedContext foo
;
518 if [ "${have_openssl}" = 'yes' ]; then
519 compile_check stack_of
'for STACK_OF()' \
520 '#define HAVE_STACK_OF' << \
!
521 #include <openssl/ssl.h>
522 #include <openssl/err.h>
523 #include <openssl/x509v3.h>
524 #include <openssl/x509.h>
525 #include <openssl/rand.h>
529 STACK_OF
(GENERAL_NAME
) *gens
= NULL
;
530 printf("%p", gens
); /* to
make it used
*/
531 SSLv23_client_method
();
532 PEM_read_PrivateKey
(0, 0, 0, 0);
539 echo '/* Socket/SSL support not desired */' >> $out
542 if wantfeat GSSAPI
; then
544 #include <gssapi/gssapi.h>
548 gss_import_name
(0, 0, GSS_C_NT_HOSTBASED_SERVICE
, 0);
549 gss_init_sec_context
(0,0,0,0,0,0,0,0,0,0,0,0,0);
554 sed -e '1s/gssapi\///' < $tmp2.c
> $tmp3.c
556 <$tmp2.c link_check gssapi
'for GSSAPI in libgss' \
557 '#define USE_GSSAPI' '-lgss' ||
558 <$tmp2.c link_check gssapi
'for GSSAPI in libgssapi_krb5' \
559 '#define USE_GSSAPI' '-lgssapi_krb5' ||
560 link_check gssapi
'for GSSAPI in libgssapi_krb5, old-style' \
562 #define GSSAPI_OLD_STYLE' '-lgssapi_krb5' <<\
! || \
563 <$tmp3.c link_check gssapi
'for GSSAPI in libgssapi' \
565 #define GSSAPI_REG_INCLUDE' '-lgssapi' || \
566 <$tmp3.c link_check gssapi \
567 'for GSSAPI in libgssapi, OpenBSD-style' \
569 #define GSSAPI_REG_INCLUDE' \
570 '-lgssapi -lkrb5 -lcrypto' '-I/usr/include/kerberosV'
572 #include <gssapi/gssapi.h>
573 #include <gssapi/gssapi_generic.h>
577 gss_import_name
(0, 0, gss_nt_service_name
, 0);
578 gss_init_sec_context
(0,0,0,0,0,0,0,0,0,0,0,0,0);
584 echo '/* IMAP/GSSAPI support not desired */' >> $out
587 if wantfeat JUNK
; then
588 echo "#define USE_JUNK" >> $out
590 echo "/* #define USE_JUNK */" >> $out
593 if wantfeat MD5
; then
594 echo "#define USE_MD5" >> $out
596 echo "/* #define USE_MD5 */" >> $out
599 if wantfeat ASSERTS
; then
600 echo "#define HAVE_ASSERTS" >> $out
602 echo "/* #define HAVE_ASSERTS */" >> $out
605 # Since we cat(1) the content of those to cc/"ld", convert them to single line
607 < "${1}" > "${2}" awk \
608 'BEGIN {ORS = " "} /^[^#]/ {print} {next} END {ORS = ""; print "\n"}'
611 squeeze_em
"$inc" "$tmp"
613 squeeze_em
"$lib" "$tmp"
619 #ifdef HAVE_NL_LANGINFO
620 #include <langinfo.h>
623 :The following optional features are enabled
:
624 #ifdef HAVE_SETLOCALE
625 : + Locale support
: Printable characters depend on the environment
626 #if defined HAVE_MBTOWC && defined HAVE_WCTYPE_H
627 : + Multibyte character support
631 : + Character
set conversion using
iconv()
633 #if defined HAVE_SETLOCALE && defined HAVE_NL_LANGINFO && defined CODESET
634 : + Automatic detection of terminal character
set
640 : + Support
for Internet Protocol v6
(IPv6
)
643 : + S
/MIME and SSL
/TLS using Network Security Services
(NSS
)
646 : + S
/MIME and SSL
/TLS using OpenSSL
652 : + IMAP GSSAPI authentication
661 : + Junk-mail management
(Bayesian filtering
)
664 : + The MD5 message digest
667 :The following optional features are disabled
:
668 #ifndef HAVE_SETLOCALE
669 : - Locale support
: Only ASCII characters are recognized
671 #if ! defined HAVE_SETLOCALE || ! defined HAVE_MBTOWC || !defined HAVE_WCTYPE_H
672 : - Multibyte character support
675 : - Character
set conversion using
iconv()
677 #if ! defined HAVE_SETLOCALE || ! defined HAVE_NL_LANGINFO || ! defined CODESET
678 : - Automatic detection of terminal character
set
684 : - Support
for Internet Protocol v6
(IPv6
)
686 #if ! defined USE_SSL && ! defined USE_NSS
687 : - SSL
/TLS
(network transport authentication and encryption
)
693 : - IMAP GSSAPI authentication
702 : - Junk-mail management
(Bayesian filtering
)
705 : - The MD5 message digest
709 #ifndef HAVE_SNPRINTF
710 : * The
function snprintf
() could not be found. mailx will be compiled to use
711 : sprintf
() instead. This might overflow buffers
if input values are larger
712 : than expected. Use the resulting binary with care or update your system
713 : environment and start the configuration process again.
716 : * The
function fchdir
() could not be found. mailx will be compiled to use
717 : chdir
() instead. This is not a problem unless the current working
718 : directory of mailx is moved
while the IMAP cache is used.
721 : * A
(usable
) getopt
() functionality could not be found.
722 : A
builtin version is used instead.
725 : * WANT_ASSERTS is enabled
, the program binary will contain code assertions.
726 : There are also additional commands available
, like
"core".
727 : Such a binary is not meant to be used by end-users
, but only
for
728 : development purposes. Thanks
!
733 $make -f $makefile $tmp2.x
734 < $tmp2.x
>&5 sed '/^[^:]/d; /^$/d; s/^://'