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);
353 ## user.conf added later, indentation not adjusted ##
355 if wantfeat SOCKET
; then
357 compile_check arpa_inet_h
'for <arpa/inet.h>' '#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>
374 #endif /* HAVE_ARPA_INET_H */
379 socket
(AF_INET
, SOCK_STREAM
, 0);
381 gethostbyname
("foo");
387 <$tmp2.c link_check sockets
'for socket functionality in libc' \
388 '#define HAVE_SOCKETS' ||
389 <$tmp2.c link_check sockets
'for socket functionality in libnsl' \
390 '#define HAVE_SOCKETS' '-lnsl' ||
391 <$tmp2.c link_check sockets \
392 'for socket functionality 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
404 link_check ipv6
'for IPv6 functionality' '#define USE_IPV6' << \
!
406 #include <sys/types.h>
407 #include <sys/socket.h>
409 #include <netinet/in.h>
410 #ifdef HAVE_ARPA_INET_H
411 #include <arpa/inet.h>
416 struct addrinfo a
, *ap
;
417 getaddrinfo
("foo", "0", &a
, &ap
);
424 if wantfeat IMAP
; then
425 echo "#define USE_IMAP" >> $out
427 echo "/* #define USE_IMAP */" >> $out
430 if wantfeat POP3
; then
431 echo "#define USE_POP3" >>$out
433 echo "/* #define USE_POP3 */" >> $out
436 if wantfeat SMTP
; then
437 echo "#define USE_SMTP" >>$out
439 echo "/* #define USE_SMTP */" >> $out
442 if wantfeat SSL
; then
444 link_check nss
'for Network Security Services (NSS)' '#define USE_SSL
445 #define USE_NSS' '-lsmime3 -lnss3 -lssl3 -lnspr4 -lplc4' <<\
! || \
446 link_check openssl
'for sufficiently recent OpenSSL' \
448 #define USE_OPENSSL' '-lssl -lcrypto' <<\
%
453 #include <pk11func.h>
458 #include <ciferfam.h>
459 #include <private/pprio.h>
463 PR_ImportTCPSocket
(0);
464 NSS_CMSSignerInfo_AddSMIMECaps
(0);
468 #include <openssl/ssl.h>
469 #include <openssl/err.h>
470 #include <openssl/x509v3.h>
471 #include <openssl/x509.h>
472 #include <openssl/rand.h>
476 SSLv23_client_method
();
477 PEM_read_PrivateKey
(0, 0, 0, 0);
481 if test x
$have_nss = xyes
483 compile_check genname_h
'for genname.h' '#define HAVE_GENNAME_H' <<\
!
486 compile_check xconst_h
'for xconst.h' '#define HAVE_XCONST_H' <<\
!
489 compile_check CERTAltNameEncodedContext \
490 'for CERTAltNameEncodedContext type' \
491 '#define HAVE_CERTAltNameEncodedContext' <<\
!
497 #include <pk11func.h>
502 #include <ciferfam.h>
506 #ifdef HAVE_GENNAME_H
509 #include <private/pprio.h>
511 CERTAltNameEncodedContext foo
;
515 if test x
$have_openssl = xyes
517 compile_check stack_of
'for STACK_OF()' '#define HAVE_STACK_OF' <<\
!
518 #include <openssl/ssl.h>
519 #include <openssl/err.h>
520 #include <openssl/x509v3.h>
521 #include <openssl/x509.h>
522 #include <openssl/rand.h>
526 STACK_OF
(GENERAL_NAME
) *gens
= NULL
;
527 printf("%p", gens
); /* to
make it used
*/
528 SSLv23_client_method
();
529 PEM_read_PrivateKey
(0, 0, 0, 0);
536 echo '/* Socket/SSL support not desired */' >> $out
538 if wantfeat GSSAPI
; then
541 #include <gssapi/gssapi.h>
545 gss_import_name
(0, 0, GSS_C_NT_HOSTBASED_SERVICE
, 0);
546 gss_init_sec_context
(0,0,0,0,0,0,0,0,0,0,0,0,0);
551 sed -e '1s/gssapi\///' < $tmp2.c
> $tmp3.c
553 <$tmp2.c link_check gssapi
'for GSSAPI in libgss' \
554 '#define USE_GSSAPI' '-lgss' ||
555 <$tmp2.c link_check gssapi
'for GSSAPI in libgssapi_krb5' \
556 '#define USE_GSSAPI' '-lgssapi_krb5' ||
557 link_check gssapi
'for GSSAPI in libgssapi_krb5, old-style' \
559 #define GSSAPI_OLD_STYLE' '-lgssapi_krb5' <<\
! || \
560 <$tmp3.c link_check gssapi
'for GSSAPI in libgssapi' \
562 #define GSSAPI_REG_INCLUDE' '-lgssapi' || \
563 <$tmp3.c link_check gssapi \
564 'for GSSAPI in libgssapi, OpenBSD-style' \
566 #define GSSAPI_REG_INCLUDE' \
567 '-lgssapi -lkrb5 -lcrypto' '-I/usr/include/kerberosV'
569 #include <gssapi/gssapi.h>
570 #include <gssapi/gssapi_generic.h>
574 gss_import_name
(0, 0, gss_nt_service_name
, 0);
575 gss_init_sec_context
(0,0,0,0,0,0,0,0,0,0,0,0,0);
581 echo '/* IMAP/GSSAPI support not desired */' >> $out
584 if wantfeat JUNK
; then
585 echo "#define USE_JUNK" >> $out
587 echo "/* #define USE_JUNK */" >> $out
590 if wantfeat MD5
; then
591 echo "#define USE_MD5" >> $out
593 echo "/* #define USE_MD5 */" >> $out
596 if wantfeat ASSERTS
; then
597 echo "#define HAVE_ASSERTS" >> $out
599 echo "/* #define HAVE_ASSERTS */" >> $out
602 # Since we cat(1) the content of those to cc/"ld", convert them to single line
604 < "${1}" > "${2}" awk \
605 'BEGIN {ORS = " "} /^[^#]/ {print} {next} END {ORS = ""; print "\n"}'
608 squeeze_em
"$inc" "$tmp"
610 squeeze_em
"$lib" "$tmp"
616 #ifdef HAVE_NL_LANGINFO
617 #include <langinfo.h>
620 :The following optional features are enabled
:
621 #ifdef HAVE_SETLOCALE
622 : + Locale support
: Printable characters depend on the environment
623 #if defined (HAVE_MBTOWC) && defined (HAVE_WCTYPE_H)
624 : + Multibyte character support
626 #endif /* HAVE_SETLOCALE */
628 : + Character
set conversion using
iconv()
630 #if defined (HAVE_SETLOCALE) && defined (HAVE_NL_LANGINFO) && defined (CODESET)
631 : + Automatic detection of terminal character
set
637 : + Support
for Internet Protocol v6
(IPv6
)
640 : + S
/MIME and SSL
/TLS using Network Security Services
(NSS
)
643 : + S
/MIME and SSL
/TLS using OpenSSL
649 : + IMAP GSSAPI authentication
658 : + Junk-mail management
(Bayesian filtering
)
661 : + The MD5 message digest
664 :The following optional features are disabled
:
665 #ifndef HAVE_SETLOCALE
666 : - Locale support
: Only ASCII characters are recognized
668 #if !defined (HAVE_SETLOCALE) || !defined (HAVE_MBTOWC) || \
669 !defined
(HAVE_WCTYPE_H
)
670 : - Multibyte character support
673 : - Character
set conversion using
iconv()
675 #if !defined (HAVE_SETLOCALE) || !defined (HAVE_NL_LANGINFO) || \
677 : - Automatic detection of terminal character
set
683 : - Support
for Internet Protocol v6
(IPv6
)
685 #if ! defined USE_SSL && ! defined USE_NSS
686 : - SSL
/TLS
(network transport authentication and encryption
)
692 : - IMAP GSSAPI authentication
701 : - Junk-mail management
(Bayesian filtering
)
704 : - The MD5 message digest
708 #ifndef HAVE_SNPRINTF
709 : * The
function snprintf
() could not be found. mailx will be compiled to use
710 : sprintf
() instead. This might overflow buffers
if input values are larger
711 : than expected. Use the resulting binary with care or update your system
712 : environment and start the configuration process again.
715 : * The
function fchdir
() could not be found. mailx will be compiled to use
716 : chdir
() instead. This is not a problem unless the current working
717 : directory of mailx is moved
while the IMAP cache is used.
720 : * A
(usable
) getopt
() functionality could not be found.
721 : A
builtin version is used instead.
724 : * WANT_ASSERTS is enabled
, the program binary will contain code assertions.
725 : Such a binary is not meant to be used by end-users
, but only
for
726 : development purposes. Thanks
!
731 $make -f $makefile $tmp2.x
732 < $tmp2.x
>&5 sed '/^[^:]/d; /^$/d; s/^://'