]> diplodocus.org Git - nmh/blob - configure.ac
Bring this up to best practices.
[nmh] / 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.68])
7
8 AC_INIT([nmh], m4_normalize(m4_include([VERSION])), [nmh-workers@nongnu.org])
9 AC_CONFIG_SRCDIR([h/nmh.h])
10 AC_CONFIG_HEADER([config.h])
11 AM_INIT_AUTOMAKE([-Wall foreign serial-tests subdir-objects 1.12])
12
13 AC_CANONICAL_HOST
14
15 AC_MSG_NOTICE([configuring for AC_PACKAGE_NAME-AC_PACKAGE_VERSION])
16 AC_SUBST(VERSION,AC_PACKAGE_VERSION)dnl
17
18 dnl What date of nmh are we building?
19 DATE=`cat ${srcdir}/DATE`
20 AC_MSG_NOTICE([configuring for nmh dated $DATE])
21 AC_SUBST([DATE])dnl
22
23 dnl --------------------------
24 dnl CHECK COMMAND LINE OPTIONS
25 dnl --------------------------
26
27 dnl Do you want to debug nmh?
28 AC_ARG_ENABLE([debug],
29 AS_HELP_STRING([--enable-debug],[enable nmh code debugging]))
30
31 dnl Do you want to disable use of locale functions
32 AH_TEMPLATE([LOCALE],
33 [Undefine if you don't want locale features. By default this is defined.])
34 AC_ARG_ENABLE([locale],
35 [AS_HELP_STRING([--disable-locale], [turn off locale features])],
36 [AS_IF([test x$enableval = xyes], [AC_DEFINE(LOCALE)])],
37 [AC_DEFINE(LOCALE)])
38
39 dnl Do you want client-side support for using SASL for authentication?
40 dnl Note that this code will be enabled for both POP and SMTP
41 AC_ARG_WITH([cyrus-sasl], AS_HELP_STRING([--with-cyrus-sasl],
42 [Enable SASL support via the Cyrus SASL library]))
43 AS_IF([test x"$with_cyrus_sasl" != x -a x"$with_cyrus_sasl" != x"no"],[
44 AC_DEFINE([CYRUS_SASL], [1],
45 [Define to use the Cyrus SASL library for authentication of POP and SMTP.])dnl
46 AS_IF([test x"$with_cyrus_sasl" != xyes],[
47 AC_MSG_WARN([Arguments to --with-cyrus-sasl now ignored])
48 AC_MSG_WARN([Please pass the appropriate arguments to CPPFLAGS/LDFLAGS])])
49 sasl_support=yes], [sasl_support=no])
50
51 dnl Do you want client-side support for encryption with TLS?
52 AC_ARG_WITH([tls], AS_HELP_STRING([--with-tls], [Enable TLS support]))
53 AS_IF([test x"$with_tls" != x -a x"$with_tls" != x"no"],[
54 AC_DEFINE([TLS_SUPPORT], [1], [Support TLS for session encryption.])dnl
55 tls_support=yes],[tls_support=no])
56
57 dnl Set the backup prefix
58 AC_ARG_WITH([hash-backup],
59 AS_HELP_STRING([--with-hash-backup],[use # as the backup prefix (default: ,)]))
60 AS_IF([test x"$with_hash_backup" != x -a x"$with_hash_backup" != x"no"],
61 [backup_prefix="#"], [backup_prefix=","])
62 AC_DEFINE_UNQUOTED([BACKUP_PREFIX], "$backup_prefix",
63 [The prefix that is prepended to the name of message files when they are "removed" by rmm. This should typically be `,' or `#'.])dnl
64
65 dnl What method of locking to use?
66 AS_CASE(["$host_os"],
67 [aix*|cygwin*|linux*],
68 [default_locktype="fcntl"; default_locking=FCNTL_LOCKING],
69 [freebsd*|openbsd*|darwin*], [default_locktype="flock"; default_locking=FLOCK_LOCKING],
70 [default_locktype="dot"; default_locking=DOT_LOCKING])
71
72 AC_ARG_WITH([locking],
73 AS_HELP_STRING([--with-locking=@<:@dot|fcntl|flock|lockf@:>@],
74 [specify the file locking method]))
75
76 AS_IF([test x"$with_locking" = x"dot"],
77 [LOCKTYPE="dot"
78 AC_DEFINE([DOT_LOCKING], [1], [Define to use dot based file locking.])],
79 [test x"$with_locking" = x"flock"],
80 [LOCKTYPE="flock"
81 AC_DEFINE([FLOCK_LOCKING], [1], [Define to use flock() based locking.])],
82 [test x"$with_locking" = x"lockf"],
83 [LOCKTYPE="lockf"
84 AC_DEFINE([LOCKF_LOCKING], [1], [Define to use lockf() based locking.])],
85 [test x"$with_locking" = x"fcntl"],
86 [LOCKTYPE="fcntl"
87 AC_DEFINE([FCNTL_LOCKING], [1], [Define to use fnctl() based locking.])],
88 [LOCKTYPE="$default_locktype"
89 AC_DEFINE_UNQUOTED([$default_locking], [1])])
90
91 dnl Should we use a locking directory?
92 AC_ARG_ENABLE([lockdir],
93 [AS_HELP_STRING([--enable-lockdir=dir], [Store dot-lock files in "dir"])], [
94 AS_IF([test "x$enableval" = xyes],[
95 AC_MSG_ERROR([--enable-lockdir requires an argument])])
96 AS_IF([test "x$LOCKTYPE" != xdot],[
97 AC_MSG_ERROR([Can only use --enable-lockdir with dot locking])])
98 AC_DEFINE_UNQUOTED([LOCKDIR], ["$enableval"],
99 [Directory to store dot-locking lock files])
100 ])
101
102 dnl What method of posting should post use?
103 AC_ARG_WITH([mts],
104 AS_HELP_STRING([--with-mts=@<:@smtp|sendmail/smtp|sendmail/pipe@:>@],
105 [specify the default mail transport agent/service]))
106
107 AS_IF([test x"$with_mts" = x"smtp"], [MTS="smtp"],
108 [test x"$with_mts" = x"sendmail"], [MTS="sendmail/smtp"],
109 [test x"$with_mts" = x"sendmail/smtp"], [MTS="sendmail/smtp"],
110 [test x"$with_mts" = x"sendmail/pipe"], [MTS="sendmail/pipe"],
111 [MTS="smtp"])
112 AC_SUBST([MTS])dnl
113
114 dnl What should be the default mail server(s)?
115 AC_ARG_WITH([smtpservers],
116 [AS_HELP_STRING([--with-smtpservers='SMTPSERVER1@<:@ SMTPSERVER2...@:>@'],
117 [specify the default SMTP server(s) @<:@localhost@:>@])])
118 AS_IF([test -n "$with_smtpservers"], [smtpservers="$with_smtpservers"],
119 [smtpservers="localhost"])
120 AC_SUBST([smtpservers])dnl
121
122 dnl ----------------------------------------------------
123 dnl Default location is /usr/local/nmh/{bin,etc,lib,man}
124 dnl ----------------------------------------------------
125 AC_PREFIX_DEFAULT([/usr/local/nmh])
126
127 dnl ------------------
128 dnl CHECK THE COMPILER
129 dnl ------------------
130 dnl We want these before the checks,
131 dnl so the checks can modify their values.
132 test -z "$CFLAGS" && CFLAGS= auto_cflags=1
133 if test x"$enable_debug" = x"yes"; then
134 test -z "$LDFLAGS" && LDFLAGS=-g
135 fi
136
137 AC_PROG_CC
138 AM_PROG_CC_C_O
139
140 AC_CACHE_CHECK([whether preprocessor supports -Wunused-macros],
141 [nmh_cv_has_unusedmacros],
142 [nmh_saved_cppflags="$CPPFLAGS"
143 CPPFLAGS="$CPPFLAGS -Wunused-macros -Wno-unused-macros"
144 AC_TRY_COMPILE([],[],nmh_cv_has_unusedmacros=yes,nmh_cv_has_unusedmacros=no)
145 CPPFLAGS="$nmh_saved_cppflags"])
146
147 if test "$nmh_cv_has_unusedmacros" = 'yes'; then
148 test -z "$CPPFLAGS" && CPPFLAGS=-Wunused-macros \
149 || CPPFLAGS="$CPPFLAGS -Wunused-macros"
150 DISABLE_UNUSED_MACROS_WARNING=-Wno-unused-macros
151 fi
152 AC_SUBST([DISABLE_UNUSED_MACROS_WARNING])dnl
153
154 AC_CACHE_CHECK([whether compiler supports -Wno-sign-compare],
155 [nmh_cv_has_nosigncompare],
156 [nmh_saved_cppflags="$CPPFLAGS"
157 CPPFLAGS="$CPPFLAGS -Wno-sign-compare"
158 AC_TRY_COMPILE([],[],nmh_cv_has_nosigncompare=yes,
159 nmh_cv_has_nosigncompare=no)
160 CPPFLAGS="$nmh_saved_cppflags"])
161
162 if test "$nmh_cv_has_nosigncompare" = 'yes'; then
163 DISABLE_SIGN_COMPARE_WARNING=-Wno-sign-compare
164 fi
165 AC_SUBST([DISABLE_SIGN_COMPARE_WARNING])dnl
166
167 AC_CACHE_CHECK([whether compiler supports -Wextra], [nmh_cv_has_wextra],
168 [nmh_saved_cflags="$CFLAGS"
169 CFLAGS="$CFLAGS -Wextra -Wno-clobbered"
170 AC_TRY_COMPILE([],[],nmh_cv_has_wextra=yes,nmh_cv_has_wextra=no)
171 CFLAGS="$nmh_saved_cflags"])
172
173 AC_CACHE_CHECK([whether compiler supports -Wno-pointer-sign], [nmh_cv_has_noptrsign],
174 [nmh_saved_cflags="$CFLAGS"
175 CFLAGS="$CFLAGS -Wno-pointer-sign"
176 AC_TRY_COMPILE([],[],nmh_cv_has_noptrsign=yes,nmh_cv_has_noptrsign=no)
177 CFLAGS="$nmh_saved_cflags"])
178
179 dnl Can't use -ansi with gcc 4.5.3 on Cygwin, at least through setup
180 dnl setup version 2.763, because it disables some features in the
181 dnl system system header files and warns about them with -Wall. Try
182 dnl to test for that generally, though still with gcc.
183 if test "$GCC" = yes; then
184 AC_CACHE_CHECK([whether we can use -ansi with gcc], [nmh_cv_has_dash_ansi],
185 [nmh_saved_cppflags="$CPPFLAGS"
186 nmh_saved_cflags="$CFLAGS"
187 CPPFLAGS="-D_GNU_SOURCE"
188 CFLAGS="-ansi -Wall -Werror"
189 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <time.h>],[tzset();])],
190 [nmh_cv_has_dash_ansi=yes],
191 [nmh_cv_has_dash_ansi=no])
192 CPPFLAGS="$nmh_saved_cppflags"
193 CFLAGS="$nmh_saved_cflags"])
194 else
195 nmh_cv_has_dash_ansi=no
196 fi
197
198 dnl if the user hasn't specified CFLAGS, then
199 dnl if compiler is gcc, then
200 dnl use -O2 and some warning flags
201 dnl else use -O
202 dnl We use -Wall and -Wextra if supported. If the compiler supports it we
203 dnl also use -Wno-pointer-sign, because gcc 4 now produces a lot of new
204 dnl warnings which are probably mostly spurious and which in any case we
205 dnl don't want to deal with now.
206 if test "$nmh_cv_has_noptrsign" = "yes"; then
207 if test "$nmh_cv_has_dash_ansi" = "yes"; then
208 nmh_gcc_common_flags="-ansi -pedantic -Wall"
209 else
210 nmh_gcc_common_flags="-Wall"
211 fi
212 if test "$nmh_cv_has_wextra" = "yes"; then
213 nmh_gcc_warnflags="${nmh_gcc_common_flags} -Wextra -Wno-clobbered "\
214 "-Wno-pointer-sign"
215 else
216 nmh_gcc_warnflags="${nmh_gcc_common_flags} -Wno-pointer-sign"
217 fi
218 else
219 if test "$nmh_cv_has_wextra" = "yes"; then
220 nmh_gcc_warnflags="${nmh_gcc_common_flags} -Wextra -Wno-clobbered"
221 else
222 nmh_gcc_warnflags="${nmh_gcc_common_flags}"
223 fi
224 fi
225
226 if test -n "$auto_cflags"; then
227 if test x"$enable_debug" = x"yes"; then
228 if test -n "$GCC"; then
229 test -z "$CFLAGS" && CFLAGS="$nmh_gcc_warnflags -g" || CFLAGS="$CFLAGS $nmh_gcc_warnflags -g"
230 else
231 test -z "$CFLAGS" && CFLAGS=-g || CFLAGS="$CFLAGS -g"
232 fi
233 else
234 if test -z "$LDFLAGS"; then
235 case "$build_os" in
236 darwin*)
237 LDFLAGS=
238 ;;
239 *)
240 LDFLAGS=-s
241 ;;
242 esac
243 fi
244 if test -n "$GCC"; then
245 test -z "$CFLAGS" && CFLAGS="$nmh_gcc_warnflags -O2" || CFLAGS="$CFLAGS $nmh_gcc_warnflags -O2"
246 else
247 test -z "$CFLAGS" && CFLAGS=-O || CFLAGS="$CFLAGS -O"
248 fi
249 fi
250 fi
251
252 dnl ------------------
253 dnl CHECK FOR PROGRAMS
254 dnl ------------------
255 AC_PROG_MAKE_SET dnl Does make define $MAKE
256 AC_PROG_INSTALL dnl Check for BSD compatible `install'
257 AC_PROG_RANLIB dnl Check for `ranlib'
258 AC_PROG_AWK dnl Check for mawk,gawk,nawk, then awk
259 AC_PROG_SED dnl Check for Posix-compliant sed
260 AM_PROG_LEX dnl Check for lex/flex
261
262 AM_PROG_AR
263
264 dnl Look for `cut'
265 pathtmp=/usr/bin:/bin:/usr/local/bin:/usr/xpg4/bin:/usr/ucb
266 AC_PATH_PROG([cutpath], [cut], [no], [$pathtmp])
267
268 dnl
269 dnl Check for MD5 program and formatting command
270 dnl
271 AC_CHECK_PROGS([MD5SUM], [md5sum md5], [missing])
272 AS_CASE(["${MD5SUM}"],
273 [md5sum], [MD5FMT="cat"],
274 [md5], [[MD5FMT="${SED} -e 's/MD5 *(\(.*\)) *= \([0-9a-f]*\)/\2 \1/'"]],
275 [MD5FMT="missing"])
276 AC_SUBST([MD5FMT])
277
278 dnl ----------------------------------------------
279 dnl check for lclint, and lint if it doesn't exist
280 dnl ----------------------------------------------
281 AC_CHECK_PROG([linttmp1], [lclint], [lclint], [no])dnl
282 AS_IF([test x$ac_cv_prog_linttmp1 != xno],
283 [LINT=$ac_cv_prog_linttmp1
284 LINTFLAGS="-weak +posixlib -macrovarprefixexclude"],
285 [AC_CHECK_PROG([linttmp2], [lint], [lint], [no])dnl
286 AS_IF([test x$ac_cv_prog_linttmp2 != xno],
287 [LINT=$ac_cv_prog_linttmp2
288 LINTFLAGS=""],
289 [LINT="echo 'No lint program found'"
290 LINTFLAGS=""])])
291 AC_SUBST([LINT])dnl
292 AC_SUBST([LINTFLAGS])dnl
293
294 dnl Look for `ls'
295 pathtmp=/usr/bin:/bin:/usr/local/bin:/usr/xpg4/bin:/usr/ucb
296 AC_PATH_PROG([lspath], [ls], [no], [$pathtmp])
297
298 dnl See how we get ls to display the owner and the group
299 AS_IF([test "$lspath" != "no"],
300 [AC_CACHE_CHECK([how to get ls to show us the group ownership of a file],
301 [nmh_cv_ls_grpopt],
302 [AS_IF([test x"`$lspath -dl / | $AWK '{print $9}'`" = x"/"],[
303 dnl There were 9 parameters, so unless this is a really bizarre, nonstandard
304 dnl ls, it would seem -l gave us both the user and group. On this type of
305 dnl ls, -g makes _only_ the group be displayed (and not the user).
306 nmh_cv_ls_grpopt="-l"],[
307 dnl Looks like -l only gave us the user, so we need -g to get the group too.
308 nmh_cv_ls_grpopt="-lg"])])])
309
310 dnl Look for `sendmail'
311 pathtmp=/usr/lib:/usr/sbin:/usr/etc:/usr/ucblib:/usr/bin:/bin
312 AC_PATH_PROG([sendmailpath], [sendmail], [/usr/sbin/sendmail], [$pathtmp])
313
314 dnl Cygwin FAT filesystems do not support hard links. So default to
315 dnl cp instead, even if running on an NTFS or other filesystem.
316 AS_CASE(["$host_os"],
317 [cygwin*],[LN=cp],
318 [LN=ln])
319 AC_SUBST([LN])
320
321 dnl ----------------------------------------------------------
322 dnl FIND MAIL SPOOL AND SEE IF WE NEED TO MAKE inc SETGID MAIL
323 dnl ----------------------------------------------------------
324 AC_CACHE_CHECK(where mail spool is located, nmh_cv_mailspool,
325 [for mailspool in /var/mail dnl
326 /var/spool/mail dnl
327 /usr/spool/mail dnl
328 /dev/null; dnl Just in case we fall through
329 do
330 test -d $mailspool && break
331 done
332 nmh_cv_mailspool=$mailspool
333 ])
334 mailspool=$nmh_cv_mailspool
335 AC_SUBST([mailspool])dnl
336
337 dnl See whether the mail spool directory is world-writable.
338 if test "$lspath" != "no" -a "$cutpath" != "no"; then
339 AC_CACHE_CHECK(whether the mail spool is world-writable,
340 nmh_cv_mailspool_world_writable,
341 [if test "`$lspath -dlL $mailspool | $cutpath -c9`" = "-"; then
342 nmh_cv_mailspool_world_writable=no
343 else
344 nmh_cv_mailspool_world_writable=yes
345 fi])
346 fi
347
348 dnl Also, check for liblockfile (as found on Debian systems)
349 AC_CHECK_HEADER([lockfile.h], [AC_CHECK_LIB(lockfile, lockfile_create)])
350
351 dnl and whether its companion program dotlockfile is setgid
352 AC_PATH_PROG(dotlockfilepath, dotlockfile, no)
353 if test "$ac_cv_lib_lockfile_lockfile_create" != "no" ; then
354 if test "$ac_cv_path_dotlockfilepath" != "no" ; then
355 AC_CACHE_CHECK(whether dotlockfile is setgid, nmh_cv_dotlockfile_setgid,
356 [ if test -g "$ac_cv_path_dotlockfilepath" ; then
357 nmh_cv_dotlockfile_setgid=yes
358 else
359 nmh_cv_dotlockfile_setgid=no
360 fi])
361 fi
362 fi
363
364 dnl Provide a way for distcheck to disable setgid_mail via
365 dnl DISTCHECK_CONFIGURE_FLAGS.
366 AS_IF([test x"$DISABLE_SETGID_MAIL" != x -a x"$DISABLE_SETGID_MAIL" != x0],
367 [nmh_cv_dotlockfile_setgid=yes])
368
369 dnl If mailspool is not world-writable and dotlockfile is not setgid,
370 dnl we need to #define MAILGROUP to 1 and make inc setgid.
371 if test x"$LOCKTYPE" = x"dot" -a x"$nmh_cv_mailspool_world_writable" = x"no" -a x"$nmh_cv_dotlockfile_setgid" != x"yes" ; then
372 dnl do we really need both of these?
373 AC_DEFINE(MAILGROUP,1,
374 [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
375 SETGID_MAIL=1
376 fi
377 AC_SUBST([SETGID_MAIL])dnl
378
379 dnl Use ls to see which group owns the mail spool directory.
380 AC_CACHE_CHECK(what group owns the mail spool, nmh_cv_ls_mail_grp,
381 [nmh_cv_ls_mail_grp=`$lspath -dL $nmh_cv_ls_grpopt $mailspool|$AWK '{print $4}'`
382 ])
383 MAIL_SPOOL_GRP=$nmh_cv_ls_mail_grp
384 AC_SUBST(MAIL_SPOOL_GRP)dnl
385
386 dnl ------------------
387 dnl CHECK HEADER FILES
388 dnl ------------------
389
390 dnl On glibc we need to define at least the '_XOPEN_SOURCE' level of features,
391 dnl or wchar.h doesn't declare a prototype for wcwidth(). But if we only define
392 dnl that level then db.h won't compile. So we define _GNU_SOURCE which turns
393 dnl on everything. Perhaps other OSes need some feature switch set to get wcwidth()
394 dnl declared; if so they should have an entry added to this case statement.
395 dnl NB that we must define this on the compiler command line, not in config.h,
396 dnl because it must be set before any system header is included and there's no
397 dnl portable way to make sure that files generated by lex include config.h
398 dnl before system header files.
399
400 AS_CASE(["$host_os"],
401 [linux*],
402 [# Like DEFS, but doesn't get stomped on by configure when using config.h:
403 AS_IF([test -z "$CPPFLAGS"],[CPPFLAGS="-D_GNU_SOURCE"],
404 [CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"])])
405
406 AC_HEADER_TIOCGWINSZ
407 AC_CHECK_HEADERS([fcntl.h ncurses/termcap.h termcap.h langinfo.h \
408 wchar.h wctype.h sys/param.h sys/time.h sys/stream.h])
409
410 dnl
411 dnl Checks for _IO_write_ptr. A Linuxism used by nmh on linux. We
412 dnl really use a whole set of them, but this check should be
413 dnl sufficient.
414 dnl
415 AC_CHECK_HEADER(libio.h, [
416 AC_EGREP_HEADER(_IO_write_ptr, libio.h, [
417 AC_DEFINE(LINUX_STDIO,1,[Use the Linux _IO_*_ptr defines from <libio.h>.]) ]) ])
418
419 AC_CHECK_HEADER([sys/ptem.h], AC_DEFINE(WINSIZE_IN_PTEM,1,
420 [Define to 1 if `struct winsize' requires <sys/ptem.h>.]),,
421 [[#if HAVE_SYS_STREAM_H
422 # include <sys/stream.h>
423 #endif
424 ]])
425
426 dnl ---------------
427 dnl CHECK FUNCTIONS
428 dnl ---------------
429 AC_CHECK_FUNCS([wcwidth mbtowc writev lstat nl_langinfo getutxent])
430
431 dnl Check for multibyte character set support
432 AS_IF([test "x$ac_cv_header_wchar_h" = "xyes" -a \
433 "x$ac_cv_header_wctype_h" = "xyes" -a \
434 "x$ac_cv_func_wcwidth" = "xyes" -a \
435 "x$ac_cv_func_mbtowc" = "xyes"],
436 [AC_DEFINE([MULTIBYTE_SUPPORT], [1],
437 [Define to enable support for multibyte character sets.])
438 MULTIBYTE_ENABLED=1],
439 [MULTIBYTE_ENABLED=0])
440 AC_SUBST([MULTIBYTE_ENABLED])
441
442 dnl -------------------
443 dnl CHECK FOR LIBRARIES
444 dnl -------------------
445 dnl Check location of modf
446 AC_CHECK_FUNC([modf], , AC_CHECK_LIB([m], [modf]))
447
448 dnl Checks for network libraries (nsl, socket)
449 NMH_CHECK_NETLIBS
450
451 dnl Check for readline support
452 NMH_READLINE
453
454 dnl Check for iconv
455 NMH_CHECK_ICONV
456
457 termcap_curses_order="termcap curses ncurses"
458 for lib in $termcap_curses_order; do
459 AC_CHECK_LIB(${lib}, tgetent, [TERMLIB="-l$lib"; break])
460 done
461 AC_SUBST([TERMLIB])dnl
462 AS_IF([test "x$TERMLIB" = "x"],
463 [AC_MSG_FAILURE([Could not find tgetent in any library. Is there a curses
464 or ncurses library or package that you can install?])])
465
466 dnl --------------
467 dnl CHECK FOR NDBM
468 dnl --------------
469
470 AC_ARG_WITH([ndbm],AS_HELP_STRING([--with-ndbm=ARG],[use -lARG to link with ndbm]),
471 [nmh_ndbm=$withval],[nmh_ndbm=autodetect])
472 AC_ARG_WITH([ndbmheader],AS_HELP_STRING([--with-ndbmheader=ARG],[#include <ARG> to use ndbm]),
473 [nmh_ndbmheader=$withval],[nmh_ndbmheader=autodetect])
474
475 if test "$nmh_ndbm" = "autodetect"; then
476 if test "$nmh_ndbmheader" != "autodetect"; then
477 AC_MSG_ERROR([must specify both --with-ndbm and --with-ndbmheader or neither])
478 else
479
480 dnl There are at least four implementations of ndbm, and
481 dnl several of those can be in different places at the whim
482 dnl of the system integrator. A good summary of this mess
483 dnl can be found at http://www.unixpapa.com/incnote/dbm.html
484
485 dnl Classic ndbm with no library required (eg NetBSD): try this
486 dnl first so we don't accidentally link in a pointless but harmless
487 dnl library in one of the later ndbm.h+libfoo tests:
488 NMH_CHECK_NDBM(ndbm.h,,,
489 dnl Berkeley DBv2 emulating ndbm: header in db.h:
490 NMH_CHECK_NDBM(db.h,db,,
491 dnl Berkeley DBv1 emulating ndbm:
492 NMH_CHECK_NDBM(ndbm.h,db,,
493 NMH_CHECK_NDBM(ndbm.h,db1,,
494 dnl Classic ndbm:
495 NMH_CHECK_NDBM(ndbm.h,ndbm,,
496 dnl glibc2.1 systems put db1 in a subdir:
497 NMH_CHECK_NDBM(db1/ndbm.h,db1,,
498 dnl GNU gdbm emulating ndbm, with header possibly in gdbm/
499 dnl and possibly needing gbdm_compat library:
500 NMH_CHECK_NDBM(gdbm/ndbm.h,gdbm,,
501 NMH_CHECK_NDBM(gdbm/ndbm.h,gdbm_compat -lgdbm,,
502 NMH_CHECK_NDBM(ndbm.h,gdbm,,
503 NMH_CHECK_NDBM(ndbm.h,gdbm_compat -lgdbm))))))))))
504
505 fi
506 else
507 dnl We don't really need to check that the user-specified values work,
508 dnl but it is a convenience to the user to bomb out early rather than
509 dnl after configure and half the compile process.
510 NMH_CHECK_NDBM([$nmh_ndbmheader],[$nmh_ndbm])
511 fi
512
513 if test "$nmh_ndbm_found" = "no"; then
514 AC_MSG_ERROR([could not find a working ndbm library/header combination])
515 else
516 dnl Now export the lib/header to our makefile/config.h:
517 if test x"$nmh_ndbmheader" != x; then
518 AC_DEFINE_UNQUOTED(NDBM_HEADER, <$nmh_ndbmheader>,
519 [Define to the header containing the ndbm API prototypes.])
520 fi
521 if test x"$nmh_ndbm" != x; then
522 NDBM_LIBS="-l$nmh_ndbm"
523 else
524 NDBM_LIBS=
525 fi
526 AC_SUBST([NDBM_LIBS])
527 fi
528
529 dnl ------------------
530 dnl Set RPM build root
531 dnl ------------------
532 dnl nmhrpm is used in the final summary, see below. The default value is
533 dnl reported there as ./RPM, consistent with the reporting of the default
534 dnl source code location as ., but its absolute path is used in the Makefile.
535 AC_ARG_WITH([rpmdir],
536 [AS_HELP_STRING([--with-rpmdir=RPMDIR], [RPM build directory @<:@RPM@:>@])])
537 AS_IF([test x"$with_rpmdir" = x], [rpmdir='$(abs_srcdir)/RPM'; nmhrpm=./RPM],
538 [rpmdir="$with_rpmdir"; eval "nmhrpm=${rpmdir}"])
539 AC_SUBST([rpmdir])
540
541
542 dnl --------------------
543 dnl CHECK FOR CYRUS-SASL
544 dnl --------------------
545
546 AS_IF([test x"$sasl_support" = x"yes"],[
547 AC_CHECK_HEADER([sasl/sasl.h], , [AC_MSG_ERROR([sasl.h not found])])
548 AC_CHECK_LIB([sasl2], [sasl_client_new], [SASLLIB="-lsasl2"],
549 [AC_MSG_ERROR([Cyrus SASL library not found])])],[SASLLIB=""])
550 AC_SUBST([SASLLIB])
551
552 dnl -----------------
553 dnl CHECK FOR OPENSSL
554 dnl -----------------
555
556 AS_IF([test x"$tls_support" = x"yes"],[
557 AC_CHECK_HEADER([openssl/ssl.h], , [AC_MSG_ERROR([openssl/ssl.h not found])])
558 AC_CHECK_LIB([crypto], [BIO_write], [TLSLIB="-lcrypto"],
559 [AC_MSG_ERROR([OpenSSL crypto library not found])])
560 AC_CHECK_LIB([ssl], [SSL_library_init], [TLSLIB="-lssl $TLSLIB"],
561 [AC_MSG_ERROR([OpenSSL library not found])])],
562 [TLSLIB=])
563 AC_SUBST([TLSLIB])
564
565 dnl ---------------------
566 dnl CHECK TERMCAP LIBRARY
567 dnl ---------------------
568
569 dnl Add the termcap library, so that the following configure
570 dnl tests will find it when it tries to link test programs.
571 nmh_save_LIBS="$LIBS"
572 LIBS="$TERMLIB $LIBS"
573
574 dnl Check if tgetent accepts NULL (and will allocate its own termcap buffer)
575 dnl Some termcaps reportedly accept a zero buffer, but then dump core
576 dnl in tgetstr().
577 dnl Under Cygwin test program crashes but exit code is still 0. So,
578 dnl we test for a file that porgram should create
579 AH_TEMPLATE([TGETENT_ACCEPTS_NULL],
580 [Define to 1 if tgetent() accepts NULL as a buffer.])
581 AC_CACHE_CHECK(if tgetent accepts NULL,
582 nmh_cv_func_tgetent_accepts_null,
583 [AC_TRY_RUN([
584 main()
585 {
586 char buf[4096];
587 int r1 = tgetent(buf, "vt100");
588 int r2 = tgetent((char*)0,"vt100");
589 if (r1 >= 0 && r1 == r2) {
590 char tbuf[1024], *u;
591 u = tbuf;
592 tgetstr("cl", &u);
593 creat("conftest.tgetent", 0640);
594 }
595 exit((r1 != r2) || r2 == -1);
596 }
597 ],
598 if test -f conftest.tgetent; then
599 nmh_cv_func_tgetent_accepts_null=yes
600 else
601 nmh_cv_func_tgetent_accepts_null=no
602 fi,
603 nmh_cv_func_tgetent_accepts_null=no,
604 nmh_cv_func_tgetent_accepts_null=no)])
605 if test x$nmh_cv_func_tgetent_accepts_null = xyes; then
606 AC_DEFINE(TGETENT_ACCEPTS_NULL)
607 fi
608 AC_CACHE_CHECK(if tgetent returns 0 on success,
609 nmh_cv_func_tgetent_zero_success,
610 [AC_TRY_RUN([
611 main()
612 {
613 char buf[4096];
614 int r1 = tgetent(buf, "!@#$%^&*");
615 int r2 = tgetent(buf, "vt100");
616 if (r1 < 0 && r2 == 0) {
617 char tbuf[1024], *u;
618 u = tbuf;
619 tgetstr("cl", &u);
620 creat("conftest.tgetent0", 0640);
621 }
622 exit(r1 == r2);
623 }
624 ],
625 if test -f conftest.tgetent0; then
626 nmh_cv_func_tgetent_zero_success=yes
627 else
628 nmh_cv_func_tgetent_zero_success=no
629 fi,
630 nmh_cv_func_tgetent_zero_success=no,
631 nmh_cv_func_tgetent_zero_success=no)])
632 AH_TEMPLATE([TGETENT_SUCCESS],
633 [Define to what tgetent() returns on success (0 on HP-UX X/Open curses).])
634 if test x$nmh_cv_func_tgetent_zero_success = xyes; then
635 AC_DEFINE(TGETENT_SUCCESS, 0)
636 else
637 AC_DEFINE(TGETENT_SUCCESS, 1)
638 fi
639
640 dnl Now put the libraries back to what it was before we
641 dnl starting checking the termcap library.
642 LIBS="$nmh_save_LIBS"
643
644 dnl --------------
645 dnl CHECK TYPEDEFS
646 dnl --------------
647 AC_TYPE_PID_T
648 AC_TYPE_OFF_T
649 AC_TYPE_UID_T
650 AC_TYPE_MODE_T
651 AC_TYPE_SIZE_T
652
653 dnl ----------------
654 dnl CHECK STRUCTURES
655 dnl ----------------
656
657 dnl For platforms such as FreeBSD that have tm_gmtoff in struct tm.
658 dnl (FreeBSD has a timezone() function but not a timezone global
659 dnl variable that is visible).
660 AC_CHECK_MEMBERS([struct tm.tm_gmtoff],,,[#include <time.h>])
661
662 AC_STRUCT_DIRENT_D_TYPE
663
664 dnl Where is <signal.h> located? Needed as input for signames.awk
665 AC_CACHE_CHECK(where signal.h is located, nmh_cv_path_signal_h,
666 [for SIGNAL_H in /usr/include/bsd/sys/signal.h dnl Next
667 /usr/include/asm/signal.h dnl Linux 1.3.0 and above
668 /usr/include/asm/signum.h dnl some versions of Linux/Alpha
669 /usr/include/linux/signal.h dnl Linux up to 1.2.11
670 /usr/include/sys/signal.h dnl Almost everybody else
671 /dev/null; dnl Just in case we fall through
672 do
673 test -f $SIGNAL_H && \
674 grep '#[ ]*define[ ][ ]*SIG[0-9A-Z]*[ ]*[0-9][0-9]*' $SIGNAL_H > /dev/null && \
675 break
676 done
677 nmh_cv_path_signal_h=$SIGNAL_H
678 ])
679 SIGNAL_H=$nmh_cv_path_signal_h
680 AC_SUBST(SIGNAL_H)dnl
681
682 dnl
683 dnl Sigh, this is required because under the new world order autoconf has
684 dnl nothing to create in a few of the build directories when doing an object
685 dnl tree build. So make sure we created certain directories if they don't
686 dnl exist.
687 dnl
688
689 AC_CONFIG_COMMANDS([build-directories],
690 [test -d etc || AS_MKDIR_P([etc])
691 test -d man || AS_MKDIR_P([man])])
692
693 AC_CONFIG_COMMANDS_POST([
694
695 dnl These odd looking assignments are done to expand out unexpanded
696 dnl variables in bindir et al (for instance mandir is '${datarootdir}/man'),
697 dnl but expanding that gives '${prefix}/share/man', so we need to expand
698 dnl again to get the final answer.
699 dnl We only use the expanded versions to print the install paths in
700 dnl the final summary and should use them nowhere else (see the autoconf
701 dnl docs for the rationale for bindir etc being unexpanded).
702 eval "nmhbin=${bindir}"; eval "nmhbin=${nmhbin}"
703 eval "nmhsysconf=${sysconfdir}"; eval "nmhsysconf=${nmhsysconf}"
704 eval "nmhlib=${libdir}"; eval "nmhlib=${nmhlib}"
705 eval "nmhman=${mandir}"; eval "nmhman=${nmhman}"
706 eval "nmhrpm=${nmhrpm}";
707
708 AC_MSG_NOTICE([
709 nmh configuration
710 -----------------
711 nmh version : AC_PACKAGE_VERSION
712 host os : ${host}
713 compiler : ${CC}
714 compiler flags : ${CFLAGS}
715 linker flags : ${LDFLAGS}
716 preprocessor flags : ${CPPFLAGS}
717 source code location : ${srcdir}
718 binary install path : ${nmhbin}
719 library install path : ${nmhlib}
720 config files install path : ${nmhsysconf}
721 man page install path : ${nmhman}
722 RPM build root : ${nmhrpm}
723 backup prefix : ${backup_prefix}
724 transport system : ${MTS}
725 file locking type : ${LOCKTYPE}
726 default smtp servers : ${smtpservers}
727 default editor : ${editorpath}
728 SASL support : ${sasl_support}
729 TLS support : ${tls_support}
730 ])])dnl
731
732 dnl ---------------
733 dnl OUTPUT MAKEFILE
734 dnl ---------------
735 AC_CONFIG_FILES([Makefile test/common.sh])
736 AC_CONFIG_FILES([uip/spost], [chmod +x uip/spost])
737 AC_OUTPUT