1dnl Process this file with autoconf to produce a configure script.
2dnl $Id: configure.in,v 1.122 2010/05/30 21:45:35 mrsam Exp $
3dnl
4dnl Copyright 1998 - 2009 Double Precision, Inc.  See COPYING for
5dnl distribution information.
6
7AC_INIT(courier, 0.65, [courier-users@lists.sourceforge.net])
8
9>confdefs.h  # Kill PACKAGE_ macros
10
11AC_CONFIG_SRCDIR(submit.C)
12AC_CANONICAL_SYSTEM
13AM_INIT_AUTOMAKE([foreign])
14LPATH="$PATH:/usr/local/bin"
15AM_CONFIG_HEADER(config.h)
16
17dnl Checks for programs.
18AC_PROG_MAKE_SET
19AC_PROG_AWK
20AC_PROG_CC
21AC_PROG_CXX
22AC_PROG_INSTALL
23AC_PROG_LN_S
24AC_PATH_PROGS(PERL, perl5 perl, perl, $LPATH)
25AC_LIBTOOL_DLOPEN
26AM_PROG_LIBTOOL
27
28AC_PATH_PROG(PROCMAIL, procmail, /usr/bin/procmail, $LPATH)
29AC_PATH_PROG(CAT, cat, cat, $LPATH)
30AC_PATH_PROG(SED, sed, sed, $LPATH)
31if test "$SED" = "sed"
32then
33	AC_MSG_ERROR(sed not found.)
34fi
35AC_SUBST(SED)
36
37AC_PATH_PROG(SORT, sort, sort, $LPATH)
38if test "$SORT" = "sort"
39then
40	AC_MSG_ERROR(sort not found)
41fi
42AC_SUBST(SORT)
43
44AC_PATH_PROG(SETENV, env, env, $LPATH)
45if test "$SETENV" = "env"
46then
47	AC_MSG_ERROR(env not found.)
48fi
49AC_SUBST(SETENV)
50
51AC_PATH_PROGS(COURIERAUTHCONFIG, courierauthconfig)
52
53if test "$COURIERAUTHCONFIG" = ""
54then
55	AC_MSG_ERROR(courierauthconfig not found)
56fi
57
58CFLAGS="-I$srcdir/.. -I.. -I$srcdir/../afx -I$srcdir/../rfc822 -I$srcdir/libs $CFLAGS"
59CXXFLAGS="-I$srcdir/.. -I.. -I$srcdir/../afx -I$srcdir/../rfc822 -I$srcdir/libs $CXXFLAGS"
60
61AC_ARG_WITH(softlinkdir, [  --with-softlinks=dir:link,dir:link...   specify soft links for
62                                          installation subdirectories.], ,
63	ac_configure_args="$ac_configure_args --with-softlinkdir=$prefix")
64
65AC_ARG_WITH(testmode, [ -- This space intentionally left blank --],
66	testmode="$withval", testmode="N")
67
68case "$testmode" in
69y*|y*|1)
70	testmode=1
71	CFLAGS=`echo "$CFLAGS" | sed 's/-O2//'`
72	CXXFLAGS=`echo "$CXXFLAGS" | sed 's/-O2//'`
73	;;
74*)
75	testmode=0
76	;;
77esac
78AC_SUBST(testmode)
79
80version=`cat ../version`
81
82COPYRIGHT="Courier $version Copyright 1999-2008 Double Precision, Inc."
83AC_SUBST(COPYRIGHT)
84
85dnl Check whether we should use gdbm, or db.
86#
87#
88# We may need libdl for later, not just shared check.
89#
90
91saveLIBS="$LIBS"
92AC_CHECK_LIB(dl, dlopen, [ LIBDL="-ldl" ])
93LIBS="$saveLIBS"
94
95dnl Checks for transport libraries.
96
97#
98# Figure out what goes into make dist.  Search for all the available
99# module. subdirectories
100#
101
102distdirlist=""
103
104AC_MSG_CHECKING(for available modules)
105for f in $srcdir/module.*/courier.config
106do
107	test -f "$f" || continue
108	dir=`echo $f | sed 's:/courier.config$::;s:.*/::;'`
109	name=` . $f ; echo $NAME`
110	distdirlist="$distdirlist $dir"
111	eval "DIR_$name=$dir"
112done
113AC_MSG_RESULT($distdirlist)
114
115AC_ARG_WITH(transport,
116[  --with-transport='local esmtp ...'
117                          Specify list of modules to install],
118	transport="$withval",
119	transport=`
120		for f in $distdirlist
121		do
122			( . $srcdir/$f/courier.config ; echo $PRIORITY $NAME )
123		done | sort -n | awk ' { print $2 } '
124		`
125	transport=`echo $transport`
126	ac_configure_args="$ac_configure_args --with-transport='$transport'",
127	)
128
129AC_SUBST(MODE)
130AC_SUBST(transport)
131
132AC_MSG_CHECKING(for modules to compile)
133
134dirlist=""
135for module in $transport
136do
137	name='$DIR_'$module
138	eval "dir=\"$name\""
139	if test "$dir" = ""
140	then
141		AC_MSG_ERROR(Driver not available: $module)
142	fi
143	dirlist="$dirlist $dir"
144done
145
146AC_MSG_RESULT($dirlist)
147AC_SUBST(dirlist)
148AC_SUBST(distdirlist)
149
150AC_ARG_WITH(db, [], db="$withval", db="")
151
152. ../dbobj.config
153dblibrary="../$dblibrary"
154AC_SUBST(dblibrary)
155
156AC_ARG_WITH(courierlogger, [], courierlogger=$withval,
157			   [
158			   AC_MSG_ERROR(--with-courierlogger option missing)
159			   ])
160
161AC_SUBST(courierlogger)
162
163USENSL=no
164AC_CHECK_LIB(socket,socket,result=yes,result=no)
165if test $result = yes; then
166        NETLIBS="-lsocket"
167else
168        AC_CHECK_LIB(socket,socket,result=yes,result=no,-lnsl)
169        if test $result = yes; then
170                NETLIBS = "-lsocket -lnsl"
171                USENSL=yes
172        else
173                AC_CHECK_LIB(socket,connect,result=yes,result=no)
174                if test $result = yes; then
175                        NETLIBS="-lsocket"
176                else
177                        AC_CHECK_LIB(socket,connect,result=yes,result=no,-lnsl)
178                        if test $result = yes; then
179                                NETLIBS="-lsocket -lnsl"
180                                USENSL=yes
181                        fi
182                fi
183        fi
184fi
185
186if test $USENSL != yes; then
187	LIBS="$LIBS $NETLIBS"
188	AC_TRY_LINK_FUNC(inet_addr, [ : ],
189	[
190	        AC_CHECK_LIB(nsl,inet_addr,result=yes,result=no)
191	        if test $result = yes; then
192	                NETLIBS="$NETLIBS -lnsl"
193	        fi
194	])
195fi
196
197LIBS="$saveLIBS"
198
199AC_SUBST(NETLIBS)
200
201AC_CHECK_HEADERS(netinet/in.h)
202
203saveLIBS="$LIBS"
204LIBS="$NETLIBS $LIBS"
205LDAPLIBS=""
206AC_CHECK_LIB(lber, ber_scanf,
207	[ LDAPLIBS="-llber" LIBS="-llber $LIBS" ])
208
209
210        AC_MSG_CHECKING(whether -lresolv is needed for res_query)
211	AC_LINK_IFELSE(AC_LANG_PROGRAM([
212#include <sys/types.h>
213#if HAVE_NETINET_IN_H
214#include <netinet/in.h>
215#endif
216#include <resolv.h>
217
218void (*func)()= (void (*)())res_query;
219],
220			[  (*func)(); ]),
221        	AC_MSG_RESULT(no),
222		[
223        	LIBS="-lresolv $LIBS"
224
225		AC_LINK_IFELSE(AC_LANG_PROGRAM([
226#if HAVE_NETINET_IN_H
227#include <netinet/in.h>
228#endif
229#include <resolv.h>
230
231void (*func)()= (void (*)())res_query;
232],
233			[  (*func)(); ]), [
234        		LDAPLIBS="-lresolv $LDAPLIBS"
235			HAVE_LDAP=1
236        		AC_MSG_RESULT(yes)
237			],
238        		AC_MSG_ERROR(Cannot find function res_query))
239			])
240
241AC_CHECK_LIB(ldap, ldap_open,
242	[ LDAPLIBS="-lldap $LDAPLIBS" ; LIBS="-lldap $LIBS" ])
243AC_CHECK_FUNC(ldap_search_st, HAVE_LDAP=1, HAVE_LDAP=0)
244LIBS="$saveLIBS"
245
246AC_ARG_WITH(ldapaliasd, [ --without-ldapaliasd ],
247			ldapaliasd="$withval",
248			ldapaliasd="yes")
249
250if test "$ldapaliasd" = "no"
251then
252	LDAPLIBS=""
253	HAVE_LDAP=0
254fi
255
256
257AC_SUBST(LDAPLIBS)
258
259if test $HAVE_LDAP = 1
260then
261	COURIERLDAPALIASD=courierldapaliasd
262	LDAPALIASRC=ldapaliasrc.dist
263fi
264
265AC_SUBST(COURIERLDAPALIASD)
266AC_SUBST(LDAPALIASRC)
267AC_SUBST(HAVE_LDAP)
268
269AC_CONFIG_SUBDIRS( libs filters doc webadmin $dirlist )
270
271dnl Checks for header files.
272AC_HEADER_STDC
273AC_HEADER_DIRENT
274AC_CHECK_HEADERS(sys/types.h sys/time.h sys/stat.h sys/wait.h sys/file.h sysexits.h unistd.h fcntl.h syslog.h locale.h langinfo.h sys/ioctl.h ldap.h lber.h)
275AC_HEADER_TIME
276
277dnl Checks for typedefs, structures, and compiler characteristics.
278
279AC_PID_T
280AC_TYPE_UID_T
281AC_TYPE_SIGNAL
282
283AC_COMPILE_IFELSE([
284
285#include <stdio.h>
286
287int main()
288{
289   setvbuf(stderr, NULL, _IOLBF, BUFSIZ);
290}
291],
292	AC_DEFINE_UNQUOTED(HAVE_SETVBUF_IOLBF,1,[Whether setvbuf(..._IOLBF) works])
293)
294
295AC_CACHE_CHECK([for socklen_t],
296	courier_cv_hassocklen_t,
297
298AC_COMPILE_IFELSE(
299AC_LANG_SOURCE( [
300#include <sys/types.h>
301#include <sys/socket.h>
302
303socklen_t sl_t;
304],[
305	accept(0, 0, &sl_t);
306]),
307	courier_cv_hassocklen_t=yes,
308	courier_cv_hassocklen_t=no)
309)
310
311socklen_t="int"
312
313if test $courier_cv_hassocklen_t = yes
314then
315	:
316else
317	AC_DEFINE_UNQUOTED(socklen_t, int, [ Default definition for socklen_t ])
318fi
319
320dnl Checks for library functions.
321
322AC_CHECK_FUNCS(strcasecmp strncasecmp setpgrp setgroups initgroups mkfifo setlocale)
323
324AC_CHECK_FUNC(setpgrp,
325	[
326	AC_FUNC_SETPGRP
327	]
328)
329
330dnl Other options
331
332AC_ARG_WITH(mailuser, [], mailuser="$withval",
333	AC_MSG_ERROR(--with-mailuser not set))
334
335AC_ARG_WITH(mailgroup, [], mailgroup="$withval",
336	AC_MSG_ERROR(--with-mailgroup not set))
337
338AC_ARG_WITH(mailuid, [], mailuid="$withval",
339	AC_MSG_ERROR(--with-mailuid not set))
340
341AC_ARG_WITH(mailgid, [], mailgid="$withval",
342	AC_MSG_ERROR(--with-mailgid not set))
343
344AC_SUBST(mailuser)
345AC_SUBST(mailgroup)
346AC_SUBST(mailuid)
347AC_SUBST(mailgid)
348
349AC_ARG_WITH(explicitsync, [  --without-explicitsync  Do not manually sync queue files],
350	explicitsync="$withval", explicitsync="Y")
351
352case "$explicitsync" in
353y*|Y*|1*)
354	AC_DEFINE_UNQUOTED(EXPLICITSYNC,1,
355	[ Whether message files are explicitly flushed after creation ])
356	;;
357esac
358
359AC_ARG_WITH(dirsync, [ --with-dirsync           Manually sync queue file directory],
360	dirsync="$withval", dirsync="N")
361
362case "$dirsync" in
363y*|Y*|1*)
364	AC_DEFINE_UNQUOTED(EXPLICITDIRSYNC,1,
365	[ Whether to sync the parent directory after delivering to a maildir ])
366	;;
367esac
368
369
370AC_ARG_WITH(shellpath, [  --with-shellpath=path   Initialize PATH to path for .courier programs],
371	SHELLPATH="$withval",
372	SHELLPATH="$prefix/bin:/bin:/usr/bin:/usr/local/bin")
373
374AC_SUBST(SHELLPATH)
375
376#
377# Default POP3 configuration
378#
379
380for f in $AUTHMODULELIST x
381do
382	if test "$f" = "authldap"
383	then
384		AC_ERROR(You must use authdaemon with authldap)
385	fi
386done
387
388# Automake stupidity
389
390if test "$testmode" = "0"
391then
392	INSTALL_PROGRAM='${INSTALL} -m 700'
393	INSTALL_SCRIPT='${INSTALL} -m 700'
394	INSTALL_DATA='${INSTALL} -m 600'
395fi
396
397AC_LANG_CPLUSPLUS
398AC_CACHE_CHECK([if the C++ compiler needs -fhandle-exceptions],
399	ac_cv_need_handlexceptions,
400
401AC_TRY_COMPILE([],
402[
403throw;
404], ac_cv_need_handlexceptions=no,
405ac_cv_need_handlexceptions=yes)
406)
407
408if test "$ac_cv_need_handlexceptions" = "yes"
409then
410	case "$CXXFLAGS" in
411	*handle-exceptions*)
412		;;
413	*)
414		CXXFLAGS="-fhandle-exceptions $CXXFLAGS"
415		CXXFLAGS=`echo "$CXXFLAGS" | sed 's/-O2//'`
416		;;
417	esac
418fi
419AC_LANG_C
420
421AC_TRY_COMPILE( [
422#include <signal.h>
423#include <string.h>
424#include <stdio.h>
425],[
426struct sigaction sa;
427
428memset(&sa, 0, sizeof(sa));
429sa.sa_handler=SIG_IGN;
430sa.sa_flags=SA_NOCLDWAIT;
431sigaction(SIGCHLD, &sa, NULL);
432], AC_DEFINE_UNQUOTED(USE_NOCLDWAIT,1, [ Whether to use SA_NOCLDWAIT ]))
433
434if test x$GCC = xyes
435then
436	CFLAGS="-Wall $CFLAGS"
437fi
438if test x$GXX = xyes
439then
440	CXXFLAGS="-Wall $CXXFLAGS"
441fi
442
443echo "mailuser=$mailuser" >uidgid
444echo "mailgroup=$mailgroup" >>uidgid
445
446if $SHELL -c 'ulimit -v 0 2>/dev/null'
447then
448	ULIMIT='ulimit -v'
449else
450	ULIMIT='ulimit -d'
451fi
452
453AC_SUBST(ULIMIT)
454
455for f in /etc/environment /etc/default/locale /etc/sysconfig/i18n /etc/sysconfig/language
456do
457	if test -f "$f"
458	then
459		INIT_LOCALE=". $f"
460	fi
461done
462
463AC_SUBST(INIT_LOCALE)
464
465# Unless you're the maintainer, reset DEBUGLIB just in case.
466#
467#case `hostname` in
468#*.email-scan.com)
469#	;;
470#*)
471	DEBUGLIB=""
472#	;;
473#esac
474
475AC_SUBST(DEBUGLIB)
476
477test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
478
479eval "exec_prefix=$exec_prefix"
480eval "datarootdir=$datarootdir"
481eval "bindir=$bindir"
482eval "localstatedir=$localstatedir"
483
484MAILDROP="$bindir/maildrop"
485AC_SUBST(MAILDROP)
486
487AC_DEFINE_UNQUOTED(MAILDROP,"$MAILDROP",
488	[ Whether maildrop is installed ])
489
490. ../tcpd/couriertls.config
491AC_SUBST(couriertls)
492
493# Some automake roughage
494EXTRABIN='$(extrabin)'
495AC_SUBST(EXTRABIN)
496EXTRAPKGLIB='$(extrapkglib)'
497AC_SUBST(EXTRAPKGLIB)
498EXTRASBIN='$(extrasbin)'
499AC_SUBST(EXTRASBIN)
500SBINSCRIPTS='$(sbinscripts)'
501AC_SUBST(SBINSCRIPTS)
502EXTRACMDLIB='$(extracmdlib)'
503AC_SUBST(EXTRACMDLIB)
504EXTRAWEBMAIL='$(extrawebmail)'
505AC_SUBST(EXTRAWEBMAIL)
506
507. ../rootcerts/rootcertsdir.cnf
508AC_SUBST(cacerts)
509
510AC_OUTPUT(Makefile courier.h \
511	courierctl.start \
512	courierd.dist \
513	dot-qmail-to-dot-courier.pl \
514	pop3d \
515	pop3d-ssl \
516	imapd.rc \
517	imapd-ssl.rc \
518	rfcerrheader.txt
519	makealiases \
520	makehosteddomains \
521	mkmodules.sh perms.sh setperms.sh \
522	perftest1 webmaild webmlmrc.dist webmlmd.rc)
523