Added -Wunused-macros with gcc, if supported. Added -Wno-unused-macros,
[mmh] / configure.ac
1 dnl
2 dnl configure.ac -- autoconf template for nmh
3 dnl
4
5 dnl Move this up a bit
6 AC_PREREQ(2.61)
7
8 AC_INIT(nmh, m4_normalize(m4_include([VERSION])))
9 AC_CONFIG_SRCDIR(h/nmh.h)
10 AC_CONFIG_HEADER(config.h)
11
12 AC_CANONICAL_TARGET
13
14 dnl ---------------------
15 dnl define a macro or two
16 dnl ---------------------
17
18 AC_DEFUN(NMH_PROG_GNU_LIBTOOL, [
19 if test -n "$LIBTOOL" ; then
20   tmptest=`$LIBTOOL --version 2>&1 | grep GNU`
21   if test x"$tmptest" != x  ; then
22     GNU_LIBTOOL=1
23     AC_SUBST(GNU_LIBTOOL)dnl
24   fi
25 fi
26 ] )
27   
28 echo "configuring for AC_PACKAGE_NAME-AC_PACKAGE_VERSION"
29 AC_SUBST(VERSION,AC_PACKAGE_VERSION)dnl
30
31 dnl What date of nmh are we building?
32 DATE=`cat ${srcdir}/DATE`
33 echo "configuring for nmh dated $DATE"
34 AC_SUBST(DATE)dnl
35
36 dnl --------------------------
37 dnl CHECK COMMAND LINE OPTIONS
38 dnl --------------------------
39
40 dnl Do you want to debug nmh?
41 AC_ARG_ENABLE(debug,
42   AS_HELP_STRING([--enable-debug],[enable nmh code debugging]))
43 dnl The old redundant --enable-nmh-debug is deprecated and undocumented.
44 if test x"$enable_nmh_debug" = x"yes"; then
45   enable_debug=yes
46 fi
47
48 dnl Allow users to send email from addresses other than their default?
49 AC_ARG_ENABLE(masquerade,
50   AS_HELP_STRING([--enable-masquerade='draft_from mmailid username_extension'],
51     [enable up to 3 types of address masquerading]),
52   [if test x"$enable_masquerade" = x"yes"; then
53     masquerade="draft_from mmailid username_extension"
54   else
55     masquerade="$enable_masquerade"
56   fi], [masquerade="draft_from mmailid username_extension"])
57 AC_SUBST(masquerade)dnl
58
59 dnl Do you want client-side support for pop?
60 AC_ARG_ENABLE(pop,
61   AS_HELP_STRING([--enable-pop], [enable client-side support for plain POP3]))
62 dnl The old redundant --enable-nmh-pop is deprecated and undocumented.
63 if test x"$enable_nmh_pop" = x"yes"; then
64   enable_pop=yes
65 fi
66
67 dnl Do you want to disable use of locale functions
68 AH_TEMPLATE([LOCALE],
69 [Undefine if you don't want locale features.  By default this is defined.])
70 AC_ARG_ENABLE([locale],
71 AC_HELP_STRING([--disable-locale], [turn off locale features]),
72 [if test x$enableval = xyes; then
73   AC_DEFINE(LOCALE)
74 fi],
75 AC_DEFINE(LOCALE)
76 )
77
78 dnl Do you want client-side support for using SASL for authentication?
79 dnl Note that this code will be enabled for both POP and SMTP
80 AC_ARG_WITH(cyrus-sasl, AS_HELP_STRING([--with-cyrus-sasl],
81   [Enable SASL support via the Cyrus SASL library]))
82 if test x"$with_cyrus_sasl" != x -a x"$with_cyrus_sasl" != x"no"; then
83   AC_DEFINE(CYRUS_SASL, 1,
84     [Define to use the Cyrus SASL library for authentication of POP and SMTP.])dnl
85   if test x"$with_cyrus_sasl" != xyes; then
86     AC_MSG_WARN([Arguments to --with-cyrus-sasl now ignored])
87     AC_MSG_WARN([Please pass the appropriate arguments to CPPFLAGS/LDFLAGS])
88   fi
89   sasl_support=yes
90 else
91   sasl_support=no
92 fi
93
94 dnl Do you want client-side support for encryption with TLS?
95 AC_ARG_WITH(tls, AS_HELP_STRING([--with-tls], [Enable TLS support]))
96 if test x"$with_tls" != x -a x"$with_tls" != x"no"; then
97   AC_DEFINE(TLS_SUPPORT, 1, [Support TLS for session encryption.])dnl
98   tls_support=yes
99 else
100   tls_support=no
101 fi
102
103 dnl What should be the default editor?
104 AC_ARG_WITH(editor,
105   AS_HELP_STRING([--with-editor=EDITOR],[specify the default editor]))
106
107 if test -n "$with_editor"; then
108   editorpath="$with_editor"
109 fi
110
111 dnl Set the backup prefix
112 AC_ARG_WITH([hash-backup],
113   AS_HELP_STRING([--with-hash-backup],[use # as the backup prefix (default: ,)]))
114 if test x"$with_hash_backup" != x -a x"$with_hash_backup" != x"no"; then
115   backup_prefix="#"
116 else
117   backup_prefix=","
118 fi
119 AC_DEFINE_UNQUOTED(BACKUP_PREFIX, "$backup_prefix",
120     [The prefix that is prepended to the name of message files when they are "removed" by rmm. This should typically be `,' or `#'.])dnl
121
122 dnl After we know if we're including apop and kpop support, do pop stuff
123 if test x"$enable_pop" = x"yes"; then
124   AC_DEFINE(POP, 1,
125     [Define this to compile client-side support for pop into inc and msgchk.])dnl
126   POPLIB=popsbr.o
127   POPSED='/^%nmhbeginpop%/d;/^%nmhendpop%/d'
128 else
129   POPSED='/^%nmhbeginpop%/,/^%nmhendpop%/d'
130 fi
131 AC_SUBST(POPLIB)dnl
132 AC_SUBST(POPSED)dnl
133
134 dnl What method of locking to use?
135 AC_ARG_WITH(locking,
136   AS_HELP_STRING([--with-locking=@<:@dot|fcntl|flock|lockf@:>@],
137   [specify the file locking method]))
138
139 if test x"$with_locking" = x"dot"; then
140   LOCKTYPE="dot"
141   AC_DEFINE(DOT_LOCKING, 1, [Define to use dot based file locking.])dnl
142 elif test x"$with_locking" = x"flock"; then
143   LOCKTYPE="flock"
144   AC_DEFINE(FLOCK_LOCKING, 1, [Define to use flock() based locking.])dnl
145 elif test x"$with_locking" = x"lockf"; then
146   LOCKTYPE="lockf"
147   AC_DEFINE(LOCKF_LOCKING, 1, [Define to use lockf() based locking.])dnl
148 elif test x"$with_locking" = x"fcntl"; then
149   LOCKTYPE="fcntl"
150   AC_DEFINE(FCNTL_LOCKING, 1, [Define to use fnctl() based locking.])dnl
151 else
152   LOCKTYPE="dot"
153   AC_DEFINE(DOT_LOCKING)dnl
154 fi
155
156 dnl Should we use a locking directory?
157 AC_ARG_ENABLE([lockdir], [
158   AS_HELP_STRING([--enable-lockdir=dir], [Store dot-lock files in "dir"])], [
159   AS_IF([test "x$enableval" = xyes],[
160     AC_MSG_ERROR([--enable-lockdir requires an argument])])
161   AS_IF([test "x$LOCKTYPE" != xdot],[
162     AC_MSG_ERROR([Can only use --enable-lockdir with dot locking])])
163   AC_DEFINE_UNQUOTED([LOCKDIR], ["$enableval"],
164                      [Directory to store dot-locking lock files])
165 ])
166
167 dnl What method of posting should post use?
168 AC_ARG_WITH(mts,
169   AS_HELP_STRING([--with-mts=@<:@smtp|sendmail@:>@],
170   [specify the default mail transport agent/service]))
171
172 if test x"$with_mts" = x"smtp"; then
173   MTS="smtp"
174 elif test x"$with_mts" = x"sendmail"; then
175   MTS="sendmail"
176 else
177   MTS="smtp"
178 fi
179 AC_SUBST(MTS)dnl
180
181 dnl Both the smtp and sendmail mail transport services use the smtp code
182 AC_DEFINE(SMTPMTS, 1,
183   [Define if you want SMTP (simple mail transport protocol) support.])dnl
184
185 dnl What should be the default pager?
186 AC_ARG_WITH(pager,
187   AS_HELP_STRING([--with-pager=PAGER],[specify the default pager]))
188
189 if test -n "$with_pager"; then
190   pagerpath="$with_pager"
191 fi
192
193 dnl What should be the default mail server(s)?
194 AC_ARG_WITH(smtpservers,
195   AS_HELP_STRING([--with-smtpservers='SMTPSERVER1@<:@ SMTPSERVER2...@:>@'],
196   [specify the default SMTP server(s) @<:@localhost@:>@]))
197 if test -n "$with_smtpservers"; then
198   smtpservers="$with_smtpservers"
199 else
200   smtpservers="localhost"
201 fi
202 AC_SUBST(smtpservers)dnl
203
204 dnl ----------------------------------------------------
205 dnl Default location is /usr/local/nmh/{bin,etc,lib,man}
206 dnl ----------------------------------------------------
207 AC_PREFIX_DEFAULT(/usr/local/nmh)
208
209 dnl ------------------
210 dnl CHECK THE COMPILER
211 dnl ------------------
212 dnl We want these before the checks,
213 dnl so the checks can modify their values.
214 test -z "$CFLAGS" && CFLAGS= auto_cflags=1
215 if test x"$enable_debug" = x"yes"; then
216   test -z "$LDFLAGS" && LDFLAGS=-g
217 fi
218
219 AC_PROG_CC
220
221 AC_CACHE_CHECK(whether preprocessor supports -Wunused-macros,
222   nmh_cv_has_unusedmacros,
223   [nmh_saved_cppflags="$CPPFLAGS"
224    CPPFLAGS="$CPPFLAGS -Wunused-macros -Wno-unused-macros"
225    AC_TRY_COMPILE([],[],nmh_cv_has_unusedmacros=yes,nmh_cv_has_unusedmacros=no)
226    CPPFLAGS="$nmh_saved_cppflags"])
227
228 if test "$nmh_cv_has_unusedmacros" = 'yes'; then
229   test -z "$CPPLAGS"  &&  CPPFLAGS=-Wunused-macros \
230                       ||  CPPFLAGS="$CPPFLAGS -Wunused-macros"
231   DISABLE_UNUSED_MACROS_WARNING=-Wno-unused-macros
232 fi
233 AC_SUBST(DISABLE_UNUSED_MACROS_WARNING)dnl
234
235 AC_CACHE_CHECK(whether compiler supports -Wno-pointer-sign, nmh_cv_has_noptrsign,
236 [nmh_saved_cflags="$CFLAGS"
237  CFLAGS="$CFLAGS -Wno-pointer-sign"
238  AC_TRY_COMPILE([],[],nmh_cv_has_noptrsign=yes,nmh_cv_has_noptrsign=no)
239  CFLAGS="$nmh_saved_cflags"])
240
241 dnl if the user hasn't specified CFLAGS, then
242 dnl   if compiler is gcc, then
243 dnl     use -O2 and some warning flags
244 dnl   else use -O
245 dnl We use -Wall; if the compiler supports it we also use -Wno-pointer-sign,
246 dnl because gcc 4 now produces a lot of new warnings which are probably mostly
247 dnl spurious and which in any case we don't want to deal with now.
248 if test "$nmh_cv_has_noptrsign" = "yes"; then
249         nmh_gcc_warnflags="-Wall -Wno-pointer-sign"
250 else
251         nmh_gcc_warnflags="-Wall"
252 fi
253
254 if test -n "$auto_cflags"; then
255   if test x"$enable_debug" = x"yes"; then
256     if test -n "$GCC"; then
257       test -z "$CFLAGS" && CFLAGS="$nmh_gcc_warnflags -g" || CFLAGS="$CFLAGS $nmh_gcc_warnflags -g"
258     else
259       test -z "$CFLAGS" && CFLAGS=-g || CFLAGS="$CFLAGS -g"
260     fi
261   else
262     if test -z "$LDFLAGS"; then
263       case "$build_os" in
264         darwin*)
265           LDFLAGS=
266           ;;
267         *)
268           LDFLAGS=-s
269           ;;
270       esac
271     fi
272     if test -n "$GCC"; then
273       test -z "$CFLAGS" && CFLAGS="$nmh_gcc_warnflags -O2" || CFLAGS="$CFLAGS $nmh_gcc_warnflags -O2"
274     else
275       test -z "$CFLAGS" && CFLAGS=-O  || CFLAGS="$CFLAGS -O"
276     fi
277   fi
278 fi
279
280 AC_C_CONST              dnl Does compiler support `const'.
281
282 dnl ------------------
283 dnl CHECK FOR PROGRAMS
284 dnl ------------------
285 AC_PROG_MAKE_SET        dnl Does make define $MAKE
286 AC_PROG_INSTALL         dnl Check for BSD compatible `install'
287 AC_PROG_RANLIB          dnl Check for `ranlib'
288 AC_PROG_AWK             dnl Check for mawk,gawk,nawk, then awk
289 AC_PROG_LEX             dnl Check for lex/flex
290
291 dnl Look for `cut'
292 pathtmp=/usr/bin:/bin:/usr/local/bin:/usr/xpg4/bin:/usr/ucb
293 AC_PATH_PROG(cutpath, cut, no, [$pathtmp])
294
295 dnl ----------------------------------------------
296 dnl check for lclint, and lint if it doesn't exist
297 dnl ----------------------------------------------
298 AC_CHECK_PROG(linttmp1, lclint, lclint, no)dnl
299 if test x$ac_cv_prog_linttmp1 != xno ; then
300   LINT=$ac_cv_prog_linttmp1
301   LINTFLAGS="-weak +posixlib -macrovarprefixexclude"
302 else
303   AC_CHECK_PROG(linttmp2, lint, lint, no)dnl
304   if test x$ac_cv_prog_linttmp2 != xno ; then
305     LINT=$ac_cv_prog_linttmp2
306     LINTFLAGS=""
307   else
308     LINT="echo 'No lint program found'"
309     LINTFLAGS=""
310   fi
311 fi
312 AC_SUBST(LINT)dnl
313 AC_SUBST(LINTFLAGS)dnl
314
315 dnl try to figure out which one we've got
316 AC_CHECK_PROG(LIBTOOL, libtool, libtool, , [$pathtmp])
317 NMH_PROG_GNU_LIBTOOL
318
319 dnl Check for lorder and tsort commands
320 AC_CHECK_PROG(LORDER, lorder, lorder, no)dnl
321 AC_CHECK_PROG(TSORT, tsort, tsort, no)dnl
322
323 dnl If either doesn't exist, replace them with echo and cat
324 if test x$ac_cv_prog_LORDER != xlorder -o x$ac_cv_prog_TSORT != xtsort; then
325   LORDER=echo
326   TSORT=cat
327   AC_SUBST(LORDER)dnl
328   AC_SUBST(TSORT)dnl
329 dnl Mac OS X has lorder, but sh is too broken for it to work
330 dnl elif test -z "`lorder config/config.c 2>&1 | grep config/config.c`" ; then
331 dnl   LORDER=echo
332 dnl   TSORT=cat
333 dnl   AC_SUBST(LORDER)dnl
334 dnl   AC_SUBST(TSORT)dnl
335 fi
336
337 dnl Check whether tsort can deal with loops
338 AC_CACHE_CHECK(whether tsort can deal with loops, nmh_cv_tsort_loop,
339   [if test -z "`echo a b b a | tsort 2>/dev/null | grep a`" ; then
340     nmh_cv_tsort_loop=no
341   else
342     nmh_cv_tsort_loop=yes
343   fi])
344 if test x$nmh_cv_tsort_loop = xno ; then
345   LORDER=echo
346   TSORT=cat
347   AC_SUBST(LORDER)dnl
348   AC_SUBST(TSORT)dnl
349 fi
350
351 dnl Look for `ls'
352 pathtmp=/usr/bin:/bin:/usr/local/bin:/usr/xpg4/bin:/usr/ucb
353 AC_PATH_PROG(lspath, ls, no, [$pathtmp])
354
355 dnl See how we get ls to display the owner and the group
356 if test "$lspath" != "no"; then
357   AC_CACHE_CHECK(how to get ls to show us the group ownership of a file, 
358                  nmh_cv_ls_grpopt,
359   [if test x"`$lspath -dl / | $AWK '{print $9}'`" = x"/"; then
360     dnl There were 9 parameters, so unless this is a really bizarre, nonstandard
361     dnl ls, it would seem -l gave us both the user and group.  On this type of
362     dnl ls, -g makes _only_ the group be displayed (and not the user).
363     nmh_cv_ls_grpopt="-l"
364   else
365     dnl Looks like -l only gave us the user, so we need -g to get the group too.
366     nmh_cv_ls_grpopt="-lg"
367   fi])
368 fi
369
370 dnl Look for `more'
371 pathtmp=/usr/bin:/bin:/usr/ucb:/usr/local/bin
372 AC_PATH_PROG(morepath, more, no, [$pathtmp])
373
374 dnl If pager is not specified yet,
375 dnl then use `more' as the default.
376 if test -z "$pagerpath"; then
377   pagerpath="$morepath"
378 fi
379 AC_SUBST(pagerpath)dnl
380
381 dnl Look for `sendmail'
382 pathtmp=/usr/lib:/usr/sbin:/usr/etc:/usr/ucblib:/usr/bin:/bin
383 AC_PATH_PROG(sendmailpath, sendmail, /usr/sbin/sendmail, [$pathtmp])
384
385 dnl Look for `vi'
386 pathtmp=/usr/bin:/bin:/usr/ucb:/usr/local/bin
387 AC_PATH_PROG(vipath, vi, /bin/vi, [$pathtmp])
388
389 dnl If editor is not specified yet,
390 dnl then use `vi' as the default.
391 if test -z "$editorpath"; then
392   editorpath="$vipath"
393 fi
394 AC_SUBST(editorpath)dnl
395
396 dnl ----------------------------------------------------------
397 dnl FIND MAIL SPOOL AND SEE IF WE NEED TO MAKE inc SETGID MAIL
398 dnl ----------------------------------------------------------
399 AC_CACHE_CHECK(where mail spool is located, nmh_cv_mailspool,
400 [for mailspool in /var/mail        dnl
401                   /var/spool/mail  dnl
402                   /usr/spool/mail  dnl
403                   /dev/null;       dnl Just in case we fall through
404 do
405   test -d $mailspool && break
406 done
407 nmh_cv_mailspool=$mailspool
408 ])
409 mailspool=$nmh_cv_mailspool
410 AC_SUBST(mailspool)dnl
411
412 dnl See whether the mail spool directory is world-writable.
413 if test "$lspath" != "no" -a "$cutpath" != "no"; then
414   AC_CACHE_CHECK(whether the mail spool is world-writable, 
415                  nmh_cv_mailspool_world_writable,
416   [if test "`$lspath -dlL $mailspool | $cutpath -c9`" = "-"; then
417     nmh_cv_mailspool_world_writable=no
418   else
419     nmh_cv_mailspool_world_writable=yes
420   fi])
421 fi
422
423 dnl Also, check for liblockfile (as found on Debian systems)
424 AC_CHECK_HEADER(lockfile.h, AC_CHECK_LIB(lockfile, lockfile_create) )
425
426 dnl and whether its companion program dotlockfile is setgid
427 AC_PATH_PROG(dotlockfilepath, dotlockfile, no)
428 if test "$ac_cv_lib_lockfile_lockfile_create" != "no" ; then
429   if test "$ac_cv_path_dotlockfilepath" != "no" ; then
430     AC_CACHE_CHECK(whether dotlockfile is setgid, nmh_cv_dotlockfile_setgid,
431     [ if test -g "$ac_cv_path_dotlockfilepath" ; then
432         nmh_cv_dotlockfile_setgid=yes
433       else
434         nmh_cv_dotlockfile_setgid=no
435       fi])
436   fi
437 fi
438
439 dnl If mailspool is not world-writable and dotlockfile is not setgid,
440 dnl we need to #define MAILGROUP to 1 and make inc setgid.
441 if test x"$LOCKTYPE" = x"dot" -a x"$nmh_cv_mailspool_world_writable" = x"no" -a x"$nmh_cv_dotlockfile_setgid" != x"yes" ; then
442   dnl do we really need both of these?
443   AC_DEFINE(MAILGROUP,1,
444     [Define to 1 if you need to make `inc' set-group-id because your mail spool is not world writable. There are no guarantees as to the safety of doing this, but this #define will add some extra security checks.])dnl
445   SETGID_MAIL=1
446 fi
447 AC_SUBST(SETGID_MAIL)dnl
448
449 dnl Use ls to see which group owns the mail spool directory.
450 AC_CACHE_CHECK(what group owns the mail spool, nmh_cv_ls_mail_grp,
451 [nmh_cv_ls_mail_grp=`$lspath -dL $nmh_cv_ls_grpopt $mailspool|$AWK '{print $4}'`
452 ])
453 MAIL_SPOOL_GRP=$nmh_cv_ls_mail_grp
454 AC_SUBST(MAIL_SPOOL_GRP)dnl
455
456 dnl ------------------
457 dnl CHECK HEADER FILES
458 dnl ------------------
459
460 dnl On glibc we need to define at least the '_XOPEN_SOURCE' level of features,
461 dnl or wchar.h doesn't declare a prototype for wcwidth(). But if we only define
462 dnl that level then db.h won't compile. So we define _GNU_SOURCE which turns
463 dnl on everything. Perhaps other OSes need some feature switch set to get wcwidth()
464 dnl declared; if so they should have an entry added to this case statement.
465 dnl NB that we must define this on the compiler command line, not in config.h,
466 dnl because it must be set before any system header is included and there's no
467 dnl portable way to make sure that files generated by lex include config.h
468 dnl before system header files.
469
470 case "$target_os" in
471   linux*)
472     # Like DEFS, but doesn't get stomped on by configure when using config.h:
473     test -z "$OURDEFS"  &&  OURDEFS="-D_GNU_SOURCE"  \
474                         ||  OURDEFS="$OURDEFS -D_GNU_SOURCE"
475     ;;
476 esac
477 AC_SUBST(OURDEFS)
478
479 AC_HEADER_STDC
480 AC_HEADER_TIOCGWINSZ
481 AC_CHECK_HEADERS(errno.h fcntl.h crypt.h termcap.h \
482                  langinfo.h wchar.h wctype.h iconv.h netdb.h \
483                  sys/param.h sys/time.h sys/stream.h)
484  
485 dnl
486 dnl Checks for _IO_write_ptr. A Linuxism used by nmh on linux. We
487 dnl really use a whole set of them, but this check should be
488 dnl sufficient.
489 dnl
490 AC_CHECK_HEADER(libio.h, [
491   AC_EGREP_HEADER(_IO_write_ptr, libio.h, [
492     AC_DEFINE(LINUX_STDIO,1,[Use the Linux _IO_*_ptr defines from <libio.h>.]) ]) ]) 
493
494 AC_CHECK_HEADER([sys/ptem.h], AC_DEFINE(WINSIZE_IN_PTEM,1,
495   [Define to 1 if `struct winsize' requires <sys/ptem.h>.]),,
496 [[#if HAVE_SYS_STREAM_H
497 #  include <sys/stream.h>
498 #endif
499 ]])
500
501 dnl ---------------
502 dnl CHECK FUNCTIONS
503 dnl ---------------
504 AC_CHECK_FUNCS(writev lstat getutent nl_langinfo)
505
506 dnl Check for multibyte character set support
507 if test "x$ac_cv_header_wchar_h" = "xyes" -a "x$ac_cv_header_wctype_h" = "xyes" \
508     -a "x$ac_cv_func_wcwidth" = "xyes" -a "x$ac_cv_func_mbtowc" = "xyes"; then
509   AC_DEFINE(MULTIBYTE_SUPPORT, 1,
510     [Define to enable support for multibyte character sets.])
511 fi
512
513 dnl -------------------
514 dnl CHECK FOR LIBRARIES
515 dnl -------------------
516 dnl Check location of modf
517 AC_CHECK_FUNC(modf, , AC_CHECK_LIB(m, modf))
518
519 dnl Checks for network libraries (nsl, socket)
520 AC_CHECK_NETLIBS
521
522 termcap_curses_order="termcap curses ncurses"
523 for lib in $termcap_curses_order; do
524   AC_CHECK_LIB(${lib}, tgetent, [TERMLIB="-l$lib"; break])
525 done
526 AC_SUBST(TERMLIB)dnl
527
528 dnl ---------------
529 dnl CHECK FOR ICONV
530 dnl ---------------
531
532 dnl Find iconv. It may be in libiconv and may be iconv() or libiconv()
533 if test "x$ac_cv_header_iconv_h" = "xyes"; then
534   AC_CHECK_FUNC(iconv, ac_found_iconv=yes, ac_found_iconv=no)
535   if test "x$ac_found_iconv" = "xno"; then
536     AC_CHECK_LIB(iconv, iconv, ac_found_iconv=yes)
537     if test "x$ac_found_iconv" = "xno"; then
538       AC_CHECK_LIB(iconv, libiconv, ac_found_iconv=yes)
539     fi
540     if test "x$ac_found_iconv" != "xno"; then
541       LIBS="-liconv $LIBS"
542     fi
543   else
544     dnl Handle case where there is a native iconv but iconv.h is from libiconv
545     AC_CHECK_DECL(_libiconv_version,
546       [ AC_CHECK_LIB(iconv, libiconv, LIBS="-liconv $LIBS") ],,
547       [ #include <iconv.h> ])
548   fi
549 fi
550 if test "x$ac_found_iconv" = xyes; then
551   AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
552 fi
553
554 dnl Check if iconv uses const in prototype declaration
555 if test "x$ac_found_iconv" = "xyes"; then
556   AC_CACHE_CHECK(for iconv declaration, ac_cv_iconv_const,
557     [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>
558         #include <iconv.h>]],
559         [[#ifdef __cplusplus
560           "C"
561           #endif
562           #if defined(__STDC__) || defined(__cplusplus)
563           size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
564           #else
565           size_t iconv();
566           #endif]])],
567       [ac_cv_iconv_const=],
568       [ac_cv_iconv_const=const])])
569   AC_DEFINE_UNQUOTED([ICONV_CONST], $ac_cv_iconv_const,
570     [Define as const if the declaration of iconv() needs const.])
571 fi
572
573 dnl --------------
574 dnl CHECK FOR NDBM
575 dnl --------------
576
577 AC_ARG_WITH([ndbm],AS_HELP_STRING([--with-ndbm=ARG],[use -lARG to link with ndbm]),
578             [nmh_ndbm=$withval],[nmh_ndbm=autodetect])
579 AC_ARG_WITH([ndbmheader],AS_HELP_STRING([--with-ndbmheader=ARG],[#include <ARG> to use ndbm]),
580             [nmh_ndbmheader=$withval],[nmh_ndbmheader=autodetect])
581
582 if test "$nmh_ndbm" = "autodetect"; then
583   if test "$nmh_ndbmheader" != "autodetect"; then
584     AC_MSG_ERROR([must specify both --with-ndbm and --with-ndbmheader or neither])
585   else
586
587     dnl There are at least four implementations of ndbm, and
588     dnl several of those can be in different places at the whim
589     dnl of the system integrator. A good summary of this mess
590     dnl can be found at http://www.unixpapa.com/incnote/dbm.html
591
592     dnl Classic ndbm with no library required (eg NetBSD): try this
593     dnl first so we don't accidentally link in a pointless but harmless
594     dnl library in one of the later ndbm.h+libfoo tests:
595     NMH_CHECK_NDBM(ndbm.h,,,
596     dnl Berkeley DBv2 emulating ndbm: header in db.h:
597       NMH_CHECK_NDBM(db.h,db,,
598     dnl Berkeley DBv1 emulating ndbm:
599         NMH_CHECK_NDBM(ndbm.h,db,,
600           NMH_CHECK_NDBM(ndbm.h,db1,,
601     dnl Classic ndbm:
602             NMH_CHECK_NDBM(ndbm.h,ndbm,,
603     dnl glibc2.1 systems put db1 in a subdir:
604               NMH_CHECK_NDBM(db1/ndbm.h,db1,,
605     dnl GNU gdbm emulating ndbm, with header possibly in gdbm/
606     dnl and possibly needing gbdm_compat library:
607                 NMH_CHECK_NDBM(gdbm/ndbm.h,gdbm,,
608                   NMH_CHECK_NDBM(gdbm/ndbm.h,gdbm_compat -lgdbm,,
609                     NMH_CHECK_NDBM(ndbm.h,gdbm,,
610                       NMH_CHECK_NDBM(ndbm.h,gdbm_compat -lgdbm))))))))))
611
612   fi
613 else
614   dnl We don't really need to check that the user-specified values work,
615   dnl but it is a convenience to the user to bomb out early rather than
616   dnl after configure and half the compile process.
617   NMH_CHECK_NDBM([$nmh_ndbmheader],[$nmh_ndbm])
618 fi
619
620 if test "$nmh_ndbm_found" = "no"; then
621   AC_MSG_ERROR([could not find a working ndbm library/header combination])
622 else
623   dnl Now export the lib/header to our makefile/config.h:
624   if test x"$nmh_ndbmheader" != x; then
625     AC_DEFINE_UNQUOTED(NDBM_HEADER, <$nmh_ndbmheader>,
626       [Define to the header containing the ndbm API prototypes.])
627   fi
628   if test x"$nmh_ndbm" != x; then
629     NDBM_LIBS="-l$nmh_ndbm"
630   else
631     NDBM_LIBS=
632   fi
633   AC_SUBST(NDBM_LIBS)
634 fi
635
636 dnl ------------------
637 dnl Set RPM build root
638 dnl ------------------
639 dnl nmhrpm is used in the final summary, see below.  The default value is
640 dnl reported there as ./RPM, consistent with the reporting of the default
641 dnl source code location as ., but its absolute path is used in the Makefile.
642 AC_ARG_WITH(rpmdir,
643   AS_HELP_STRING([--with-rpmdir=RPMDIR], [RPM build directory @<:@RPM@:>@]))
644   AS_IF([test x"$with_rpmdir" = x], [rpmdir='$(abs_srcdir)/RPM'; nmhrpm=./RPM],
645           [rpmdir="$with_rpmdir"; eval "nmhrpm=${rpmdir}"])
646 AC_SUBST(rpmdir)
647
648
649 dnl --------------------
650 dnl CHECK FOR CYRUS-SASL
651 dnl --------------------
652
653 AS_IF([test x"$sasl_support" = x"yes"],[
654   AC_CHECK_HEADER([sasl/sasl.h], , [AC_MSG_ERROR([sasl.h not found])])
655   AC_CHECK_LIB([sasl2], [sasl_client_new], ,
656     [AC_MSG_ERROR([Cyrus SASL library not found])])])
657
658 dnl -----------------
659 dnl CHECK FOR OPENSSL
660 dnl -----------------
661
662 AS_IF([test x"$tls_support" = x"yes"],[
663   AC_CHECK_HEADER([openssl/ssl.h], , [AC_MSG_ERROR([openssl/ssl.h not found])])
664   AC_CHECK_LIB([crypto], [BIO_write], ,
665     [AC_MSG_ERROR([OpenSSL crypto library not found])])
666   AC_CHECK_LIB([ssl], [SSL_library_init], ,
667     [AC_MSG_ERROR([OpenSSL library not found])])])
668
669 dnl ---------------------
670 dnl CHECK TERMCAP LIBRARY
671 dnl ---------------------
672
673 dnl Add the termcap library, so that the following configure
674 dnl tests will find it when it tries to link test programs.
675 nmh_save_LIBS="$LIBS"
676 LIBS="$TERMLIB $LIBS"
677
678 dnl Check if tgetent accepts NULL (and will allocate its own termcap buffer)
679 dnl Some termcaps reportedly accept a zero buffer, but then dump core
680 dnl in tgetstr().
681 dnl Under Cygwin test program crashes but exit code is still 0. So,
682 dnl we test for a file that porgram should create
683 AH_TEMPLATE([TGETENT_ACCEPTS_NULL],
684 [Define to 1 if tgetent() accepts NULL as a buffer.])
685 AC_CACHE_CHECK(if tgetent accepts NULL,
686 nmh_cv_func_tgetent_accepts_null,
687 [AC_TRY_RUN([
688 main()
689 {
690     char buf[4096];
691     int r1 = tgetent(buf, "vt100");
692     int r2 = tgetent((char*)0,"vt100");
693     if (r1 >= 0 && r1 == r2) {
694         char tbuf[1024], *u;
695         u = tbuf;
696         tgetstr("cl", &u);
697         creat("conftest.tgetent", 0640);
698     }
699     exit((r1 != r2) || r2 == -1);
700 }
701 ],
702   if test -f conftest.tgetent; then
703     nmh_cv_func_tgetent_accepts_null=yes
704   else
705     nmh_cv_func_tgetent_accepts_null=no
706   fi,
707   nmh_cv_func_tgetent_accepts_null=no,
708   nmh_cv_func_tgetent_accepts_null=no)])
709 if test x$nmh_cv_func_tgetent_accepts_null = xyes; then
710   AC_DEFINE(TGETENT_ACCEPTS_NULL)
711 fi
712 AC_CACHE_CHECK(if tgetent returns 0 on success,
713 nmh_cv_func_tgetent_zero_success,
714 [AC_TRY_RUN([
715 main()
716 {
717     char buf[4096];
718     int r1 = tgetent(buf, "!@#$%^&*");
719     int r2 = tgetent(buf, "vt100");
720     if (r1 < 0 && r2 == 0) {
721         char tbuf[1024], *u;
722         u = tbuf;
723         tgetstr("cl", &u);
724         creat("conftest.tgetent0", 0640);
725     }
726     exit(r1 == r2);
727 }
728 ],
729   if test -f conftest.tgetent0; then
730     nmh_cv_func_tgetent_zero_success=yes
731   else
732     nmh_cv_func_tgetent_zero_success=no
733   fi,
734   nmh_cv_func_tgetent_zero_success=no,
735   nmh_cv_func_tgetent_zero_success=no)])
736 AH_TEMPLATE([TGETENT_SUCCESS],
737 [Define to what tgetent() returns on success (0 on HP-UX X/Open curses).])
738 if test x$nmh_cv_func_tgetent_zero_success = xyes; then
739   AC_DEFINE(TGETENT_SUCCESS, 0)
740 else
741   AC_DEFINE(TGETENT_SUCCESS, 1)
742 fi
743
744 dnl Now put the libraries back to what it was before we
745 dnl starting checking the termcap library.
746 LIBS="$nmh_save_LIBS"
747
748 dnl --------------
749 dnl CHECK TYPEDEFS
750 dnl --------------
751 AC_TYPE_PID_T
752 AC_TYPE_OFF_T
753 AC_TYPE_UID_T
754 AC_TYPE_MODE_T
755 AC_TYPE_SIZE_T
756
757 dnl ----------------
758 dnl CHECK STRUCTURES
759 dnl ----------------
760
761 AC_CHECK_MEMBERS([struct tm.tm_gmtoff],,,[#include <time.h>])
762 AC_CHECK_MEMBERS(struct utmp.ut_type,,,[#include <utmp.h>])
763
764 AC_STRUCT_DIRENT_D_TYPE
765
766 dnl Where is <signal.h> located?  Needed as input for signames.awk
767 AC_CACHE_CHECK(where signal.h is located, nmh_cv_path_signal_h,
768 [for SIGNAL_H in /usr/include/bsd/sys/signal.h  dnl Next
769                  /usr/include/asm/signal.h      dnl Linux 1.3.0 and above
770                  /usr/include/asm/signum.h      dnl some versions of Linux/Alpha
771                  /usr/include/linux/signal.h    dnl Linux up to 1.2.11
772                  /usr/include/sys/signal.h      dnl Almost everybody else
773                  /dev/null;                     dnl Just in case we fall through
774 do
775   test -f $SIGNAL_H && \
776   grep '#[      ]*define[       ][      ]*SIG[0-9A-Z]*[         ]*[0-9][0-9]*' $SIGNAL_H > /dev/null && \
777   break
778 done
779 nmh_cv_path_signal_h=$SIGNAL_H
780 ])
781 SIGNAL_H=$nmh_cv_path_signal_h
782 AC_SUBST(SIGNAL_H)dnl
783
784 dnl ----------------
785 dnl OUTPUT MAKEFILES
786 dnl ----------------
787 AC_CONFIG_FILES(Makefile config/Makefile h/Makefile sbr/Makefile uip/Makefile \
788                 mts/Makefile mts/smtp/Makefile \
789                 etc/Makefile docs/Makefile man/Makefile)
790 AC_CONFIG_COMMANDS([stamp],[test -z "$CONFIG_HEADERS" || echo > stamp-h])
791 AC_OUTPUT
792
793 dnl These odd looking assignments are done to expand out unexpanded
794 dnl variables in bindir et al (for instance mandir is '${datarootdir}/man',
795 dnl but expanding that gives '${prefix}/share/man', so we need to expand
796 dnl again to get the final answer.
797 dnl We only use the expanded versions to print the install paths in
798 dnl the final summary and should use them nowhere else (see the autoconf
799 dnl docs for the rationale for bindir etc being unexpanded).
800 eval "nmhbin=${bindir}";         eval "nmhbin=${nmhbin}"
801 eval "nmhsysconf=${sysconfdir}"; eval "nmhsysconf=${nmhsysconf}"
802 eval "nmhlib=${libdir}";         eval "nmhlib=${nmhlib}"
803 eval "nmhman=${mandir}";         eval "nmhman=${nmhman}"
804 eval "nmhrpm=${nmhrpm}";
805
806 pop_kinds=no
807 if test x"$enable_pop" = x"yes"; then
808   pop_kinds="yes ("
809
810   if test x"$enable_apop" = x"yes"; then
811     pop_kinds="${pop_kinds}APOP "
812   fi
813
814   pop_kinds="${pop_kinds}POP3)"
815 fi
816
817 echo "
818 nmh configuration
819 -----------------
820 nmh version                : AC_PACKAGE_VERSION
821 target os                  : ${target}
822 compiler                   : ${CC}
823 compiler flags             : ${CFLAGS}
824 linker flags               : ${LDFLAGS}
825 definitions                : ${OURDEFS}
826 source code location       : ${srcdir}
827 binary install path        : ${nmhbin}
828 library install path       : ${nmhlib}
829 config files install path  : ${nmhsysconf}
830 man page install path      : ${nmhman}
831 RPM build root             : ${nmhrpm}
832 backup prefix              : ${backup_prefix}
833 transport system           : ${MTS}
834 file locking type          : ${LOCKTYPE}
835 default smtp servers       : ${smtpservers}
836 default editor             : ${editorpath}
837 default pager              : ${pagerpath}
838 email address masquerading : ${masquerade}
839 pop is enabled             : ${pop_kinds}
840 SASL support               : ${sasl_support}
841 TLS support                : ${tls_support}"
842 echo ""