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