2 dnl configure.in -- autoconf template for nmh
8 AC_CONFIG_HEADER(config.h)
12 dnl ---------------------
13 dnl define a macro or two
14 dnl ---------------------
16 AC_DEFUN(NMH_PROG_GNU_LIBTOOL, [
17 tmptest=`$LIBTOOL --version 2>&1 | grep GNU`
18 if test x"$tmptest" != x ; then
25 dnl What version of nmh are we building?
26 VERSION=`sed -e 's/nmh-//' ${srcdir}/VERSION`
27 echo "configuring for nmh-$VERSION"
30 dnl -------------------------
31 dnl CHECK COMMAND LINE OPTION
32 dnl -------------------------
33 dnl What method of posting should post use?
36 [ --with-mts=MTS specify the mail transport agent])
38 if test x$with_mts = xsmtp; then
40 MTSLIB="mts/smtp/libsmtp.a"
42 elif test x$with_mts = xsendmail; then
44 MTSLIB="mts/sendmail/libsend.a"
48 MTSLIB="mts/smtp/libsmtp.a"
55 dnl What should be the default editor?
58 [ --with-editor=EDITOR specify the default editor])
60 if test -n "$with_editor"; then
61 editorpath="$with_editor"
64 dnl What should be the default pager?
67 [ --with-pager=PAGER specify the default pager])
69 if test -n "$with_pager"; then
70 pagerpath="$with_pager"
73 dnl Do you want mhe support?
74 undefine([nmh-mhe])dnl
75 AC_ARG_ENABLE(nmh-mhe,
76 [ --enable-nmh-mhe enable mhe support (DEFAULT)])
78 dnl mhe support is on by default, so define it unless
79 dnl explicitly disabled.
80 if test x$enable_nmh_mhe != xno; then
84 dnl Do you want client-side support for pop
85 undefine([nmh-pop])dnl
86 AC_ARG_ENABLE(nmh-pop,
87 [ --enable-nmh-pop enable client-side support for pop])
88 if test x$enable_nmh_pop = xyes; then
91 POPSED='/^%nmhbeginpop%/d;/^%nmhendpop%/d'
93 POPSED='/^%nmhbeginpop%/,/^%nmhendpop%/d'
98 dnl Do you want client-side support for kpop
100 [ --with-krb4=PREFIX specify location of Kerberos V4 for kpop support])
101 if test x$with_krb4 != x -a x$with_krb4 != xno; then
103 AC_DEFINE(KPOP_PRINCIPAL, "pop")dnl
106 dnl Do you want support for hesiod
108 [ --with-hesiod=PREFIX specify location of Hesiod])
109 if test x$with_hesiod != x -a x$with_hesiod != xno; then
113 dnl Do you want to debug nmh?
114 undefine([nmh-debug])dnl
115 AC_ARG_ENABLE(nmh-debug,
116 [ --enable-nmh-debug enable nmh code debugging])
118 dnl ----------------------------------------------------
119 dnl Default location is /usr/local/nmh/{bin,etc,lib,man}
120 dnl ----------------------------------------------------
121 AC_PREFIX_DEFAULT(/usr/local/nmh)
123 dnl ------------------
124 dnl CHECK THE COMPILER
125 dnl ------------------
126 dnl We want these before the checks,
127 dnl so the checks can modify their values.
128 test -z "$CFLAGS" && CFLAGS= auto_cflags=1
129 if test x$enable_nmh_debug = xyes; then
130 test -z "$LDFLAGS" && LDFLAGS=-g
135 dnl if the user hasn't specified CFLAGS, then
136 dnl if compiler is gcc, then
137 dnl use -O2 and some warning flags
139 if test -n "$auto_cflags"; then
140 if test x$enable_nmh_debug = xyes; then
141 if test -n "$GCC"; then
142 test -z "$CFLAGS" && CFLAGS="-Wall -g" || CFLAGS="$CFLAGS -Wall -g"
144 test -z "$CFLAGS" && CFLAGS=-g || CFLAGS="$CFLAGS -g"
147 test -z "$LDFLAGS" && LDFLAGS=-s
148 if test -n "$GCC"; then
149 test -z "$CFLAGS" && CFLAGS=-O2 || CFLAGS="$CFLAGS -O2"
151 test -z "$CFLAGS" && CFLAGS=-O || CFLAGS="$CFLAGS -O"
156 AC_C_CONST dnl Does compiler support `const'.
158 dnl ------------------
159 dnl CHECK FOR PROGRAMS
160 dnl ------------------
161 AC_PROG_MAKE_SET dnl Does make define $MAKE
162 AC_PROG_INSTALL dnl Check for BSD compatible `install'
163 AC_PROG_RANLIB dnl Check for `ranlib'
164 AC_PROG_AWK dnl Check for mawk,gawk,nawk, then awk
165 AC_PROG_LEX dnl Check for lex/flex
168 pathtmp=/usr/bin:/bin:/usr/local/bin:/usr/xpg4/bin:/usr/ucb
169 AC_PATH_PROG(cutpath, cut, no, [$pathtmp])
172 dnl try to figure out which one we've got
173 AC_CHECK_PROG(LIBTOOL, libtool, libtool, , [$pathtmp])
176 dnl Check for lorder and tsort commands
177 AC_CHECK_PROG(LORDER, lorder, lorder, no)dnl
178 AC_CHECK_PROG(TSORT, tsort, tsort, no)dnl
180 dnl If either doesn't exist, replace them with echo and cat
181 if test x$ac_cv_prog_LORDER != xlorder -o x$ac_cv_prog_TSORT != xtsort; then
186 dnl Mac OS X has lorder, but sh is too broken for it to work
187 dnl elif test -z "`lorder config/config.c 2>&1 | grep config/config.c`" ; then
190 dnl AC_SUBST(LORDER)dnl
191 dnl AC_SUBST(TSORT)dnl
195 pathtmp=/usr/bin:/bin:/usr/local/bin:/usr/xpg4/bin:/usr/ucb
196 AC_PATH_PROG(lspath, ls, no, [$pathtmp])
198 dnl See how we get ls to display the owner and the group
199 if test "$lspath" != "no"; then
200 AC_CACHE_CHECK(how to get ls to show us the group ownership of a file,
202 [if test x"`$lspath -dl / | $AWK '{print $9}'`" = x"/"; then
203 dnl There were 9 parameters, so unless this is a really bizarre, nonstandard
204 dnl ls, it would seem -l gave us both the user and group. On this type of
205 dnl ls, -g makes _only_ the group be displayed (and not the user).
206 nmh_cv_ls_grpopt="-l"
208 dnl Looks like -l only gave us the user, so we need -g to get the group too.
209 nmh_cv_ls_grpopt="-lg"
214 pathtmp=/usr/bin:/bin:/usr/ucb:/usr/local/bin
215 AC_PATH_PROG(morepath, more, no, [$pathtmp])
217 dnl If pager is not specified yet,
218 dnl then use `more' as the default.
219 if test -z "$pagerpath"; then
220 pagerpath="$morepath"
222 AC_SUBST(pagerpath)dnl
224 dnl Look for `sendmail'
225 pathtmp=/usr/lib:/usr/sbin:/usr/etc:/usr/ucblib:/usr/bin:/bin
226 AC_PATH_PROG(sendmailpath, sendmail, no, [$pathtmp])
229 pathtmp=/usr/bin:/bin:/usr/ucb:/usr/local/bin
230 AC_PATH_PROG(vipath, vi, no, [$pathtmp])
232 dnl If editor is not specified yet,
233 dnl then use `vi' as the default.
234 if test -z "$editorpath"; then
237 AC_SUBST(editorpath)dnl
239 dnl Check for broken vi
240 AC_CACHE_CHECK(for broken vi, nmh_cv_attvibug,
241 [if echo 'r /nonexist-file
242 q' | ex > /dev/null 2>&1
249 if test "$nmh_cv_attvibug" = yes; then
253 dnl ----------------------------------------------------------
254 dnl FIND MAIL SPOOL AND SEE IF WE NEED TO MAKE inc SETGID MAIL
255 dnl ----------------------------------------------------------
256 AC_CACHE_CHECK(where mail spool is located, nmh_cv_mailspool,
257 [for mailspool in /var/mail dnl
260 /dev/null; dnl Just in case we fall through
262 test -d $mailspool && break
264 nmh_cv_mailspool=$mailspool
266 mailspool=$nmh_cv_mailspool
267 AC_SUBST(mailspool)dnl
269 dnl See whether the mail spool directory is world-writable.
270 if test "$lspath" != "no" -a "$cutpath" != "no"; then
271 AC_CACHE_CHECK(whether the mail spool is world-writable,
272 nmh_cv_mailspool_world_writable,
273 [if test "`$lspath -dlL $mailspool | $cutpath -c9`" = "-"; then
274 nmh_cv_mailspool_world_writable=no
276 nmh_cv_mailspool_world_writable=yes
280 dnl ...If it's not, we need to #define MAILGROUP to 1 and make inc setgid.
281 if test x"$nmh_cv_mailspool_world_writable" = x"no"; then
282 dnl do we really need both of these?
283 AC_DEFINE(MAILGROUP)dnl
286 AC_SUBST(SETGID_MAIL)dnl
288 dnl see if we can determine which group owns the mail spool dir
289 AC_CACHE_CHECK(what group owns the mail spool, nmh_cv_ls_mail_grp,
290 [nmh_cv_ls_mail_grp=`$lspath -dL $nmh_cv_ls_grpopt $mailspool|$AWK '{print $4}'`
291 dnl Should we just set it to whatever ls reports, rather than only allowing
292 dnl certain values...?
293 if test x$nmh_cv_ls_mail_grp = xmail; then
294 MAIL_SPOOL_GRP="mail"
295 elif test x$nmh_cv_ls_mail_grp = xwheel; then
296 MAIL_SPOOL_GRP="wheel"
300 AC_SUBST(MAIL_SPOOL_GRP)dnl
302 dnl ------------------
303 dnl CHECK HEADER FILES
304 dnl ------------------
310 AC_CHECK_HEADERS(string.h memory.h stdlib.h unistd.h errno.h fcntl.h \
311 limits.h crypt.h termcap.h termio.h termios.h locale.h \
312 netdb.h sys/param.h sys/time.h sys/utsname.h arpa/inet.h \
316 AC_CACHE_CHECK(POSIX termios, nmh_cv_sys_posix_termios,
317 [AC_TRY_LINK([#include <sys/types.h>
319 #include <termios.h>],
320 [/* SunOS 4.0.3 has termios.h but not the library calls. */
322 nmh_cv_sys_posix_termios=yes, nmh_cv_sys_posix_termios=no)])
324 if test $nmh_cv_sys_posix_termios = yes; then
325 AC_CACHE_CHECK(TIOCGWINSZ in termios.h,
326 nmh_cv_header_termios_h_tiocgwinsz,
327 [AC_TRY_LINK([#include <sys/types.h>
328 #include <termios.h>],
329 [int x = TIOCGWINSZ;],
330 nmh_cv_header_termios_h_tiocgwinsz=yes,
331 nmh_cv_header_termios_h_tiocgwinsz=no)])
333 nmh_cv_header_termios_h_tiocgwinsz=no
336 if test $nmh_cv_header_termios_h_tiocgwinsz = no; then
337 AC_CACHE_CHECK(TIOCGWINSZ in sys/ioctl.h,
338 nmh_cv_header_sys_ioctl_h_tiocgwinsz,
339 [AC_TRY_LINK([#include <sys/types.h>
340 #include <sys/ioctl.h>],
341 [int x = TIOCGWINSZ;],
342 nmh_cv_header_sys_ioctl_h_tiocgwinsz=yes,
343 nmh_cv_header_sys_ioctl_h_tiocgwinsz=no)])
344 if test $nmh_cv_header_sys_ioctl_h_tiocgwinsz = yes; then
345 AC_DEFINE(GWINSZ_IN_SYS_IOCTL)
350 dnl Checks for _IO_write_ptr. A Linuxism used by nmh on linux. We
351 dnl really use a whole set of them, but this check should be
354 AC_CHECK_HEADER(libio.h, [
355 AC_EGREP_HEADER(_IO_write_ptr, libio.h, [
356 AC_DEFINE(LINUX_STDIO) ]) ])
358 AC_CHECK_HEADER([sys/ptem.h], AC_DEFINE(WINSIZE_IN_PTEM))
364 AC_CHECK_LIB(mkstemp,mkstemp)
365 AC_CHECK_FUNCS(waitpid wait3 sigaction sigprocmask sigblock sigsetmask \
366 sighold sigrelse writev lstat uname tzset killpg mkstemp \
369 dnl solaris screws ths up
370 AC_CHECK_FUNC(gethostbyname, [AC_DEFINE(HAVE_GETHOSTBYNAME)],
371 AC_CHECK_LIB(nsl, gethostbyname, [AC_DEFINE(HAVE_GETHOSTBYNAME)] ) )
373 dnl sigsetjmp may be a macro
374 AC_MSG_CHECKING(for sigsetjmp)
375 AC_TRY_LINK([#include <setjmp.h>], [sigsetjmp((void *)0, 0);],
376 [AC_DEFINE(HAVE_SIGSETJMP) AC_MSG_RESULT(yes)], AC_MSG_RESULT(no))
378 AC_REPLACE_FUNCS(snprintf strerror strdup)
380 dnl On AIX 4.1, snprintf() is defined in libc.a but there's no prototype in
381 dnl <stdio.h> or elsewhere. Apparently it's not officially supported (though it
382 dnl seems to work perfectly and IBM apparently uses it in internal code).
383 dnl Anyhow, if we omit our own snprintf() and vsnprintf() prototypes when we
384 dnl HAVE_SNPRINTF, we get a billion warnings at compile time. Use the C
385 dnl preprocessor to preprocess stdio.h and make sure that there's actually a
387 AC_EGREP_HEADER(snprintf, stdio.h, AC_DEFINE(HAVE_SNPRINTF_PROTOTYPE))
389 dnl -------------------
390 dnl CHECK FOR LIBRARIES
391 dnl -------------------
392 dnl Check location of modf
393 AC_CHECK_FUNC(modf, , AC_CHECK_LIB(m, modf))
395 dnl Checks for network libraries (nsl, socket)
398 dnl Check for bug in libraries such that ruserpass
399 dnl needs to be linked as _ruserpass.
402 termcap_curses_order="termcap curses ncurses"
403 for lib in $termcap_curses_order; do
404 AC_CHECK_LIB(${lib}, tgetent, [TERMLIB="-l$lib"; break])
413 AC_CHECK_FUNC(dbm_open, ,
414 AC_CHECK_LIB(ndbm, dbm_open, ,
415 AC_CHECK_LIB(dbm, dbm_open)))
420 AC_CHECK_HEADERS(db1/ndbm.h)
425 if test x$with_hesiod != x -a x$with_hesiod != xno; then
426 if test x$with_hesiod != xyes; then
427 HESIOD_INCLUDES="-I$with_hesiod/include"
428 HESIOD_LIBS="-L$with_hesiod/lib"
430 AC_CHECK_FUNC(res_send, ,
431 AC_CHECK_LIB(resolv, res_send))
432 AC_CHECK_LIB(hesiod, hes_resolve, [HESIOD_LIBS="$HESIOD_LIBS -lhesiod"],
433 [AC_MSG_ERROR(Hesiod library not found)], $HESIOD_LIBS)
435 AC_SUBST(HESIOD_INCLUDES)dnl
436 AC_SUBST(HESIOD_LIBS)dnl
438 dnl ----------------------------------
439 dnl CHECK FOR KRB4 (Kerberos4 support)
440 dnl ----------------------------------
441 if test x$with_krb4 != x -a x$with_krb4 != xno; then
442 if test x$with_krb4 != xyes; then
443 KRB4_INCLUDES="-I$with_krb4/include"
444 if test -d "$with_krb4/include/kerberosIV"; then
445 KRB4_INCLUDES="$KRB4_INCLUDES -I$with_krb4/include/kerberosIV"
447 KRB4_LIBS="-L$with_krb4/lib"
448 elif test -d /usr/include/kerberosIV; then
449 KRB4_INCLUDES="-I/usr/include/kerberosIV"
451 AC_CHECK_LIB(krb4, krb_rd_req,
452 [KRB4_LIBS="$KRB4_LIBS -lkrb4 -ldes425 -lkrb5 -lcrypto -lcom_err"],
453 [AC_CHECK_LIB(krb, krb_rd_req,
454 [KRB4_LIBS="$KRB4_LIBS -lkrb -ldes"],
455 [AC_MSG_ERROR(Kerberos 4 libraries not found)],
457 $KRB4_LIBS -ldes425 -lkrb5 -lcrypto -lcom_err)
459 AC_SUBST(KRB4_INCLUDES)dnl
460 AC_SUBST(KRB4_LIBS)dnl
462 dnl ---------------------
463 dnl CHECK TERMCAP LIBRARY
464 dnl ---------------------
466 dnl Add the termcap library, so that the following configure
467 dnl tests will find it when it tries to link test programs.
468 nmh_save_LIBS="$LIBS"
469 LIBS="$TERMLIB $LIBS"
471 dnl Checks for external variable ospeed in the termcap library.
472 AC_CACHE_CHECK(if an include file defines ospeed,
473 nmh_cv_decl_ospeed_include_defines,
475 [#include <sys/types.h>
481 #endif], [ospeed = 0;],
482 nmh_cv_decl_ospeed_include_defines=yes,
483 nmh_cv_decl_ospeed_include_defines=no)])
485 if test $nmh_cv_decl_ospeed_include_defines = no; then
486 AC_CACHE_CHECK(if you must define ospeed,
487 nmh_cv_decl_ospeed_must_define,
488 [AC_TRY_LINK( ,[extern short ospeed; ospeed = 0;],
489 nmh_cv_decl_ospeed_must_define=yes,
490 nmh_cv_decl_ospeed_must_define=no)])
493 if test $nmh_cv_decl_ospeed_include_defines = yes; then
494 AC_DEFINE(HAVE_OSPEED)
495 elif test $nmh_cv_decl_ospeed_must_define = yes; then
496 AC_DEFINE(HAVE_OSPEED)
497 AC_DEFINE(MUST_DEFINE_OSPEED)
500 dnl dnl Checks if tgetent accepts NULL and will
501 dnl dnl allocate its own termcap buffer.
502 dnl AC_CACHE_CHECK(if tgetent accepts NULL,
503 dnl nmh_cv_func_tgetent_accepts_null,
504 dnl [AC_TRY_RUN([main(){int i = tgetent((char*)0,"vt100");exit(!i || i == -1);}],
505 dnl nmh_cv_func_tgetent_accepts_null=yes,
506 dnl nmh_cv_func_tgetent_accepts_null=no,
507 dnl nmh_cv_func_tgetent_accepts_null=no)])
508 dnl if test $nmh_cv_func_tgetent_accepts_null = yes; then
509 dnl AC_DEFINE(TGETENT_ACCEPTS_NULL)
512 dnl Now put the libraries back to what it was before we
513 dnl starting checking the termcap library.
514 LIBS="$nmh_save_LIBS"
526 dnl Check for sigset_t. Currently I'm looking in
527 dnl <sys/types.h> and <signal.h>. Others might need
529 AC_CACHE_CHECK(for sigset_t, nmh_cv_type_sigset_t,
531 [#include <sys/types.h>
532 #include <signal.h>], [sigset_t tempsigset;],
533 nmh_cv_type_sigset_t=yes, nmh_cv_type_sigset_t=no)])
534 if test $nmh_cv_type_sigset_t = no; then
535 AC_DEFINE(sigset_t, unsigned int)
543 AC_CACHE_CHECK(for tm_gmtoff in struct tm, nmh_cv_struct_tm_gmtoff,
545 [#ifdef TIME_WITH_SYS_TIME
546 # include <sys/time.h>
549 # ifdef TM_IN_SYS_TIME
550 # include <sys/time.h>
555 [struct tm temptm; temptm.tm_gmtoff = 0;],
556 nmh_cv_struct_tm_gmtoff=yes, nmh_cv_struct_tm_gmtoff=no)])
557 if test $nmh_cv_struct_tm_gmtoff = yes; then
558 AC_DEFINE(HAVE_TM_GMTOFF)
564 dnl What style of signal do you have (POSIX, BSD, or SYSV)?
565 AC_MSG_CHECKING(what style of signals to use)
566 if test $ac_cv_func_sigaction = yes -a $ac_cv_func_sigprocmask = yes; then
567 signals_style=POSIX_SIGNALS
568 AC_DEFINE(POSIX_SIGNALS)
569 AC_DEFINE(RELIABLE_SIGNALS)
570 elif test $ac_cv_func_sigblock = yes -a $ac_cv_func_sigsetmask = yes; then
571 signals_style=BSD_SIGNALS
572 AC_DEFINE(BSD_SIGNALS)
573 AC_DEFINE(RELIABLE_SIGNALS)
574 elif test $ac_cv_func_sighold = yes -a $ac_cv_func_sigrelse = yes; then
575 signals_style=SYSV_SIGNALS
576 AC_DEFINE(SYSV_SIGNALS)
578 signals_style=NO_SIGNAL_BLOCKING
579 AC_DEFINE(NO_SIGNAL_BLOCKING)
582 AC_MSG_RESULT($signals_style)
584 dnl Where is <signal.h> located? Needed as input for signames.awk
585 AC_CACHE_CHECK(where signal.h is located, nmh_cv_path_signal_h,
586 [for SIGNAL_H in /usr/include/bsd/sys/signal.h dnl Next
587 /usr/include/asm/signal.h dnl Linux 1.3.0 and above
588 /usr/include/asm/signum.h dnl some versions of Linux/Alpha
589 /usr/include/linux/signal.h dnl Linux up to 1.2.11
590 /usr/include/sys/signal.h dnl Almost everybody else
591 /dev/null; dnl Just in case we fall through
593 test -f $SIGNAL_H && \
594 grep '#[ ]*define[ ][ ]*SIG[0-9A-Z]*[ ]*[0-9][0-9]*' $SIGNAL_H > /dev/null && \
597 nmh_cv_path_signal_h=$SIGNAL_H
599 SIGNAL_H=$nmh_cv_path_signal_h
600 AC_SUBST(SIGNAL_H)dnl
603 dnl OS SPECIFIC DEFINES
644 AC_DEFINE(SCO_5_STDIO)
652 AC_OUTPUT(Makefile config/Makefile h/Makefile sbr/Makefile uip/Makefile \
653 zotnet/Makefile zotnet/mts/Makefile zotnet/tws/Makefile \
654 zotnet/mf/Makefile zotnet/bboards/Makefile mts/Makefile \
655 mts/smtp/Makefile mts/sendmail/Makefile mts/mmdf/Makefile \
656 etc/Makefile man/Makefile, \
657 [test -z "$CONFIG_HEADERS" || echo > stamp-h])
659 eval "nmhbin=${bindir}"; eval "nmhbin2=${nmhbin}"
660 eval "nmhsysconf=${sysconfdir}"; eval "nmhsysconf2=${nmhsysconf}"
661 eval "nmhlib=${libdir}"; eval "nmhlib2=${nmhlib}"
662 eval "nmhman=${mandir}"
667 nmh version : ${VERSION}
668 target os : ${target}
670 compiler flags : ${CFLAGS}
671 linker flags : ${LDFLAGS}
672 source code location : ${srcdir}
673 binary install path : ${nmhbin2}
674 libary install path : ${nmhlib2}
675 config files install path : ${nmhsysconf2}
676 man page install path : ${nmhman}
677 transport system : ${MTS}
678 default editor : ${editorpath}
679 default pager : ${pagerpath}"