]> code.citadel.org Git - citadel.git/blob - citadel/configure.in
* configure.in: include <sys/types.h> when doing checks which require <utmp.h>
[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 <sys/types.h>
196 #include <utmp.h>], [struct utmp ut; ut.ut_type;],
197 ac_cv_struct_ut_type=yes, ac_cv_struct_ut_type=no)])
198 if test $ac_cv_struct_ut_type = yes; then
199         AC_DEFINE(HAVE_UT_TYPE)
200 fi
201
202 AC_CACHE_CHECK([for ut_host in struct utmp], ac_cv_struct_ut_host,
203 [AC_TRY_COMPILE([#include <sys/types.h>
204 #include <utmp.h>], [struct utmp ut; ut.ut_host;],
205 ac_cv_struct_ut_host=yes, ac_cv_struct_ut_host=no)])
206 if test $ac_cv_struct_ut_host = yes; then
207         AC_DEFINE(HAVE_UT_HOST)
208 fi
209
210 dnl Checks for library functions.
211 AC_FUNC_GETPGRP
212 AC_PROG_GCC_TRADITIONAL
213 AC_TYPE_SIGNAL
214 AC_FUNC_VPRINTF
215 AC_CHECK_FUNCS(getspnam mkdir mkfifo mktime rmdir select socket strerror)
216
217 dnl Now check for pthreads -- set up variables so that the compiler will be run
218 dnl with proper flags for pthread programs
219 save_LDFLAGS=$LDFLAGS
220 LDFLAGS="$LDFLAGS $SERVER_LDFLAGS"
221
222 dnl On some platforms, AC_CHECK_FUNC[S] doesn't work for pthreads programs;
223 dnl we need to include pthread.h
224 dnl AC_CHECK_FUNCS(pthread_cancel)
225
226 AC_CACHE_CHECK([for pthread_cancel], ac_cv_func_pthread_cancel,
227 [AC_TRY_LINK([#include <pthread.h>],
228 [       pthread_t thread;
229
230         /* The GNU C library defines this for functions which it implements
231            to always fail with ENOSYS.  Some functions are actually named
232            something starting with __ and the normal name is an alias.  */
233 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
234         choke me
235 #else
236         pthread_cancel(thread);
237 #endif],
238 ac_cv_func_pthread_cancel=yes, ac_cv_func_pthread_cancel=no)])
239 if test "$ac_cv_func_pthread_cancel" = yes; then
240         AC_DEFINE(HAVE_PTHREAD_CANCEL)
241 fi
242
243 dnl AC_CHECK_FUNC(pthread_create, TARGETS="client server utils serv_modules")
244
245 AC_CACHE_CHECK([for pthread_create], ac_cv_func_pthread_create,
246 [AC_TRY_LINK([#include <pthread.h>],
247 [       /* The GNU C library defines this for functions which it implements
248            to always fail with ENOSYS.  Some functions are actually named
249            something starting with __ and the normal name is an alias.  */
250 #if defined (__stub_pthread_cancel) || defined (__stub___pthread_cancel)
251         choke me
252 #else
253         pthread_create(NULL, NULL, NULL, NULL);
254 #endif],
255 ac_cv_func_pthread_create=yes, ac_cv_func_pthread_create=no)])
256 if test "$ac_cv_func_pthread_create" = yes; then
257         TARGETS="client server utils serv_modules"
258 fi
259
260 dnl Now restore the old ldflags so we don't pass the wrong stuff to makefile
261 LDFLAGS=$save_LDFLAGS
262
263 AC_REPLACE_FUNCS(snprintf getutline)
264
265 dnl Done! Now write the Makefile and sysdep.h
266 AC_SUBST(AUTH)
267 AC_SUBST(SO)
268 AC_SUBST(CHKPWD)
269 AC_SUBST(CURSES)
270 AC_SUBST(GDBM)
271 AC_SUBST(NETLIBS)
272 AC_SUBST(chkpwd_LIBS)
273 AC_SUBST(TARGETS)
274 AC_SUBST(SERVER_LDFLAGS)
275 AC_SUBST(SERV_ICQ)
276 AC_SUBST(PICFLAGS)
277 AC_SUBST(LINK_SHARED)
278 AC_SUBST(PTHREAD_DEFS)
279 AC_CONFIG_HEADER(sysdep.h)
280 AC_OUTPUT(Makefile weekly)