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