]> code.citadel.org Git - citadel.git/blob - citadel/configure.in
* no icq
[citadel.git] / citadel / configure.in
1 dnl Process this file with autoconf to produce a configure script.
2 dnl $Id$
3 AC_PREREQ(2.13)
4 AC_INIT(citserver.c)
5 AC_PREFIX_DEFAULT(/usr/local/citadel)
6 if test "$prefix" = NONE; then
7         AC_DEFINE_UNQUOTED(BBSDIR, "$ac_default_prefix")
8 else
9         AC_DEFINE_UNQUOTED(BBSDIR, "$prefix")
10 fi
11
12 AC_ARG_ENABLE(autologin, [  --disable-autologin     disable autologin (default is enabled if possible)])
13 AC_ARG_ENABLE(chkpwd, [  --disable-chkpwd        don't build 'chkpwd'])
14
15 AC_ARG_ENABLE(threaded-client, [  --disable-threaded-client
16                           disable multithreaded client])
17
18 AC_ARG_WITH(pam, [  --with-pam              use PAM if present (see PAM.txt before you try this)])
19 AC_ARG_WITH(kthread, [  --with-kthread          use kernel threads (on FreeBSD) (not recommended yet)])
20
21 dnl By default, we only build the client (citadel and whobbs) unless we can
22 dnl figure out how to build with POSIX threads.
23 TARGETS=client
24
25 AC_CANONICAL_HOST
26 SO=.so
27 PTHREAD_DEFS=-D_REENTRANT
28 LINK_SHARED='$(CC) -shared'
29 case "$host" in
30         dnl BSDI 3.0 wants relocatable object modules instead of shared libs
31         dnl for dlopen(), and has a wrapper script to link with shared libs.
32         dnl Also has stupid non-reentrant gethostbyaddr() and friends.
33         *-*-bsdi[123]*)
34                 test -z "$CC" -a -x /usr/bin/shlicc2 && CC=shlicc2
35                 SO=.mo
36                 AC_DEFINE(HAVE_NONREENTRANT_NETDB)
37         ;;
38         *-*-bsdi*)
39                 AC_DEFINE(HAVE_NONREENTRANT_NETDB)
40         ;;
41         dnl Digital Unix has an odd way to build for pthreads, and we can't
42         dnl build pthreads programs with gcc due to header problems.
43         alpha*-dec-osf*)
44                 test -z "$CC" && CC=cc
45                 PTHREAD_DEFS=-pthread
46                 PTHREAD_LIBS=-pthread
47                 check_pthread=no
48         ;;
49         dnl FreeBSD is similar to Digital UNIX:
50         *-*-freebsd*)
51                 if test "$with_kthread" = yes; then
52                         PTHREAD_LIBS=-kthread
53                 else
54                         PTHREAD_LIBS=-pthread
55                 fi
56                 check_pthread=no
57                 PTHREAD_DEFS=-D_THREAD_SAFE
58         ;;
59         *-*-openbsd*)
60                 PTHREAD_LIBS=-pthread
61                 check_pthread=no
62                 PTHREAD_DEFS=-pthread
63                 LINK_SHARED="ld -x -Bshareable"
64         ;;
65         *-*-solaris*)
66                 PTHREAD_DEFS="-D_REENTRANT -D_PTHREADS"
67         ;;
68 esac
69
70 dnl Checks for programs.
71 AC_PROG_CC
72
73 dnl Set up system-dependent compiler flags.
74 if test "$GCC" = yes; then
75         case "$host" in
76                 *-*-bsdi[123]*)
77                         CFLAGS="$CFLAGS -Wall -Wstrict-prototypes"
78                 ;;
79                 mips*-sgi-irix*)
80                         CFLAGS="$CFLAGS -Wall -Wstrict-prototypes"
81                         PICFLAGS=-fPIC
82                 ;;
83                 *-*-solaris*)
84                         CFLAGS="$CFLAGS -Wall -Wno-char-subscripts"
85                         PICFLAGS=-fPIC
86                 ;;
87                 *)
88                         CFLAGS="$CFLAGS -Wall -Wstrict-prototypes"
89                         SERVER_LDFLAGS="$SERVER_LDFLAGS -rdynamic"
90                         PICFLAGS=-fPIC
91                 ;;
92         esac
93 fi
94 AC_PROG_RANLIB
95 AC_PROG_INSTALL
96 AC_PROG_YACC
97 missing_dir=`cd $ac_aux_dir && pwd`
98 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
99
100 dnl Checks for system services.
101 AC_EXEEXT
102
103 dnl Checks for libraries.
104
105 dnl libdl, libgdbm, and libcrypt are only used in the server, so the
106 dnl Makefile only passes $(LIBS) to that target. If other programs start
107 dnl requiring additional libraries, we'll have to use other variables, as is
108 dnl done with curses.
109
110 dnl We want to test for the following in libc before checking for their
111 dnl respective libraries, because some systems (like Irix) have both, and the
112 dnl non-libc versions may be broken.
113 AC_CHECK_FUNCS(crypt dlopen gethostbyname connect)
114
115 if test "$ac_cv_func_gethostbyname" = no; then
116         AC_CHECK_LIB(nsl, gethostbyname, NETLIBS="-lnsl $NETLIBS")
117 fi
118
119 if test "$ac_cv_func_connect" = no; then
120         AC_CHECK_LIB(socket, connect, NETLIBS="-lsocket $NETLIBS",, $NETLIBS)
121 fi
122
123 if test "$ac_cv_func_dlopen" = no; then
124         AC_CHECK_LIB(dl, dlopen, [LIBS="-ldl $LIBS"
125                 test "$with_pam" = yes && chkpwd_LIBS="-ldl $chkpwd_LIBS"])
126 fi
127
128 dnl Determine the system's authentication capabilities, if autologin is
129 dnl requested. We currently support PAM, standard getpwnam(), and getspnam()
130 dnl (Linux shadow passwords)
131 if test "$enable_autologin" != no; then
132         if test "$with_pam" = yes; then
133                 save_LIBS=$LIBS
134                 AC_CHECK_LIB(pam, pam_start, [chkpwd_LIBS="-lpam $chkpwd_LIBS"
135                         LIBS="-lpam $LIBS"])
136                 AC_CHECK_FUNCS(pam_start)
137                 test "$enable_chkpwd" != no && LIBS=$save_LIBS
138         fi
139         if test "$ac_cv_func_pam_start" = no -o "$with_pam" != yes; then
140                 save_LIBS=$LIBS
141                 AC_SEARCH_LIBS(getspnam, shadow, [
142                         if test "$ac_cv_search_getspnam" = -lshadow; then
143                                 chkpwd_LIBS="-lshadow $chkpwd_LIBS"
144                         fi])
145                 test "$enable_chkpwd" != no && LIBS=$save_LIBS
146                 if test "$ac_cv_func_crypt" = no; then
147                         AC_CHECK_LIB(crypt, crypt, [
148                                 chkpwd_LIBS="-lcrypt $chkpwd_LIBS"
149                                 test "$enable_chkpwd" = no && \
150                                         LIBS="-lcrypt $LIBS"])
151                 fi
152         fi
153         if test "$ac_cv_func_crypt" = yes -o "$ac_cv_lib_crypt_crypt" = yes -o "$ac_cv_func_pam_start" = yes; then
154                 AC_DEFINE(ENABLE_AUTOLOGIN)
155                 if test "$enable_chkpwd" != no; then
156                         AC_DEFINE(ENABLE_CHKPWD)
157                         CHKPWD=chkpwd
158                 else
159                         AUTH=auth.ro
160                 fi
161         fi
162 fi
163
164 test -f /usr/local/lib/libgdbm.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
165 AC_CHECK_LIB(gdbm, gdbm_open, GDBM="$GDBM -lgdbm")
166
167 test -f /usr/local/lib/libresolv.a && LDFLAGS="$LDFLAGS -L/usr/local/lib"
168 AC_CHECK_LIB(resolv, res_query, RESOLV="$RESOLV -lresolv")
169
170 save_LIBS=$LIBS
171 LIBS=$CURSES
172 AC_SEARCH_LIBS(tgetent, [curses termcap])
173 AC_SEARCH_LIBS(initscr, [curses ncurses])
174 CURSES=$LIBS
175 LIBS=$save_LIBS
176
177 dnl Check for libpthread(s) if we're not using Digital UNIX or FreeBSD. (On
178 dnl which the -pthread flag takes care of this.)
179 if test "$check_pthread" != no; then
180         AC_CHECK_LIB(pthread, pthread_create,
181                 PTHREAD_LIBS="-lpthread $PTHREAD_LIBS")
182         AC_CHECK_LIB(pthreads, pthread_create,
183                 PTHREAD_LIBS="-lpthreads $PTHREAD_LIBS")
184 fi
185
186 dnl Checks for header files.
187 AC_HEADER_DIRENT
188 AC_HEADER_STDC
189 AC_HEADER_SYS_WAIT
190 test -f /usr/local/include/gdbm.h && CPPFLAGS="$CPPFLAGS -I/usr/local/include"
191 AC_CHECK_HEADERS(curses.h fcntl.h limits.h termios.h strings.h sys/ioctl.h sys/select.h sys/time.h syslog.h unistd.h gdbm.h utmp.h utmpx.h paths.h)
192
193 dnl some systems require -pthread, -D_REENTRANT, etc to be passed to cc if we
194 dnl include pthread.h:
195 save_CPPFLAGS=$CPPFLAGS
196 CPPFLAGS="$CPPFLAGS $PTHREAD_DEFS"
197 AC_CHECK_HEADERS(pthread.h)
198 CPPFLAGS=$save_CPPFLAGS
199
200 dnl Checks for typedefs, structures, and compiler characteristics.
201 AC_C_CONST
202 AC_TYPE_PID_T
203 AC_TYPE_SIZE_T
204 AC_HEADER_TIME
205 AC_STRUCT_TM
206
207 AC_CACHE_CHECK([for ut_type in struct utmp], ac_cv_struct_ut_type,
208 [AC_TRY_COMPILE([#include <sys/types.h>
209 #include <utmp.h>], [struct utmp ut; ut.ut_type;],
210 ac_cv_struct_ut_type=yes, ac_cv_struct_ut_type=no)])
211 if test $ac_cv_struct_ut_type = yes; then
212         AC_DEFINE(HAVE_UT_TYPE)
213 fi
214
215 AC_CACHE_CHECK([for ut_host in struct utmp], ac_cv_struct_ut_host,
216 [AC_TRY_COMPILE([#include <sys/types.h>
217 #include <utmp.h>], [struct utmp ut; ut.ut_host;],
218 ac_cv_struct_ut_host=yes, ac_cv_struct_ut_host=no)])
219 if test $ac_cv_struct_ut_host = yes; then
220         AC_DEFINE(HAVE_UT_HOST)
221 fi
222
223 dnl Checks for library functions.
224 AC_FUNC_GETPGRP
225 AC_PROG_GCC_TRADITIONAL
226 AC_TYPE_SIGNAL
227 AC_FUNC_VPRINTF
228 AC_CHECK_FUNCS(getspnam getutxline mkdir mkfifo mktime rmdir select socket strerror strcasecmp strncasecmp)
229
230 dnl Now check for pthreads -- set up variables so that the compiler will be run
231 dnl with proper flags for pthread programs
232 save_LDFLAGS=$LDFLAGS
233 LDFLAGS="$LDFLAGS $SERVER_LDFLAGS"
234 save_LIBS=$LIBS
235 LIBS="$PTHREAD_LIBS $LIBS"
236
237 dnl On some platforms, AC_CHECK_FUNC[S] doesn't work for pthreads programs;
238 dnl we need to include pthread.h
239 dnl AC_CHECK_FUNCS(pthread_cancel)
240
241 AC_CACHE_CHECK([for pthread_cancel], ac_cv_func_pthread_cancel,
242 [AC_TRY_LINK([#include <pthread.h>],
243 [       pthread_t thread;
244
245         /* The GNU C library defines this for functions which it implements
246            to always fail with ENOSYS.  Some functions are actually named
247            something starting with __ and the normal name is an alias.  */
248 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
249         choke me
250 #else
251         pthread_cancel(thread);
252 #endif],
253 ac_cv_func_pthread_cancel=yes, ac_cv_func_pthread_cancel=no)])
254 if test "$ac_cv_func_pthread_cancel" = yes; then
255         AC_DEFINE(HAVE_PTHREAD_CANCEL)
256 fi
257
258 dnl AC_CHECK_FUNC(pthread_create, TARGETS="client server utils serv_modules")
259
260 AC_CACHE_CHECK([for pthread_create], ac_cv_func_pthread_create,
261 [AC_TRY_LINK([#include <pthread.h>],
262 [       /* The GNU C library defines this for functions which it implements
263            to always fail with ENOSYS.  Some functions are actually named
264            something starting with __ and the normal name is an alias.  */
265 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
266         choke me
267 #else
268         pthread_create(NULL, NULL, NULL, NULL);
269 #endif],
270 ac_cv_func_pthread_create=yes, ac_cv_func_pthread_create=no)])
271 if test "$ac_cv_func_pthread_create" = yes; then
272         TARGETS="client server utils serv_modules"
273         if test "x$enable_threaded_client" != xno; then
274                 AC_DEFINE(THREADED_CLIENT)
275                 CLIENT_PTLIBS=$PTHREAD_LIBS
276                 CL_LIBOBJS='$(LIBOBJS:.o=.ro)'
277                 CX=.ro
278         fi
279 fi
280
281 if test "x$CX" != x.ro; then
282         CL_LIBOBJS='$(LIBOBJS)'
283         CX=.o
284 fi
285
286 dnl Now restore the old ldflags so we don't pass the wrong stuff to makefile
287 LDFLAGS=$save_LDFLAGS
288 LIBS=$save_LIBS
289
290 AC_REPLACE_FUNCS(snprintf getutline)
291
292 dnl Done! Now write the Makefile and sysdep.h
293 AC_SUBST(AUTH)
294 AC_SUBST(SO)
295 AC_SUBST(CHKPWD)
296 AC_SUBST(CURSES)
297 AC_SUBST(GDBM)
298 AC_SUBST(RESOLV)
299 AC_SUBST(NETLIBS)
300 AC_SUBST(chkpwd_LIBS)
301 AC_SUBST(TARGETS)
302 AC_SUBST(SERVER_LDFLAGS)
303 AC_SUBST(PICFLAGS)
304 AC_SUBST(LINK_SHARED)
305 AC_SUBST(PTHREAD_DEFS)
306 AC_SUBST(PTHREAD_LIBS)
307 AC_SUBST(CLIENT_PTLIBS)
308 AC_SUBST(CL_LIBOBJS)
309 AC_SUBST(CX)
310 AC_CONFIG_HEADER(sysdep.h)
311 AC_OUTPUT(Makefile weekly)