* doc: New subdirectory.
[bpt/guile.git] / configure.in
CommitLineData
777b022a
JB
1dnl configuration script for Guile
2dnl Process this file with autoconf to produce configure.
0f2d19dd 3AC_INIT(Makefile.in)
2d26def0 4. $srcdir/GUILE-VERSION
3a629497 5AM_INIT_AUTOMAKE($PACKAGE, $VERSION, no-define)
15ae1bee 6AM_MAINTAINER_MODE
3a629497 7AM_CONFIG_HEADER(libguile/scmconfig.h)
2d26def0 8
3a629497
JB
9#--------------------------------------------------------------------
10#
11# User options
12#
13#--------------------------------------------------------------------
86789f9b 14
3a629497 15AC_ARG_ENABLE(dynamic-linking,
af8865f7
JB
16 [ --enable-dynamic-linking Include support for dynamic linking],,
17 enable_dynamic_linking=yes)
3a629497
JB
18
19AC_ARG_ENABLE(guile-debug,
20[ --enable-guile-debug Include internal debugging functions])
21if test "$enableval" = y || test "$enableval" = yes; then
22 AC_DEFINE(GUILE_DEBUG)
23fi
24
c176b92b
JB
25dnl The --disable-debug used to control these two. But now they are
26dnl a required part of the distribution.
27AC_DEFINE(DEBUG_EXTENSIONS)
28AC_DEFINE(READER_EXTENSIONS)
29
3a629497
JB
30#--------------------------------------------------------------------
31
32AC_PROG_CC
33AC_PROG_CPP
34AM_PROG_LIBTOOL
35
36AC_AIX
37AC_ISC_POSIX
38AC_MINIX
39
40AC_C_CONST
41
42AC_HEADER_STDC
43AC_HEADER_DIRENT
44AC_HEADER_TIME
45AC_HEADER_SYS_WAIT
e9cd5d2f 46AC_CHECK_HEADERS(libc.h limits.h malloc.h memory.h string.h regex.h rxposix.h rx/rxposix.h sys/ioctl.h sys/select.h sys/time.h sys/timeb.h sys/times.h sys/types.h sys/utime.h time.h unistd.h utime.h)
3a629497
JB
47GUILE_HEADER_LIBC_WITH_UNISTD
48
49AC_TYPE_GETGROUPS
50AC_TYPE_SIGNAL
51AC_TYPE_MODE_T
52
5852c051 53AC_CHECK_LIB(m, main)
4c787b52 54AC_CHECK_FUNCS(gethostbyname)
5852c051
JB
55if test $ac_cv_func_gethostbyname = no; then
56 AC_CHECK_LIB(nsl, gethostbyname)
57fi
4c787b52 58AC_CHECK_FUNCS(connect)
5852c051
JB
59if test $ac_cv_func_connect = no; then
60 AC_CHECK_LIB(socket, connect)
61fi
81e9e32f
JB
62AC_CHECK_LIB(termcap, tgoto)
63AC_CHECK_LIB(readline, readline)
7e0fee6e 64AC_CHECK_FUNCS(rl_getc_function rl_clear_signals rl_cleanup_after_signal)
c700db4f
MD
65if test $ac_cv_lib_readline_readline = yes -a $ac_cv_func_rl_getc_function = no; then
66 echo 'Warning: libreadline is too old on your system. Need >= 2.1.'
67fi
5852c051 68
90fcac06
JB
69# Checks for dynamic linking
70
5852c051
JB
71if test "$enable_dynamic_linking" = "yes"; then
72
73AC_CHECK_LIB(dl,dlopen)
74if test "$ac_cv_lib_dl_dlopen" = "yes"; then
4c787b52 75 AC_CHECK_FUNCS(dlopen)
5852c051
JB
76 AC_DEFINE(DYNAMIC_LINKING)
77else
78AC_CHECK_LIB(dld,dld_link)
79if test "$ac_cv_lib_dld_dld_link" = "yes"; then
5852c051
JB
80 AC_DEFINE(DYNAMIC_LINKING)
81else
4c787b52 82AC_CHECK_FUNCS(shl_load)
5852c051
JB
83if test "$ac_cv_func_shl_load" = "yes"; then
84 AC_DEFINE(DYNAMIC_LINKING)
a4995389 85else
4c787b52 86AC_CHECK_FUNCS(dlopen)
a4995389
MV
87if test "$ac_cv_func_dlopen" = "yes"; then
88 AC_DEFINE(DYNAMIC_LINKING)
89fi
5852c051
JB
90fi
91fi
92fi
93
94fi
95
2a0d7176 96GUILE_DLSYM_USCORE
5852c051 97
95fc06d5 98AC_CHECK_FUNCS(ctermid ftime getcwd geteuid gethostent gettimeofday lstat mkdir mknod nice readlink rename rmdir select setegid seteuid setlocale setpgid setsid sigaction strftime strptime symlink sync tcgetpgrp tcsetpgrp times uname waitpid bzero strdup system usleep)
64e121dc 99
777b022a
JB
100### Some systems don't declare some functions. On such systems, we
101### need to at least provide our own K&R-style declarations.
102
103### GUILE_FUNC_DECLARED(function, headerfile)
104
105### Check for a declaration of FUNCTION in HEADERFILE; if it is
106### not there, #define MISSING_FUNCTION_DECL.
107AC_DEFUN(GUILE_FUNC_DECLARED, [
108 AC_CACHE_CHECK(for $1 declaration, ac_cv_func_$1_declared,
109 AC_EGREP_HEADER($1, $2,
110 ac_cv_func_$1_declared=yes,
111 ac_cv_func_$1_declared=no))
112 if test [x$ac_cv_func_]$1[_declared] = xno; then
113 AC_DEFINE([MISSING_]translit($1, [a-z], [A-Z])[_DECL])
114 fi
115])
116
117GUILE_FUNC_DECLARED(strptime, time.h)
118GUILE_FUNC_DECLARED(bzero, string.h)
c31bfb85 119GUILE_FUNC_DECLARED(sleep, unistd.h)
777b022a 120GUILE_FUNC_DECLARED(usleep, unistd.h)
e1a191a8 121
d9eb6fb7 122# On some systems usleep has no return value
0935d604
MD
123AC_EGREP_HEADER(changequote(<, >)<void[ ][ ]*usleep>changequote([, ]),
124 /usr/include/unistd.h,
125 AC_DEFINE(USLEEP_RETURNS_VOID)
126)
127
128
da88f0cb
JB
129dnl <GNU-WIN32 hacks>
130
131AC_CHECK_HEADER(sys/un.h, have_sys_un_h=1)
132if test -n "$have_sys_un_h" ; then
133AC_DEFINE(HAVE_UNIX_DOMAIN_SOCKETS)
134fi
135
136AC_CHECK_FUNCS(socketpair getgroups setpwent pause tzset)
137
f4e5b810
GH
138dnl I don't know what this prefixing of cygwin32_ is for.
139dnl scmconfig.h wasn't updated with the test results.
140dnl so use AC_CHECK_FUNCS for now.
141
142dnl how about:
143dnl save confdefs.h
144dnl if test $ac_cv_cigwin = yes; then
145dnl modify confdefs.h
146dnl fi
147dnl AC_CHECK_FUNCS...
148dnl restore confdefs.h
149
150dnl cp confdefs.h confdefs.h.bak
151dnl for func in sethostent endhostent getnetent setnetent endnetent getprotoent endprotoent getservent endservent getnetbyaddr getnetbyname inet_lnaof inet_makeaddr inet_netof ; do
152dnl cp confdefs.h.bak confdefs.h
153dnl cat >> confdefs.h << EOF
154dnl #ifdef __CYGWIN32__
155dnl #define $func cygwin32_$func
156dnl #endif
157dnl EOF
158dnl AC_CHECK_FUNC($func)
159dnl done
160dnl cp confdefs.h.bak confdefs.h
161
162AC_CHECK_FUNCS(sethostent endhostent getnetent setnetent endnetent getprotoent endprotoent getservent endservent getnetbyaddr getnetbyname inet_lnaof inet_makeaddr inet_netof)
da88f0cb
JB
163
164dnl </GNU-WIN32 hacks>
165
e1a191a8
GH
166AC_CACHE_CHECK([for restartable system calls], scm_cv_restarts,
167 if test $ac_cv_func_sigaction = yes; then
168 [AC_TRY_COMPILE([#include <signal.h>],
169 [int a = SA_RESTART],
170 scm_cv_restarts=yes,
171 scm_cv_restarts=no)]
172 else
173 scm_cv_restarts=no
174 fi)
175if test $scm_cv_restarts = yes; then
176 AC_DEFINE(HAVE_RESTARTS)
177fi
178
e9cd5d2f
MD
179if test "$ac_cv_header_regex_h" = yes ||
180 test "$ac_cv_header_rxposix_h" = yes ||
181 test "$ac_cv_header_rx_rxposix_h" = yes; then
0b89e78e
MD
182 GUILE_NAMED_CHECK_FUNC(regcomp, norx, [LIBOBJS="regex-posix.o $LIBOBJS"],
183 [AC_CHECK_LIB(rx, main)
184 GUILE_NAMED_CHECK_FUNC(regcomp, rx, [LIBOBJS="regex-posix.o $LIBOBJS"])]
185 )
e9cd5d2f
MD
186 dnl The following should not be necessary, but for some reason
187 dnl autoheader misses it if we don't include it!
0b89e78e
MD
188 if test "$ac_cv_func_regcomp_norx" = yes ||
189 test "$ac_cv_func_regcomp_rx" = yes; then
e9cd5d2f
MD
190 AC_DEFINE(HAVE_REGCOMP)
191 fi
da88f0cb 192fi
8e1bfcd0 193
3a629497
JB
194AC_REPLACE_FUNCS(inet_aton putenv strerror)
195
4a5fa91c
TP
196# When testing for the presence of alloca, we need to add alloca.o
197# explicitly to LIBOBJS to make sure that it is translated to
198# `alloca.lo' for libtool later on. This can and should be done more cleanly.
3a629497 199AC_FUNC_ALLOCA
4a5fa91c 200if test "$ALLOCA" = "alloca.o"; then LIBOBJS="alloca.o $LIBOBJS"; fi
3a629497
JB
201
202AC_STRUCT_ST_RDEV
203AC_STRUCT_ST_BLKSIZE
075edbde
JB
204
205# We could use AC_STRUCT_ST_BLOCKS here, but that adds fileblocks.o to
206# LIBOBJS, which we don't need. This seems more direct.
207AC_CACHE_CHECK([for st_blocks in struct stat], ac_cv_struct_st_blocks,
208[AC_TRY_COMPILE([#include <sys/types.h>
209#include <sys/stat.h>], [struct stat s; s.st_blocks;],
210ac_cv_struct_st_blocks=yes, ac_cv_struct_st_blocks=no)])
211if test $ac_cv_struct_st_blocks = yes; then
212 AC_DEFINE(HAVE_ST_BLOCKS)
213fi
214
3a629497
JB
215AC_STRUCT_TIMEZONE
216GUILE_STRUCT_UTIMBUF
217
3a629497
JB
218#--------------------------------------------------------------------
219#
220# Which way does the stack grow?
221#
222#--------------------------------------------------------------------
223
224AC_TRY_RUN(aux (l) unsigned long l;
225 { int x; exit (l >= ((unsigned long)&x)); }
226 main () { int q; aux((unsigned long)&q); },
227 AC_DEFINE(SCM_STACK_GROWS_UP),,AC_MSG_WARN(Guessing that stack grows down -- see scmconfig.h.in))
228
229
230AC_TRY_RUN(main () { exit (sizeof(float) != sizeof(long)); },
231 AC_DEFINE(SCM_SINGLES),,AC_DEFINE(SCM_SINGLES)
232 AC_MSG_WARN(Guessing that sizeof(long) == sizeof(float) -- see scmconfig.h.in))
233
234AC_MSG_CHECKING(for struct linger)
235AC_CACHE_VAL(scm_cv_struct_linger,
236 AC_TRY_COMPILE([
237#include <sys/types.h>
238#include <sys/socket.h>],
239 [struct linger lgr; lgr.l_linger = 100],
240 scm_cv_struct_linger="yes",
241 scm_cv_struct_linger="no"))
242AC_MSG_RESULT($scm_cv_struct_linger)
243if test $scm_cv_struct_linger = yes; then
244 AC_DEFINE(HAVE_STRUCT_LINGER)
245fi
246
247#--------------------------------------------------------------------
248#
249# How can you violate a stdio abstraction by setting a stream's fd?
250#
251#--------------------------------------------------------------------
252
253AC_MSG_CHECKING(how to set a stream file descriptor)
254AC_CACHE_VAL(scm_cv_fd_setter,
255 AC_TRY_COMPILE([#include <stdio.h>],
256 [stdout->_file = 1],
257 scm_cv_fd_setter="_file",
fe75dfc5
JB
258 AC_TRY_COMPILE([#include <stdio.h>],
259 [stdout->__file = 1],
260 scm_cv_fd_setter="__file",
3a629497
JB
261 AC_TRY_COMPILE([#include <stdio.h>],
262 [stdout->_fileno = 1],
263 scm_cv_fd_setter="_fileno",
fe75dfc5 264 scm_cv_fd_setter=""))))
3a629497
JB
265
266if test "$scm_cv_fd_setter"; then
267 AC_MSG_RESULT($scm_cv_fd_setter)
268 AC_DEFINE_UNQUOTED(FD_SETTER, $scm_cv_fd_setter)
269else
270 AC_MSG_RESULT(we couldn't do it!)
271fi
272
273#--------------------------------------------------------------------
274# How to find out whether a FILE structure contains buffered data.
275# From Tk we have the following list:
276# _cnt: Most UNIX systems
fe75dfc5 277# __cnt: HPUX and SCO
3a629497
JB
278# _r: BSD
279# readCount: Sprite
280# Or, in GNU libc there are two fields, _gptr and _egptr, which
281# have to be compared.
282# These can also be known as _IO_read_ptr and _IO_read_end.
283#--------------------------------------------------------------------
284
285AC_MSG_CHECKING(how to get buffer char count from FILE structure)
286AC_CACHE_VAL(scm_cv_struct_file_count,
287 AC_TRY_COMPILE([#include <stdio.h>],
288 [FILE *f = stdin; f->_cnt = 0],
289 scm_cv_struct_file_count="_cnt",
fe75dfc5
JB
290 AC_TRY_COMPILE([#include <stdio.h>],
291 [FILE *f = stdin; f->__cnt = 0],
292 scm_cv_struct_file_count="__cnt",
3a629497
JB
293 AC_TRY_COMPILE([#include <stdio.h>],
294 [FILE *f = stdin; f->_r = 0],
295 scm_cv_struct_file_count="_r",
296 AC_TRY_COMPILE([#include <stdio.h>],
297 [FILE *f = stdin; f->readCount = 0],
298 scm_cv_struct_file_count="readCount",
fe75dfc5 299 scm_cv_struct_file_count="")))))
3a629497
JB
300if test "$scm_cv_struct_file_count"; then
301 AC_MSG_RESULT($scm_cv_struct_file_count)
302 AC_DEFINE_UNQUOTED(FILE_CNT_FIELD, $scm_cv_struct_file_count)
303else
304AC_CACHE_VAL(scm_cv_struct_file_gptr,
305 AC_TRY_COMPILE([#include <stdio.h>],
306 [FILE *f = stdin; f->_gptr = f->egptr;],
307 scm_cv_struct_file_gptr=1,
308 scm_cv_struct_file_gptr=""))
309if test "$scm_cv_struct_gptr"; then
310 AC_MSG_RESULT(gptr)
311 AC_DEFINE_UNQUOTED(FILE_CNT_GPTR, $scm_cv_struct_file_gptr)
312else
313AC_CACHE_VAL(scm_cv_struct_file_readptr,
314 AC_TRY_COMPILE([#include <stdio.h>],
315 [FILE *f = stdin; f->_IO_read_ptr = f->_IO_read_end;],
316 scm_cv_struct_file_readptr=1))
317if test "$scm_cv_struct_file_readptr"; then
318 AC_MSG_RESULT(read_ptr)
319 AC_DEFINE_UNQUOTED(FILE_CNT_READPTR, $scm_cv_struct_file_readptr)
320else
321 AC_MSG_RESULT(we couldn't do it!)
322fi
323fi
324fi
325
326#--------------------------------------------------------------------
327#
328# Flags for thread support
329#
330#--------------------------------------------------------------------
331
539c89a1
JB
332### What thread package has the user asked for?
333AC_ARG_WITH(threads, [ --with-threads thread interface],
334 , with_threads=no)
335
336### Turn $with_threads into either the name of a threads package, like
337### `qt', or `no', meaning that threads should not be supported.
e0f54bcc 338AC_MSG_CHECKING(whether to support threads)
539c89a1
JB
339case "$with_threads" in
340 "yes" | "qt" | "coop" | "")
341 with_threads=qt
342 ;;
343 "no" )
344 ;;
345 * )
346 AC_MSG_ERROR(invalid value for --with-threads: $with_threads)
347 ;;
348esac
e0f54bcc 349AC_MSG_RESULT($with_threads)
3a629497 350
539c89a1
JB
351## Make sure the threads package we've chosen is actually supported on
352## the present platform.
353case "${with_threads}" in
354 "qt" )
355 ## This configures the QuickThreads package, and sets or clears
356 ## the THREAD_PACKAGE variable if qthreads don't configure
357 ## correctly.
358 QTHREADS_CONFIGURE
359 ;;
360esac
3a629497 361
539c89a1
JB
362## If we're using threads, bring in some other parts of Guile which
363## work with them.
364if test "${THREAD_PACKAGE}" != "" ; then
365 AC_DEFINE(USE_THREADS, 1)
3a629497 366
539c89a1
JB
367 ## Include the Guile thread interface in the library...
368 LIBOBJS="$LIBOBJS threads.o"
933a7411 369
539c89a1
JB
370 ## ... and tell it which package to talk to.
371 case "${THREAD_PACKAGE}" in
372 "QT" )
373 AC_DEFINE(USE_COOP_THREADS, 1)
374 ;;
375 * )
376 AC_MSG_ERROR(invalid value for THREAD_PACKAGE: ${THREAD_PACKAGE})
377 ;;
378 esac
379
380 ## Bring in scm_internal_select, if appropriate.
381 if test $ac_cv_func_gettimeofday = yes &&
382 test $ac_cv_func_select = yes; then
383 LIBOBJS="$LIBOBJS iselect.o"
384 AC_DEFINE(GUILE_ISELECT, 1)
385 fi
933a7411
MD
386fi
387
3a629497
JB
388## If we're using GCC, ask for aggressive warnings.
389case "$GCC" in
99be3450 390 yes )
0a1b8b15
JB
391 ## We had -Wstrict-prototypes in here for a bit, but Guile does too
392 ## much stuff with generic function pointers for that to really be
393 ## less than exasperating.
394 CFLAGS="$CFLAGS -Wall -Wpointer-arith -Wmissing-prototypes" ;;
3a629497
JB
395esac
396
397AC_PROG_AWK
398
399## If we're creating a shared library (using libtool!), then we'll
400## need to generate a list of .lo files corresponding to the .o files
401## given in LIBOBJS. We'll call it LIBLOBJS.
402LIBLOBJS="`echo ${LIBOBJS} | sed 's/\.o/.lo/g'`"
403
7c86ae05
JB
404AC_SUBST(GUILE_MAJOR_VERSION)
405AC_SUBST(GUILE_MINOR_VERSION)
406AC_SUBST(GUILE_VERSION)
539c89a1 407
bcc695e3 408dnl Tell guile-config what flags guile users should link against.
539c89a1 409GUILE_LIBS="$LDFLAGS $THREAD_LIBS_INSTALLED $LIBS"
daa4f38c 410AC_SUBST(GUILE_LIBS)
7c86ae05
JB
411
412dnl timestamping the interpreter and scheme libraries:
413dnl
414dnl Help us notice when we're running one version of the Guile
415dnl interpreter against a different version of the ice-9 Scheme code.
416dnl This will definitely detect version skew due to differing
417dnl snapshots and releases, but may not catch skew for the developers.
418dnl Hopefully it will not detect skew when there is none; if that
419dnl happens, the warnings will be useless, and we should remove this.
420GUILE_STAMP="`date`"
421AC_SUBST(GUILE_STAMP)
3a629497
JB
422
423AC_SUBST(AWK)
424AC_SUBST(LIBLOBJS)
425
c9ea20bc 426AC_OUTPUT([Makefile libguile/Makefile libguile/guile-snarf ice-9/Makefile ice-9/version.scm qt/Makefile qt/qt.h qt/md/Makefile qt/time/Makefile guile-config/Makefile doc/Makefile], [chmod +x libguile/guile-snarf])
0f2d19dd 427
3a629497
JB
428dnl Local Variables:
429dnl comment-start: "dnl "
430dnl comment-end: ""
431dnl comment-start-skip: "\\bdnl\\b\\s *"
432dnl End: