Convert from utmp functions to utmpx functions (which are in POSIX).
[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_SUBST(EXEEXT)dnl
222
223 AC_CACHE_CHECK(whether preprocessor supports -Wunused-macros,
224   nmh_cv_has_unusedmacros,
225   [nmh_saved_cppflags="$CPPFLAGS"
226    CPPFLAGS="$CPPFLAGS -Wunused-macros -Wno-unused-macros"
227    AC_TRY_COMPILE([],[],nmh_cv_has_unusedmacros=yes,nmh_cv_has_unusedmacros=no)
228    CPPFLAGS="$nmh_saved_cppflags"])
229
230 if test "$nmh_cv_has_unusedmacros" = 'yes'; then
231   test -z "$CPPLAGS"  &&  CPPFLAGS=-Wunused-macros \
232                       ||  CPPFLAGS="$CPPFLAGS -Wunused-macros"
233   DISABLE_UNUSED_MACROS_WARNING=-Wno-unused-macros
234 fi
235 AC_SUBST(DISABLE_UNUSED_MACROS_WARNING)dnl
236
237 AC_CACHE_CHECK(whether compiler supports -Wextra, nmh_cv_wextra,
238 [nmh_saved_cflags="$CFLAGS"
239  CFLAGS="$CFLAGS -Wextra"
240  AC_TRY_COMPILE([],[],nmh_cv_wextra=' -Wextra',echo -n no)
241  CFLAGS="$nmh_saved_cflags"])
242
243 AC_CACHE_CHECK(whether compiler supports -Wno-pointer-sign, nmh_cv_has_noptrsign,
244 [nmh_saved_cflags="$CFLAGS"
245  CFLAGS="$CFLAGS -Wno-pointer-sign"
246  AC_TRY_COMPILE([],[],nmh_cv_has_noptrsign=yes,nmh_cv_has_noptrsign=no)
247  CFLAGS="$nmh_saved_cflags"])
248
249 dnl if the user hasn't specified CFLAGS, then
250 dnl   if compiler is gcc, then
251 dnl     use -O2 and some warning flags
252 dnl   else use -O
253 dnl We use -Wall and -Wextra if supported.  If the compiler supports it we
254 dnl also use -Wno-pointer-sign, because gcc 4 now produces a lot of new
255 dnl warnings which are probably mostly spurious and which in any case we
256 dnl don't want to deal with now.
257 if test "$nmh_cv_has_noptrsign" = "yes"; then
258         nmh_gcc_warnflags="-Wall$nmh_cv_wextra -Wno-pointer-sign"
259 else
260         nmh_gcc_warnflags="-Wall$nmh_cv_wextra"
261 fi
262
263 if test -n "$auto_cflags"; then
264   if test x"$enable_debug" = x"yes"; then
265     if test -n "$GCC"; then
266       test -z "$CFLAGS" && CFLAGS="$nmh_gcc_warnflags -g" || CFLAGS="$CFLAGS $nmh_gcc_warnflags -g"
267     else
268       test -z "$CFLAGS" && CFLAGS=-g || CFLAGS="$CFLAGS -g"
269     fi
270   else
271     if test -z "$LDFLAGS"; then
272       case "$build_os" in
273         darwin*)
274           LDFLAGS=
275           ;;
276         *)
277           LDFLAGS=-s
278           ;;
279       esac
280     fi
281     if test -n "$GCC"; then
282       test -z "$CFLAGS" && CFLAGS="$nmh_gcc_warnflags -O2" || CFLAGS="$CFLAGS $nmh_gcc_warnflags -O2"
283     else
284       test -z "$CFLAGS" && CFLAGS=-O  || CFLAGS="$CFLAGS -O"
285     fi
286   fi
287 fi
288
289 AC_C_CONST              dnl Does compiler support `const'.
290
291 dnl ------------------
292 dnl CHECK FOR PROGRAMS
293 dnl ------------------
294 AC_PROG_MAKE_SET        dnl Does make define $MAKE
295 AC_PROG_INSTALL         dnl Check for BSD compatible `install'
296 AC_PROG_RANLIB          dnl Check for `ranlib'
297 AC_PROG_AWK             dnl Check for mawk,gawk,nawk, then awk
298 AC_PROG_LEX             dnl Check for lex/flex
299
300 dnl Look for `cut'
301 pathtmp=/usr/bin:/bin:/usr/local/bin:/usr/xpg4/bin:/usr/ucb
302 AC_PATH_PROG(cutpath, cut, no, [$pathtmp])
303
304 dnl ----------------------------------------------
305 dnl check for lclint, and lint if it doesn't exist
306 dnl ----------------------------------------------
307 AC_CHECK_PROG(linttmp1, lclint, lclint, no)dnl
308 if test x$ac_cv_prog_linttmp1 != xno ; then
309   LINT=$ac_cv_prog_linttmp1
310   LINTFLAGS="-weak +posixlib -macrovarprefixexclude"
311 else
312   AC_CHECK_PROG(linttmp2, lint, lint, no)dnl
313   if test x$ac_cv_prog_linttmp2 != xno ; then
314     LINT=$ac_cv_prog_linttmp2
315     LINTFLAGS=""
316   else
317     LINT="echo 'No lint program found'"
318     LINTFLAGS=""
319   fi
320 fi
321 AC_SUBST(LINT)dnl
322 AC_SUBST(LINTFLAGS)dnl
323
324 dnl try to figure out which one we've got
325 AC_CHECK_PROG(LIBTOOL, libtool, libtool, , [$pathtmp])
326 NMH_PROG_GNU_LIBTOOL
327
328 dnl Check for lorder and tsort commands
329 AC_CHECK_PROG(LORDER, lorder, lorder, no)dnl
330 AC_CHECK_PROG(TSORT, tsort, tsort, no)dnl
331
332 dnl If either doesn't exist, replace them with echo and cat
333 if test x$ac_cv_prog_LORDER != xlorder -o x$ac_cv_prog_TSORT != xtsort; then
334   LORDER=echo
335   TSORT=cat
336   AC_SUBST(LORDER)dnl
337   AC_SUBST(TSORT)dnl
338 dnl Mac OS X has lorder, but sh is too broken for it to work
339 dnl elif test -z "`lorder config/config.c 2>&1 | grep config/config.c`" ; then
340 dnl   LORDER=echo
341 dnl   TSORT=cat
342 dnl   AC_SUBST(LORDER)dnl
343 dnl   AC_SUBST(TSORT)dnl
344 fi
345
346 dnl Check whether tsort can deal with loops
347 AC_CACHE_CHECK(whether tsort can deal with loops, nmh_cv_tsort_loop,
348   [if test -z "`echo a b b a | tsort 2>/dev/null | grep a`" ; then
349     nmh_cv_tsort_loop=no
350   else
351     nmh_cv_tsort_loop=yes
352   fi])
353 if test x$nmh_cv_tsort_loop = xno ; then
354   LORDER=echo
355   TSORT=cat
356   AC_SUBST(LORDER)dnl
357   AC_SUBST(TSORT)dnl
358 fi
359
360 dnl Look for `ls'
361 pathtmp=/usr/bin:/bin:/usr/local/bin:/usr/xpg4/bin:/usr/ucb
362 AC_PATH_PROG(lspath, ls, no, [$pathtmp])
363
364 dnl See how we get ls to display the owner and the group
365 if test "$lspath" != "no"; then
366   AC_CACHE_CHECK(how to get ls to show us the group ownership of a file,
367                  nmh_cv_ls_grpopt,
368   [if test x"`$lspath -dl / | $AWK '{print $9}'`" = x"/"; then
369     dnl There were 9 parameters, so unless this is a really bizarre, nonstandard
370     dnl ls, it would seem -l gave us both the user and group.  On this type of
371     dnl ls, -g makes _only_ the group be displayed (and not the user).
372     nmh_cv_ls_grpopt="-l"
373   else
374     dnl Looks like -l only gave us the user, so we need -g to get the group too.
375     nmh_cv_ls_grpopt="-lg"
376   fi])
377 fi
378
379 dnl Look for `more'
380 pathtmp=/usr/bin:/bin:/usr/ucb:/usr/local/bin
381 AC_PATH_PROG(morepath, more, no, [$pathtmp])
382
383 dnl If pager is not specified yet,
384 dnl then use `more' as the default.
385 if test -z "$pagerpath"; then
386   pagerpath="$morepath"
387 fi
388 AC_SUBST(pagerpath)dnl
389
390 dnl Look for `sendmail'
391 pathtmp=/usr/lib:/usr/sbin:/usr/etc:/usr/ucblib:/usr/bin:/bin
392 AC_PATH_PROG(sendmailpath, sendmail, /usr/sbin/sendmail, [$pathtmp])
393
394 dnl Look for `vi'
395 pathtmp=/usr/bin:/bin:/usr/ucb:/usr/local/bin
396 AC_PATH_PROG(vipath, vi, /bin/vi, [$pathtmp])
397
398 dnl If editor is not specified yet,
399 dnl then use `vi' as the default.
400 if test -z "$editorpath"; then
401   editorpath="$vipath"
402 fi
403 AC_SUBST(editorpath)dnl
404
405 dnl ----------------------------------------------------------
406 dnl FIND MAIL SPOOL AND SEE IF WE NEED TO MAKE inc SETGID MAIL
407 dnl ----------------------------------------------------------
408 AC_CACHE_CHECK(where mail spool is located, nmh_cv_mailspool,
409 [for mailspool in /var/mail        dnl
410                   /var/spool/mail  dnl
411                   /usr/spool/mail  dnl
412                   /dev/null;       dnl Just in case we fall through
413 do
414   test -d $mailspool && break
415 done
416 nmh_cv_mailspool=$mailspool
417 ])
418 mailspool=$nmh_cv_mailspool
419 AC_SUBST(mailspool)dnl
420
421 dnl See whether the mail spool directory is world-writable.
422 if test "$lspath" != "no" -a "$cutpath" != "no"; then
423   AC_CACHE_CHECK(whether the mail spool is world-writable,
424                  nmh_cv_mailspool_world_writable,
425   [if test "`$lspath -dlL $mailspool | $cutpath -c9`" = "-"; then
426     nmh_cv_mailspool_world_writable=no
427   else
428     nmh_cv_mailspool_world_writable=yes
429   fi])
430 fi
431
432 dnl Also, check for liblockfile (as found on Debian systems)
433 AC_CHECK_HEADER(lockfile.h, AC_CHECK_LIB(lockfile, lockfile_create) )
434
435 dnl and whether its companion program dotlockfile is setgid
436 AC_PATH_PROG(dotlockfilepath, dotlockfile, no)
437 if test "$ac_cv_lib_lockfile_lockfile_create" != "no" ; then
438   if test "$ac_cv_path_dotlockfilepath" != "no" ; then
439     AC_CACHE_CHECK(whether dotlockfile is setgid, nmh_cv_dotlockfile_setgid,
440     [ if test -g "$ac_cv_path_dotlockfilepath" ; then
441         nmh_cv_dotlockfile_setgid=yes
442       else
443         nmh_cv_dotlockfile_setgid=no
444       fi])
445   fi
446 fi
447
448 dnl If mailspool is not world-writable and dotlockfile is not setgid,
449 dnl we need to #define MAILGROUP to 1 and make inc setgid.
450 if test x"$LOCKTYPE" = x"dot" -a x"$nmh_cv_mailspool_world_writable" = x"no" -a x"$nmh_cv_dotlockfile_setgid" != x"yes" ; then
451   dnl do we really need both of these?
452   AC_DEFINE(MAILGROUP,1,
453     [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
454   SETGID_MAIL=1
455 fi
456 AC_SUBST(SETGID_MAIL)dnl
457
458 dnl Use ls to see which group owns the mail spool directory.
459 AC_CACHE_CHECK(what group owns the mail spool, nmh_cv_ls_mail_grp,
460 [nmh_cv_ls_mail_grp=`$lspath -dL $nmh_cv_ls_grpopt $mailspool|$AWK '{print $4}'`
461 ])
462 MAIL_SPOOL_GRP=$nmh_cv_ls_mail_grp
463 AC_SUBST(MAIL_SPOOL_GRP)dnl
464
465 dnl ------------------
466 dnl CHECK HEADER FILES
467 dnl ------------------
468
469 dnl On glibc we need to define at least the '_XOPEN_SOURCE' level of features,
470 dnl or wchar.h doesn't declare a prototype for wcwidth(). But if we only define
471 dnl that level then db.h won't compile. So we define _GNU_SOURCE which turns
472 dnl on everything. Perhaps other OSes need some feature switch set to get wcwidth()
473 dnl declared; if so they should have an entry added to this case statement.
474 dnl NB that we must define this on the compiler command line, not in config.h,
475 dnl because it must be set before any system header is included and there's no
476 dnl portable way to make sure that files generated by lex include config.h
477 dnl before system header files.
478
479 case "$target_os" in
480   linux*)
481     # Like DEFS, but doesn't get stomped on by configure when using config.h:
482     test -z "$OURDEFS"  &&  OURDEFS="-D_GNU_SOURCE"  \
483                         ||  OURDEFS="$OURDEFS -D_GNU_SOURCE"
484     ;;
485 esac
486 AC_SUBST(OURDEFS)
487
488 AC_HEADER_STDC
489 AC_HEADER_TIOCGWINSZ
490 AC_CHECK_HEADERS(errno.h fcntl.h crypt.h ncurses/termcap.h termcap.h \
491                  langinfo.h wchar.h wctype.h iconv.h netdb.h \
492                  sys/param.h sys/time.h sys/stream.h)
493
494 dnl
495 dnl Checks for _IO_write_ptr. A Linuxism used by nmh on linux. We
496 dnl really use a whole set of them, but this check should be
497 dnl sufficient.
498 dnl
499 AC_CHECK_HEADER(libio.h, [
500   AC_EGREP_HEADER(_IO_write_ptr, libio.h, [
501     AC_DEFINE(LINUX_STDIO,1,[Use the Linux _IO_*_ptr defines from <libio.h>.]) ]) ])
502
503 AC_CHECK_HEADER([sys/ptem.h], AC_DEFINE(WINSIZE_IN_PTEM,1,
504   [Define to 1 if `struct winsize' requires <sys/ptem.h>.]),,
505 [[#if HAVE_SYS_STREAM_H
506 #  include <sys/stream.h>
507 #endif
508 ]])
509
510 dnl ---------------
511 dnl CHECK FUNCTIONS
512 dnl ---------------
513 AC_CHECK_FUNCS(writev lstat nl_langinfo)
514
515 dnl Check for multibyte character set support
516 if test "x$ac_cv_header_wchar_h" = "xyes" -a "x$ac_cv_header_wctype_h" = "xyes" \
517     -a "x$ac_cv_func_wcwidth" = "xyes" -a "x$ac_cv_func_mbtowc" = "xyes"; then
518   AC_DEFINE(MULTIBYTE_SUPPORT, 1,
519     [Define to enable support for multibyte character sets.])
520 fi
521
522 dnl -------------------
523 dnl CHECK FOR LIBRARIES
524 dnl -------------------
525 dnl Check location of modf
526 AC_CHECK_FUNC(modf, , AC_CHECK_LIB(m, modf))
527
528 dnl Checks for network libraries (nsl, socket)
529 AC_CHECK_NETLIBS
530
531 termcap_curses_order="termcap curses ncurses"
532 for lib in $termcap_curses_order; do
533   AC_CHECK_LIB(${lib}, tgetent, [TERMLIB="-l$lib"; break])
534 done
535 AC_SUBST(TERMLIB)dnl
536
537 dnl ---------------
538 dnl CHECK FOR ICONV
539 dnl ---------------
540
541 dnl Find iconv. It may be in libiconv and may be iconv() or libiconv()
542 if test "x$ac_cv_header_iconv_h" = "xyes"; then
543   AC_CHECK_FUNC(iconv, ac_found_iconv=yes, ac_found_iconv=no)
544   if test "x$ac_found_iconv" = "xno"; then
545     AC_CHECK_LIB(iconv, iconv, ac_found_iconv=yes)
546     if test "x$ac_found_iconv" = "xno"; then
547       AC_CHECK_LIB(iconv, libiconv, ac_found_iconv=yes)
548     fi
549     if test "x$ac_found_iconv" != "xno"; then
550       LIBS="-liconv $LIBS"
551     fi
552   else
553     dnl Handle case where there is a native iconv but iconv.h is from libiconv
554     AC_CHECK_DECL(_libiconv_version,
555       [ AC_CHECK_LIB(iconv, libiconv, LIBS="-liconv $LIBS") ],,
556       [ #include <iconv.h> ])
557   fi
558 fi
559 if test "x$ac_found_iconv" = xyes; then
560   AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
561 fi
562
563 dnl Check if iconv uses const in prototype declaration
564 if test "x$ac_found_iconv" = "xyes"; then
565   AC_CACHE_CHECK(for iconv declaration, ac_cv_iconv_const,
566     [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>
567         #include <iconv.h>]],
568         [[#ifdef __cplusplus
569           "C"
570           #endif
571           #if defined(__STDC__) || defined(__cplusplus)
572           size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
573           #else
574           size_t iconv();
575           #endif]])],
576       [ac_cv_iconv_const=],
577       [ac_cv_iconv_const=const])])
578   AC_DEFINE_UNQUOTED([ICONV_CONST], $ac_cv_iconv_const,
579     [Define as const if the declaration of iconv() needs const.])
580 fi
581
582 dnl --------------
583 dnl CHECK FOR NDBM
584 dnl --------------
585
586 AC_ARG_WITH([ndbm],AS_HELP_STRING([--with-ndbm=ARG],[use -lARG to link with ndbm]),
587             [nmh_ndbm=$withval],[nmh_ndbm=autodetect])
588 AC_ARG_WITH([ndbmheader],AS_HELP_STRING([--with-ndbmheader=ARG],[#include <ARG> to use ndbm]),
589             [nmh_ndbmheader=$withval],[nmh_ndbmheader=autodetect])
590
591 if test "$nmh_ndbm" = "autodetect"; then
592   if test "$nmh_ndbmheader" != "autodetect"; then
593     AC_MSG_ERROR([must specify both --with-ndbm and --with-ndbmheader or neither])
594   else
595
596     dnl There are at least four implementations of ndbm, and
597     dnl several of those can be in different places at the whim
598     dnl of the system integrator. A good summary of this mess
599     dnl can be found at http://www.unixpapa.com/incnote/dbm.html
600
601     dnl Classic ndbm with no library required (eg NetBSD): try this
602     dnl first so we don't accidentally link in a pointless but harmless
603     dnl library in one of the later ndbm.h+libfoo tests:
604     NMH_CHECK_NDBM(ndbm.h,,,
605     dnl Berkeley DBv2 emulating ndbm: header in db.h:
606       NMH_CHECK_NDBM(db.h,db,,
607     dnl Berkeley DBv1 emulating ndbm:
608         NMH_CHECK_NDBM(ndbm.h,db,,
609           NMH_CHECK_NDBM(ndbm.h,db1,,
610     dnl Classic ndbm:
611             NMH_CHECK_NDBM(ndbm.h,ndbm,,
612     dnl glibc2.1 systems put db1 in a subdir:
613               NMH_CHECK_NDBM(db1/ndbm.h,db1,,
614     dnl GNU gdbm emulating ndbm, with header possibly in gdbm/
615     dnl and possibly needing gbdm_compat library:
616                 NMH_CHECK_NDBM(gdbm/ndbm.h,gdbm,,
617                   NMH_CHECK_NDBM(gdbm/ndbm.h,gdbm_compat -lgdbm,,
618                     NMH_CHECK_NDBM(ndbm.h,gdbm,,
619                       NMH_CHECK_NDBM(ndbm.h,gdbm_compat -lgdbm))))))))))
620
621   fi
622 else
623   dnl We don't really need to check that the user-specified values work,
624   dnl but it is a convenience to the user to bomb out early rather than
625   dnl after configure and half the compile process.
626   NMH_CHECK_NDBM([$nmh_ndbmheader],[$nmh_ndbm])
627 fi
628
629 if test "$nmh_ndbm_found" = "no"; then
630   AC_MSG_ERROR([could not find a working ndbm library/header combination])
631 else
632   dnl Now export the lib/header to our makefile/config.h:
633   if test x"$nmh_ndbmheader" != x; then
634     AC_DEFINE_UNQUOTED(NDBM_HEADER, <$nmh_ndbmheader>,
635       [Define to the header containing the ndbm API prototypes.])
636   fi
637   if test x"$nmh_ndbm" != x; then
638     NDBM_LIBS="-l$nmh_ndbm"
639   else
640     NDBM_LIBS=
641   fi
642   AC_SUBST(NDBM_LIBS)
643 fi
644
645 dnl ------------------
646 dnl Set RPM build root
647 dnl ------------------
648 dnl nmhrpm is used in the final summary, see below.  The default value is
649 dnl reported there as ./RPM, consistent with the reporting of the default
650 dnl source code location as ., but its absolute path is used in the Makefile.
651 AC_ARG_WITH(rpmdir,
652   AS_HELP_STRING([--with-rpmdir=RPMDIR], [RPM build directory @<:@RPM@:>@]))
653   AS_IF([test x"$with_rpmdir" = x], [rpmdir='$(abs_srcdir)/RPM'; nmhrpm=./RPM],
654           [rpmdir="$with_rpmdir"; eval "nmhrpm=${rpmdir}"])
655 AC_SUBST(rpmdir)
656
657
658 dnl --------------------
659 dnl CHECK FOR CYRUS-SASL
660 dnl --------------------
661
662 AS_IF([test x"$sasl_support" = x"yes"],[
663   AC_CHECK_HEADER([sasl/sasl.h], , [AC_MSG_ERROR([sasl.h not found])])
664   AC_CHECK_LIB([sasl2], [sasl_client_new], ,
665     [AC_MSG_ERROR([Cyrus SASL library not found])])])
666
667 dnl -----------------
668 dnl CHECK FOR OPENSSL
669 dnl -----------------
670
671 AS_IF([test x"$tls_support" = x"yes"],[
672   AC_CHECK_HEADER([openssl/ssl.h], , [AC_MSG_ERROR([openssl/ssl.h not found])])
673   AC_CHECK_LIB([crypto], [BIO_write], ,
674     [AC_MSG_ERROR([OpenSSL crypto library not found])])
675   AC_CHECK_LIB([ssl], [SSL_library_init], ,
676     [AC_MSG_ERROR([OpenSSL library not found])])])
677
678 dnl ---------------------
679 dnl CHECK TERMCAP LIBRARY
680 dnl ---------------------
681
682 dnl Add the termcap library, so that the following configure
683 dnl tests will find it when it tries to link test programs.
684 nmh_save_LIBS="$LIBS"
685 LIBS="$TERMLIB $LIBS"
686
687 dnl Check if tgetent accepts NULL (and will allocate its own termcap buffer)
688 dnl Some termcaps reportedly accept a zero buffer, but then dump core
689 dnl in tgetstr().
690 dnl Under Cygwin test program crashes but exit code is still 0. So,
691 dnl we test for a file that porgram should create
692 AH_TEMPLATE([TGETENT_ACCEPTS_NULL],
693 [Define to 1 if tgetent() accepts NULL as a buffer.])
694 AC_CACHE_CHECK(if tgetent accepts NULL,
695 nmh_cv_func_tgetent_accepts_null,
696 [AC_TRY_RUN([
697 main()
698 {
699     char buf[4096];
700     int r1 = tgetent(buf, "vt100");
701     int r2 = tgetent((char*)0,"vt100");
702     if (r1 >= 0 && r1 == r2) {
703         char tbuf[1024], *u;
704         u = tbuf;
705         tgetstr("cl", &u);
706         creat("conftest.tgetent", 0640);
707     }
708     exit((r1 != r2) || r2 == -1);
709 }
710 ],
711   if test -f conftest.tgetent; then
712     nmh_cv_func_tgetent_accepts_null=yes
713   else
714     nmh_cv_func_tgetent_accepts_null=no
715   fi,
716   nmh_cv_func_tgetent_accepts_null=no,
717   nmh_cv_func_tgetent_accepts_null=no)])
718 if test x$nmh_cv_func_tgetent_accepts_null = xyes; then
719   AC_DEFINE(TGETENT_ACCEPTS_NULL)
720 fi
721 AC_CACHE_CHECK(if tgetent returns 0 on success,
722 nmh_cv_func_tgetent_zero_success,
723 [AC_TRY_RUN([
724 main()
725 {
726     char buf[4096];
727     int r1 = tgetent(buf, "!@#$%^&*");
728     int r2 = tgetent(buf, "vt100");
729     if (r1 < 0 && r2 == 0) {
730         char tbuf[1024], *u;
731         u = tbuf;
732         tgetstr("cl", &u);
733         creat("conftest.tgetent0", 0640);
734     }
735     exit(r1 == r2);
736 }
737 ],
738   if test -f conftest.tgetent0; then
739     nmh_cv_func_tgetent_zero_success=yes
740   else
741     nmh_cv_func_tgetent_zero_success=no
742   fi,
743   nmh_cv_func_tgetent_zero_success=no,
744   nmh_cv_func_tgetent_zero_success=no)])
745 AH_TEMPLATE([TGETENT_SUCCESS],
746 [Define to what tgetent() returns on success (0 on HP-UX X/Open curses).])
747 if test x$nmh_cv_func_tgetent_zero_success = xyes; then
748   AC_DEFINE(TGETENT_SUCCESS, 0)
749 else
750   AC_DEFINE(TGETENT_SUCCESS, 1)
751 fi
752
753 dnl Now put the libraries back to what it was before we
754 dnl starting checking the termcap library.
755 LIBS="$nmh_save_LIBS"
756
757 dnl --------------
758 dnl CHECK TYPEDEFS
759 dnl --------------
760 AC_TYPE_PID_T
761 AC_TYPE_OFF_T
762 AC_TYPE_UID_T
763 AC_TYPE_MODE_T
764 AC_TYPE_SIZE_T
765
766 dnl ----------------
767 dnl CHECK STRUCTURES
768 dnl ----------------
769
770 AC_STRUCT_DIRENT_D_TYPE
771
772 dnl Where is <signal.h> located?  Needed as input for signames.awk
773 AC_CACHE_CHECK(where signal.h is located, nmh_cv_path_signal_h,
774 [for SIGNAL_H in /usr/include/bsd/sys/signal.h  dnl Next
775                  /usr/include/asm/signal.h      dnl Linux 1.3.0 and above
776                  /usr/include/asm/signum.h      dnl some versions of Linux/Alpha
777                  /usr/include/linux/signal.h    dnl Linux up to 1.2.11
778                  /usr/include/sys/signal.h      dnl Almost everybody else
779                  /dev/null;                     dnl Just in case we fall through
780 do
781   test -f $SIGNAL_H && \
782   grep '#[      ]*define[       ][      ]*SIG[0-9A-Z]*[         ]*[0-9][0-9]*' $SIGNAL_H > /dev/null && \
783   break
784 done
785 nmh_cv_path_signal_h=$SIGNAL_H
786 ])
787 SIGNAL_H=$nmh_cv_path_signal_h
788 AC_SUBST(SIGNAL_H)dnl
789
790 dnl ----------------
791 dnl OUTPUT MAKEFILES
792 dnl ----------------
793 AC_CONFIG_FILES(Makefile config/Makefile h/Makefile sbr/Makefile uip/Makefile \
794                 mts/Makefile mts/smtp/Makefile \
795                 etc/Makefile docs/Makefile man/Makefile)
796 AC_CONFIG_COMMANDS([stamp],[test -z "$CONFIG_HEADERS" || echo > stamp-h])
797 AC_OUTPUT
798
799 dnl These odd looking assignments are done to expand out unexpanded
800 dnl variables in bindir et al (for instance mandir is '${datarootdir}/man',
801 dnl but expanding that gives '${prefix}/share/man', so we need to expand
802 dnl again to get the final answer.
803 dnl We only use the expanded versions to print the install paths in
804 dnl the final summary and should use them nowhere else (see the autoconf
805 dnl docs for the rationale for bindir etc being unexpanded).
806 eval "nmhbin=${bindir}";         eval "nmhbin=${nmhbin}"
807 eval "nmhsysconf=${sysconfdir}"; eval "nmhsysconf=${nmhsysconf}"
808 eval "nmhlib=${libdir}";         eval "nmhlib=${nmhlib}"
809 eval "nmhman=${mandir}";         eval "nmhman=${nmhman}"
810 eval "nmhrpm=${nmhrpm}";
811
812 pop_kinds=no
813 if test x"$enable_pop" = x"yes"; then
814   pop_kinds="yes ("
815
816   if test x"$enable_apop" = x"yes"; then
817     pop_kinds="${pop_kinds}APOP "
818   fi
819
820   pop_kinds="${pop_kinds}POP3)"
821 fi
822
823 echo "
824 nmh configuration
825 -----------------
826 nmh version                : AC_PACKAGE_VERSION
827 target os                  : ${target}
828 compiler                   : ${CC}
829 compiler flags             : ${CFLAGS}
830 linker flags               : ${LDFLAGS}
831 definitions                : ${OURDEFS}
832 source code location       : ${srcdir}
833 binary install path        : ${nmhbin}
834 library install path       : ${nmhlib}
835 config files install path  : ${nmhsysconf}
836 man page install path      : ${nmhman}
837 RPM build root             : ${nmhrpm}
838 backup prefix              : ${backup_prefix}
839 transport system           : ${MTS}
840 file locking type          : ${LOCKTYPE}
841 default smtp servers       : ${smtpservers}
842 default editor             : ${editorpath}
843 default pager              : ${pagerpath}
844 email address masquerading : ${masquerade}
845 pop is enabled             : ${pop_kinds}
846 SASL support               : ${sasl_support}
847 TLS support                : ${tls_support}"
848 echo ""