Renamed configure.in to the more modern name configure.ac
[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(mmh, 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 mhe support?
60 AC_ARG_ENABLE(mhe,
61   AS_HELP_STRING([--disable-mhe],[disable mhe support]))
62
63 dnl mhe support is on by default, so define it unless --disable-mhe or the
64 dnl deprecated, undocumented --disable-nmh-mhe are specified.
65 if test x"$enable_mhe" != x"no" -a x"$enable_nmh_mhe" != x"no"; then
66   AC_DEFINE(MHE, 1,
67     [Define to compile in support for the Emacs front-end mh-e.])dnl
68 fi
69
70 dnl Do you want to disable use of locale functions
71 AH_TEMPLATE([LOCALE],
72 [Undefine if you don't want locale features.  By default this is defined.])
73 AC_ARG_ENABLE([locale],
74 AC_HELP_STRING([--disable-locale], [turn off locale features]),
75 [if test x$enableval = xyes; then
76   AC_DEFINE(LOCALE)
77 fi],
78 AC_DEFINE(LOCALE)
79 )
80
81 dnl What should be the default editor?
82 AC_ARG_WITH(editor,
83   AS_HELP_STRING([--with-editor=EDITOR],[specify the default editor]))
84
85 if test -n "$with_editor"; then
86   editorpath="$with_editor"
87 fi
88
89 dnl Set the backup prefix
90 AC_ARG_WITH([hash-backup],
91   AS_HELP_STRING([--with-hash-backup],[use # as the backup prefix (default: ,)]))
92 if test x"$with_hash_backup" != x -a x"$with_hash_backup" != x"no"; then
93   backup_prefix="#"
94 else
95   backup_prefix=","
96 fi
97 AC_DEFINE_UNQUOTED(BACKUP_PREFIX, "$backup_prefix",
98     [The prefix that is prepended to the name of message files when they are "removed" by rmm. This should typically be `,' or `#'.])dnl
99
100 dnl What method of locking to use?
101 AC_ARG_WITH(locking,
102   AS_HELP_STRING([--with-locking=@<:@dot|fcntl|flock|lockf@:>@],
103   [specify the file locking method]))
104
105 if test x"$with_locking" = x"dot"; then
106   LOCKTYPE="dot"
107   AC_DEFINE(DOT_LOCKING, 1, [Define to use dot based file locking.])dnl
108 elif test x"$with_locking" = x"flock"; then
109   LOCKTYPE="flock"
110   AC_DEFINE(FLOCK_LOCKING, 1, [Define to use flock() based locking.])dnl
111 elif test x"$with_locking" = x"lockf"; then
112   LOCKTYPE="lockf"
113   AC_DEFINE(LOCKF_LOCKING, 1, [Define to use lockf() based locking.])dnl
114 elif test x"$with_locking" = x"fcntl"; then
115   LOCKTYPE="fcntl"
116   AC_DEFINE(FCNTL_LOCKING, 1, [Define to use fnctl() based locking.])dnl
117 else
118   LOCKTYPE="dot"
119   AC_DEFINE(DOT_LOCKING)dnl
120 fi
121
122 dnl What should be the default pager?
123 AC_ARG_WITH(pager,
124   AS_HELP_STRING([--with-pager=PAGER],[specify the default pager]))
125
126 if test -n "$with_pager"; then
127   pagerpath="$with_pager"
128 fi
129
130 dnl ----------------------------------------------------
131 dnl Default location is /usr/local/mmh/{bin,etc,lib,share/man}
132 dnl ----------------------------------------------------
133 AC_PREFIX_DEFAULT(/usr/local/mmh)
134
135
136 dnl ------------------
137 dnl CHECK THE COMPILER
138 dnl ------------------
139 dnl We want these before the checks,
140 dnl so the checks can modify their values.
141 test -z "$CFLAGS" && CFLAGS= auto_cflags=1
142 if test x"$enable_debug" = x"yes"; then
143   test -z "$LDFLAGS" && LDFLAGS=-g
144 fi
145
146 AC_PROG_CC
147
148 AC_CACHE_CHECK(whether compiler supports -Wno-pointer-sign, nmh_cv_has_noptrsign,
149 [nmh_saved_cflags="$CFLAGS"
150  CFLAGS="$CFLAGS -Wno-pointer-sign"
151  AC_TRY_COMPILE([],[],nmh_cv_has_noptrsign=yes,nmh_cv_has_noptrsign=no)
152  CFLAGS="$nmh_saved_cflags"])
153
154 dnl if the user hasn't specified CFLAGS, then
155 dnl   if compiler is gcc, then
156 dnl     use -O2 and some warning flags
157 dnl   else use -O
158 dnl We use -Wall; if the compiler supports it we also use -Wno-pointer-sign,
159 dnl because gcc 4 now produces a lot of new warnings which are probably mostly
160 dnl spurious and which in any case we don't want to deal with now.
161 if test "$nmh_cv_has_noptrsign" = "yes"; then
162         nmh_gcc_warnflags="-Wall -Wno-pointer-sign"
163 else
164         nmh_gcc_warnflags="-Wall"
165 fi
166
167 if test -n "$auto_cflags"; then
168   if test x"$enable_debug" = x"yes"; then
169     if test -n "$GCC"; then
170       test -z "$CFLAGS" && CFLAGS="$nmh_gcc_warnflags -g" || CFLAGS="$CFLAGS $nmh_gcc_warnflags -g"
171     else
172       test -z "$CFLAGS" && CFLAGS=-g || CFLAGS="$CFLAGS -g"
173     fi
174   else
175     if test -z "$LDFLAGS"; then
176       case "$build_os" in
177         darwin*)
178           LDFLAGS=
179           ;;
180         *)
181           LDFLAGS=-s
182           ;;
183       esac
184     fi
185     if test -n "$GCC"; then
186       test -z "$CFLAGS" && CFLAGS="$nmh_gcc_warnflags -O2" || CFLAGS="$CFLAGS $nmh_gcc_warnflags -O2"
187     else
188       test -z "$CFLAGS" && CFLAGS=-O  || CFLAGS="$CFLAGS -O"
189     fi
190   fi
191 fi
192
193 AC_C_CONST              dnl Does compiler support `const'.
194
195 dnl ------------------
196 dnl CHECK FOR PROGRAMS
197 dnl ------------------
198 AC_PROG_MAKE_SET        dnl Does make define $MAKE
199 AC_PROG_INSTALL         dnl Check for BSD compatible `install'
200 AC_PROG_RANLIB          dnl Check for `ranlib'
201 AC_PROG_AWK             dnl Check for mawk,gawk,nawk, then awk
202 AC_PROG_LEX             dnl Check for lex/flex
203
204 dnl Look for `cut'
205 pathtmp=/usr/bin:/bin:/usr/local/bin:/usr/xpg4/bin:/usr/ucb
206 AC_PATH_PROG(cutpath, cut, no, [$pathtmp])
207
208 dnl ----------------------------------------------
209 dnl check for lclint, and lint if it doesn't exist
210 dnl ----------------------------------------------
211 AC_CHECK_PROG(linttmp1, lclint, lclint, no)dnl
212 if test x$ac_cv_prog_linttmp1 != xno ; then
213   LINT=$ac_cv_prog_linttmp1
214   LINTFLAGS="-weak +posixlib -macrovarprefixexclude"
215 else
216   AC_CHECK_PROG(linttmp2, lint, lint, no)dnl
217   if test x$ac_cv_prog_linttmp2 != xno ; then
218     LINT=$ac_cv_prog_linttmp2
219     LINTFLAGS=""
220   else
221     LINT="echo 'No lint program found'"
222     LINTFLAGS=""
223   fi
224 fi
225 AC_SUBST(LINT)dnl
226 AC_SUBST(LINTFLAGS)dnl
227
228 dnl try to figure out which one we've got
229 AC_CHECK_PROG(LIBTOOL, libtool, libtool, , [$pathtmp])
230 NMH_PROG_GNU_LIBTOOL
231
232 dnl Check for lorder and tsort commands
233 AC_CHECK_PROG(LORDER, lorder, lorder, no)dnl
234 AC_CHECK_PROG(TSORT, tsort, tsort, no)dnl
235
236 dnl If either doesn't exist, replace them with echo and cat
237 if test x$ac_cv_prog_LORDER != xlorder -o x$ac_cv_prog_TSORT != xtsort; then
238   LORDER=echo
239   TSORT=cat
240   AC_SUBST(LORDER)dnl
241   AC_SUBST(TSORT)dnl
242 dnl Mac OS X has lorder, but sh is too broken for it to work
243 dnl elif test -z "`lorder config/config.c 2>&1 | grep config/config.c`" ; then
244 dnl   LORDER=echo
245 dnl   TSORT=cat
246 dnl   AC_SUBST(LORDER)dnl
247 dnl   AC_SUBST(TSORT)dnl
248 fi
249
250 dnl Check whether tsort can deal with loops
251 AC_CACHE_CHECK(whether tsort can deal with loops, nmh_cv_tsort_loop,
252   [if test -z "`echo a b b a | tsort 2>/dev/null | grep a`" ; then
253     nmh_cv_tsort_loop=no
254   else
255     nmh_cv_tsort_loop=yes
256   fi])
257 if test x$nmh_cv_tsort_loop = xno ; then
258   LORDER=echo
259   TSORT=cat
260   AC_SUBST(LORDER)dnl
261   AC_SUBST(TSORT)dnl
262 fi
263
264 dnl Look for `ls'
265 pathtmp=/usr/bin:/bin:/usr/local/bin:/usr/xpg4/bin:/usr/ucb
266 AC_PATH_PROG(lspath, ls, no, [$pathtmp])
267
268 dnl See how we get ls to display the owner and the group
269 if test "$lspath" != "no"; then
270   AC_CACHE_CHECK(how to get ls to show us the group ownership of a file, 
271                  nmh_cv_ls_grpopt,
272   [if test x"`$lspath -dl / | $AWK '{print $9}'`" = x"/"; then
273     dnl There were 9 parameters, so unless this is a really bizarre, nonstandard
274     dnl ls, it would seem -l gave us both the user and group.  On this type of
275     dnl ls, -g makes _only_ the group be displayed (and not the user).
276     nmh_cv_ls_grpopt="-l"
277   else
278     dnl Looks like -l only gave us the user, so we need -g to get the group too.
279     nmh_cv_ls_grpopt="-lg"
280   fi])
281 fi
282
283 dnl Look for `more'
284 pathtmp=/usr/bin:/bin:/usr/ucb:/usr/local/bin
285 AC_PATH_PROG(morepath, more, no, [$pathtmp])
286
287 dnl If pager is not specified yet,
288 dnl then use `more' as the default.
289 if test -z "$pagerpath"; then
290   pagerpath="$morepath"
291 fi
292 AC_SUBST(pagerpath)dnl
293
294 dnl Look for `sendmail'
295 pathtmp=/usr/lib:/usr/sbin:/usr/etc:/usr/ucblib:/usr/bin:/bin
296 AC_PATH_PROG(sendmailpath, sendmail, /usr/sbin/sendmail, [$pathtmp])
297
298 dnl Look for `vi'
299 pathtmp=/usr/bin:/bin:/usr/ucb:/usr/local/bin
300 AC_PATH_PROG(vipath, vi, /bin/vi, [$pathtmp])
301
302 dnl If editor is not specified yet,
303 dnl then use `vi' as the default.
304 if test -z "$editorpath"; then
305   editorpath="$vipath"
306 fi
307 AC_SUBST(editorpath)dnl
308
309 dnl ----------------------------------------------------------
310 dnl FIND MAIL SPOOL AND SEE IF WE NEED TO MAKE inc SETGID MAIL
311 dnl ----------------------------------------------------------
312 AC_CACHE_CHECK(where mail spool is located, nmh_cv_mailspool,
313 [for mailspool in /var/mail        dnl
314                   /var/spool/mail  dnl
315                   /usr/spool/mail  dnl
316                   /dev/null;       dnl Just in case we fall through
317 do
318   test -d $mailspool && break
319 done
320 nmh_cv_mailspool=$mailspool
321 ])
322 mailspool=$nmh_cv_mailspool
323 AC_SUBST(mailspool)dnl
324
325 dnl See whether the mail spool directory is world-writable.
326 if test "$lspath" != "no" -a "$cutpath" != "no"; then
327   AC_CACHE_CHECK(whether the mail spool is world-writable, 
328                  nmh_cv_mailspool_world_writable,
329   [if test "`$lspath -dlL $mailspool | $cutpath -c9`" = "-"; then
330     nmh_cv_mailspool_world_writable=no
331   else
332     nmh_cv_mailspool_world_writable=yes
333   fi])
334 fi
335
336 dnl Also, check for liblockfile (as found on Debian systems)
337 AC_CHECK_HEADER(lockfile.h, AC_CHECK_LIB(lockfile, lockfile_create) )
338
339 dnl and whether its companion program dotlockfile is setgid
340 AC_PATH_PROG(dotlockfilepath, dotlockfile, no)
341 if test "$ac_cv_lib_lockfile_lockfile_create" != "no" ; then
342   if test "$ac_cv_path_dotlockfilepath" != "no" ; then
343     AC_CACHE_CHECK(whether dotlockfile is setgid, nmh_cv_dotlockfile_setgid,
344     [ if test -g "$ac_cv_path_dotlockfilepath" ; then
345         nmh_cv_dotlockfile_setgid=yes
346       else
347         nmh_cv_dotlockfile_setgid=no
348       fi])
349   fi
350 fi
351
352 dnl If mailspool is not world-writable and dotlockfile is not setgid,
353 dnl we need to #define MAILGROUP to 1 and make inc setgid.
354 if test x"$LOCKTYPE" = x"dot" -a x"$nmh_cv_mailspool_world_writable" = x"no" -a x"$nmh_cv_dotlockfile_setgid" != x"yes" ; then
355   dnl do we really need both of these?
356   AC_DEFINE(MAILGROUP,1,
357     [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
358   SETGID_MAIL=1
359 fi
360 AC_SUBST(SETGID_MAIL)dnl
361
362 dnl Use ls to see which group owns the mail spool directory.
363 AC_CACHE_CHECK(what group owns the mail spool, nmh_cv_ls_mail_grp,
364 [nmh_cv_ls_mail_grp=`$lspath -dL $nmh_cv_ls_grpopt $mailspool|$AWK '{print $4}'`
365 ])
366 MAIL_SPOOL_GRP=$nmh_cv_ls_mail_grp
367 AC_SUBST(MAIL_SPOOL_GRP)dnl
368
369 dnl ------------------
370 dnl CHECK HEADER FILES
371 dnl ------------------
372
373 dnl On glibc we need to define at least the '_XOPEN_SOURCE' level of features,
374 dnl or wchar.h doesn't declare a prototype for wcwidth(). But if we only define
375 dnl that level then db.h won't compile. So we define _GNU_SOURCE which turns
376 dnl on everything. Perhaps other OSes need some feature switch set to get wcwidth()
377 dnl declared; if so they should have an entry added to this case statement.
378 dnl NB that we must define this on the compiler command line, not in config.h,
379 dnl because it must be set before any system header is included and there's no
380 dnl portable way to make sure that files generated by lex include config.h
381 dnl before system header files.
382
383 case "$target_os" in
384   linux*)
385     # Like DEFS, but doesn't get stomped on by configure when using config.h:
386     OURDEFS="$OURDEFS -D_GNU_SOURCE"
387     ;;
388 esac
389 AC_SUBST(OURDEFS)
390
391 AC_HEADER_DIRENT
392 AC_HEADER_STDC
393 AC_HEADER_TIME
394 AC_HEADER_SYS_WAIT
395 AC_HEADER_STAT
396 AC_HEADER_TIOCGWINSZ
397 AC_CHECK_HEADERS(string.h memory.h stdlib.h unistd.h errno.h fcntl.h \
398                  limits.h crypt.h termcap.h termio.h termios.h locale.h \
399                  langinfo.h wchar.h wctype.h iconv.h netdb.h \
400                  sys/param.h sys/time.h sys/utsname.h sys/stream.h \
401                  arpa/inet.h arpa/ftp.h)
402  
403 dnl
404 dnl Checks for _IO_write_ptr. A Linuxism used by nmh on linux. We
405 dnl really use a whole set of them, but this check should be
406 dnl sufficient.
407 dnl
408 AC_CHECK_HEADER(libio.h, [
409   AC_EGREP_HEADER(_IO_write_ptr, libio.h, [
410     AC_DEFINE(LINUX_STDIO,1,[Use the Linux _IO_*_ptr defines from <libio.h>.]) ]) ]) 
411
412 AC_CHECK_HEADER([sys/ptem.h], AC_DEFINE(WINSIZE_IN_PTEM,1,
413   [Define to 1 if `struct winsize' requires <sys/ptem.h>.]),,
414 [[#if HAVE_SYS_STREAM_H
415 #  include <sys/stream.h>
416 #endif
417 ]])
418
419 dnl ---------------
420 dnl CHECK FUNCTIONS
421 dnl ---------------
422 AC_FUNC_VFORK
423 AC_CHECK_LIB(mkstemp,mkstemp)
424 AC_CHECK_FUNCS(waitpid wait3 sigaction sigprocmask sigblock sigsetmask \
425                sighold sigrelse writev lstat uname tzset killpg mkstemp \
426                getutent nl_langinfo mbtowc wcwidth)
427
428 dnl sigsetjmp may be a macro
429 AC_MSG_CHECKING(for sigsetjmp)
430 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <setjmp.h>]],
431   [[sigsetjmp((void *)0, 0);]])],[AC_DEFINE(HAVE_SIGSETJMP, 1,
432     [Define to 1 if you have the `sigsetjmp'.]) AC_MSG_RESULT(yes)],
433   [AC_MSG_RESULT(no)])
434
435 AC_REPLACE_FUNCS(memmove snprintf strerror strdup)
436
437 dnl Look for the initgroups() declaration.  On AIX 4.[13], Solaris 4.1.3, and
438 dnl ULTRIX 4.2A the function is defined in libc but there's no declaration in
439 dnl any system header.  
440 dnl
441 dnl On Solaris 2.[456], the declaration is in <grp.h>.  On HP-UX 9-11 and
442 dnl (reportedly) FreeBSD 3.[23], it's in <unistd.h>.  Any other locations we
443 dnl need to check?
444 AH_TEMPLATE(INITGROUPS_HEADER, [Define to the header containing the declaration of `initgroups'.])
445 AC_EGREP_HEADER(initgroups, grp.h, AC_DEFINE(INITGROUPS_HEADER, <grp.h>),
446                 AC_EGREP_HEADER(initgroups, unistd.h, 
447                                 AC_DEFINE(INITGROUPS_HEADER, <unistd.h>)))
448
449 dnl On AIX 4.1, snprintf() is defined in libc.a but there's no prototype in
450 dnl <stdio.h> or elsewhere.  Apparently it's not officially supported (though it
451 dnl seems to work perfectly and IBM apparently uses it in internal code).
452 dnl Anyhow, if we omit our own snprintf() and vsnprintf() prototypes when we
453 dnl HAVE_SNPRINTF, we get a billion warnings at compile time.  Use the C
454 dnl preprocessor to preprocess stdio.h and make sure that there's actually a 
455 dnl prototype. 
456 AC_EGREP_HEADER(snprintf, stdio.h, AC_DEFINE(HAVE_SNPRINTF_PROTOTYPE,1,
457   [Define to 1 if <stdio.h> has a prototype for snprintf().]))
458
459 dnl Check for multibyte character set support
460 if test "x$ac_cv_header_wchar_h" = "xyes" -a "x$ac_cv_header_wctype_h" = "xyes" \
461     -a "x$ac_cv_func_wcwidth" = "xyes" -a "x$ac_cv_func_mbtowc" = "xyes"; then
462   AC_DEFINE(MULTIBYTE_SUPPORT, 1,
463     [Define to enable support for multibyte character sets.])
464 fi
465
466 dnl -------------------
467 dnl CHECK FOR LIBRARIES
468 dnl -------------------
469 dnl Check location of modf
470 AC_CHECK_FUNC(modf, , AC_CHECK_LIB(m, modf))
471
472 dnl Checks for network libraries (nsl, socket)
473 AC_CHECK_NETLIBS
474
475 termcap_curses_order="termcap curses ncurses"
476 for lib in $termcap_curses_order; do
477   AC_CHECK_LIB(${lib}, tgetent, [TERMLIB="-l$lib"; break])
478 done
479 AC_SUBST(TERMLIB)dnl
480
481 dnl ---------------
482 dnl CHECK FOR ICONV
483 dnl ---------------
484
485 dnl Find iconv. It may be in libiconv and may be iconv() or libiconv()
486 if test "x$ac_cv_header_iconv_h" = "xyes"; then
487   AC_CHECK_FUNC(iconv, ac_found_iconv=yes, ac_found_iconv=no)
488   if test "x$ac_found_iconv" = "xno"; then
489     AC_CHECK_LIB(iconv, iconv, ac_found_iconv=yes)
490     if test "x$ac_found_iconv" = "xno"; then
491       AC_CHECK_LIB(iconv, libiconv, ac_found_iconv=yes)
492     fi
493     if test "x$ac_found_iconv" != "xno"; then
494       LIBS="-liconv $LIBS"
495     fi
496   else
497     dnl Handle case where there is a native iconv but iconv.h is from libiconv
498     AC_CHECK_DECL(_libiconv_version,
499       [ AC_CHECK_LIB(iconv, libiconv, LIBS="-liconv $LIBS") ],,
500       [ #include <iconv.h> ])
501   fi
502 fi
503 if test "x$ac_found_iconv" = xyes; then
504   AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
505 fi
506
507 dnl Check if iconv uses const in prototype declaration
508 if test "x$ac_found_iconv" = "xyes"; then
509   AC_CACHE_CHECK(for iconv declaration, ac_cv_iconv_const,
510     [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>
511         #include <iconv.h>]],
512         [[#ifdef __cplusplus
513           "C"
514           #endif
515           #if defined(__STDC__) || defined(__cplusplus)
516           size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
517           #else
518           size_t iconv();
519           #endif]])],
520       [ac_cv_iconv_const=],
521       [ac_cv_iconv_const=const])])
522   AC_DEFINE_UNQUOTED([ICONV_CONST], $ac_cv_iconv_const,
523     [Define as const if the declaration of iconv() needs const.])
524 fi
525
526 dnl --------------
527 dnl CHECK FOR NDBM
528 dnl --------------
529
530 AC_ARG_WITH([ndbm],AS_HELP_STRING([--with-ndbm=ARG],[use -lARG to link with ndbm]),
531             [nmh_ndbm=$withval],[nmh_ndbm=autodetect])
532 AC_ARG_WITH([ndbmheader],AS_HELP_STRING([--with-ndbmheader=ARG],[#include <ARG> to use ndbm]),
533             [nmh_ndbmheader=$withval],[nmh_ndbmheader=autodetect])
534
535 if test "$nmh_ndbm" = "autodetect"; then
536   if test "$nmh_ndbmheader" != "autodetect"; then
537     AC_MSG_ERROR([must specify both --with-ndbm and --with-ndbmheader or neither])
538   else
539
540     dnl There are at least four implementations of ndbm, and
541     dnl several of those can be in different places at the whim
542     dnl of the system integrator. A good summary of this mess
543     dnl can be found at http://www.unixpapa.com/incnote/dbm.html
544
545     dnl Classic ndbm with no library required (eg NetBSD): try this
546     dnl first so we don't accidentally link in a pointless but harmless
547     dnl library in one of the later ndbm.h+libfoo tests:
548     NMH_CHECK_NDBM(ndbm.h,,,
549     dnl Berkeley DBv2 emulating ndbm: header in db.h:
550       NMH_CHECK_NDBM(db.h,db,,
551     dnl Berkeley DBv1 emulating ndbm:
552         NMH_CHECK_NDBM(ndbm.h,db,,
553           NMH_CHECK_NDBM(ndbm.h,db1,,
554     dnl Classic ndbm:
555             NMH_CHECK_NDBM(ndbm.h,ndbm,,
556     dnl glibc2.1 systems put db1 in a subdir:
557               NMH_CHECK_NDBM(db1/ndbm.h,db1,,
558     dnl GNU gdbm emulating ndbm, with header possibly in gdbm/
559     dnl and possibly needing gbdm_compat library:
560                 NMH_CHECK_NDBM(gdbm/ndbm.h,gdbm,,
561                   NMH_CHECK_NDBM(gdbm/ndbm.h,gdbm_compat -lgdbm,,
562                     NMH_CHECK_NDBM(ndbm.h,gdbm,,
563                       NMH_CHECK_NDBM(ndbm.h,gdbm_compat -lgdbm))))))))))
564
565   fi
566 else
567   dnl We don't really need to check that the user-specified values work,
568   dnl but it is a convenience to the user to bomb out early rather than
569   dnl after configure and half the compile process.
570   NMH_CHECK_NDBM([$nmh_ndbmheader],[$nmh_ndbm])
571 fi
572
573 if test "$nmh_ndbm_found" = "no"; then
574   AC_MSG_ERROR([could not find a working ndbm library/header combination])
575 else
576   dnl Now export the lib/header to our makefile/config.h:
577   if test x"$nmh_ndbmheader" != x; then
578     AC_DEFINE_UNQUOTED(NDBM_HEADER, <$nmh_ndbmheader>,
579       [Define to the header containing the ndbm API prototypes.])
580   fi
581   if test x"$nmh_ndbm" != x; then
582     NDBM_LIBS="-l$nmh_ndbm"
583   else
584     NDBM_LIBS=
585   fi
586   AC_SUBST(NDBM_LIBS)
587 fi
588
589
590 dnl ---------------------
591 dnl CHECK TERMCAP LIBRARY
592 dnl ---------------------
593
594 dnl Add the termcap library, so that the following configure
595 dnl tests will find it when it tries to link test programs.
596 nmh_save_LIBS="$LIBS"
597 LIBS="$TERMLIB $LIBS"
598
599 dnl Checks for external variable ospeed in the termcap library.
600 AC_CACHE_CHECK(if an include file defines ospeed,
601 nmh_cv_decl_ospeed_include_defines,
602 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
603 #if HAVE_TERMIOS_H
604 #include <termios.h>
605 #endif
606 #if HAVE_TERMCAP_H
607 #include <termcap.h>
608 #endif]], [[ospeed = 0;]])],
609 nmh_cv_decl_ospeed_include_defines=yes,nmh_cv_decl_ospeed_include_defines=no)])
610  
611 if test $nmh_cv_decl_ospeed_include_defines = no; then
612   AC_CACHE_CHECK(if you must define ospeed,
613   nmh_cv_decl_ospeed_must_define,
614   [AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],
615   [[extern short ospeed; ospeed = 0;]])],
616   nmh_cv_decl_ospeed_must_define=yes,nmh_cv_decl_ospeed_must_define=no)])
617 fi
618  
619 AH_TEMPLATE(HAVE_OSPEED, [Define to 1 if your termcap library has the ospeed variable.])
620 if test $nmh_cv_decl_ospeed_include_defines = yes; then
621   AC_DEFINE(HAVE_OSPEED)dnl
622 elif test $nmh_cv_decl_ospeed_must_define = yes; then
623   AC_DEFINE(HAVE_OSPEED)
624   AC_DEFINE(MUST_DEFINE_OSPEED, 1,
625     [Define to 1 if you have ospeed, but it is not defined in termcap.h.])
626 fi
627
628 dnl Check if tgetent accepts NULL (and will allocate its own termcap buffer)
629 dnl Some termcaps reportedly accept a zero buffer, but then dump core
630 dnl in tgetstr().
631 dnl Under Cygwin test program crashes but exit code is still 0. So,
632 dnl we test for a file that porgram should create
633 AH_TEMPLATE([TGETENT_ACCEPTS_NULL],
634 [Define to 1 if tgetent() accepts NULL as a buffer.])
635 AC_CACHE_CHECK(if tgetent accepts NULL,
636 nmh_cv_func_tgetent_accepts_null,
637 [AC_TRY_RUN([
638 main()
639 {
640     char buf[4096];
641     int r1 = tgetent(buf, "vt100");
642     int r2 = tgetent((char*)0,"vt100");
643     if (r1 >= 0 && r1 == r2) {
644         char tbuf[1024], *u;
645         u = tbuf;
646         tgetstr("cl", &u);
647         creat("conftest.tgetent", 0640);
648     }
649     exit((r1 != r2) || r2 == -1);
650 }
651 ],
652   if test -f conftest.tgetent; then
653     nmh_cv_func_tgetent_accepts_null=yes
654   else
655     nmh_cv_func_tgetent_accepts_null=no
656   fi,
657   nmh_cv_func_tgetent_accepts_null=no,
658   nmh_cv_func_tgetent_accepts_null=no)])
659 if test x$nmh_cv_func_tgetent_accepts_null = xyes; then
660   AC_DEFINE(TGETENT_ACCEPTS_NULL)
661 fi
662 AC_CACHE_CHECK(if tgetent returns 0 on success,
663 nmh_cv_func_tgetent_zero_success,
664 [AC_TRY_RUN([
665 main()
666 {
667     char buf[4096];
668     int r1 = tgetent(buf, "!@#$%^&*");
669     int r2 = tgetent(buf, "vt100");
670     if (r1 < 0 && r2 == 0) {
671         char tbuf[1024], *u;
672         u = tbuf;
673         tgetstr("cl", &u);
674         creat("conftest.tgetent0", 0640);
675     }
676     exit(r1 == r2);
677 }
678 ],
679   if test -f conftest.tgetent0; then
680     nmh_cv_func_tgetent_zero_success=yes
681   else
682     nmh_cv_func_tgetent_zero_success=no
683   fi,
684   nmh_cv_func_tgetent_zero_success=no,
685   nmh_cv_func_tgetent_zero_success=no)])
686 AH_TEMPLATE([TGETENT_SUCCESS],
687 [Define to what tgetent() returns on success (0 on HP-UX X/Open curses).])
688 if test x$nmh_cv_func_tgetent_zero_success = xyes; then
689   AC_DEFINE(TGETENT_SUCCESS, 0)
690 else
691   AC_DEFINE(TGETENT_SUCCESS, 1)
692 fi
693
694 dnl Now put the libraries back to what it was before we
695 dnl starting checking the termcap library.
696 LIBS="$nmh_save_LIBS"
697
698 dnl --------------
699 dnl CHECK TYPEDEFS
700 dnl --------------
701 AC_TYPE_SIGNAL
702 AC_TYPE_PID_T
703 AC_TYPE_OFF_T
704 AC_TYPE_UID_T
705 AC_TYPE_MODE_T
706 AC_TYPE_SIZE_T
707
708 dnl Check for sigset_t.  Currently I'm looking in
709 dnl <sys/types.h> and <signal.h>.  Others might need
710 dnl to be added.
711 AC_CACHE_CHECK(for sigset_t, nmh_cv_type_sigset_t,
712 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
713 #include <signal.h>]], [[sigset_t tempsigset;]])],
714 nmh_cv_type_sigset_t=yes,nmh_cv_type_sigset_t=no)])
715 if test $nmh_cv_type_sigset_t = no; then
716   AC_DEFINE(sigset_t, unsigned int,
717     [Define to `unsigned int' if <sys/types.h> or <signal.h> doesn't define.])
718 fi
719
720 dnl ----------------
721 dnl CHECK STRUCTURES
722 dnl ----------------
723 AC_CHECK_MEMBERS(struct stat.st_blksize)
724
725 AC_CHECK_MEMBERS(struct tm.tm_gmtoff,,,
726   [#ifdef TIME_WITH_SYS_TIME
727 # include <sys/time.h>
728 # include <time.h>
729 #else
730 # ifdef TM_IN_SYS_TIME
731 #  include <sys/time.h>
732 # else
733 #  include <time.h>
734 # endif
735 #endif])
736
737 AC_CHECK_MEMBERS(struct utmp.ut_type,,,[#include <utmp.h>])
738
739 AC_MSG_CHECKING(for union wait)
740 AC_CACHE_VAL(nmh_cv_union_wait, [dnl
741   AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
742 #include <sys/wait.h>]],
743     [[union wait status; int pid; pid = wait (&status);
744 #ifdef WEXITSTATUS
745 /* Some POSIXoid systems have both the new-style macros and the old
746    union wait type, and they do not work together.  If union wait
747    conflicts with WEXITSTATUS et al, we don't want to use it at all.  */
748         if (WEXITSTATUS (status) != 0) pid = -1;
749 #ifdef WTERMSIG
750         /* If we have WEXITSTATUS and WTERMSIG, just use them on ints.  */
751         -- blow chunks here --
752 #endif
753 #endif
754 #ifdef HAVE_WAITPID
755         /* Make sure union wait works with waitpid.  */
756         pid = waitpid (-1, &status, 0);
757 #endif
758       ]])],
759     [nmh_cv_union_wait=yes],
760     [nmh_cv_union_wait=no])])
761 if test "$nmh_cv_union_wait" = yes; then
762   AC_DEFINE(HAVE_UNION_WAIT, 1,
763     [Define to 1 if you have the \`union wait' type in <sys/wait.h>.])
764 fi
765 AC_MSG_RESULT($nmh_cv_union_wait)
766
767 CHECK_TYPE_STRUCT_DIRENT_D_TYPE()
768
769 dnl -------------
770 dnl CHECK SIGNALS
771 dnl -------------
772 dnl What style of signal do you have (POSIX, BSD, or SYSV)?
773 AH_TEMPLATE(RELIABLE_SIGNALS, [Define to 1 if you have reliable signals.])
774 AC_MSG_CHECKING(what style of signals to use)
775 if test $ac_cv_func_sigaction = yes -a $ac_cv_func_sigprocmask = yes; then
776   signals_style=POSIX_SIGNALS
777   AC_DEFINE(POSIX_SIGNALS, 1,
778     [Define to 1 if you use POSIX style signal handling.])
779   AC_DEFINE(RELIABLE_SIGNALS)
780 elif test $ac_cv_func_sigblock = yes -a $ac_cv_func_sigsetmask = yes; then
781   signals_style=BSD_SIGNALS
782   AC_DEFINE(BSD_SIGNALS,1,
783     [Define to 1 if you use BSD style signal handling (and can block signals).])
784   AC_DEFINE(RELIABLE_SIGNALS)
785 elif test $ac_cv_func_sighold = yes -a $ac_cv_func_sigrelse = yes; then
786   signals_style=SYSV_SIGNALS
787   AC_DEFINE(SYSV_SIGNALS,1,
788     [Define to 1 if you use SYSV style signal handling (and can block signals).])
789 else
790   signals_style=NO_SIGNAL_BLOCKING
791   AC_DEFINE(NO_SIGNAL_BLOCKING,1,
792     [Define to 1 if you have no signal blocking at all (bummer).])
793 fi
794
795 AC_MSG_RESULT($signals_style)
796
797 dnl Where is <signal.h> located?  Needed as input for signames.awk
798 AC_CACHE_CHECK(where signal.h is located, nmh_cv_path_signal_h,
799 [for SIGNAL_H in /usr/include/bsd/sys/signal.h  dnl Next
800                  /usr/include/asm/signal.h      dnl Linux 1.3.0 and above
801                  /usr/include/asm/signum.h      dnl some versions of Linux/Alpha
802                  /usr/include/linux/signal.h    dnl Linux up to 1.2.11
803                  /usr/include/sys/signal.h      dnl Almost everybody else
804                  /dev/null;                     dnl Just in case we fall through
805 do
806   test -f $SIGNAL_H && \
807   grep '#[      ]*define[       ][      ]*SIG[0-9A-Z]*[         ]*[0-9][0-9]*' $SIGNAL_H > /dev/null && \
808   break
809 done
810 nmh_cv_path_signal_h=$SIGNAL_H
811 ])
812 SIGNAL_H=$nmh_cv_path_signal_h
813 AC_SUBST(SIGNAL_H)dnl
814
815 dnl ----------------
816 dnl OS SPECIFIC DEFINES
817 dnl ----------------
818 AH_TEMPLATE(SYS5, [Defined for Solaris 2.x, Irix, OSF/1, HP-UX, AIX, SCO5; only used in vmh.c which is not built.])
819 AH_TEMPLATE(SVR4, [Defined for Solaris 2.x, Irix, OSF/1, HP-UX, AIX; only used in vmh.c which is not built.])
820 AH_TEMPLATE(BSD44, [Defined for SunOS 4, FreeBSD, NetBSD, OpenBSD, BSD/OS, Mac OS X/Rhapsody; only used in vmh.c which is not built.])
821 AH_TEMPLATE(BSD42, [Defined for SunOS 4, FreeBSD, NetBSD, OpenBSD, BSD/OS, Mac OS X/Rhapsody -- does PicoBSD have uname?])
822 AH_TEMPLATE(SCO_5_STDIO, [Defined for SCO5.])
823
824 case "$target_os" in
825
826   solaris2*)
827     AC_DEFINE(SYS5)
828     AC_DEFINE(SVR4)
829     ;;
830   irix*)
831     AC_DEFINE(SYS5)
832     AC_DEFINE(SVR4)
833     ;;
834   osf*)
835     AC_DEFINE(SYS5)
836     AC_DEFINE(SVR4)
837     ;;
838   aix*)
839     AC_DEFINE(SYS5)
840     AC_DEFINE(SVR4)
841     ;;
842   sunos4*)
843     AC_DEFINE(BSD42)
844     ;;
845   freebsd*)  
846     AC_DEFINE(BSD42)
847     AC_DEFINE(BSD44)
848     ;;
849   netbsd*)
850     AC_DEFINE(BSD42)
851     AC_DEFINE(BSD44)
852     ;;
853   openbsd*)
854     AC_DEFINE(BSD42)
855     AC_DEFINE(BSD44)
856     ;;
857   bsd/os*)
858     AC_DEFINE(BSD42)
859     AC_DEFINE(BSD44)
860     ;;
861   sco5*)
862     AC_DEFINE(SYS5)
863     AC_DEFINE(SCO_5_STDIO)
864     ;;
865 esac
866
867
868 dnl ----------------
869 dnl OUTPUT MAKEFILES
870 dnl ----------------
871 AC_CONFIG_FILES(Makefile config/Makefile h/Makefile sbr/Makefile uip/Makefile \
872                 etc/Makefile docs/Makefile man/Makefile)
873 AC_CONFIG_COMMANDS([stamp],[test -z "$CONFIG_HEADERS" || echo > stamp-h])
874 AC_OUTPUT
875
876 dnl These odd looking assignments are done to expand out unexpanded
877 dnl variables in bindir et al (for instance mandir is '${datarootdir}/man',
878 dnl but expanding that gives '${prefix}/share/man', so we need to expand
879 dnl again to get the final answer.
880 dnl We only use the expanded versions to print the install paths in
881 dnl the final summary and should use them nowhere else (see the autoconf
882 dnl docs for the rationale for bindir etc being unexpanded).
883 eval "nmhbin=${bindir}";         eval "nmhbin=${nmhbin}"
884 eval "nmhsysconf=${sysconfdir}"; eval "nmhsysconf=${nmhsysconf}"
885 eval "nmhlib=${libdir}";         eval "nmhlib=${nmhlib}"
886 eval "nmhman=${mandir}";         eval "nmhman=${nmhman}"
887
888 echo "
889 nmh configuration
890 -----------------
891 nmh version            : AC_PACKAGE_VERSION
892 target os              : ${target}
893 compiler               : ${CC}
894 compiler flags         : ${CFLAGS}
895 linker flags           : ${LDFLAGS}
896 definitions            : ${OURDEFS}
897 source code location   : ${srcdir}
898
899 binary install path    : ${nmhbin}
900 library install path   : ${nmhlib}
901 config install path    : ${nmhsysconf}
902 man page install path  : ${nmhman}
903
904 default editor         : ${editorpath}
905 default pager          : ${pagerpath}
906 sendmail               : ${sendmailpath}
907
908 backup prefix          : ${backup_prefix}
909 file locking type      : ${LOCKTYPE}
910 email address masq.    : ${masquerade}
911 "