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